-
Публикаций
1028 -
Зарегистрирован
-
Посещение
-
Победитель дней
16 -
Отзывы
100%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент CalypsoToolz
-
target.getPlayer().getSex()
-
package custom.ServiceManager; import java.io.File; import java.io.FileReader; import java.io.LineNumberReader; import java.util.HashMap; import java.util.Map; import ru.catssoftware.gameserver.datatables.ItemTable; import ru.catssoftware.gameserver.handler.IVoicedCommandHandler; import ru.catssoftware.gameserver.handler.VoicedCommandHandler; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; import ru.catssoftware.gameserver.model.quest.QuestState; import ru.catssoftware.gameserver.util.PcAction; public class ServiceManager extends Quest { private static String qn = "ServiceManager"; private static class Price { private int []_itemId; private int []_prices; public Price(int []items, int[]count) { _itemId = items; _prices = count; } } private static Map<Integer, Price> _premiumPrice = new HashMap<Integer, Price>(); public ServiceManager() { super(-1,qn,"custom"); // ================= ЦЕНЫ НА ПРЕМИУМ ======== // дни, new Price(new int[] {через , ИД предметов},new int[] {через , количество}); _premiumPrice.put(1,new Price(new int[] {4037},new int[] {3})); _premiumPrice.put(7,new Price(new int[] {4037},new int[] {10})); _premiumPrice.put(30,new Price(new int[] {4037},new int[] {20})); } private boolean checkMoney(L2PcInstance player, Price price) { for(int i=0;i<price._itemId.length;i++) // Проверяем средства if(player.getInventory().getItemByItemId(price._itemId[i])==null || player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) { return false; // Нет денег? Сории } for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения if(!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], null, true)) { return false; } return true; } @Override public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) { String []args = event.split(" "); // Разбираем строку параметров if(args[0].equals("premiumlist")) { // Формируем список доступных дней премиума String html = "<html><body><br>Покупка премиума:<br><center>"; for(int days : _premiumPrice.keySet()) { html+="<a action=\"bypass -h Quest "+qn+" premium "+days+"\">На "+days+" дней</a> -"; Price price = _premiumPrice.get(days); for(int i=0;i<price._itemId.length;i++) { // Формируем список стоимости if(i!=0) // Добавляем , html+=","; html+=price._prices[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).getName(); } } html+="</center></body></html>"; return html; } else if(args[0].equals("premium")) { // Выдаем премиум if(player.getPremiumService()!=0) // Проверяем а не премимум ли чар? return "already-premium.htm"; int numDays = Integer.parseInt(args[1]); // В Java массивы нумеруются с 0 Price price = _premiumPrice.get(numDays); // Ищем цену в списке цен if(price==null) // Не нашли. Что-то тут не то... return "invalid-param.htm"; if(!checkMoney(player,price)) // Проверяем деньги return "no-money.htm"; PcAction.addPremiumServices(player, numDays, player.getAccountName()); // Выдаем премиум // Показываем .premium меню IVoicedCommandHandler premium = VoicedCommandHandler.getInstance().getVoicedCommandHandler("premium"); if(premium!=null) premium.useVoicedCommand("premium", player, null); else return "success.htm"; } return "Shop.htm"; } @Override public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) { return onTalk(npc, player); } @Override public String onTalk(L2NpcInstance npc, L2PcInstance player) { QuestState qs = player.getQuestState(qn); if(qs==null) qs = newQuestState(player); return "Shop.htm"; } public static void main(String[] args) { ServiceManager ps = new ServiceManager(); ps.addFirstTalkId(50016); // Мы не хотим писать диалог для этого НПЦ ps.addStartNpc(50016); // Автоматический контроль состояния квеста ps.addTalkId(50016); // NPC с которым можно говорить. } }
-
Авторы вроде как L2Scripts.
-
Да, нет таблицы vips. Чтобы узнать структуру таблицы нужно смотреть исходники если есть, либо декомпил.
-
Если используется навикат, то возможно просто выводится по 1к записей на страницу, т.е. нужно пролистать на последнюю, либо отключить лимит строк. А лучше вывести нужную строку запросом типа: SELECT * FROM spawnlist WHERE npc_templateId = 'ид босса' PS. и вообще спаун боссов помоему находится в другой таблице, что-то типа raidboss_spawnlist
- 2 ответа
-
- 1
-
R2Core, либо сурс Nextgen, если имеются знания явы.
-
Если через аи, то держи пример: @Override protected void onEvtDead(L2Character killer) { L2Player player = killer.getPlayer(); if (player.getParty() != null) for (L2Player members : player.getParty().getPartyMembers()) members.getInventory().addItem(итем_ид, кол-во); else player.getInventory().addItem(итем_ид, кол-во); super.onEvtDead(killer); }
-
Тогда забрасывайте "разработку тру гве".
-
Делай логирование, так узнаешь подхватывается ли он вообще и на каком этапе не работает.
-
data/xml/instances/ и там Labyrinth of the Abyss.xml или что-то подобное. Возможно там условия.
-
Notepad++ - поиск по регулярке с заменой.
-
А я не увидел конкретного вопроса.
-
Нужен ЦЦ (Command Channel)
-
Для этого и предназначено аи) Создаешь новое АI, пишешь там то что нужно, а потом нужным мобам выдаешь это аи.
-
-
Название: Tombstone (Pheonix) Добавил: BymerOK Добавлен: 08 Apr 2015 Категория: Серверные дополнения Автор: LifeGame32, Calypso aka BymerOK Хроники: Все В точке смерти персонажа спавнится Надгробная плита. Данный скрипт является модификацией этого скрипта. Подходит для сборок на основе Phoenix. Для установки не требуются исходники. Так же, присутствует диалог, в котором будет текст типа: Видео первоначальной версии: Нажмите здесь, чтобы скачать файл
-
Пример для AI (феникс): @Override protected void onEvtAttacked(L2Character attacker, int damage) { L2NpcInstance actor = getActor(); if(actor == null) return; // Выбираем точку в радиусе 900 юнитов от моба Location loc = actor.getLoc().rnd(900, 900, false); // переключаемся в режим бега actor.setRunning(); //бежим в выбранную точку, не учитывая поиск пути actor.moveToLocation(loc, 0, false); super.onEvtAttacked(attacker, damage); }
-
Если оперативы более чем 4гб и ты хочешь использовать её полноценно, то ставь.
-
Если есть сурсы - убрать проверку на разрядность, либо декомпил, но лучше x64 запилить. А может и в батниках дело.
-
В операторах if и else if накосячил) Держи: package net.sf.l2j.gameserver.model.actor.instance; import java.util.StringTokenizer; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.network.serverpackets.SocialAction; import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation; import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate; import net.sf.l2j.util.Rnd; public class L2AvanPostTpInstance extends L2NpcInstance { public L2AvanPostTpInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); String where = ""; if (st.countTokens() == 1) where = st.nextToken(); if (actualCommand.equalsIgnoreCase("tele")) { if (where.equals("avangood1")) { player.teleToLocation(98689,-2051,-3727, false); } else if (where.equals("avangood2")) { player.teleToLocation(146768,-174945,-1525, false); } else if (where.equals("avangood3")) { player.teleToLocation(98689,-2051,-3727, false); } else if (where.equals("avanevil1")) { player.teleToLocation(85439,-5717,-3256, false); } else if (where.equals("avanevil2")) { player.teleToLocation(135858,-174102,-1781, false); } else if (where.equals("avanevil3")) { player.teleToLocation(85439,-5717,-3256, false); } else { player.sendMessage("Локация РЅРµ найдена, сообщите администратору."); } } else { super.onBypassFeedback(player, command); } } @Override public void onAction(L2PcInstance player) { if (this != player.getTarget()) { player.setTarget(this); player.sendPacket(new MyTargetSelected(getObjectId(), player.getLevel() - getLevel())); player.sendPacket(new ValidateLocation(this)); } else if (isInsideRadius(player, INTERACTION_DISTANCE, false, false)) { SocialAction sa = new SocialAction(this, Rnd.get(); broadcastPacket(sa); player.setCurrentFolkNPC(this); if (player.getFactionId() == 1) { showGoodWindow(player); } else if (player.getFactionId() == 2) { showEvilWindow(player); } player.sendPacket(ActionFailed.STATIC_PACKET); } else { player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this); player.sendPacket(ActionFailed.STATIC_PACKET); } } private void showGoodWindow(L2PcInstance player) { String file = "data/html/faction/avanposts-good.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(file); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%charname%", player.getName()); player.sendPacket(html); } private void showEvilWindow(L2PcInstance player) { String file = "data/html/faction/avanposts-evil.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(file); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%charname%", player.getName()); player.sendPacket(html); } }
-
Сам лично не пытался, поэтому не знаю. Можно погуглить или поковыряться тут (не реклама).
-
Нормальная защита на сервере не даст тебе так просто зайти с виртуалки.