adren 18 Опубликовано 7 февраля, 2013 (изменено) Есть бафер, который через ядро Вот его код: package com.l2jfrozen.gameserver.model.actor.instance; import com.l2jfrozen.gameserver.datatables.CharSchemesTable; import com.l2jfrozen.gameserver.datatables.SkillTable; import com.l2jfrozen.gameserver.model.L2Effect; import com.l2jfrozen.gameserver.model.L2Skill; import com.l2jfrozen.gameserver.model.L2Summon; import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed; import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.templates.L2NpcTemplate; import javolution.util.FastList; import javolution.util.FastMap; import java.util.StringTokenizer; public class L2BuffInstance extends L2FolkInstance { public int[] TableId; public int[] TableDialog; public L2BuffInstance(int objectId, L2NpcTemplate template) { super(objectId, template); TableId=new int[]{ 1068,1388,1086,1077,1242,1240,1085,1059,1303,1062,1043, 1040,1389,1036,1035,1243,1304,1078,1087, 1045,1048,1204,1073,1397,1044,1268,1257, 1182,1189,1191,1033,1259,1392,1393,1353,1352,1354, 271,272,273,274,275,276,277,307,309,310,311, 264,265,266,267,268,269,270,304,305,306,308, 1355,1356,1357,1363,4699,4554,365,363,364,349,4702 }; TableDialog=new int[]{ 1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7 }; } @Override public String getHtmlPath(int npcId, int val) { String pom; if (val == 0) pom = "" + npcId; else pom = npcId + "-" + val; return "data/html/buff/" + pom + ".htm"; } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); // Get actual command if (actualCommand.startsWith("Chat")) { String filename = "data/html/buff/40001.htm"; int cmdChoice = Integer.parseInt(command.substring(5,7).trim()); if(cmdChoice>0) { filename = "data/html/buff/40001-"+cmdChoice+".htm"; } NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("Cancel")) { player.stopAllEffects(); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile("data/html/buff/40001.htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("PetCancel")) { L2Summon pet=player.getPet(); if(pet!=null) pet.stopAllEffects(); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile("data/html/buff/40001-08.htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("Regenerate")) { player.setCurrentHpMp(player.getMaxHp(),(player.getMaxMp())); player.setCurrentCp(player.getMaxCp()); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile("data/html/buff/40001.htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("PetRegenerate")) { L2Summon pet=player.getPet(); pet.setCurrentHpMp(pet.getMaxHp(),(pet.getMaxMp())); pet.setCurrentCp(pet.getMaxCp()); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile("data/html/buff/40001-08.htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("Buff")) { String filename = "data/html/buff/40001",v; int cmdChoice = Integer.parseInt(command.substring(5, 7).trim()); int id=TableId[cmdChoice]; int dialog=TableDialog[cmdChoice]; int level=SkillTable.getInstance().getMaxLevel(id,0); if(id==4554)level=4; if(dialog==0)v=""; else v="-"+Integer.toString(dialog); player.stopSkillEffects(id); SkillTable.getInstance().getInfo(id,level).getEffects(player,player); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename+v+".htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("PetBuff")) { String filename = "data/html/buff/40001",v; int cmdChoice = Integer.parseInt(command.substring(5, 7).trim()); int id=TableId[cmdChoice]; int dialog=TableDialog[cmdChoice]; int level=SkillTable.getInstance().getMaxLevel(id,0); if(dialog==0)v=""; else v="-"+Integer.toString(dialog); L2Summon pet=player.getPet(); if(pet!=null) { pet.stopSkillEffects(id); SkillTable.getInstance().getInfo(id,level).getEffects(pet,pet); } else player.sendMessage("You don't have a summon"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename+v+".htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("save")) { int cmdChoice = Integer.parseInt(command.substring(5, 6).trim()); int flag=0; NpcHtmlMessage html = new NpcHtmlMessage(1); if(cmdChoice>3) { html.setFile("data/html/buff/40001-11.htm"); flag=1; } else html.setFile("data/html/buff/40001.htm"); CreateScheme(player,Integer.toString(cmdChoice),flag); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else if(actualCommand.startsWith("give")) { int cmdChoice = Integer.parseInt(command.substring(5, 6).trim()); if((cmdChoice<1)&&(cmdChoice>6))return; String key="data/html/buff/40001",sKey=Integer.toString(cmdChoice); int flag=0; NpcHtmlMessage html = new NpcHtmlMessage(1); if(cmdChoice>3) { flag=1; key="data/html/buff/40001-8"; } if (CharSchemesTable.getInstance().getScheme( player.getObjectId(),sKey)!=null) { if(flag==0) { for (L2Skill sk : CharSchemesTable.getInstance().getScheme( player.getObjectId(),sKey)) { player.stopSkillEffects(sk.getId()); sk.getEffects(this, player); } } else { for (L2Skill sk : CharSchemesTable.getInstance().getScheme( player.getObjectId(),sKey)) { L2Summon pet = player.getPet(); if(pet!=null) { pet.stopSkillEffects(sk.getId()); sk.getEffects(this, pet); } } } html.setFile(key+".htm"); } else { player.sendMessage("Profile "+sKey+" can't find"); return; } sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } else { super.onBypassFeedback(player, command); } } private void sendHtmlMessage(L2PcInstance player, NpcHtmlMessage html) { html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%npcId%", String.valueOf(getNpcId())); player.sendPacket(html); } private void CreateScheme(L2PcInstance player,String name,int flag) { if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).remove(name); } if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null) { CharSchemesTable.getInstance().getSchemesTable().put(player.getObjectId(), new FastMap<String, FastList<L2Skill>>(6)); } CharSchemesTable.getInstance().setScheme(player.getObjectId(),name.trim(), new FastList<L2Skill>(69)); L2Effect[] s; if (flag==0) { s= player.getAllEffects(); } else { L2Summon pet=player.getPet(); s=pet.getAllEffects(); } int Id; Boolean Ok=false; int i = 0; while (i < s.length) { L2Effect value = s[i]; Id = value.getSkill().getId(); int k = 0; while (k < TableId.length) { if (Id == TableId[k]) { Ok = true; break; } k++; } if (Ok) CharSchemesTable.getInstance().getScheme( player.getObjectId(), name).add( SkillTable.getInstance().getInfo(Id, value.getSkill().getLevel())); Ok = false; i++; } player.sendMessage("Profile "+name+" saved!"); } } Необходимо добавить скилл Flu (id 4553, 4 лвл) И еще: в бафере есть встроенная маляра, но я не смог разобраться, каким образом прописывается id? <td><a action="bypass -h npc_%objectId%_Buff 64">Malaria</a></td> тут запрос идет на _buff 64 Хотя у маляры id 4554 У остальных скиллов так же. Кто может помочь? Гуглил - не нашел) Изменено 7 февраля, 2013 пользователем adren Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
adren 18 Опубликовано 7 февраля, 2013 разобрался как.. надо в скрипт добавить этот кусок: else if(actualCommand.startsWith("Buff")) { String filename = "data/html/buff/40001",v; int cmdChoice = Integer.parseInt(command.substring(5, 7).trim()); int id=TableId[cmdChoice]; int dialog=TableDialog[cmdChoice]; int level=SkillTable.getInstance().getMaxLevel(id,0); if(id==4553)level=4; if(dialog==0)v=""; else v="-"+Integer.toString(dialog); player.stopSkillEffects(id); SkillTable.getInstance().getInfo(id,level).getEffects(player,player); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename+v+".htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } Но другая проблема.. Бафает флю почему-то 10 лвла) хотя выставлено 4, почему? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Myp3uK 8 Опубликовано 7 февраля, 2013 int level=SkillTable.getInstance().getMaxLevel(id,0); Получаем максимальный лвл бафа. if(id==4553)level=4; Если ИД бафа равен 4553 то значение level устанавливаем на 4. То что получали выше уже не идет в счет. следовательно вместо ид 4553 надо вписать ид маляры\флу Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
adren 18 Опубликовано 7 февраля, 2013 (изменено) int level=SkillTable.getInstance().getMaxLevel(id,0); Получаем максимальный лвл бафа. if(id==4553)level=4; Если ИД бафа равен 4553 то значение level устанавливаем на 4. То что получали выше уже не идет в счет. следовательно вместо ид 4553 надо вписать ид маляры\флу т.к. в бафере стандартно есть маляра, по коду видно, что в нем есть строчки: else if(actualCommand.startsWith("Buff")) { String filename = "data/html/buff/40001",v; int cmdChoice = Integer.parseInt(command.substring(5, 7).trim()); int id=TableId[cmdChoice]; int dialog=TableDialog[cmdChoice]; int level=SkillTable.getInstance().getMaxLevel(id,0); if(id==4554)level=4; if(dialog==0)v=""; else v="-"+Integer.toString(dialog); player.stopSkillEffects(id); SkillTable.getInstance().getInfo(id,level).getEffects(player,player); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename+v+".htm"); sendHtmlMessage(player,html); player.sendPacket(new ActionFailed()); } 4554 - маляра 4553 - флю решил сделать по аналогии. Получилось, но дает 10 лвл флю Но почему маляру дает 4 лвла, а флю 10? Проблему, в принципе, решил, но другим способом. В xml поставил макс уровень 4. Но хотелось бы узнать почему без редактирования xml флю дает 10 лвл, а маляра 4 =) Изменено 7 февраля, 2013 пользователем adren Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Myp3uK 8 Опубликовано 7 февраля, 2013 (изменено) Посмотри ошибки. Вдруг есть TableId=new int[]{ Также в этот список добавь ид флу 7,7,7,7,7,7,7,7 и тут к семеркам добавь еще одну семерку) Изменено 7 февраля, 2013 пользователем Myp3uK Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
adren 18 Опубликовано 7 февраля, 2013 Посмотри ошибки. Вдруг есть TableId=new int[]{ Также в этот список добавь ид флу 7,7,7,7,7,7,7,7 и тут к семеркам добавь еще одну семерку) это, конечно, добавил) иначе бафф не бафался бы) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты