打卡等级:殷海萨
打卡总天数:765
打卡月天数:17
打卡总奖励:5193
发表于 2021-5-14 21:27:38
|
显示全部楼层
l2jtw的么?
L2JTW的源码好像没有给宠物加的这个内核!~
需要自己加scriptsscripts.cfg里添加
data\scripts\custom\NpcBuffer.java
以及
data\scripts\custom里面新增NpcBuffer.java这个文件
下面这个npcbuffer的java 可能需要修改部分数据才能使用!~
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package custom.NpcBuffer;
import static com.l2jserver.gameserver.util.Util.formatAdena;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.instancemanager.QuestManager;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
import com.l2jserver.gameserver.model.actor.stat.PcStat;
import com.l2jserver.gameserver.model.actor.stat.SummonStat;
import com.l2jserver.gameserver.model.actor.status.PcStatus;
import com.l2jserver.gameserver.model.actor.status.SummonStatus;
import com.l2jserver.gameserver.model.entity.TvTEvent;
import com.l2jserver.gameserver.model.items.L2Item;
import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.skills.L2Skill;
import com.l2jserver.gameserver.model.skills.L2SkillType;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.SetSummonRemainTime;
import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
import gnu.trove.list.array.TIntArrayList;
/**
* @autor: Rin4a and ????
* @Adapted by JMD for L2JServer.com
*/
public class NpcBuffer extends Quest
{
private static final boolean DEBUG = false;
private static void print(Exception e)
{
_log.warning(">>>" + e.toString() + "<<<");
if (DEBUG)
{
e.printStackTrace();
}
}
private static final String QUEST_LOADING_INFO = "NpcBuffer";
private static final int NPC_ID = 1000003;
private static final String TITLE_NAME = "血玫瑰天堂II状态师";
private static final boolean SCRIPT_RELOAD = true;
private static final boolean SMART_WINDOW = true;
// private static final int VIP_ACCESS_LEVEL = Config.NpcBuffer_VIP_ALV;
private static final boolean ENABLE_BUFF_SECTION = true;
private static final boolean ENABLE_SCHEME_SYSTEM = true;
private static final boolean ENABLE_HEAL = true;
private static final boolean ENABLE_BUFFS = true;
private static final boolean ENABLE_RESIST = true;
private static final boolean ENABLE_SONGS = true;
private static final boolean ENABLE_DANCES = true;
private static final boolean ENABLE_CHANTS = true;
private static final boolean ENABLE_OTHERS = true;
private static final boolean ENABLE_SPECIAL = true;
private static final boolean ENABLE_CUBIC = false;
private static final boolean ENABLE_BUFF_REMOVE = true;
private static final boolean ENABLE_BUFF_SET = true;
private static final boolean FREE_BUFFS = true;
private static final boolean TIME_OUT = true;
private static final int TIME_OUT_TIME = 0;
private static final int MIN_LEVEL = 1;
private static final int BUFF_REMOVE_PRICE = 10000;
private static final int HEAL_PRICE = 10000;
private static final int BUFF_PRICE = 10000;
private static final int RESIST_PRICE = 10000;
private static final int SONG_PRICE = 10000;
private static final int DANCE_PRICE = 10000;
private static final int CHANT_PRICE = 10000;
private static final int OTHERS_PRICE = 10000;
private static final int SPECIAL_PRICE = 10000;
private static final int CUBIC_PRICE = 10000;
private static final int BUFF_SET_PRICE = 10000;
private static final int SCHEME_BUFF_PRICE = 10000;
private static final int SCHEMES_PER_PLAYER = 4;
private static final int CONSUMABLE_ID = 57;
private static final int MAX_SCHEME_BUFFS = Config.BUFFS_MAX_AMOUNT;
private static final int MAX_SCHEME_DANCES = Config.DANCES_MAX_AMOUNT;
private static final String SET_FIGHTER = "战士";
private static final String SET_MAGE = "魔法";
private static final String SET_ALL = "全部";
private static final String SET_NONE = "不使用";
private String rebuildMainHtml(QuestState st)
{
String MAIN_HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center>";
String MESSAGE = "";
int td = 0;
String[] TRS =
{
"<tr><td height=25>",
"</td>",
"<td height=25>",
"</td></tr>"
};
MAIN_HTML_MESSAGE += "<table border=0 cellpadding=0 cellspacing=0>";
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>";
MAIN_HTML_MESSAGE += "</table>";
final String bottonA, bottonB, bottonC;
if (st.getInt("Pet-On-Off") == 1)
{
bottonA = "自动宠物状态";
bottonB = "一键治愈宠物";
bottonC = "清除宠物状态";
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">";
}
else
{
bottonA = "自动状态";
bottonB = "一键治愈";
bottonC = "一键清除";
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">";
}
if (ENABLE_BUFF_SECTION)
{
if (ENABLE_BUFFS)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_RESIST)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_SONGS)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_DANCES)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_CHANTS)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_SPECIAL)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_OTHERS)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
}
if (ENABLE_CUBIC)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (MESSAGE.length() > 0)
{
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>";
MESSAGE = "";
td = 0;
}
if (ENABLE_BUFF_SET)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_HEAL)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (ENABLE_BUFF_REMOVE)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (MESSAGE.length() > 0)
{
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>";
MESSAGE = "";
td = 0;
}
if (ENABLE_SCHEME_SYSTEM)
{
MAIN_HTML_MESSAGE += generateScheme(st);
}
if (st.getPlayer().isGM())
{
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">";
}
MAIN_HTML_MESSAGE += "<br><font color=303030>" + TITLE_NAME + "</font>" + "</center></body></html>";
return MAIN_HTML_MESSAGE;
}
private String generateScheme(QuestState st)
{
List<String> schemeName = new ArrayList<>();
List<String> schemeId = new ArrayList<>();
String HTML = "";
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
rss.setInt(1, st.getPlayer().getObjectId());
ResultSet action = rss.executeQuery();
while (action.next())
{
schemeName.add(action.getString("scheme_name"));
schemeId.add(action.getString("id"));
}
}
catch (SQLException e)
{
print(e);
}
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>";
if (schemeName.size() > 0)
{
String MESSAGE = "";
int td = 0;
String[] TRS =
{
"<tr><td>",
"</td>",
"<td>",
"</td></tr>"
};
for (int i = 0; i < schemeName.size(); ++i)
{
if (td > 2)
{
td = 0;
}
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];
td += 2;
}
if (MESSAGE.length() > 0)
{
HTML += "<table>" + MESSAGE + "</table>";
}
}
if (schemeName.size() < SCHEMES_PER_PLAYER)
{
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>";
}
else
{
HTML += "<BR1><table width=100><tr>";
}
if (schemeName.size() > 0)
{
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>";
}
else
{
HTML += "</tr></table>";
}
return HTML;
}
private String reloadPanel(QuestState st)
{
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>";
}
private String getItemNameHtml(QuestState st, int itemval)
{
return "&#" + itemval + ";";
// return ItemTable.getInstance().getTemplate(itemval) != null ? "&#" + itemval + ";" : "No Name";
}
@SuppressWarnings("unused")
private String getItemName(QuestState st, int itemval)
{
L2Item t = ItemTable.getInstance().getTemplate(itemval);
return t != null ? t.getName() : "No Name";
}
private int getBuffCount(String scheme)
{
int count = 0;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?");
rss.setString(1, scheme);
ResultSet action = rss.executeQuery();
while (action.next())
{
++count;
}
}
// catch (SQLException e) { count = 0; } //TODO:
catch (SQLException e)
{
print(e);
}
return count;
}
private String getBuffType(int id)
{
String val = "none";
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement act = con.prepareStatement("SELECT buffType FROM npcbuffer_buff_list WHERE buffId=? LIMIT 1");
act.setInt(1, id);
ResultSet rs = act.executeQuery();
if (rs.next())
{
val = rs.getString("buffType");
}
}
catch (SQLException e)
{
print(e);
}
return val;
}
private boolean isEnabled(int id, int level)
{
boolean val = false;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement act = con.prepareStatement("SELECT canUse FROM npcbuffer_buff_list WHERE buffId=? AND buffLevel=? LIMIT 1");
act.setInt(1, id);
act.setInt(2, level);
ResultSet rs = act.executeQuery();
if (rs.next())
{
if ("1".equals(rs.getString("canUse")))
{
val = true;
}
}
}
catch (SQLException e)
{
print(e);
}
return val;
}
private boolean isUsed(String scheme, int id, int level)
{
boolean used = false;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT id FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1");
rss.setString(1, scheme);
rss.setInt(2, id);
rss.setInt(3, level);
ResultSet action = rss.executeQuery();
if (action.next())
{
used = true;
}
}
// catch (SQLException e) { count = 0; } //TODO:
catch (SQLException e)
{
print(e);
}
return used;
}
private int getClassBuff(String id)
{
int val = 0;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement getTipo = con.prepareStatement("SELECT buff_class FROM npcbuffer_buff_list WHERE buffId=?");
getTipo.setString(1, id);
ResultSet gt = getTipo.executeQuery();
if (gt.next())
{
val = gt.getInt("buff_class");
}
}
catch (SQLException e)
{
print(e);
}
return val;
}
private String showText(QuestState st, String type, String text, boolean buttonEnabled, String buttonName, String location)
{
String MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
MESSAGE += "<font color=LEVEL>" + type + "</font><br>" + text + "<br>";
if (buttonEnabled)
{
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">";
}
MESSAGE += "<font color=303030>" + TITLE_NAME + "</font></center></body></html>";
st.playSound("ItemSound3.sys_shortage");
return MESSAGE;
}
private String reloadConfig(QuestState st)
{
try
{
if (QuestManager.getInstance().reload(QUEST_LOADING_INFO))
{
st.getPlayer().sendMessage("状态师脚本和设定重载成功.");
}
else
{
st.getPlayer().sendMessage("状态师脚本重载失败,请修改错误后重启GS");
}
}
catch (Exception e)
{
st.getPlayer().sendMessage("状态师脚本重载失败,请修改错误后重启GS");
print(e);
}
return rebuildMainHtml(st);
}
private NpcBuffer(int id, String name, String descr)
{
super(id, name, descr);
addStartNpc(NPC_ID);
addFirstTalkId(NPC_ID);
addTalkId(NPC_ID);
}
private boolean isPetBuff(QuestState st)
{
return st.getInt("Pet-On-Off") != 0;
}
private String createScheme()
{
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>";
}
private String deleteScheme(L2PcInstance player)
{
String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>删除自定状态:<br><br>";
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
rss.setInt(1, player.getObjectId());
ResultSet action = rss.executeQuery();
while (action.next())
{
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">";
}
}
catch (SQLException e)
{
print(e);
}
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>";
return HTML;
}
private String editScheme(L2PcInstance player)
{
String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>选择您想要管理的状态:<br><br>";
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?");
rss.setInt(1, player.getObjectId());
ResultSet action = rss.executeQuery();
while (action.next())
{
String name = action.getString("scheme_name");
String id = action.getString("id");
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">";
}
}
catch (SQLException e)
{
print(e);
}
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>";
return HTML;
}
private String getOptionList(String scheme)
{
int bcount = getBuffCount(scheme);
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>";
if (bcount < (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES))
{
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">";
}
if (bcount > 0)
{
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">";
}
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>";
return HTML;
}
private String buildHtml(String buffType)
{
String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>";
List<String> availableBuffs = new ArrayList<>();
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement getList = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE buffType="" + buffType + "" AND canUse=1 ORDER BY Buff_Class ASC, id");
ResultSet rs = getList.executeQuery();
while (rs.next())
{
// try :
int bId = rs.getInt("buffId");
int bLevel = rs.getInt("buffLevel");
String bName = SkillTable.getInstance().getInfo(bId, bLevel).getName();
bName = bName.replace(" ", "+");
availableBuffs.add(bName + "_" + bId + "_" + bLevel);
}
}
catch (SQLException e)
{
print(e);
}
if (availableBuffs.size() == 0)
{
HTML_MESSAGE += "No buffs are available at this moment!";
}
else
{
if (FREE_BUFFS)
{
HTML_MESSAGE += "所有的状态都是 <font color=LEVEL>免费</font>!";
}
else
{
int price = 0;
switch (buffType)
{
case "buff":
price = BUFF_PRICE;
break;
case "resist":
price = RESIST_PRICE;
break;
case "song":
price = SONG_PRICE;
break;
case "dance":
price = DANCE_PRICE;
break;
case "chant":
price = CHANT_PRICE;
break;
case "others":
price = OTHERS_PRICE;
break;
case "special":
price = SPECIAL_PRICE;
break;
case "cubic":
price = CUBIC_PRICE;
break;
default:
if (DEBUG)
{
throw new RuntimeException();
}
}
HTML_MESSAGE += "所有的特殊状态小号 <font color=LEVEL>" + formatAdena(price) + "</font> 金币!";
}
HTML_MESSAGE += "<BR1><table>";
for (String buff : availableBuffs)
{
buff = buff.replace("_", " ");
String[] buffSplit = buff.split(" ");
String name = buffSplit[0];
int id = Integer.parseInt(buffSplit[1]);
int level = Integer.parseInt(buffSplit[2]);
name = name.replace("+", " ");
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>";
}
HTML_MESSAGE += "</table>";
}
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>";
return HTML_MESSAGE;
}
private String generateQuery(int case1, int case2)
{
StringBuilder qry = new StringBuilder();
if (ENABLE_BUFFS)
{
if (case1 < MAX_SCHEME_BUFFS)
{
qry.append(","buff"");
}
}
if (ENABLE_RESIST)
{
if (case1 < MAX_SCHEME_BUFFS)
{
qry.append(","resist"");
}
}
if (ENABLE_SONGS)
{
if (case2 < MAX_SCHEME_DANCES)
{
qry.append(","song"");
}
}
if (ENABLE_DANCES)
{
if (case2 < MAX_SCHEME_DANCES)
{
qry.append(","dance"");
}
}
if (ENABLE_CHANTS)
{
if (case1 < MAX_SCHEME_BUFFS)
{
qry.append(","chant"");
}
}
if (ENABLE_OTHERS)
{
if (case1 < MAX_SCHEME_BUFFS)
{
qry.append(","others"");
}
}
if (ENABLE_SPECIAL)
{
if (case1 < MAX_SCHEME_BUFFS)
{
qry.append(","special"");
}
}
if (qry.length() > 0)
{
qry.deleteCharAt(0);
}
return qry.toString();
}
private String viewAllSchemeBuffs$getBuffCount(String scheme)
{
int count = 0;
int D_S_Count = 0;
int B_Count = 0;
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?");
rss.setString(1, scheme);
ResultSet action = rss.executeQuery();
while (action.next())
{
++count;
int val = action.getInt("buff_class");
if ((val == 1) || (val == 2))
{
++D_S_Count;
}
else
{
++B_Count;
}
}
}
catch (SQLException e)
{
print(e);
}
String res = count + " " + B_Count + " " + D_S_Count;
return res;
}
private String viewAllSchemeBuffs(String scheme, String page, String action)
{
List<String> buffList = new ArrayList<>();
String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>";
String[] eventSplit = viewAllSchemeBuffs$getBuffCount(scheme).split(" ");
int TOTAL_BUFF = Integer.parseInt(eventSplit[0]);
int BUFF_COUNT = Integer.parseInt(eventSplit[1]);
int DANCE_SONG = Integer.parseInt(eventSplit[2]);
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
if (action.equals("add"))
{
HTML_MESSAGE += "您可以增加 <font color=LEVEL>" + (MAX_SCHEME_BUFFS - BUFF_COUNT) + "</font> 个一般状态和 <font color=LEVEL>" + (MAX_SCHEME_DANCES - DANCE_SONG) + "</font> 个舞蹈诗歌!";
String QUERY = "SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(BUFF_COUNT, DANCE_SONG) + ") AND canUse=1 ORDER BY Buff_Class ASC, id";
PreparedStatement getBuffCount = con.prepareStatement(QUERY);
ResultSet rss = getBuffCount.executeQuery();
while (rss.next())
{
String name = SkillTable.getInstance().getInfo(rss.getInt("buffId"), rss.getInt("buffLevel")).getName();
name = name.replace(" ", "+");
buffList.add(name + "_" + rss.getInt("buffId") + "_" + rss.getInt("buffLevel"));
}
}
else if (action.equals("remove"))
{
HTML_MESSAGE += "您有 <font color=LEVEL>" + BUFF_COUNT + "</font> 个状态和 <font color=LEVEL>" + DANCE_SONG + "</font> 个舞蹈诗歌";
String QUERY = "SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY Buff_Class ASC, id";
PreparedStatement getBuffCount = con.prepareStatement(QUERY);
getBuffCount.setString(1, scheme);
ResultSet rss = getBuffCount.executeQuery();
while (rss.next())
{
String name = SkillTable.getInstance().getInfo(rss.getInt("skill_id"), rss.getInt("skill_level")).getName();
name = name.replace(" ", "+");
buffList.add(name + "_" + rss.getInt("skill_id") + "_" + rss.getInt("skill_level"));
}
}
else if (DEBUG)
{
throw new RuntimeException();
}
}
catch (SQLException e)
{
print(e);
}
HTML_MESSAGE += "<BR1><table border=0><tr>";
final int buffsPerPage = 20;
final String width, pageName;
int pc = ((buffList.size() - 1) / buffsPerPage) + 1;
if (pc > 5)
{
width = "25";
pageName = "P";
}
else
{
width = "50";
pageName = "页 ";
}
for (int ii = 1; ii <= pc; ++ii)
{
if (ii == Integer.parseInt(page))
{
HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>";
}
else if (action.equals("add"))
{
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>";
}
else if (action.equals("remove"))
{
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>";
}
else if (DEBUG)
{
throw new RuntimeException();
}
}
HTML_MESSAGE += "</tr></table>";
int limit = buffsPerPage * Integer.parseInt(page);
int start = limit - buffsPerPage;
int end = Math.min(limit, buffList.size());
int k = 0;
for (int i = start; i < end; ++i)
{
String value = buffList.get(i);
value = value.replace("_", " ");
String[] extr = value.split(" ");
String name = extr[0];
name = name.replace("+", " ");
int id = Integer.parseInt(extr[1]);
int level = Integer.parseInt(extr[2]);
if (action.equals("add"))
{
if (!isUsed(scheme, id, level))
{
if ((k % 2) != 0)
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
}
else
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
}
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>";
k += 1;
}
}
else if (action.equals("remove"))
{
if ((k % 2) != 0)
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
}
else
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
}
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>";
k += 1;
}
}
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>";
return HTML_MESSAGE;
}
private String viewAllBuffTypes()
{
String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
HTML_MESSAGE += "<font color=LEVEL>[状态管理]</font><br>";
if (ENABLE_BUFFS)
{
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">";
}
if (ENABLE_RESIST)
{
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">";
}
if (ENABLE_SONGS)
{
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">";
}
if (ENABLE_DANCES)
{
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">";
}
if (ENABLE_CHANTS)
{
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">";
}
if (ENABLE_SPECIAL)
{
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">";
}
if (ENABLE_OTHERS)
{
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">";
}
if (ENABLE_CUBIC)
{
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">";
}
if (ENABLE_BUFF_SET)
{
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>";
}
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>";
return HTML_MESSAGE;
}
private String viewAllBuffs(String type, String typeName, String page)
{
List<String> buffList = new ArrayList<>();
String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br>";
typeName = typeName.replace("_", " ");
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
final PreparedStatement getBuffCount;
if (type.equals("set"))
{
getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(0, 0) + ") AND canUse=1");
}
else
{
getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType=?");
getBuffCount.setString(1, type);
}
ResultSet rss = getBuffCount.executeQuery();
while (rss.next())
{
String name = SkillTable.getInstance().getInfo(rss.getInt("buffId"), rss.getInt("buffLevel")).getName();
name = name.replace(" ", "+");
String usable = rss.getString("canUse");
String forClass = rss.getString("forClass");
String skill_id = rss.getString("buffId");
String skill_level = rss.getString("buffLevel");
buffList.add(name + "_" + forClass + "_" + page + "_" + usable + "_" + skill_id + "_" + skill_level);
}
}
catch (SQLException e)
{
print(e);
}
Collections.sort(buffList);
HTML_MESSAGE += "<font color=LEVEL>[状态管理 - " + typeName + " - Page " + page + "]</font><br><table border=0><tr>";
final int buffsPerPage;
if (type.equals("set"))
{
buffsPerPage = 12;
}
else
{
buffsPerPage = 20;
}
final String width, pageName;
int pc = ((buffList.size() - 1) / buffsPerPage) + 1;
if (pc > 5)
{
width = "25";
pageName = "P";
}
else
{
width = "50";
pageName = "Page ";
}
typeName = typeName.replace(" ", "_");
for (int ii = 1; ii <= pc; ++ii)
{
if (ii == Integer.parseInt(page))
{
HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>";
}
else
{
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>";
}
}
HTML_MESSAGE += "</tr></table><br>";
int limit = buffsPerPage * Integer.parseInt(page);
int start = limit - buffsPerPage;
int end = Math.min(limit, buffList.size());
for (int i = start; i < end; ++i)
{
String value = buffList.get(i);
value = value.replace("_", " ");
String[] extr = value.split(" ");
String name = extr[0];
name = name.replace("+", " ");
int forClass = Integer.parseInt(extr[1]);
int usable = Integer.parseInt(extr[3]);
String skillPos = extr[4] + "_" + extr[5];
if ((i % 2) != 0)
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>";
}
else
{
HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>";
}
if (type.equals("set"))
{
String listOrder = null;
if (forClass == 0)
{
listOrder = "List="" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";" + SET_NONE + ";"";
}
else if (forClass == 1)
{
listOrder = "List="" + SET_MAGE + ";" + SET_FIGHTER + ";" + SET_ALL + ";" + SET_NONE + ";"";
}
else if (forClass == 2)
{
listOrder = "List="" + SET_ALL + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_NONE + ";"";
}
else if (forClass == 3)
{
listOrder = "List="" + SET_NONE + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";"";
}
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>";
}
else
{
HTML_MESSAGE += "<tr><td fixwidth=170>" + name + "</td><td width=80>";
if (usable == 1)
{
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>";
}
else if (usable == 0)
{
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>";
}
}
HTML_MESSAGE += "</table>";
}
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>";
return HTML_MESSAGE;
}
private void manageSelectedBuff(String buffPosId, String canUseBuff)
{
String[] bpid = buffPosId.split("_");
String bId = bpid[0];
String bLvl = bpid[1];
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET canUse=? WHERE buffId=? AND buffLevel=? LIMIT 1");
upd.setString(1, canUseBuff);
upd.setString(2, bId);
upd.setString(3, bLvl);
upd.executeUpdate();
upd.close();
}
catch (SQLException e)
{
print(e);
}
}
private String manageSelectedSet(String id, String newVal, String opt3)
{
String[] bpid = id.split("_");
String bId = bpid[0];
String bLvl = bpid[1];
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET forClass=? WHERE buffId=? AND bufflevel=?");
upd.setString(1, newVal);
upd.setString(2, bId);
upd.setString(3, bLvl);
upd.executeUpdate();
upd.close();
}
catch (SQLException e)
{
print(e);
}
return viewAllBuffs("set", "状态设定", opt3);
}
private void addTimeout(QuestState st, int gaugeColor, int amount, int offset)
{
int endtime = (int) ((System.currentTimeMillis() + (amount * 1000)) / 1000);
st.set("blockUntilTime", String.valueOf(endtime));
st.getPlayer().sendPacket(new SetupGauge(gaugeColor, (amount * 1000) + offset));
}
private void heal(L2PcInstance player, boolean isPet)
{
L2Summon target;
if (!isPet)
{
PcStatus pcStatus = player.getStatus();
PcStat pcStat = player.getStat();
pcStatus.setCurrentHp(pcStat.getMaxHp());
pcStatus.setCurrentMp(pcStat.getMaxMp());
pcStatus.setCurrentCp(pcStat.getMaxCp());
}
else if (/* isPet && */(target = player.getSummon()) != null)
{
SummonStatus petStatus = target.getStatus();
SummonStat petStat = target.getStat();
petStatus.setCurrentHp(petStat.getMaxHp());
petStatus.setCurrentMp(petStat.getMaxMp());
if (target instanceof L2PetInstance)
{
L2PetInstance pet = (L2PetInstance) target;
pet.setCurrentFed(pet.getMaxFed());
player.sendPacket(new SetSummonRemainTime(pet.getMaxFed(), pet.getCurrentFed()));
}
else if (target instanceof L2ServitorInstance)
{
L2ServitorInstance summon = (L2ServitorInstance) target;
summon.decTimeRemaining(summon.getTimeRemaining() - summon.getTotalLifeTime());
player.sendPacket(new SetSummonRemainTime(summon.getTotalLifeTime(), summon.getTimeRemaining()));
}
else if (DEBUG)
{
throw new RuntimeException();
}
}
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (DEBUG)
{
System.out.println(getScriptName() + "#onAdvEvent('" + event + "'," + (npc == null ? "NULL" : npc.getId() + npc.getName()) + "," + (player == null ? "NULL" : player.getName()) + ")");
}
QuestState st = player.getQuestState(QUEST_LOADING_INFO);
String[] eventSplit = event.split(" ", 4);
if (eventSplit.length != 4)
{
player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
return null;
}
String eventParam0 = eventSplit[0];
String eventParam1 = eventSplit[1];
String eventParam2 = eventSplit[2];
String eventParam3 = eventSplit[3];
switch (eventParam0)
{
case "reloadscript":
if (eventParam1.equals("1"))
{
return reloadConfig(st);
}
if (eventParam1.equals("0"))
{
return rebuildMainHtml(st);
}
if (DEBUG)
{
throw new RuntimeException();
}
case "redirect":
switch (eventParam1)
{
case "main":
return rebuildMainHtml(st);
case "manage_buffs":
return viewAllBuffTypes();
case "view_buffs":
return buildHtml("buff");
case "view_resists":
return buildHtml("resist");
case "view_songs":
return buildHtml("song");
case "view_dances":
return buildHtml("dance");
case "view_chants":
return buildHtml("chant");
case "view_others":
return buildHtml("others");
case "view_special":
return buildHtml("special");
case "view_cubic":
return buildHtml("cubic");
default:
if (DEBUG)
{
throw new RuntimeException();
}
}
case "buffpet":
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
st.set("Pet-On-Off", eventParam1);
if (TIME_OUT)
{
addTimeout(st, 3, TIME_OUT_TIME / 2, 600);
}
}
return rebuildMainHtml(st);
case "create":
{
String param = eventParam1.replaceAll("[ !" + """ + "#$%&'()*+,/:;<=>?@" + "\\[" + "\\\" + "\\]" + "\\^" + "`{|}~]", ""); // JOJO
if ((param.length() == 0) || param.equals("no_name"))
{
player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
return showText(st, "警告", "请输入正确的自定状态名称!", true, "返回", "main");
}
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_list (player_id,scheme_name) VALUES (?,?)");
ins.setInt(1, player.getObjectId());
ins.setString(2, param);
ins.executeUpdate();
ins.close();
}
catch (SQLException e)
{
print(e);
}
return rebuildMainHtml(st);
}
case "delete":
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rem;
rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_list WHERE id=? LIMIT 1");
rem.setString(1, eventParam1);
rem.executeUpdate();
rem.close();
rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=?");
rem.setString(1, eventParam1);
rem.executeUpdate();
rem.close();
}
catch (SQLException e)
{
print(e);
}
return rebuildMainHtml(st);
case "delete_c":
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>";
case "create_1":
return createScheme();
case "edit_1":
return editScheme(player);
case "delete_1":
return deleteScheme(player);
case "manage_scheme_1":
return viewAllSchemeBuffs(eventParam1, eventParam2, "add");
case "manage_scheme_2":
return viewAllSchemeBuffs(eventParam1, eventParam2, "remove");
case "manage_scheme_select":
return getOptionList(eventParam1);
case "remove_buff":
{
String[] split = eventParam1.split("_");
String scheme = split[0];
String skill = split[1];
String level = split[2];
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1");
rem.setString(1, scheme);
rem.setString(2, skill);
rem.setString(3, level);
rem.executeUpdate();
}
catch (SQLException e)
{
print(e);
}
int temp = Integer.parseInt(eventParam3) - 1;
final String HTML;
if (temp <= 0)
{
HTML = getOptionList(scheme);
}
else
{
HTML = viewAllSchemeBuffs(scheme, eventParam2, "remove");
}
return HTML;
}
case "add_buff":
{
String[] split = eventParam1.split("_");
String scheme = split[0];
String skill = split[1];
String level = split[2];
int idbuffclass = getClassBuff(skill);
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_contents (scheme_id,skill_id,skill_level,buff_class) VALUES (?,?,?,?)");
ins.setString(1, scheme);
ins.setString(2, skill);
ins.setString(3, level);
ins.setInt(4, idbuffclass);
ins.executeUpdate();
ins.close();
}
catch (SQLException e)
{
print(e);
}
int temp = Integer.parseInt(eventParam3) + 1;
final String HTML;
if (temp >= (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES))
{
HTML = getOptionList(scheme);
}
else
{
HTML = viewAllSchemeBuffs(scheme, eventParam2, "add");
}
return HTML;
}
case "edit_buff_list":
return viewAllBuffs(eventParam1, eventParam2, eventParam3);
case "changeBuffSet":
if (eventParam2.equals(SET_FIGHTER))
{
eventParam2 = "0";
}
else if (eventParam2.equals(SET_MAGE))
{
eventParam2 = "1";
}
else if (eventParam2.equals(SET_ALL))
{
eventParam2 = "2";
}
else if (eventParam2.equals(SET_NONE))
{
eventParam2 = "3";
}
else if (DEBUG)
{
throw new RuntimeException();
}
return manageSelectedSet(eventParam1, eventParam2, eventParam3);
case "editSelectedBuff":
{
eventParam2 = eventParam2.replace("-", " ");
String[] split = eventParam2.split(" ");
String action = split[0];
String page = split[1];
manageSelectedBuff(eventParam1, action);
final String typeName;
switch (eventParam3)
{
case "buff":
typeName = "Buffs";
break;
case "resist":
typeName = "Resists";
break;
case "song":
typeName = "Songs";
break;
case "dance":
typeName = "Dances";
break;
case "chant":
typeName = "Chants";
break;
case "others":
typeName = "Others_Buffs";
break;
case "special":
typeName = "Special_Buffs";
break;
case "cubic":
typeName = "Cubics";
break;
default: /* if (DEBUG) */
throw new RuntimeException();
}
return viewAllBuffs(eventParam3, typeName, page);
}
case "viewSelectedConfig":
throw new RuntimeException();
case "changeConfig":
throw new RuntimeException();
case "heal":
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
if (st.getQuestItemsCount(CONSUMABLE_ID) < HEAL_PRICE)
{
return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + HEAL_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
}
final boolean getSummonbuff = isPetBuff(st);
if (getSummonbuff)
{
if (player.getSummon() != null)
{
heal(player, getSummonbuff);
}
else
{
return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出您的宠物再使用!", false, "Return", "main");
}
}
else
{
heal(player, getSummonbuff);
}
st.takeItems(CONSUMABLE_ID, HEAL_PRICE);
if (TIME_OUT)
{
addTimeout(st, 1, TIME_OUT_TIME / 2, 600);
}
}
return SMART_WINDOW ? null : rebuildMainHtml(st);
case "removeBuffs":
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_REMOVE_PRICE)
{
return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + BUFF_REMOVE_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
}
final boolean getSummonbuff = isPetBuff(st);
if (getSummonbuff)
{
if (player.getSummon() != null)
{
player.getSummon().stopAllEffects();
}
else
{
return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再使用!", false, "Return", "main");
}
}
else
{
player.stopAllEffects();
}
st.takeItems(CONSUMABLE_ID, BUFF_REMOVE_PRICE);
if (TIME_OUT)
{
addTimeout(st, 2, TIME_OUT_TIME / 2, 600);
}
}
return SMART_WINDOW ? null : rebuildMainHtml(st);
case "cast":
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
TIntArrayList buffs = new TIntArrayList();
TIntArrayList levels = new TIntArrayList();
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY id");
rss.setString(1, eventParam1);
ResultSet action = rss.executeQuery();
while (action.next())
{
// enabled = 1;
int id = Integer.parseInt(action.getString("skill_id"));
int level = Integer.parseInt(action.getString("skill_level"));
switch (getBuffType(id))
{
case "buff":
if (ENABLE_BUFFS)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "resist":
if (ENABLE_RESIST)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "song":
if (ENABLE_SONGS)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "dance":
if (ENABLE_DANCES)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "chant":
if (ENABLE_CHANTS)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "others":
if (ENABLE_OTHERS)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
case "special":
if (ENABLE_SPECIAL)
{
if (isEnabled(id, level))
{
buffs.add(id);
levels.add(level);
}
}
break;
default:
if (DEBUG)
{
throw new RuntimeException();
}
}
}
}
catch (SQLException e)
{
print(e);
}
if (buffs.size() == 0)
{
return viewAllSchemeBuffs(eventParam1, "1", "add");
}
if (!FREE_BUFFS)
{
if (st.getQuestItemsCount(CONSUMABLE_ID) < SCHEME_BUFF_PRICE)
{
return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + SCHEME_BUFF_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
}
}
final boolean getSummonbuff = isPetBuff(st);
for (int i = 0; i < buffs.size(); ++i)
{
if (!getSummonbuff)
{
SkillTable.getInstance().getInfo(buffs.get(i), levels.get(i)).applyEffects(player, player);
}
else
{
if (player.getSummon() != null)
{
SkillTable.getInstance().getInfo(buffs.get(i), levels.get(i)).applyEffects(player, player);
}
else
{
return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再召唤!", false, "Return", "main");
}
}
}
st.takeItems(CONSUMABLE_ID, SCHEME_BUFF_PRICE);
if (TIME_OUT)
{
addTimeout(st, 3, TIME_OUT_TIME, 600);
}
}
return SMART_WINDOW ? null : rebuildMainHtml(st);
case "giveBuffs":
{
final int cost;
switch (eventParam3)
{
case "buff":
cost = BUFF_PRICE;
break;
case "resist":
cost = RESIST_PRICE;
break;
case "song":
cost = SONG_PRICE;
break;
case "dance":
cost = DANCE_PRICE;
break;
case "chant":
cost = CHANT_PRICE;
break;
case "others":
cost = OTHERS_PRICE;
break;
case "special":
cost = SPECIAL_PRICE;
break;
case "cubic":
cost = CUBIC_PRICE;
break;
default:
throw new RuntimeException();
}
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
if (!FREE_BUFFS)
{
if (st.getQuestItemsCount(CONSUMABLE_ID) < cost)
{
return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + cost + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
}
}
L2Skill skill = SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2));
if (skill.getSkillType() == L2SkillType.SUMMON)
{
if (st.getQuestItemsCount(skill.getItemConsumeId()) < skill.getItemConsume())
{
return showText(st, "对不起", "您没有足够的道具:<br>您需要: <font color=LEVEL>" + skill.getItemConsume() + " " + getItemNameHtml(st, skill.getItemConsumeId()) + "!", false, "0", "0");
}
}
final boolean getSummonbuff = isPetBuff(st);
if (!getSummonbuff)
{
if (eventParam3.equals("cubic"))
{
if (player.getCubics() != null)
{
}
player.useMagic(SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false);
}
else
{
SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player, player);
}
}
else
{
if (eventParam3.equals("cubic"))
{
if (player.getCubics() != null)
{
}
player.useMagic(SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false);
}
else
{
if (player.getSummon() != null)
{
SkillTable.getInstance().getInfo(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player, player);
}
else
{
return showText(st, "警告", "您不能使用宠物状态.<br>请先召唤出宠物再使用!", false, "Return", "main");
}
}
}
st.takeItems(CONSUMABLE_ID, cost);
if (TIME_OUT)
{
addTimeout(st, 3, TIME_OUT_TIME / 10, 600);
}
}
return SMART_WINDOW ? null : buildHtml(eventParam3);
}
case "castBuffSet":
if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
if (!FREE_BUFFS)
{
if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_SET_PRICE)
{
return showText(st, "对不起", "您没有足够道具:<br>您需要: <font color=LEVEL>" + BUFF_SET_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0");
}
}
List<int[]> buff_sets = new ArrayList<>();
final int player_class;
if (player.isMageClass())
{
player_class = 1;
}
else
{
player_class = 0;
}
final boolean getSummonbuff = isPetBuff(st);
if (!getSummonbuff)
{
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC");
getSimilarNameCount.setInt(1, player_class);
getSimilarNameCount.setString(2, "2");
ResultSet rss = getSimilarNameCount.executeQuery();
while (rss.next())
{
int id = rss.getInt("buffId");
int lvl = rss.getInt("buffLevel");
buff_sets.add(new int[]
{
id,
lvl
});
}
}
catch (SQLException e)
{
print(e);
}
for (int[] i : buff_sets)
{
SkillTable.getInstance().getInfo(i[0], i[1]).applyEffects(player, player);
}
}
else
{
if (player.getSummon() != null)
{
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC");
getSimilarNameCount.setString(1, "0");
getSimilarNameCount.setString(2, "2");
ResultSet rss = getSimilarNameCount.executeQuery();
while (rss.next())
{
int id = rss.getInt("buffId");
int lvl = rss.getInt("buffLevel");
buff_sets.add(new int[]
{
id,
lvl
});
}
}
catch (SQLException e)
{
print(e);
}
for (int[] i : buff_sets)
{
SkillTable.getInstance().getInfo(i[0], i[1]).applyEffects(player.getSummon(), player.getSummon());
}
}
else
{
return showText(st, "警告", "您不能使用宠物状态<br>请先召唤出宠物再使用!", false, "Return", "main");
}
}
st.takeItems(CONSUMABLE_ID, BUFF_SET_PRICE);
if (TIME_OUT)
{
addTimeout(st, 3, TIME_OUT_TIME, 600);
}
}
return SMART_WINDOW ? null : rebuildMainHtml(st);
}
return rebuildMainHtml(st);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
QuestState st = player.getQuestState(QUEST_LOADING_INFO);
if (st == null)
{
st = newQuestState(player);
}
if (player.isGM())
{
if (SCRIPT_RELOAD)
{
return reloadPanel(st);
}
return rebuildMainHtml(st);
}
else if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime"))
{
{
if (OlympiadManager.getInstance().isRegistered(player))
{
return showText(st, "警告", "您不能加状态,因为您在 <font color=FF0000>奥赛!</font><br>当您结束奥赛的时候,<br>再来找我加吧.", false, "Return", "main");
}
else if (TvTEvent.isPlayerParticipant(player.getObjectId()))
{
return showText(st, "警告", "您不能加状态,因为您在 <font color="FF0000">TvT活动!</font><br>当您结束TvT活动的时候,<br>再来找我加吧", false, "Return", "main");
}
else if (player.getLevel() < MIN_LEVEL)
{
return showText(st, "警告", "您等级太低了!<br>您的等级只要要在 <font color=LEVEL>" + MIN_LEVEL + "</font>,<br>才可以在我这里加状态!", false, "Return", "main");
}
else if (player.getPvpFlag() > 0)
{
return showText(st, "警告", "您不能加状态,因为您在 <font color=800080>延迟中!</font><br>稍后请重试!", false, "Return", "main");
}
else if (player.isInCombat())
{
return showText(st, "警告", "您不能加状态,因为您在战斗中!<br>停止攻击后重试!", false, "Return", "main");
}
else
{
return rebuildMainHtml(st);
}
}
}
else
{
return showText(st, "对不起", "您需要稍等一会!<br>如果您想使用我的状态!", false, "Return", "main");
}
}
@Override
public boolean showResult(L2PcInstance player, String res)
{
if (SMART_WINDOW)
{
if ((player != null) && (res != null) && res.startsWith("<html>"))
{
NpcHtmlMessage npcReply = new NpcHtmlMessage(5, 1); /* ! */
npcReply.setHtml(res);
player.sendPacket(npcReply);
player.sendPacket(ActionFailed.STATIC_PACKET);
return false;
}
}
return super.showResult(player, res);
}
private String getSkillIconHtml(int id, int level)
{
String iconNumber = getSkillIconNumber(id, level);
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 + "">";
}
private String getSkillIconNumber(int id, int level)
{
String formato;
if (id == 4)
{
formato = "0004";
}
else if ((id > 9) && (id < 100))
{
formato = "00" + id;
}
else if ((id > 99) && (id < 1000))
{
formato = "0" + id;
}
else if (id == 1517)
{
formato = "1536";
}
else if (id == 1518)
{
formato = "1537";
}
else if (id == 1547)
{
formato = "0065";
}
else if (id == 2076)
{
formato = "0195";
}
else if ((id > 4550) && (id < 4555))
{
formato = "5739";
}
else if ((id > 4698) && (id < 4701))
{
formato = "1331";
}
else if ((id > 4701) && (id < 4704))
{
formato = "1332";
}
else if (id == 6049)
{
formato = "0094";
}
else
{
formato = String.valueOf(id);
}
return formato;
}
static public void main(String[] args)
{
new NpcBuffer(-1, QUEST_LOADING_INFO, "custom");
System.out.println("INFO Custom Buffer Load Success");
}
} 复制代码