• 400-123-4567

    工作时间

    周一至周五:9:00-21:00

    周末及节日:9:00-18:00

  • 手机版二维码

    微信公众号

  • 扫描二维码

    关注官方公众号

Close

[服务端] 请教L2JWT 如何设置给宝宝加状态?

4
回复
1557
查看
[复制链接]
  • 打卡等级:尐席琳
  • 打卡总天数:293
  • 打卡月天数:0
  • 打卡总奖励:4216
发表于 2021-5-14 19:31:47 | 显示全部楼层 |阅读模式

<button action="bypass -h npc_%objectId%_Buff 1062 1035 1240 1259 1388 4699 1499 1500 1501 1502 1504 1507 1352 1353 1354 1363 1323 1542 1519 1503 1476 1393 1392 1548 1182 1191 1189 274 275 915 310 272 264 271 269 304 267 266 268" value="戰士類型" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br><br>

以上给人物加状态没有问题,但是不能给宠物加,请教大佬怎么修改可以给宠物加状态呢?
回复

使用道具 举报

  • 打卡等级:殷海萨
  • 打卡总天数:765
  • 打卡月天数:17
  • 打卡总奖励:5193
发表于 2021-5-14 19:47:34 | 显示全部楼层
l2jwz还是l2wt的

l2wt在config 里找buffnpc 设置 ,l2wt里面有个可以自定义加状态的脚本!~
回复

使用道具 举报

  • 打卡等级:尐席琳
  • 打卡总天数:293
  • 打卡月天数:0
  • 打卡总奖励:4216
 楼主| 发表于 2021-5-14 21:17:05 | 显示全部楼层
l2fater 发表于 2021-5-14 19:47
l2jwz还是l2wt的

l2wt在config 里找buffnpc 设置 ,l2wt里面有个可以自定义加状态的脚本!~

我不知道是WZ 还是WT  只是服务端的文件里面有L2JTW  !

不知道是不是把<button action="bypass -h npc_%objectId%_Buff 1085 1062 1078   里面的这部分npc_%objectId%_Buff改一下 就能给宠物加了? 有人说把buff 改成puff,试了没用!
回复

使用道具 举报

  • 打卡等级:殷海萨
  • 打卡总天数:765
  • 打卡月天数:17
  • 打卡总奖励:5193
发表于 2021-5-14 21:27:38 | 显示全部楼层
hzzhanglin 发表于 2021-5-14 21:17
我不知道是WZ 还是WT  只是服务端的文件里面有L2JTW  !

不知道是不是把

l2jtw的么?
L2JTW的源码好像没有给宠物加的这个内核!~
需要自己加scriptsscripts.cfg里添加
data\scripts\custom\NpcBuffer.java
以及

