import sys
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from net.sf.l2j.gameserver.model import L2Skill
from java.util import Iterator
from net.sf.l2j.datatables import SkillTable
qn = "9990_buffer"
NPC = [250250]
ACCEPT_BUFF = [1040, 1068, 1035, 1043, 1077, 1078, 1085, 1311, 1032,
1036, 1045, 1048, 4352, 4357, 4391, 4403, 4405, 1243,
1388, 1389, 1087, 1259, 1059, 1268]
ACCEPT_DANCES = [271, 272, 273, 274, 275, 276, 277, 307, 309,
310, 311, 365]
ACCEPT_SONGS = [364, 264, 306, 269, 270, 265, 363, 349, 308,
305, 304, 267, 266, 268]
ACCEPT_CHANTS = [1251, 1252, 1253, 1284, 1006, 1007, 1009, 1362,
1310, 1309, 1308, 1391, 1390]
ACCEPT_SPECIAL = [1364, 1356, 1355, 1357, 1413, 4702, 4703, 4700,
4699, 1323]
ACCEPT_RESISTS = [1393, 1392, 1182, 1189, 1191, 1352, 1353, 1073]
QuestId = -1
QuestName = "Buffer"
QuestDesc = "custom"
print qn + " Buffer l2maxi.ru (KFan)"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self, event, st):
htmltext = "Sory, failed Event"
ownerid = st.getPlayer().getObjectId()
effects = st.getPlayer().getAllEffects()
if event.startswith("page_") :
page = int(event.replace("page_", ""))
htmltext = str(page) + ".htm"
elif event == "cancel" :
st.getPlayer().stopAllEffects()
htmltext = "1.htm"
activePage = 1
elif event == "reload" :
st.getPlayer().restoreCP()
st.getPlayer().restoreHP()
st.getPlayer().restoreMP()
htmltext = "1.htm"
elif event.startswith("buff_") :
id_lvl = event.replace("buff_", "")
id_lvl = id_lvl.split("_")
SkillTable.getInstance().getInfo(int(id_lvl[0]), int(id_lvl[1])).getEffects(st.getPlayer(), st.getPlayer())
htmltext = str(int(id_lvl[2])) + ".htm"
elif event.startswith("profile_") :
act = event.replace("profile_", "")
con = L2DatabaseFactory.getInstance().getConnection()
if act.startswith("buff_") :
act = str(int(act.replace("buff_", "")))
sql = con.prepareStatement("SELECT * FROM profile_buff WHERE char_id = ? AND pindex = ?")
sql.setInt(1, int(ownerid))
sql.setInt(2, int(act))
rs = sql.executeQuery()
rs.next()
full_buffs = rs.getString("skills").split(";")
sql.close()
rs.close()
for buff in full_buffs :
if buff != "" :
buff = buff.split(",")
SkillTable.getInstance().getInfo(int(buff[0]), int(buff[1])).getEffects(st.getPlayer(), st.getPlayer())
htmltext = "1.htm"
elif act.startswith("save_") :
act = str(int(act.replace("save_", "")))
sqll = con.prepareStatement("DELETE FROM profile_buff WHERE char_id = ? AND pindex = ?")
sqll.setInt(1, int(ownerid))
sqll.setInt(2, int(act))
sqll.execute()
sqll.close()
saving = "++"
for eff in effects :
eff_id = eff.getSkill().getId()
eff_level = eff.getSkill().getLevel()
if saving == "++" :
if (eff_id in ACCEPT_BUFF or eff_id in ACCEPT_DANCES or eff_id in ACCEPT_SONGS or eff_id in ACCEPT_CHANTS or eff_id in ACCEPT_SPECIAL or eff_id in ACCEPT_RESISTS) :
saving = str(eff_id) + "," + str(eff_level) + ";"
else :
if (eff_id in ACCEPT_BUFF or eff_id in ACCEPT_DANCES or eff_id in ACCEPT_SONGS or eff_id in ACCEPT_CHANTS or eff_id in ACCEPT_SPECIAL or eff_id in ACCEPT_RESISTS) :
saving += str(eff_id) + "," + str(eff_level) + ";"
sql = con.prepareStatement("INSERT INTO profile_buff (char_id, pindex, skills) VALUES ('" + str(ownerid) + "', '" + str(act) + "', '" + saving + "')")
sql.execute()
sql.close()
htmltext = "8.htm"
con.close()
return htmltext
def onTalk (self, npc, player):
htmltext = "1.htm"
st = player.getQuestState(qn)
if not st : return htmltext
npcId = npc.getNpcId()
return htmltext
QUEST = Quest(9990,qn,"custom")
QUEST.addStartNpc(250250)
QUEST.addTalkId(250250)