Перейти к содержанию

CalypsoToolz

Постоялец
  • Публикаций

    1028
  • Зарегистрирован

  • Посещение

  • Победитель дней

    16
  • Отзывы

    100%

Весь контент CalypsoToolz

  1. 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 с которым можно говорить. } }
  2. Авторы вроде как L2Scripts.
  3. Да, нет таблицы vips. Чтобы узнать структуру таблицы нужно смотреть исходники если есть, либо декомпил.
  4. CalypsoToolz

    респ рб

    Если используется навикат, то возможно просто выводится по 1к записей на страницу, т.е. нужно пролистать на последнюю, либо отключить лимит строк. А лучше вывести нужную строку запросом типа: SELECT * FROM spawnlist WHERE npc_templateId = 'ид босса' PS. и вообще спаун боссов помоему находится в другой таблице, что-то типа raidboss_spawnlist
  5. CalypsoToolz

    подскажите!

    R2Core, либо сурс Nextgen, если имеются знания явы.
  6. Если через аи, то держи пример: @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); }
  7. Тогда забрасывайте "разработку тру гве".
  8. Делай логирование, так узнаешь подхватывается ли он вообще и на каком этапе не работает.
  9. data/xml/instances/ и там Labyrinth of the Abyss.xml или что-то подобное. Возможно там условия.
  10. Notepad++ - поиск по регулярке с заменой.
  11. А я не увидел конкретного вопроса.
  12. Для этого и предназначено аи) Создаешь новое АI, пишешь там то что нужно, а потом нужным мобам выдаешь это аи.
  13. 162 раза скачали

    В точке смерти персонажа спавнится Надгробная плита. Данный скрипт является модификацией этого скрипта. Подходит для сборок на основе Phoenix. Для установки не требуются исходники. Так же, присутствует диалог, в котором будет текст типа: Видео первоначальной версии:

    Бесплатный

  14. Название: Tombstone (Pheonix) Добавил: BymerOK Добавлен: 08 Apr 2015 Категория: Серверные дополнения Автор: LifeGame32, Calypso aka BymerOK Хроники: Все В точке смерти персонажа спавнится Надгробная плита. Данный скрипт является модификацией этого скрипта. Подходит для сборок на основе Phoenix. Для установки не требуются исходники. Так же, присутствует диалог, в котором будет текст типа: Видео первоначальной версии: Нажмите здесь, чтобы скачать файл
  15. Пример для 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); }
  16. Если оперативы более чем 4гб и ты хочешь использовать её полноценно, то ставь.
  17. Если есть сурсы - убрать проверку на разрядность, либо декомпил, но лучше x64 запилить. А может и в батниках дело.
  18. В операторах 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); } }
  19. Сам лично не пытался, поэтому не знаю. Можно погуглить или поковыряться тут (не реклама).
  20. Нормальная защита на сервере не даст тебе так просто зайти с виртуалки.
×
×
  • Создать...