data\scripts\custom里面新增NpcBuffer.java这个文件
下面这个npcbuffer的java 可能需要修改部分数据才能使用!~
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */

  15. package custom.NpcBuffer;

  16. import static com.l2jserver.gameserver.util.Util.formatAdena;

  17. import java.sql.Connection;
  18. import java.sql.PreparedStatement;
  19. import java.sql.ResultSet;
  20. import java.sql.SQLException;
  21. import java.util.ArrayList;
  22. import java.util.Collections;
  23. import java.util.List;

  24. import com.l2jserver.Config;
  25. import com.l2jserver.L2DatabaseFactory;
  26. import com.l2jserver.gameserver.datatables.ItemTable;
  27. import com.l2jserver.gameserver.datatables.SkillTable;
  28. import com.l2jserver.gameserver.instancemanager.QuestManager;
  29. import com.l2jserver.gameserver.model.actor.L2Npc;
  30. import com.l2jserver.gameserver.model.actor.L2Summon;
  31. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  32. import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
  33. import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
  34. import com.l2jserver.gameserver.model.actor.stat.PcStat;
  35. import com.l2jserver.gameserver.model.actor.stat.SummonStat;
  36. import com.l2jserver.gameserver.model.actor.status.PcStatus;
  37. import com.l2jserver.gameserver.model.actor.status.SummonStatus;
  38. import com.l2jserver.gameserver.model.entity.TvTEvent;
  39. import com.l2jserver.gameserver.model.items.L2Item;
  40. import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
  41. import com.l2jserver.gameserver.model.quest.Quest;
  42. import com.l2jserver.gameserver.model.quest.QuestState;
  43. import com.l2jserver.gameserver.model.skills.L2Skill;
  44. import com.l2jserver.gameserver.model.skills.L2SkillType;
  45. import com.l2jserver.gameserver.network.SystemMessageId;
  46. import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  47. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  48. import com.l2jserver.gameserver.network.serverpackets.SetSummonRemainTime;
  49. import com.l2jserver.gameserver.network.serverpackets.SetupGauge;

  50. import gnu.trove.list.array.TIntArrayList;

  51. /**
  52. * @autor: Rin4a and ????
  53. * @Adapted by JMD for L2JServer.com
  54. */

  55. public class NpcBuffer extends Quest
  56. {
  57.         private static final boolean DEBUG = false;
  58.        
  59.         private static void print(Exception e)
  60.         {
  61.                 _log.warning(">>>" + e.toString() + "<<<");
  62.                 if (DEBUG)
  63.                 {
  64.                         e.printStackTrace();
  65.                 }
  66.         }
  67.        
  68.         private static final String QUEST_LOADING_INFO = "NpcBuffer";
  69.         private static final int NPC_ID = 1000003;
  70.        
  71.         private static final String TITLE_NAME = "血玫瑰天堂II状态师";
  72.         private static final boolean SCRIPT_RELOAD = true;
  73.         private static final boolean SMART_WINDOW = true;
  74.         // private static final int VIP_ACCESS_LEVEL = Config.NpcBuffer_VIP_ALV;
  75.         private static final boolean ENABLE_BUFF_SECTION = true;
  76.         private static final boolean ENABLE_SCHEME_SYSTEM = true;
  77.         private static final boolean ENABLE_HEAL = true;
  78.         private static final boolean ENABLE_BUFFS = true;
  79.         private static final boolean ENABLE_RESIST = true;
  80.         private static final boolean ENABLE_SONGS = true;
  81.         private static final boolean ENABLE_DANCES = true;
  82.         private static final boolean ENABLE_CHANTS = true;
  83.         private static final boolean ENABLE_OTHERS = true;
  84.         private static final boolean ENABLE_SPECIAL = true;
  85.         private static final boolean ENABLE_CUBIC = false;
  86.         private static final boolean ENABLE_BUFF_REMOVE = true;
  87.         private static final boolean ENABLE_BUFF_SET = true;
  88.         private static final boolean FREE_BUFFS = true;
  89.         private static final boolean TIME_OUT = true;
  90.         private static final int TIME_OUT_TIME = 0;
  91.         private static final int MIN_LEVEL = 1;
  92.         private static final int BUFF_REMOVE_PRICE = 10000;
  93.         private static final int HEAL_PRICE = 10000;
  94.         private static final int BUFF_PRICE = 10000;
  95.         private static final int RESIST_PRICE = 10000;
  96.         private static final int SONG_PRICE = 10000;
  97.         private static final int DANCE_PRICE = 10000;
  98.         private static final int CHANT_PRICE = 10000;
  99.         private static final int OTHERS_PRICE = 10000;
  100.         private static final int SPECIAL_PRICE = 10000;
  101.         private static final int CUBIC_PRICE = 10000;
  102.         private static final int BUFF_SET_PRICE = 10000;
  103.         private static final int SCHEME_BUFF_PRICE = 10000;
  104.         private static final int SCHEMES_PER_PLAYER = 4;
  105.         private static final int CONSUMABLE_ID = 57;
  106.         private static final int MAX_SCHEME_BUFFS = Config.BUFFS_MAX_AMOUNT;
  107.         private static final int MAX_SCHEME_DANCES = Config.DANCES_MAX_AMOUNT;
  108.        
  109.         private static final String SET_FIGHTER = "战士";
  110.         private static final String SET_MAGE = "魔法";
  111.         private static final String SET_ALL = "全部";
  112.         private static final String SET_NONE = "不使用";
  113.        
  114.         private String rebuildMainHtml(QuestState st)
  115.         {
  116.                 String MAIN_HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center>";
  117.                 String MESSAGE = "";
  118.                 int td = 0;
  119.                 String[] TRS =
  120.                 {
  121.                         "<tr><td height=25>",
  122.                         "</td>",
  123.                         "<td height=25>",
  124.                         "</td></tr>"
  125.                 };
  126.                
  127.                 MAIN_HTML_MESSAGE += "<table border=0 cellpadding=0 cellspacing=0>";
  128.                 MAIN_HTML_MESSAGE += "<tr><td><img src="L2UI_CT1.frame_df_silhouette_left" width=90 height=33></td><td width=10 align=center><img src="L2UI_CT1.RADARMAP_DF_ICN_TARGET01" width=16 height=16></td><td><img src="L2UI_CT1.frame_df_silhouette_right" width=90 height=33></td></tr>";
  129.                 MAIN_HTML_MESSAGE += "</table>";
  130.                
  131.                 final String bottonA, bottonB, bottonC;
  132.                 if (st.getInt("Pet-On-Off") == 1)
  133.                 {
  134.                         bottonA = "自动宠物状态";
  135.                         bottonB = "一键治愈宠物";
  136.                         bottonC = "清除宠物状态";
  137.                         MAIN_HTML_MESSAGE += "<button value="切换至角色状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " buffpet 0 0 0" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Info_Down" fore="L2UI_CT1.OlympiadWnd_DF_Info">";
  138.                 }
  139.                 else
  140.                 {
  141.                         bottonA = "自动状态";
  142.                         bottonB = "一键治愈";
  143.                         bottonC = "一键清除";
  144.                         MAIN_HTML_MESSAGE += "<button value="切换至宠物状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " buffpet 1 0 0" width=200 height=31 back="l2ui_ct1.olympiadwnd_df_heroconfirm_down" fore="l2ui_ct1.olympiadwnd_df_heroconfirm">";
  145.                 }
  146.                
  147.                 if (ENABLE_BUFF_SECTION)
  148.                 {
  149.                         if (ENABLE_BUFFS)
  150.                         {
  151.                                 if (td > 2)
  152.                                 {
  153.                                         td = 0;
  154.                                 }
  155.                                 MESSAGE += TRS[td] + "<button value="一般状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_buffs 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  156.                                 td += 2;
  157.                         }
  158.                         if (ENABLE_RESIST)
  159.                         {
  160.                                 if (td > 2)
  161.                                 {
  162.                                         td = 0;
  163.                                 }
  164.                                 MESSAGE += TRS[td] + "<button value="抵抗状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_resists 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  165.                                 td += 2;
  166.                         }
  167.                         if (ENABLE_SONGS)
  168.                         {
  169.                                 if (td > 2)
  170.                                 {
  171.                                         td = 0;
  172.                                 }
  173.                                 MESSAGE += TRS[td] + "<button value="诗歌状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_songs 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  174.                                 td += 2;
  175.                         }
  176.                         if (ENABLE_DANCES)
  177.                         {
  178.                                 if (td > 2)
  179.                                 {
  180.                                         td = 0;
  181.                                 }
  182.                                 MESSAGE += TRS[td] + "<button value="舞蹈状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_dances 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  183.                                 td += 2;
  184.                         }
  185.                         if (ENABLE_CHANTS)
  186.                         {
  187.                                 if (td > 2)
  188.                                 {
  189.                                         td = 0;
  190.                                 }
  191.                                 MESSAGE += TRS[td] + "<button value="战狂颂歌" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_chants 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  192.                                 td += 2;
  193.                         }
  194.                         if (ENABLE_SPECIAL)
  195.                         {
  196.                                 if (td > 2)
  197.                                 {
  198.                                         td = 0;
  199.                                 }
  200.                                 MESSAGE += TRS[td] + "<button value="特殊状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_special 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  201.                                 td += 2;
  202.                         }
  203.                         if (ENABLE_OTHERS)
  204.                         {
  205.                                 if (td > 2)
  206.                                 {
  207.                                         td = 0;
  208.                                 }
  209.                                 MESSAGE += TRS[td] + "<button value="其他状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_others 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  210.                                 td += 2;
  211.                         }
  212.                 }
  213.                 if (ENABLE_CUBIC)
  214.                 {
  215.                         if (td > 2)
  216.                         {
  217.                                 td = 0;
  218.                         }
  219.                         MESSAGE += TRS[td] + "<button value="晶体状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_cubic 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  220.                         td += 2;
  221.                 }
  222.                 if (MESSAGE.length() > 0)
  223.                 {
  224.                         MAIN_HTML_MESSAGE += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>状态栏:</font></td><td align=right></td></tr></table>" + "<BR1><table cellspacing=0 cellpadding=0>" + MESSAGE + "</table>";
  225.                         MESSAGE = "";
  226.                         td = 0;
  227.                 }
  228.                 if (ENABLE_BUFF_SET)
  229.                 {
  230.                         if (td > 2)
  231.                         {
  232.                                 td = 0;
  233.                         }
  234.                         MESSAGE += TRS[td] + "<button value="" + bottonA + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " castBuffSet 0 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  235.                         td += 2;
  236.                 }
  237.                 if (ENABLE_HEAL)
  238.                 {
  239.                         if (td > 2)
  240.                         {
  241.                                 td = 0;
  242.                         }
  243.                         MESSAGE += TRS[td] + "<button value="" + bottonB + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " heal 0 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  244.                         td += 2;
  245.                 }
  246.                 if (ENABLE_BUFF_REMOVE)
  247.                 {
  248.                         if (td > 2)
  249.                         {
  250.                                 td = 0;
  251.                         }
  252.                         MESSAGE += TRS[td] + "<button value="" + bottonC + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " removeBuffs 0 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  253.                         td += 2;
  254.                 }
  255.                
  256.                 if (MESSAGE.length() > 0)
  257.                 {
  258.                         MAIN_HTML_MESSAGE += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>自动栏:</font></td><td align=right><font color=LEVEL>" + formatAdena(BUFF_SET_PRICE) + "</font> 金币</td></tr></table>" + "<BR1><table cellspacing=0 cellpadding=0>" + MESSAGE + "</table>";
  259.                         MESSAGE = "";
  260.                         td = 0;
  261.                 }
  262.                 if (ENABLE_SCHEME_SYSTEM)
  263.                 {
  264.                         MAIN_HTML_MESSAGE += generateScheme(st);
  265.                 }
  266.                 if (st.getPlayer().isGM())
  267.                 {
  268.                         MAIN_HTML_MESSAGE += "<br><button value="管理员选项" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect manage_buffs 0 0" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  269.                 }
  270.                 MAIN_HTML_MESSAGE += "<br><font color=303030>" + TITLE_NAME + "</font>" + "</center></body></html>";
  271.                 return MAIN_HTML_MESSAGE;
  272.         }
  273.        
  274.         private String generateScheme(QuestState st)
  275.         {
  276.                 List<String> schemeName = new ArrayList<>();
  277.                 List<String> schemeId = new ArrayList<>();
  278.                 String HTML = "";
  279.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  280.                 {
  281.                         PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
  282.                         rss.setInt(1, st.getPlayer().getObjectId());
  283.                         ResultSet action = rss.executeQuery();
  284.                         while (action.next())
  285.                         {
  286.                                 schemeName.add(action.getString("scheme_name"));
  287.                                 schemeId.add(action.getString("id"));
  288.                         }
  289.                 }
  290.                 catch (SQLException e)
  291.                 {
  292.                         print(e);
  293.                 }
  294.                 HTML += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>自定栏:</font></td><td align=right><font color=LEVEL>" + formatAdena(SCHEME_BUFF_PRICE) + "</font> 金币</TD></TR></table>" + "<BR1><table cellspacing=0 cellpadding=0>";
  295.                 if (schemeName.size() > 0)
  296.                 {
  297.                         String MESSAGE = "";
  298.                         int td = 0;
  299.                         String[] TRS =
  300.                         {
  301.                                 "<tr><td>",
  302.                                 "</td>",
  303.                                 "<td>",
  304.                                 "</td></tr>"
  305.                         };
  306.                         for (int i = 0; i < schemeName.size(); ++i)
  307.                         {
  308.                                 if (td > 2)
  309.                                 {
  310.                                         td = 0;
  311.                                 }
  312.                                 MESSAGE += TRS[td] + "<button value="" + schemeName.get(i) + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " cast " + schemeId.get(i) + " x x" width=130 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + TRS[td + 1];
  313.                                 td += 2;
  314.                         }
  315.                        
  316.                         if (MESSAGE.length() > 0)
  317.                         {
  318.                                 HTML += "<table>" + MESSAGE + "</table>";
  319.                         }
  320.                 }
  321.                 if (schemeName.size() < SCHEMES_PER_PLAYER)
  322.                 {
  323.                         HTML += "<BR1><table><tr><td><button value="新建" action="bypass -h Quest " + QUEST_LOADING_INFO + " create_1 x x x" width=85 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>";
  324.                 }
  325.                 else
  326.                 {
  327.                         HTML += "<BR1><table width=100><tr>";
  328.                 }
  329.                 if (schemeName.size() > 0)
  330.                 {
  331.                         HTML += "<td><button value="编辑" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_1 x x x" width=85 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>" + "<td><button value="删除" action="bypass -h Quest " + QUEST_LOADING_INFO + " delete_1 x x x" width=85 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr></table>";
  332.                 }
  333.                 else
  334.                 {
  335.                         HTML += "</tr></table>";
  336.                 }
  337.                 return HTML;
  338.         }
  339.        
  340.         private String reloadPanel(QuestState st)
  341.         {
  342.                 return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>" + "<font color=303030>" + TITLE_NAME + "</font><br>" + "<img src="L2UI.SquareGray" width=250 height=1><br>" + "<table width=260 border=0 bgcolor=444444>" + "<tr><td><br></td></tr>" + "<tr><td align=center><font color=FFFFFF>此页面仅GM可见.<br1>可供GM管理和编辑状态师脚本<br1><font color=LEVEL>是否更新状态师脚本</font></font></td></tr>" + "<tr><td></td></tr></table><br>" + "<img src="L2UI.SquareGray" width=250 height=1><br><br>" + "<button value="是" action="bypass -h Quest " + QUEST_LOADING_INFO + " reloadscript 1 0 0" width=50 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<button value="否" action="bypass -h Quest " + QUEST_LOADING_INFO + " reloadscript 0 0 0" width=50 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "</center></body></html>";
  343.         }
  344.        
  345.         private String getItemNameHtml(QuestState st, int itemval)
  346.         {
  347.                 return "&#" + itemval + ";";
  348.                 // return ItemTable.getInstance().getTemplate(itemval) != null ? "&#" + itemval + ";" : "No Name";
  349.         }
  350.        
  351.         @SuppressWarnings("unused")
  352.         private String getItemName(QuestState st, int itemval)
  353.         {
  354.                 L2Item t = ItemTable.getInstance().getTemplate(itemval);
  355.                 return t != null ? t.getName() : "No Name";
  356.         }
  357.        
  358.         private int getBuffCount(String scheme)
  359.         {
  360.                 int count = 0;
  361.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  362.                 {
  363.                         PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?");
  364.                         rss.setString(1, scheme);
  365.                         ResultSet action = rss.executeQuery();
  366.                         while (action.next())
  367.                         {
  368.                                 ++count;
  369.                         }
  370.                 }
  371.                 // catch (SQLException e) { count = 0; } //TODO:
  372.                 catch (SQLException e)
  373.                 {
  374.                         print(e);
  375.                 }
  376.                 return count;
  377.         }
  378.        
  379.         private String getBuffType(int id)
  380.         {
  381.                 String val = "none";
  382.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  383.                 {
  384.                         PreparedStatement act = con.prepareStatement("SELECT buffType FROM npcbuffer_buff_list WHERE buffId=? LIMIT 1");
  385.                         act.setInt(1, id);
  386.                         ResultSet rs = act.executeQuery();
  387.                         if (rs.next())
  388.                         {
  389.                                 val = rs.getString("buffType");
  390.                         }
  391.                 }
  392.                 catch (SQLException e)
  393.                 {
  394.                         print(e);
  395.                 }
  396.                 return val;
  397.         }
  398.        
  399.         private boolean isEnabled(int id, int level)
  400.         {
  401.                 boolean val = false;
  402.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  403.                 {
  404.                         PreparedStatement act = con.prepareStatement("SELECT canUse FROM npcbuffer_buff_list WHERE buffId=? AND buffLevel=? LIMIT 1");
  405.                         act.setInt(1, id);
  406.                         act.setInt(2, level);
  407.                         ResultSet rs = act.executeQuery();
  408.                         if (rs.next())
  409.                         {
  410.                                 if ("1".equals(rs.getString("canUse")))
  411.                                 {
  412.                                         val = true;
  413.                                 }
  414.                         }
  415.                 }
  416.                 catch (SQLException e)
  417.                 {
  418.                         print(e);
  419.                 }
  420.                 return val;
  421.         }
  422.        
  423.         private boolean isUsed(String scheme, int id, int level)
  424.         {
  425.                 boolean used = false;
  426.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  427.                 {
  428.                         PreparedStatement rss = con.prepareStatement("SELECT id FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1");
  429.                         rss.setString(1, scheme);
  430.                         rss.setInt(2, id);
  431.                         rss.setInt(3, level);
  432.                         ResultSet action = rss.executeQuery();
  433.                         if (action.next())
  434.                         {
  435.                                 used = true;
  436.                         }
  437.                 }
  438.                 // catch (SQLException e) { count = 0; } //TODO:
  439.                 catch (SQLException e)
  440.                 {
  441.                         print(e);
  442.                 }
  443.                 return used;
  444.         }
  445.        
  446.         private int getClassBuff(String id)
  447.         {
  448.                 int val = 0;
  449.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  450.                 {
  451.                         PreparedStatement getTipo = con.prepareStatement("SELECT buff_class FROM npcbuffer_buff_list WHERE buffId=?");
  452.                         getTipo.setString(1, id);
  453.                         ResultSet gt = getTipo.executeQuery();
  454.                         if (gt.next())
  455.                         {
  456.                                 val = gt.getInt("buff_class");
  457.                         }
  458.                 }
  459.                 catch (SQLException e)
  460.                 {
  461.                         print(e);
  462.                 }
  463.                 return val;
  464.         }
  465.        
  466.         private String showText(QuestState st, String type, String text, boolean buttonEnabled, String buttonName, String location)
  467.         {
  468.                 String MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
  469.                 MESSAGE += "<font color=LEVEL>" + type + "</font><br>" + text + "<br>";
  470.                 if (buttonEnabled)
  471.                 {
  472.                         MESSAGE += "<button value="" + buttonName + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect " + location + " 0 0" width=100 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  473.                 }
  474.                 MESSAGE += "<font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  475.                 st.playSound("ItemSound3.sys_shortage");
  476.                 return MESSAGE;
  477.         }
  478.        
  479.         private String reloadConfig(QuestState st)
  480.         {
  481.                 try
  482.                 {
  483.                         if (QuestManager.getInstance().reload(QUEST_LOADING_INFO))
  484.                         {
  485.                                 st.getPlayer().sendMessage("状态师脚本和设定重载成功.");
  486.                         }
  487.                         else
  488.                         {
  489.                                 st.getPlayer().sendMessage("状态师脚本重载失败,请修改错误后重启GS");
  490.                         }
  491.                 }
  492.                 catch (Exception e)
  493.                 {
  494.                         st.getPlayer().sendMessage("状态师脚本重载失败,请修改错误后重启GS");
  495.                         print(e);
  496.                 }
  497.                 return rebuildMainHtml(st);
  498.         }
  499.        
  500.         private NpcBuffer(int id, String name, String descr)
  501.         {
  502.                 super(id, name, descr);
  503.                 addStartNpc(NPC_ID);
  504.                 addFirstTalkId(NPC_ID);
  505.                 addTalkId(NPC_ID);
  506.         }
  507.        
  508.         private boolean isPetBuff(QuestState st)
  509.         {
  510.                 return st.getInt("Pet-On-Off") != 0;
  511.         }
  512.        
  513.         private String createScheme()
  514.         {
  515.                 return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br><br>状态名字禁止使用中文和符号 <br><br>自定状态名字: <edit var="name" width=100><br><br>" + "<button value="建立自定状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " create $name no_name x x" width=200 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  516.         }
  517.        
  518.         private String deleteScheme(L2PcInstance player)
  519.         {
  520.                 String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>删除自定状态:<br><br>";
  521.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  522.                 {
  523.                         PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
  524.                         rss.setInt(1, player.getObjectId());
  525.                         ResultSet action = rss.executeQuery();
  526.                         while (action.next())
  527.                         {
  528.                                 HTML += "<button value="" + action.getString("scheme_name") + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " delete_c " + action.getString("id") + " " + action.getString("scheme_name") + " x" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  529.                         }
  530.                 }
  531.                 catch (SQLException e)
  532.                 {
  533.                         print(e);
  534.                 }
  535.                 HTML += "<br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  536.                 return HTML;
  537.         }
  538.        
  539.         private String editScheme(L2PcInstance player)
  540.         {
  541.                 String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>选择您想要管理的状态:<br><br>";
  542.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  543.                 {
  544.                         PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
  545.                         rss.setInt(1, player.getObjectId());
  546.                         ResultSet action = rss.executeQuery();
  547.                         while (action.next())
  548.                         {
  549.                                 String name = action.getString("scheme_name");
  550.                                 String id = action.getString("id");
  551.                                 HTML += "<button value="" + name + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_select " + id + " x x" width=200 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  552.                         }
  553.                 }
  554.                 catch (SQLException e)
  555.                 {
  556.                         print(e);
  557.                 }
  558.                 HTML += "<br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  559.                 return HTML;
  560.         }
  561.        
  562.         private String getOptionList(String scheme)
  563.         {
  564.                 int bcount = getBuffCount(scheme);
  565.                 String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>现在有 <font color=LEVEL>" + bcount + "</font> 个状态存在于您的自定状态里!<br><br>";
  566.                 if (bcount < (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES))
  567.                 {
  568.                         HTML += "<button value="增加状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_1 " + scheme + " 1 x" width=200 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  569.                 }
  570.                 if (bcount > 0)
  571.                 {
  572.                         HTML += "<button value="重置状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_2 " + scheme + " 1 x" width=200 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  573.                 }
  574.                 HTML += "<br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_1 0 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<button value="首页" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  575.                 return HTML;
  576.         }
  577.        
  578.         private String buildHtml(String buffType)
  579.         {
  580.                 String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>";
  581.                
  582.                 List<String> availableBuffs = new ArrayList<>();
  583.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  584.                 {
  585.                         PreparedStatement getList = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE buffType="" + buffType + "" AND canUse=1  ORDER BY Buff_Class ASC, id");
  586.                         ResultSet rs = getList.executeQuery();
  587.                         while (rs.next())
  588.                         {
  589.                                 // try :
  590.                                 int bId = rs.getInt("buffId");
  591.                                 int bLevel = rs.getInt("buffLevel");
  592.                                 String bName = SkillTable.getInstance().getInfo(bId, bLevel).getName();
  593.                                 bName = bName.replace(" ", "+");
  594.                                 availableBuffs.add(bName + "_" + bId + "_" + bLevel);
  595.                         }
  596.                 }
  597.                 catch (SQLException e)
  598.                 {
  599.                         print(e);
  600.                 }
  601.                
  602.                 if (availableBuffs.size() == 0)
  603.                 {
  604.                         HTML_MESSAGE += "No buffs are available at this moment!";
  605.                 }
  606.                 else
  607.                 {
  608.                         if (FREE_BUFFS)
  609.                         {
  610.                                 HTML_MESSAGE += "所有的状态都是 <font color=LEVEL>免费</font>!";
  611.                         }
  612.                         else
  613.                         {
  614.                                 int price = 0;
  615.                                 switch (buffType)
  616.                                 {
  617.                                         case "buff":
  618.                                                 price = BUFF_PRICE;
  619.                                                 break;
  620.                                         case "resist":
  621.                                                 price = RESIST_PRICE;
  622.                                                 break;
  623.                                         case "song":
  624.                                                 price = SONG_PRICE;
  625.                                                 break;
  626.                                         case "dance":
  627.                                                 price = DANCE_PRICE;
  628.                                                 break;
  629.                                         case "chant":
  630.                                                 price = CHANT_PRICE;
  631.                                                 break;
  632.                                         case "others":
  633.                                                 price = OTHERS_PRICE;
  634.                                                 break;
  635.                                         case "special":
  636.                                                 price = SPECIAL_PRICE;
  637.                                                 break;
  638.                                         case "cubic":
  639.                                                 price = CUBIC_PRICE;
  640.                                                 break;
  641.                                         default:
  642.                                                 if (DEBUG)
  643.                                                 {
  644.                                                         throw new RuntimeException();
  645.                                                 }
  646.                                 }
  647.                                 HTML_MESSAGE += "所有的特殊状态小号 <font color=LEVEL>" + formatAdena(price) + "</font> 金币!";
  648.                         }
  649.                         HTML_MESSAGE += "<BR1><table>";
  650.                         for (String buff : availableBuffs)
  651.                         {
  652.                                 buff = buff.replace("_", " ");
  653.                                 String[] buffSplit = buff.split(" ");
  654.                                 String name = buffSplit[0];
  655.                                 int id = Integer.parseInt(buffSplit[1]);
  656.                                 int level = Integer.parseInt(buffSplit[2]);
  657.                                 name = name.replace("+", " ");
  658.                                 HTML_MESSAGE += "<tr><td>" + getSkillIconHtml(id, level) + "</td><td><button value="" + name + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " giveBuffs " + id + " " + level + " " + buffType + "" width=190 height=32 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>";
  659.                         }
  660.                         HTML_MESSAGE += "</table>";
  661.                 }
  662.                 HTML_MESSAGE += "<br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  663.                 return HTML_MESSAGE;
  664.         }
  665.        
  666.         private String generateQuery(int case1, int case2)
  667.         {
  668.                 StringBuilder qry = new StringBuilder();
  669.                 if (ENABLE_BUFFS)
  670.                 {
  671.                         if (case1 < MAX_SCHEME_BUFFS)
  672.                         {
  673.                                 qry.append(","buff"");
  674.                         }
  675.                 }
  676.                 if (ENABLE_RESIST)
  677.                 {
  678.                         if (case1 < MAX_SCHEME_BUFFS)
  679.                         {
  680.                                 qry.append(","resist"");
  681.                         }
  682.                 }
  683.                 if (ENABLE_SONGS)
  684.                 {
  685.                         if (case2 < MAX_SCHEME_DANCES)
  686.                         {
  687.                                 qry.append(","song"");
  688.                         }
  689.                 }
  690.                 if (ENABLE_DANCES)
  691.                 {
  692.                         if (case2 < MAX_SCHEME_DANCES)
  693.                         {
  694.                                 qry.append(","dance"");
  695.                         }
  696.                 }
  697.                 if (ENABLE_CHANTS)
  698.                 {
  699.                         if (case1 < MAX_SCHEME_BUFFS)
  700.                         {
  701.                                 qry.append(","chant"");
  702.                         }
  703.                 }
  704.                 if (ENABLE_OTHERS)
  705.                 {
  706.                         if (case1 < MAX_SCHEME_BUFFS)
  707.                         {
  708.                                 qry.append(","others"");
  709.                         }
  710.                 }
  711.                 if (ENABLE_SPECIAL)
  712.                 {
  713.                         if (case1 < MAX_SCHEME_BUFFS)
  714.                         {
  715.                                 qry.append(","special"");
  716.                         }
  717.                 }
  718.                 if (qry.length() > 0)
  719.                 {
  720.                         qry.deleteCharAt(0);
  721.                 }
  722.                 return qry.toString();
  723.         }
  724.        
  725.         private String viewAllSchemeBuffs$getBuffCount(String scheme)
  726.         {
  727.                 int count = 0;
  728.                 int D_S_Count = 0;
  729.                 int B_Count = 0;
  730.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  731.                 {
  732.                         PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?");
  733.                         rss.setString(1, scheme);
  734.                         ResultSet action = rss.executeQuery();
  735.                         while (action.next())
  736.                         {
  737.                                 ++count;
  738.                                 int val = action.getInt("buff_class");
  739.                                 if ((val == 1) || (val == 2))
  740.                                 {
  741.                                         ++D_S_Count;
  742.                                 }
  743.                                 else
  744.                                 {
  745.                                         ++B_Count;
  746.                                 }
  747.                         }
  748.                 }
  749.                 catch (SQLException e)
  750.                 {
  751.                         print(e);
  752.                 }
  753.                 String res = count + " " + B_Count + " " + D_S_Count;
  754.                 return res;
  755.         }
  756.        
  757.         private String viewAllSchemeBuffs(String scheme, String page, String action)
  758.         {
  759.                 List<String> buffList = new ArrayList<>();
  760.                 String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>";
  761.                 String[] eventSplit = viewAllSchemeBuffs$getBuffCount(scheme).split(" ");
  762.                 int TOTAL_BUFF = Integer.parseInt(eventSplit[0]);
  763.                 int BUFF_COUNT = Integer.parseInt(eventSplit[1]);
  764.                 int DANCE_SONG = Integer.parseInt(eventSplit[2]);
  765.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  766.                 {
  767.                         if (action.equals("add"))
  768.                         {
  769.                                 HTML_MESSAGE += "您可以增加 <font color=LEVEL>" + (MAX_SCHEME_BUFFS - BUFF_COUNT) + "</font> 个一般状态和 <font color=LEVEL>" + (MAX_SCHEME_DANCES - DANCE_SONG) + "</font> 个舞蹈诗歌!";
  770.                                 String QUERY = "SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(BUFF_COUNT, DANCE_SONG) + ") AND canUse=1 ORDER BY Buff_Class ASC, id";
  771.                                 PreparedStatement getBuffCount = con.prepareStatement(QUERY);
  772.                                 ResultSet rss = getBuffCount.executeQuery();
  773.                                 while (rss.next())
  774.                                 {
  775.                                         String name = SkillTable.getInstance().getInfo(rss.getInt("buffId"), rss.getInt("buffLevel")).getName();
  776.                                         name = name.replace(" ", "+");
  777.                                         buffList.add(name + "_" + rss.getInt("buffId") + "_" + rss.getInt("buffLevel"));
  778.                                 }
  779.                         }
  780.                         else if (action.equals("remove"))
  781.                         {
  782.                                 HTML_MESSAGE += "您有 <font color=LEVEL>" + BUFF_COUNT + "</font> 个状态和 <font color=LEVEL>" + DANCE_SONG + "</font> 个舞蹈诗歌";
  783.                                 String QUERY = "SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY Buff_Class ASC, id";
  784.                                 PreparedStatement getBuffCount = con.prepareStatement(QUERY);
  785.                                 getBuffCount.setString(1, scheme);
  786.                                 ResultSet rss = getBuffCount.executeQuery();
  787.                                 while (rss.next())
  788.                                 {
  789.                                         String name = SkillTable.getInstance().getInfo(rss.getInt("skill_id"), rss.getInt("skill_level")).getName();
  790.                                         name = name.replace(" ", "+");
  791.                                         buffList.add(name + "_" + rss.getInt("skill_id") + "_" + rss.getInt("skill_level"));
  792.                                 }
  793.                         }
  794.                         else if (DEBUG)
  795.                         {
  796.                                 throw new RuntimeException();
  797.                         }
  798.                 }
  799.                 catch (SQLException e)
  800.                 {
  801.                         print(e);
  802.                 }
  803.                
  804.                 HTML_MESSAGE += "<BR1><table border=0><tr>";
  805.                 final int buffsPerPage = 20;
  806.                 final String width, pageName;
  807.                 int pc = ((buffList.size() - 1) / buffsPerPage) + 1;
  808.                 if (pc > 5)
  809.                 {
  810.                         width = "25";
  811.                         pageName = "P";
  812.                 }
  813.                 else
  814.                 {
  815.                         width = "50";
  816.                         pageName = "页 ";
  817.                 }
  818.                 for (int ii = 1; ii <= pc; ++ii)
  819.                 {
  820.                         if (ii == Integer.parseInt(page))
  821.                         {
  822.                                 HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>";
  823.                         }
  824.                         else if (action.equals("add"))
  825.                         {
  826.                                 HTML_MESSAGE += "<td width=" + width + ">" + "<button value="" + pageName + ii + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_1 " + scheme + " " + ii + " x" width=" + width + " height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>";
  827.                         }
  828.                         else if (action.equals("remove"))
  829.                         {
  830.                                 HTML_MESSAGE += "<td width=" + width + ">" + "<button value="" + pageName + ii + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_2 " + scheme + " " + ii + " x" width=" + width + " height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>";
  831.                         }
  832.                         else if (DEBUG)
  833.                         {
  834.                                 throw new RuntimeException();
  835.                         }
  836.                 }
  837.                 HTML_MESSAGE += "</tr></table>";
  838.                
  839.                 int limit = buffsPerPage * Integer.parseInt(page);
  840.                 int start = limit - buffsPerPage;
  841.                 int end = Math.min(limit, buffList.size());
  842.                 int k = 0;
  843.                 for (int i = start; i < end; ++i)
  844.                 {
  845.                         String value = buffList.get(i);
  846.                         value = value.replace("_", " ");
  847.                         String[] extr = value.split(" ");
  848.                         String name = extr[0];
  849.                         name = name.replace("+", " ");
  850.                         int id = Integer.parseInt(extr[1]);
  851.                         int level = Integer.parseInt(extr[2]);
  852.                         if (action.equals("add"))
  853.                         {
  854.                                 if (!isUsed(scheme, id, level))
  855.                                 {
  856.                                         if ((k % 2) != 0)
  857.                                         {
  858.                                                 HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
  859.                                         }
  860.                                         else
  861.                                         {
  862.                                                 HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
  863.                                         }
  864.                                         HTML_MESSAGE += "<tr><td width=35>" + getSkillIconHtml(id, level) + "</td><td fixwidth=170>" + name + "</td><td><button value="增加" action="bypass -h Quest " + QUEST_LOADING_INFO + " add_buff " + scheme + "_" + id + "_" + level + " " + page + " " + TOTAL_BUFF + "" width=65 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>" + "</tr></table>";
  865.                                         k += 1;
  866.                                 }
  867.                         }
  868.                         else if (action.equals("remove"))
  869.                         {
  870.                                 if ((k % 2) != 0)
  871.                                 {
  872.                                         HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
  873.                                 }
  874.                                 else
  875.                                 {
  876.                                         HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
  877.                                 }
  878.                                 HTML_MESSAGE += "<tr><td width=35>" + getSkillIconHtml(id, level) + "</td><td fixwidth=170>" + name + "</td><td><button value="重置" action="bypass -h Quest " + QUEST_LOADING_INFO + " remove_buff " + scheme + "_" + id + "_" + level + " " + page + " " + TOTAL_BUFF + "" width=65 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>" + "</table>";
  879.                                 k += 1;
  880.                         }
  881.                 }
  882.                 HTML_MESSAGE += "<br><br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_select " + scheme + " x x" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<button value="首页" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  883.                 return HTML_MESSAGE;
  884.         }
  885.        
  886.         private String viewAllBuffTypes()
  887.         {
  888.                 String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
  889.                 HTML_MESSAGE += "<font color=LEVEL>[状态管理]</font><br>";
  890.                 if (ENABLE_BUFFS)
  891.                 {
  892.                         HTML_MESSAGE += "<button value="一般状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list buff Buffs 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  893.                 }
  894.                 if (ENABLE_RESIST)
  895.                 {
  896.                         HTML_MESSAGE += "<button value="抵抗状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list resist Resists 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  897.                 }
  898.                 if (ENABLE_SONGS)
  899.                 {
  900.                         HTML_MESSAGE += "<button value="诗歌" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list song Songs 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  901.                 }
  902.                 if (ENABLE_DANCES)
  903.                 {
  904.                         HTML_MESSAGE += "<button value="舞蹈" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list dance Dances 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  905.                 }
  906.                 if (ENABLE_CHANTS)
  907.                 {
  908.                         HTML_MESSAGE += "<button value="颂歌" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list chant Chants 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  909.                 }
  910.                 if (ENABLE_SPECIAL)
  911.                 {
  912.                         HTML_MESSAGE += "<button value="特殊状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list special Special_Buffs 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  913.                 }
  914.                 if (ENABLE_OTHERS)
  915.                 {
  916.                         HTML_MESSAGE += "<button value="其他状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list others Others_Buffs 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  917.                 }
  918.                 if (ENABLE_CUBIC)
  919.                 {
  920.                         HTML_MESSAGE += "<button value="晶体状态" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list cubic cubic_Buffs 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">";
  921.                 }
  922.                 if (ENABLE_BUFF_SET)
  923.                 {
  924.                         HTML_MESSAGE += "<button value="状态设定" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list set Buff_Sets 1" width=200 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>";
  925.                 }
  926.                 HTML_MESSAGE += "<button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  927.                 return HTML_MESSAGE;
  928.         }
  929.        
  930.         private String viewAllBuffs(String type, String typeName, String page)
  931.         {
  932.                 List<String> buffList = new ArrayList<>();
  933.                 String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
  934.                 typeName = typeName.replace("_", " ");
  935.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  936.                 {
  937.                         final PreparedStatement getBuffCount;
  938.                         if (type.equals("set"))
  939.                         {
  940.                                 getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(0, 0) + ") AND canUse=1");
  941.                         }
  942.                         else
  943.                         {
  944.                                 getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType=?");
  945.                                 getBuffCount.setString(1, type);
  946.                         }
  947.                         ResultSet rss = getBuffCount.executeQuery();
  948.                         while (rss.next())
  949.                         {
  950.                                 String name = SkillTable.getInstance().getInfo(rss.getInt("buffId"), rss.getInt("buffLevel")).getName();
  951.                                 name = name.replace(" ", "+");
  952.                                 String usable = rss.getString("canUse");
  953.                                 String forClass = rss.getString("forClass");
  954.                                 String skill_id = rss.getString("buffId");
  955.                                 String skill_level = rss.getString("buffLevel");
  956.                                 buffList.add(name + "_" + forClass + "_" + page + "_" + usable + "_" + skill_id + "_" + skill_level);
  957.                         }
  958.                 }
  959.                 catch (SQLException e)
  960.                 {
  961.                         print(e);
  962.                 }
  963.                 Collections.sort(buffList);
  964.                
  965.                 HTML_MESSAGE += "<font color=LEVEL>[状态管理 - " + typeName + " - Page " + page + "]</font><br><table border=0><tr>";
  966.                 final int buffsPerPage;
  967.                 if (type.equals("set"))
  968.                 {
  969.                         buffsPerPage = 12;
  970.                 }
  971.                 else
  972.                 {
  973.                         buffsPerPage = 20;
  974.                 }
  975.                 final String width, pageName;
  976.                 int pc = ((buffList.size() - 1) / buffsPerPage) + 1;
  977.                 if (pc > 5)
  978.                 {
  979.                         width = "25";
  980.                         pageName = "P";
  981.                 }
  982.                 else
  983.                 {
  984.                         width = "50";
  985.                         pageName = "Page ";
  986.                 }
  987.                 typeName = typeName.replace(" ", "_");
  988.                 for (int ii = 1; ii <= pc; ++ii)
  989.                 {
  990.                         if (ii == Integer.parseInt(page))
  991.                         {
  992.                                 HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>";
  993.                         }
  994.                         else
  995.                         {
  996.                                 HTML_MESSAGE += "<td width=" + width + "><button value="" + pageName + "" + ii + "" action="bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list " + type + " " + typeName + " " + ii + "" width=" + width + " height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>";
  997.                         }
  998.                 }
  999.                 HTML_MESSAGE += "</tr></table><br>";
  1000.                
  1001.                 int limit = buffsPerPage * Integer.parseInt(page);
  1002.                 int start = limit - buffsPerPage;
  1003.                 int end = Math.min(limit, buffList.size());
  1004.                 for (int i = start; i < end; ++i)
  1005.                 {
  1006.                         String value = buffList.get(i);
  1007.                         value = value.replace("_", " ");
  1008.                         String[] extr = value.split(" ");
  1009.                         String name = extr[0];
  1010.                         name = name.replace("+", " ");
  1011.                         int forClass = Integer.parseInt(extr[1]);
  1012.                         int usable = Integer.parseInt(extr[3]);
  1013.                         String skillPos = extr[4] + "_" + extr[5];
  1014.                         if ((i % 2) != 0)
  1015.                         {
  1016.                                 HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
  1017.                         }
  1018.                         else
  1019.                         {
  1020.                                 HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
  1021.                         }
  1022.                         if (type.equals("set"))
  1023.                         {
  1024.                                 String listOrder = null;
  1025.                                 if (forClass == 0)
  1026.                                 {
  1027.                                         listOrder = "List="" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";" + SET_NONE + ";"";
  1028.                                 }
  1029.                                 else if (forClass == 1)
  1030.                                 {
  1031.                                         listOrder = "List="" + SET_MAGE + ";" + SET_FIGHTER + ";" + SET_ALL + ";" + SET_NONE + ";"";
  1032.                                 }
  1033.                                 else if (forClass == 2)
  1034.                                 {
  1035.                                         listOrder = "List="" + SET_ALL + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_NONE + ";"";
  1036.                                 }
  1037.                                 else if (forClass == 3)
  1038.                                 {
  1039.                                         listOrder = "List="" + SET_NONE + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";"";
  1040.                                 }
  1041.                                 HTML_MESSAGE += "<tr><td fixwidth=145>" + name + "</td><td width=70><combobox var="newSet" + i + "" width=70 " + listOrder + "></td>" + "<td width=50><button value="更新" action="bypass -h Quest " + QUEST_LOADING_INFO + " changeBuffSet " + skillPos + " $newSet" + i + " " + page + "" width=50 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>";
  1042.                         }
  1043.                         else
  1044.                         {
  1045.                                 HTML_MESSAGE += "<tr><td fixwidth=170>" + name + "</td><td width=80>";
  1046.                                 if (usable == 1)
  1047.                                 {
  1048.                                         HTML_MESSAGE += "<button value="通用" action="bypass -h Quest " + QUEST_LOADING_INFO + " editSelectedBuff " + skillPos + " 0-" + page + " " + type + "" width=80 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>";
  1049.                                 }
  1050.                                 else if (usable == 0)
  1051.                                 {
  1052.                                         HTML_MESSAGE += "<button value="禁用" action="bypass -h Quest " + QUEST_LOADING_INFO + " editSelectedBuff " + skillPos + " 1-" + page + " " + type + "" width=80 height=22 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>";
  1053.                                 }
  1054.                         }
  1055.                         HTML_MESSAGE += "</table>";
  1056.                 }
  1057.                 HTML_MESSAGE += "<br><br><button value="返回" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect manage_buffs 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<button value="首页" action="bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  1058.                 return HTML_MESSAGE;
  1059.         }
  1060.        
  1061.         private void manageSelectedBuff(String buffPosId, String canUseBuff)
  1062.         {
  1063.                 String[] bpid = buffPosId.split("_");
  1064.                 String bId = bpid[0];
  1065.                 String bLvl = bpid[1];
  1066.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1067.                 {
  1068.                         PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET canUse=? WHERE buffId=? AND buffLevel=? LIMIT 1");
  1069.                         upd.setString(1, canUseBuff);
  1070.                         upd.setString(2, bId);
  1071.                         upd.setString(3, bLvl);
  1072.                         upd.executeUpdate();
  1073.                         upd.close();
  1074.                 }
  1075.                 catch (SQLException e)
  1076.                 {
  1077.                         print(e);
  1078.                 }
  1079.         }
  1080.        
  1081.         private String manageSelectedSet(String id, String newVal, String opt3)
  1082.         {
  1083.                 String[] bpid = id.split("_");
  1084.                 String bId = bpid[0];
  1085.                 String bLvl = bpid[1];
  1086.                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1087.                 {
  1088.                         PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET forClass=? WHERE buffId=? AND bufflevel=?");
  1089.                         upd.setString(1, newVal);
  1090.                         upd.setString(2, bId);
  1091.                         upd.setString(3, bLvl);
  1092.                         upd.executeUpdate();
  1093.                         upd.close();
  1094.                 }
  1095.                 catch (SQLException e)
  1096.                 {
  1097.                         print(e);
  1098.                 }
  1099.                 return viewAllBuffs("set", "状态设定", opt3);
  1100.         }
  1101.        
  1102.         private void addTimeout(QuestState st, int gaugeColor, int amount, int offset)
  1103.         {
  1104.                 int endtime = (int) ((System.currentTimeMillis() + (amount * 1000)) / 1000);
  1105.                 st.set("blockUntilTime", String.valueOf(endtime));
  1106.                 st.getPlayer().sendPacket(new SetupGauge(gaugeColor, (amount * 1000) + offset));
  1107.         }
  1108.        
  1109.         private void heal(L2PcInstance player, boolean isPet)
  1110.         {
  1111.                 L2Summon target;
  1112.                 if (!isPet)
  1113.                 {
  1114.                         PcStatus pcStatus = player.getStatus();
  1115.                         PcStat pcStat = player.getStat();
  1116.                         pcStatus.setCurrentHp(pcStat.getMaxHp());
  1117.                         pcStatus.setCurrentMp(pcStat.getMaxMp());
  1118.                         pcStatus.setCurrentCp(pcStat.getMaxCp());
  1119.                 }
  1120.                 else if (/* isPet && */(target = player.getSummon()) != null)
  1121.                 {
  1122.                         SummonStatus petStatus = target.getStatus();
  1123.                         SummonStat petStat = target.getStat();
  1124.                         petStatus.setCurrentHp(petStat.getMaxHp());
  1125.                         petStatus.setCurrentMp(petStat.getMaxMp());
  1126.                         if (target instanceof L2PetInstance)
  1127.                         {
  1128.                                 L2PetInstance pet = (L2PetInstance) target;
  1129.                                 pet.setCurrentFed(pet.getMaxFed());
  1130.                                 player.sendPacket(new SetSummonRemainTime(pet.getMaxFed(), pet.getCurrentFed()));
  1131.                         }
  1132.                         else if (target instanceof L2ServitorInstance)
  1133.                         {
  1134.                                 L2ServitorInstance summon = (L2ServitorInstance) target;
  1135.                                 summon.decTimeRemaining(summon.getTimeRemaining() - summon.getTotalLifeTime());
  1136.                                 player.sendPacket(new SetSummonRemainTime(summon.getTotalLifeTime(), summon.getTimeRemaining()));
  1137.                         }
  1138.                         else if (DEBUG)
  1139.                         {
  1140.                                 throw new RuntimeException();
  1141.                         }
  1142.                 }
  1143.         }
  1144.        
  1145.         @Override
  1146.         public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  1147.         {
  1148.                 if (DEBUG)
  1149.                 {
  1150.                         System.out.println(getScriptName() + "#onAdvEvent('" + event + "'," + (npc == null ? "NULL" : npc.getId() + npc.getName()) + "," + (player == null ? "NULL" : player.getName()) + ")");
  1151.                 }
  1152.                 QuestState st = player.getQuestState(QUEST_LOADING_INFO);
  1153.                 String[] eventSplit = event.split(" ", 4);
  1154.                 if (eventSplit.length != 4)
  1155.                 {
  1156.                         player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
  1157.                         return null;
  1158.                 }
  1159.                 String eventParam0 = eventSplit[0];
  1160.                 String eventParam1 = eventSplit[1];
  1161.                 String eventParam2 = eventSplit[2];
  1162.                 String eventParam3 = eventSplit[3];
  1163.                
  1164.                 switch (eventParam0)
  1165.                 {
  1166.                         case "reloadscript":
  1167.                                 if (eventParam1.equals("1"))
  1168.                                 {
  1169.                                         return reloadConfig(st);
  1170.                                 }
  1171.                                 if (eventParam1.equals("0"))
  1172.                                 {
  1173.                                         return rebuildMainHtml(st);
  1174.                                 }
  1175.                                 if (DEBUG)
  1176.                                 {
  1177.                                         throw new RuntimeException();
  1178.                                 }
  1179.                                
  1180.                         case "redirect":
  1181.                                 switch (eventParam1)
  1182.                                 {
  1183.                                         case "main":
  1184.                                                 return rebuildMainHtml(st);
  1185.                                         case "manage_buffs":
  1186.                                                 return viewAllBuffTypes();
  1187.                                         case "view_buffs":
  1188.                                                 return buildHtml("buff");
  1189.                                         case "view_resists":
  1190.                                                 return buildHtml("resist");
  1191.                                         case "view_songs":
  1192.                                                 return buildHtml("song");
  1193.                                         case "view_dances":
  1194.                                                 return buildHtml("dance");
  1195.                                         case "view_chants":
  1196.                                                 return buildHtml("chant");
  1197.                                         case "view_others":
  1198.                                                 return buildHtml("others");
  1199.                                         case "view_special":
  1200.                                                 return buildHtml("special");
  1201.                                         case "view_cubic":
  1202.                                                 return buildHtml("cubic");
  1203.                                         default:
  1204.                                                 if (DEBUG)
  1205.                                                 {
  1206.                                                         throw new RuntimeException();
  1207.                                                 }
  1208.                                 }
  1209.                                
  1210.                         case "buffpet":
  1211.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1212.                                 {
  1213.                                         st.set("Pet-On-Off", eventParam1);
  1214.                                         if (TIME_OUT)
  1215.                                         {
  1216.                                                 addTimeout(st, 3, TIME_OUT_TIME / 2, 600);
  1217.                                         }
  1218.                                 }
  1219.                                 return rebuildMainHtml(st);
  1220.                                
  1221.                         case "create":
  1222.                         {
  1223.                                 String param = eventParam1.replaceAll("[ !" + """ + "#$%&'()*+,/:;<=>?@" + "\\[" + "\\\" + "\\]" + "\\^" + "`{|}~]", ""); // JOJO
  1224.                                 if ((param.length() == 0) || param.equals("no_name"))
  1225.                                 {
  1226.                                         player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
  1227.                                         return showText(st, "警告", "请输入正确的自定状态名称!", true, "返回", "main");
  1228.                                 }
  1229.                                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1230.                                 {
  1231.                                         PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_list (player_id,scheme_name) VALUES (?,?)");
  1232.                                         ins.setInt(1, player.getObjectId());
  1233.                                         ins.setString(2, param);
  1234.                                         ins.executeUpdate();
  1235.                                         ins.close();
  1236.                                 }
  1237.                                 catch (SQLException e)
  1238.                                 {
  1239.                                         print(e);
  1240.                                 }
  1241.                                 return rebuildMainHtml(st);
  1242.                         }
  1243.                        
  1244.                         case "delete":
  1245.                                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1246.                                 {
  1247.                                         PreparedStatement rem;
  1248.                                         rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_list WHERE id=? LIMIT 1");
  1249.                                         rem.setString(1, eventParam1);
  1250.                                         rem.executeUpdate();
  1251.                                         rem.close();
  1252.                                         rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=?");
  1253.                                         rem.setString(1, eventParam1);
  1254.                                         rem.executeUpdate();
  1255.                                         rem.close();
  1256.                                 }
  1257.                                 catch (SQLException e)
  1258.                                 {
  1259.                                         print(e);
  1260.                                 }
  1261.                                 return rebuildMainHtml(st);
  1262.                                
  1263.                         case "delete_c":
  1264.                                 return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>您真的想要删除 '" + eventParam2 + "' 这个自定状态么?<br><br>" + "<button value="是" action="bypass -h Quest " + QUEST_LOADING_INFO + " delete " + eventParam1 + " x x" width=50 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<button value="否" action="bypass -h Quest " + QUEST_LOADING_INFO + " delete_1 x x x" width=50 height=25 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>";
  1265.                                
  1266.                         case "create_1":
  1267.                                 return createScheme();
  1268.                         case "edit_1":
  1269.                                 return editScheme(player);
  1270.                         case "delete_1":
  1271.                                 return deleteScheme(player);
  1272.                         case "manage_scheme_1":
  1273.                                 return viewAllSchemeBuffs(eventParam1, eventParam2, "add");
  1274.                         case "manage_scheme_2":
  1275.                                 return viewAllSchemeBuffs(eventParam1, eventParam2, "remove");
  1276.                         case "manage_scheme_select":
  1277.                                 return getOptionList(eventParam1);
  1278.                                
  1279.                         case "remove_buff":
  1280.                         {
  1281.                                 String[] split = eventParam1.split("_");
  1282.                                 String scheme = split[0];
  1283.                                 String skill = split[1];
  1284.                                 String level = split[2];
  1285.                                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1286.                                 {
  1287.                                         PreparedStatement rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1");
  1288.                                         rem.setString(1, scheme);
  1289.                                         rem.setString(2, skill);
  1290.                                         rem.setString(3, level);
  1291.                                         rem.executeUpdate();
  1292.                                 }
  1293.                                 catch (SQLException e)
  1294.                                 {
  1295.                                         print(e);
  1296.                                 }
  1297.                                 int temp = Integer.parseInt(eventParam3) - 1;
  1298.                                 final String HTML;
  1299.                                 if (temp <= 0)
  1300.                                 {
  1301.                                         HTML = getOptionList(scheme);
  1302.                                 }
  1303.                                 else
  1304.                                 {
  1305.                                         HTML = viewAllSchemeBuffs(scheme, eventParam2, "remove");
  1306.                                 }
  1307.                                 return HTML;
  1308.                         }
  1309.                        
  1310.                         case "add_buff":
  1311.                         {
  1312.                                 String[] split = eventParam1.split("_");
  1313.                                 String scheme = split[0];
  1314.                                 String skill = split[1];
  1315.                                 String level = split[2];
  1316.                                 int idbuffclass = getClassBuff(skill);
  1317.                                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1318.                                 {
  1319.                                         PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_contents (scheme_id,skill_id,skill_level,buff_class) VALUES (?,?,?,?)");
  1320.                                         ins.setString(1, scheme);
  1321.                                         ins.setString(2, skill);
  1322.                                         ins.setString(3, level);
  1323.                                         ins.setInt(4, idbuffclass);
  1324.                                         ins.executeUpdate();
  1325.                                         ins.close();
  1326.                                 }
  1327.                                 catch (SQLException e)
  1328.                                 {
  1329.                                         print(e);
  1330.                                 }
  1331.                                 int temp = Integer.parseInt(eventParam3) + 1;
  1332.                                 final String HTML;
  1333.                                 if (temp >= (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES))
  1334.                                 {
  1335.                                         HTML = getOptionList(scheme);
  1336.                                 }
  1337.                                 else
  1338.                                 {
  1339.                                         HTML = viewAllSchemeBuffs(scheme, eventParam2, "add");
  1340.                                 }
  1341.                                 return HTML;
  1342.                         }
  1343.                        
  1344.                         case "edit_buff_list":
  1345.                                 return viewAllBuffs(eventParam1, eventParam2, eventParam3);
  1346.                                
  1347.                         case "changeBuffSet":
  1348.                                 if (eventParam2.equals(SET_FIGHTER))
  1349.                                 {
  1350.                                         eventParam2 = "0";
  1351.                                 }
  1352.                                 else if (eventParam2.equals(SET_MAGE))
  1353.                                 {
  1354.                                         eventParam2 = "1";
  1355.                                 }
  1356.                                 else if (eventParam2.equals(SET_ALL))
  1357.                                 {
  1358.                                         eventParam2 = "2";
  1359.                                 }
  1360.                                 else if (eventParam2.equals(SET_NONE))
  1361.                                 {
  1362.                                         eventParam2 = "3";
  1363.                                 }
  1364.                                 else if (DEBUG)
  1365.                                 {
  1366.                                         throw new RuntimeException();
  1367.                                 }
  1368.                                 return manageSelectedSet(eventParam1, eventParam2, eventParam3);
  1369.                                
  1370.                         case "editSelectedBuff":
  1371.                         {
  1372.                                 eventParam2 = eventParam2.replace("-", " ");
  1373.                                 String[] split = eventParam2.split(" ");
  1374.                                 String action = split[0];
  1375.                                 String page = split[1];
  1376.                                 manageSelectedBuff(eventParam1, action);
  1377.                                 final String typeName;
  1378.                                 switch (eventParam3)
  1379.                                 {
  1380.                                         case "buff":
  1381.                                                 typeName = "Buffs";
  1382.                                                 break;
  1383.                                         case "resist":
  1384.                                                 typeName = "Resists";
  1385.                                                 break;
  1386.                                         case "song":
  1387.                                                 typeName = "Songs";
  1388.                                                 break;
  1389.                                         case "dance":
  1390.                                                 typeName = "Dances";
  1391.                                                 break;
  1392.                                         case "chant":
  1393.                                                 typeName = "Chants";
  1394.                                                 break;
  1395.                                         case "others":
  1396.                                                 typeName = "Others_Buffs";
  1397.                                                 break;
  1398.                                         case "special":
  1399.                                                 typeName = "Special_Buffs";
  1400.                                                 break;
  1401.                                         case "cubic":
  1402.                                                 typeName = "Cubics";
  1403.                                                 break;
  1404.                                         default: /* if (DEBUG) */
  1405.                                                 throw new RuntimeException();
  1406.                                 }
  1407.                                 return viewAllBuffs(eventParam3, typeName, page);
  1408.                         }
  1409.                        
  1410.                         case "viewSelectedConfig":
  1411.                                 throw new RuntimeException();
  1412.                                
  1413.                         case "changeConfig":
  1414.                                 throw new RuntimeException();
  1415.                                
  1416.                         case "heal":
  1417.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1418.                                 {
  1419.                                         if (st.getQuestItemsCount(CONSUMABLE_ID) < HEAL_PRICE)
  1420.                                         {
  1421.                                                 return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + HEAL_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
  1422.                                         }
  1423.                                         final boolean getSummonbuff = isPetBuff(st);
  1424.                                         if (getSummonbuff)
  1425.                                         {
  1426.                                                 if (player.getSummon() != null)
  1427.                                                 {
  1428.                                                         heal(player, getSummonbuff);
  1429.                                                 }
  1430.                                                 else
  1431.                                                 {
  1432.                                                         return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出您的宠物再使用!", false, "Return", "main");
  1433.                                                 }
  1434.                                         }
  1435.                                         else
  1436.                                         {
  1437.                                                 heal(player, getSummonbuff);
  1438.                                         }
  1439.                                         st.takeItems(CONSUMABLE_ID, HEAL_PRICE);
  1440.                                         if (TIME_OUT)
  1441.                                         {
  1442.                                                 addTimeout(st, 1, TIME_OUT_TIME / 2, 600);
  1443.                                         }
  1444.                                 }
  1445.                                 return SMART_WINDOW ? null : rebuildMainHtml(st);
  1446.                                
  1447.                         case "removeBuffs":
  1448.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1449.                                 {
  1450.                                         if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_REMOVE_PRICE)
  1451.                                         {
  1452.                                                 return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + BUFF_REMOVE_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
  1453.                                         }
  1454.                                         final boolean getSummonbuff = isPetBuff(st);
  1455.                                         if (getSummonbuff)
  1456.                                         {
  1457.                                                 if (player.getSummon() != null)
  1458.                                                 {
  1459.                                                         player.getSummon().stopAllEffects();
  1460.                                                 }
  1461.                                                 else
  1462.                                                 {
  1463.                                                         return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再使用!", false, "Return", "main");
  1464.                                                 }
  1465.                                         }
  1466.                                         else
  1467.                                         {
  1468.                                                 player.stopAllEffects();
  1469.                                         }
  1470.                                         st.takeItems(CONSUMABLE_ID, BUFF_REMOVE_PRICE);
  1471.                                         if (TIME_OUT)
  1472.                                         {
  1473.                                                 addTimeout(st, 2, TIME_OUT_TIME / 2, 600);
  1474.                                         }
  1475.                                 }
  1476.                                 return SMART_WINDOW ? null : rebuildMainHtml(st);
  1477.                                
  1478.                         case "cast":
  1479.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1480.                                 {
  1481.                                         TIntArrayList buffs = new TIntArrayList();
  1482.                                         TIntArrayList levels = new TIntArrayList();
  1483.                                         try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1484.                                         {
  1485.                                                 PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY id");
  1486.                                                 rss.setString(1, eventParam1);
  1487.                                                 ResultSet action = rss.executeQuery();
  1488.                                                 while (action.next())
  1489.                                                 {
  1490.                                                         // enabled = 1;
  1491.                                                         int id = Integer.parseInt(action.getString("skill_id"));
  1492.                                                         int level = Integer.parseInt(action.getString("skill_level"));
  1493.                                                         switch (getBuffType(id))
  1494.                                                         {
  1495.                                                                 case "buff":
  1496.                                                                         if (ENABLE_BUFFS)
  1497.                                                                         {
  1498.                                                                                 if (isEnabled(id, level))
  1499.                                                                                 {
  1500.                                                                                         buffs.add(id);
  1501.                                                                                         levels.add(level);
  1502.                                                                                 }
  1503.                                                                         }
  1504.                                                                         break;
  1505.                                                                 case "resist":
  1506.                                                                         if (ENABLE_RESIST)
  1507.                                                                         {
  1508.                                                                                 if (isEnabled(id, level))
  1509.                                                                                 {
  1510.                                                                                         buffs.add(id);
  1511.                                                                                         levels.add(level);
  1512.                                                                                 }
  1513.                                                                         }
  1514.                                                                         break;
  1515.                                                                 case "song":
  1516.                                                                         if (ENABLE_SONGS)
  1517.                                                                         {
  1518.                                                                                 if (isEnabled(id, level))
  1519.                                                                                 {
  1520.                                                                                         buffs.add(id);
  1521.                                                                                         levels.add(level);
  1522.                                                                                 }
  1523.                                                                         }
  1524.                                                                         break;
  1525.                                                                 case "dance":
  1526.                                                                         if (ENABLE_DANCES)
  1527.                                                                         {
  1528.                                                                                 if (isEnabled(id, level))
  1529.                                                                                 {
  1530.                                                                                         buffs.add(id);
  1531.                                                                                         levels.add(level);
  1532.                                                                                 }
  1533.                                                                         }
  1534.                                                                         break;
  1535.                                                                 case "chant":
  1536.                                                                         if (ENABLE_CHANTS)
  1537.                                                                         {
  1538.                                                                                 if (isEnabled(id, level))
  1539.                                                                                 {
  1540.                                                                                         buffs.add(id);
  1541.                                                                                         levels.add(level);
  1542.                                                                                 }
  1543.                                                                         }
  1544.                                                                         break;
  1545.                                                                 case "others":
  1546.                                                                         if (ENABLE_OTHERS)
  1547.                                                                         {
  1548.                                                                                 if (isEnabled(id, level))
  1549.                                                                                 {
  1550.                                                                                         buffs.add(id);
  1551.                                                                                         levels.add(level);
  1552.                                                                                 }
  1553.                                                                         }
  1554.                                                                         break;
  1555.                                                                 case "special":
  1556.                                                                         if (ENABLE_SPECIAL)
  1557.                                                                         {
  1558.                                                                                 if (isEnabled(id, level))
  1559.                                                                                 {
  1560.                                                                                         buffs.add(id);
  1561.                                                                                         levels.add(level);
  1562.                                                                                 }
  1563.                                                                         }
  1564.                                                                         break;
  1565.                                                                 default:
  1566.                                                                         if (DEBUG)
  1567.                                                                         {
  1568.                                                                                 throw new RuntimeException();
  1569.                                                                         }
  1570.                                                         }
  1571.                                                 }
  1572.                                         }
  1573.                                        
  1574.                                         catch (SQLException e)
  1575.                                         {
  1576.                                                 print(e);
  1577.                                         }
  1578.                                        
  1579.                                         if (buffs.size() == 0)
  1580.                                         {
  1581.                                                 return viewAllSchemeBuffs(eventParam1, "1", "add");
  1582.                                         }
  1583.                                         if (!FREE_BUFFS)
  1584.                                         {
  1585.                                                 if (st.getQuestItemsCount(CONSUMABLE_ID) < SCHEME_BUFF_PRICE)
  1586.                                                 {
  1587.                                                         return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + SCHEME_BUFF_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
  1588.                                                 }
  1589.                                         }
  1590.                                        
  1591.                                         final boolean getSummonbuff = isPetBuff(st);
  1592.                                         for (int i = 0; i < buffs.size(); ++i)
  1593.                                         {
  1594.                                                 if (!getSummonbuff)
  1595.                                                 {
  1596.                                                         SkillTable.getInstance().getInfo(buffs.get(i), levels.get(i)).applyEffects(player, player);
  1597.                                                 }
  1598.                                                 else
  1599.                                                 {
  1600.                                                         if (player.getSummon() != null)
  1601.                                                         {
  1602.                                                         SkillTable.getInstance().getInfo(buffs.get(i), levels.get(i)).applyEffects(player, player);
  1603.                                                         }
  1604.                                                         else
  1605.                                                         {
  1606.                                                                 return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再召唤!", false, "Return", "main");
  1607.                                                         }
  1608.                                                 }
  1609.                                         }
  1610.                                         st.takeItems(CONSUMABLE_ID, SCHEME_BUFF_PRICE);
  1611.                                         if (TIME_OUT)
  1612.                                         {
  1613.                                                 addTimeout(st, 3, TIME_OUT_TIME, 600);
  1614.                                         }
  1615.                                 }
  1616.                                 return SMART_WINDOW ? null : rebuildMainHtml(st);
  1617.                                
  1618.                         case "giveBuffs":
  1619.                         {
  1620.                                 final int cost;
  1621.                                 switch (eventParam3)
  1622.                                 {
  1623.                                         case "buff":
  1624.                                                 cost = BUFF_PRICE;
  1625.                                                 break;
  1626.                                         case "resist":
  1627.                                                 cost = RESIST_PRICE;
  1628.                                                 break;
  1629.                                         case "song":
  1630.                                                 cost = SONG_PRICE;
  1631.                                                 break;
  1632.                                         case "dance":
  1633.                                                 cost = DANCE_PRICE;
  1634.                                                 break;
  1635.                                         case "chant":
  1636.                                                 cost = CHANT_PRICE;
  1637.                                                 break;
  1638.                                         case "others":
  1639.                                                 cost = OTHERS_PRICE;
  1640.                                                 break;
  1641.                                         case "special":
  1642.                                                 cost = SPECIAL_PRICE;
  1643.                                                 break;
  1644.                                         case "cubic":
  1645.                                                 cost = CUBIC_PRICE;
  1646.                                                 break;
  1647.                                         default:
  1648.                                                 throw new RuntimeException();
  1649.                                 }
  1650.                                
  1651.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1652.                                 {
  1653.                                         if (!FREE_BUFFS)
  1654.                                         {
  1655.                                                 if (st.getQuestItemsCount(CONSUMABLE_ID) < cost)
  1656.                                                 {
  1657.                                                         return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + cost + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
  1658.                                                 }
  1659.                                         }
  1660.                                         L2Skill skill = SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2));
  1661.                                         if (skill.getSkillType() == L2SkillType.SUMMON)
  1662.                                         {
  1663.                                                 if (st.getQuestItemsCount(skill.getItemConsumeId()) < skill.getItemConsume())
  1664.                                                 {
  1665.                                                         return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + skill.getItemConsume() + " " + getItemNameHtml(st, skill.getItemConsumeId()) + "!", false, "0", "0");
  1666.                                                 }
  1667.                                         }
  1668.                                         final boolean getSummonbuff = isPetBuff(st);
  1669.                                         if (!getSummonbuff)
  1670.                                         {
  1671.                                                 if (eventParam3.equals("cubic"))
  1672.                                                 {
  1673.                                                         if (player.getCubics() != null)
  1674.                                                         {




  1675.                                                         }
  1676.                                                         player.useMagic(SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false);
  1677.                                                 }
  1678.                                                 else
  1679.                                                 {
  1680.                                                         SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player, player);
  1681.                                                 }
  1682.                                         }
  1683.                                         else
  1684.                                         {
  1685.                                                 if (eventParam3.equals("cubic"))
  1686.                                                 {
  1687.                                                         if (player.getCubics() != null)
  1688.                                                         {




  1689.                                                         }
  1690.                                                         player.useMagic(SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false);
  1691.                                                 }
  1692.                                                 else
  1693.                                                 {
  1694.                                                         if (player.getSummon() != null)
  1695.                                                         {
  1696.                                                                 SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player, player);
  1697.                                                         }
  1698.                                                         else
  1699.                                                         {
  1700.                                                                 return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再使用!", false, "Return", "main");
  1701.                                                         }
  1702.                                                 }
  1703.                                         }
  1704.                                         st.takeItems(CONSUMABLE_ID, cost);
  1705.                                         if (TIME_OUT)
  1706.                                         {
  1707.                                                 addTimeout(st, 3, TIME_OUT_TIME / 10, 600);
  1708.                                         }
  1709.                                 }
  1710.                                 return SMART_WINDOW ? null : buildHtml(eventParam3);
  1711.                         }
  1712.                         case "castBuffSet":
  1713.                                 if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1714.                                 {
  1715.                                         if (!FREE_BUFFS)
  1716.                                         {
  1717.                                                 if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_SET_PRICE)
  1718.                                                 {
  1719.                                                         return showText(st, "对不起", "您没有足够道具:<br>您需要: <font color=LEVEL>" + BUFF_SET_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
  1720.                                                 }
  1721.                                         }
  1722.                                         List<int[]> buff_sets = new ArrayList<>();
  1723.                                         final int player_class;
  1724.                                         if (player.isMageClass())
  1725.                                         {
  1726.                                                 player_class = 1;
  1727.                                         }
  1728.                                         else
  1729.                                         {
  1730.                                                 player_class = 0;
  1731.                                         }
  1732.                                         final boolean getSummonbuff = isPetBuff(st);
  1733.                                         if (!getSummonbuff)
  1734.                                         {
  1735.                                                 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1736.                                                 {
  1737.                                                         PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC");
  1738.                                                         getSimilarNameCount.setInt(1, player_class);
  1739.                                                         getSimilarNameCount.setString(2, "2");
  1740.                                                         ResultSet rss = getSimilarNameCount.executeQuery();
  1741.                                                         while (rss.next())
  1742.                                                         {
  1743.                                                                 int id = rss.getInt("buffId");
  1744.                                                                 int lvl = rss.getInt("buffLevel");
  1745.                                                                 buff_sets.add(new int[]
  1746.                                                                 {
  1747.                                                                         id,
  1748.                                                                         lvl
  1749.                                                                 });
  1750.                                                         }
  1751.                                                 }
  1752.                                                 catch (SQLException e)
  1753.                                                 {
  1754.                                                         print(e);
  1755.                                                 }
  1756.                                                 for (int[] i : buff_sets)
  1757.                                                 {
  1758.                                                         SkillTable.getInstance().getInfo(i[0], i[1]).applyEffects(player, player);
  1759.                                                 }
  1760.                                         }
  1761.                                         else
  1762.                                         {
  1763.                                                 if (player.getSummon() != null)
  1764.                                                 {
  1765.                                                         try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1766.                                                         {
  1767.                                                                 PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC");
  1768.                                                                 getSimilarNameCount.setString(1, "0");
  1769.                                                                 getSimilarNameCount.setString(2, "2");
  1770.                                                                 ResultSet rss = getSimilarNameCount.executeQuery();
  1771.                                                                 while (rss.next())
  1772.                                                                 {
  1773.                                                                         int id = rss.getInt("buffId");
  1774.                                                                         int lvl = rss.getInt("buffLevel");
  1775.                                                                         buff_sets.add(new int[]
  1776.                                                                         {
  1777.                                                                                 id,
  1778.                                                                                 lvl
  1779.                                                                         });
  1780.                                                                 }
  1781.                                                         }
  1782.                                                         catch (SQLException e)
  1783.                                                         {
  1784.                                                                 print(e);
  1785.                                                         }
  1786.                                                         for (int[] i : buff_sets)
  1787.                                                         {
  1788.                                                                 SkillTable.getInstance().getInfo(i[0], i[1]).applyEffects(player.getSummon(), player.getSummon());
  1789.                                                         }
  1790.                                                 }
  1791.                                                 else
  1792.                                                 {
  1793.                                                         return showText(st, "警告", "您不能使用宠物状态<br>请先召唤出宠物再使用!", false, "Return", "main");
  1794.                                                 }
  1795.                                         }
  1796.                                         st.takeItems(CONSUMABLE_ID, BUFF_SET_PRICE);
  1797.                                         if (TIME_OUT)
  1798.                                         {
  1799.                                                 addTimeout(st, 3, TIME_OUT_TIME, 600);
  1800.                                         }
  1801.                                 }
  1802.                                 return SMART_WINDOW ? null : rebuildMainHtml(st);
  1803.                                
  1804.                 }
  1805.                 return rebuildMainHtml(st);
  1806.         }
  1807.        
  1808.         @Override
  1809.         public String onFirstTalk(L2Npc npc, L2PcInstance player)
  1810.         {
  1811.                 QuestState st = player.getQuestState(QUEST_LOADING_INFO);
  1812.                 if (st == null)
  1813.                 {
  1814.                         st = newQuestState(player);
  1815.                 }
  1816.                 if (player.isGM())
  1817.                 {
  1818.                         if (SCRIPT_RELOAD)
  1819.                         {
  1820.                                 return reloadPanel(st);
  1821.                         }
  1822.                         return rebuildMainHtml(st);
  1823.                 }
  1824.                 else if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
  1825.                 {
  1826.                         {

  1827.                          if (OlympiadManager.getInstance().isRegistered(player))
  1828.                                 {
  1829.                                         return showText(st, "警告", "您不能加状态,因为您在 <font color=FF0000>奥赛!</font><br>当您结束奥赛的时候,<br>再来找我加吧.", false, "Return", "main");
  1830.                                 }
  1831.                                 else if (TvTEvent.isPlayerParticipant(player.getObjectId()))
  1832.                                 {
  1833.                                         return showText(st, "警告", "您不能加状态,因为您在 <font color="FF0000">TvT活动!</font><br>当您结束TvT活动的时候,<br>再来找我加吧", false, "Return", "main");
  1834.                                 }
  1835.                                 else if (player.getLevel() < MIN_LEVEL)
  1836.                                 {
  1837.                                         return showText(st, "警告", "您等级太低了!<br>您的等级只要要在 <font color=LEVEL>" + MIN_LEVEL + "</font>,<br>才可以在我这里加状态!", false, "Return", "main");
  1838.                                 }
  1839.                                 else if (player.getPvpFlag() > 0)
  1840.                                 {
  1841.                                         return showText(st, "警告", "您不能加状态,因为您在 <font color=800080>延迟中!</font><br>稍后请重试!", false, "Return", "main");
  1842.                                 }
  1843.                                 else if (player.isInCombat())
  1844.                                 {
  1845.                                         return showText(st, "警告", "您不能加状态,因为您在战斗中!<br>停止攻击后重试!", false, "Return", "main");
  1846.                                 }
  1847.                                 else
  1848.                                 {
  1849.                                         return rebuildMainHtml(st);
  1850.                                 }
  1851.                         }
  1852.                 }
  1853.                 else
  1854.                 {
  1855.                         return showText(st, "对不起", "您需要稍等一会!<br>如果您想使用我的状态!", false, "Return", "main");
  1856.                 }
  1857.         }
  1858.        
  1859.         @Override
  1860.         public boolean showResult(L2PcInstance player, String res)
  1861.         {
  1862.                 if (SMART_WINDOW)
  1863.                 {
  1864.                         if ((player != null) && (res != null) && res.startsWith("<html>"))
  1865.                         {
  1866.                                 NpcHtmlMessage npcReply = new NpcHtmlMessage(5, 1); /* ! */
  1867.                                 npcReply.setHtml(res);
  1868.                                 player.sendPacket(npcReply);
  1869.                                 player.sendPacket(ActionFailed.STATIC_PACKET);
  1870.                                 return false;
  1871.                         }
  1872.                 }
  1873.                 return super.showResult(player, res);
  1874.         }
  1875.        
  1876.         private String getSkillIconHtml(int id, int level)
  1877.         {
  1878.                 String iconNumber = getSkillIconNumber(id, level);
  1879.                 return "<button action="bypass -h Quest " + QUEST_LOADING_INFO + " description " + id + " " + level + " x" width=32 height=32 back="Icon.skill" + iconNumber + "" fore="Icon.skill" + iconNumber + "">";
  1880.         }
  1881.        
  1882.         private String getSkillIconNumber(int id, int level)
  1883.         {
  1884.                 String formato;
  1885.                 if (id == 4)
  1886.                 {
  1887.                         formato = "0004";
  1888.                 }
  1889.                 else if ((id > 9) && (id < 100))
  1890.                 {
  1891.                         formato = "00" + id;
  1892.                 }
  1893.                 else if ((id > 99) && (id < 1000))
  1894.                 {
  1895.                         formato = "0" + id;
  1896.                 }
  1897.                 else if (id == 1517)
  1898.                 {
  1899.                         formato = "1536";
  1900.                 }
  1901.                 else if (id == 1518)
  1902.                 {
  1903.                         formato = "1537";
  1904.                 }
  1905.                 else if (id == 1547)
  1906.                 {
  1907.                         formato = "0065";
  1908.                 }
  1909.                 else if (id == 2076)
  1910.                 {
  1911.                         formato = "0195";
  1912.                 }
  1913.                 else if ((id > 4550) && (id < 4555))
  1914.                 {
  1915.                         formato = "5739";
  1916.                 }
  1917.                 else if ((id > 4698) && (id < 4701))
  1918.                 {
  1919.                         formato = "1331";
  1920.                 }
  1921.                 else if ((id > 4701) && (id < 4704))
  1922.                 {
  1923.                         formato = "1332";
  1924.                 }
  1925.                 else if (id == 6049)
  1926.                 {
  1927.                         formato = "0094";
  1928.                 }
  1929.                 else
  1930.                 {
  1931.                         formato = String.valueOf(id);
  1932.                 }
  1933.                 return formato;
  1934.         }
  1935.        
  1936.         static public void main(String[] args)
  1937.         {
  1938.                 new NpcBuffer(-1, QUEST_LOADING_INFO, "custom");
  1939.                 System.out.println("INFO Custom Buffer Load Success");               
  1940.         }
  1941. }
复制代码



回复

使用道具 举报

  • 打卡等级:尐席琳
  • 打卡总天数:293
  • 打卡月天数:0
  • 打卡总奖励:4216
 楼主| 发表于 2021-5-15 08:56:58 | 显示全部楼层
l2fater 发表于 2021-5-14 21:27
l2jtw的么?
L2JTW的源码好像没有给宠物加的这个内核!~
需要自己加scriptsscripts.cfg里添加

谢谢大佬 这对我来说有点难!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

全国统一客服电话
400-1234-7788

24x7小时免费咨询

  • 官方在线客服

    QQ客服:杀气丶

    点击交谈
  • 上海市虹口区海伦中心B座4F4055-4056室

  • 手机扫码查看公众号

    手机查找资源更方便

  • 扫一扫官方微信公众号

    关注官方微信公众号

血玫瑰游戏社区制作( 吉ICP备2022002542号 )营业执照|网站地图