Nie widze tu zadnego jawnego tworzenia State, co dokladnie zawiera ta linijka kodu, o ktora sie pluje ?
Btw, ten kod ma w sobie troche innego typu usterek:
1) Ma przemasakryczna ilosc powtorzonego kodu ( zrobionego metoda copy&paste ), co nie tylko wyglada tragicznie, ale jest tragiczne w utrzymaniu i ewentualnych zmianach, znalezienie bledu jest ciezkie.
2) W ifach jest tu taka kolejnosc:
if event == "78":
st.takeItems(ADENA_ID,5000)
st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
return "1.htm"
st.setState(COMPLETED)
Oczywistym jest ze to setState sie nigdy nie wykona
tak samo na koncu jest
if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)
ktore tez sie nigdy nie wykona, bo sterowanie tu nie ma szans dojsc.
Sugeruje uprzątniecie tego kodu w nastepujący sposob:
import sys
from com.l2jfree.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from com.l2jfree.gameserver.datatables import SkillTable
from com.l2jfree.gameserver.model.quest import State
from com.l2jfree.gameserver.model.quest import QuestState
from com.l2jfree.gameserver.model.quest.jython import QuestJython as JQuest
qn = "9999_NPCBuffer"
NPC = [40010]
ADENA_ID = 57
QuestId = 9999
QuestName = "NPCBuffer"
QuestDesc = "custom"
InitialHtml = "1.htm"
print "importing custom: 9999: NPCBuffer"
BUFFS = {
#event id, adena, sk_id, sk_lv, html
"2":[25000, 4342, 2, "2.htm"], #Wind walk
"3":[25000, 4343, 3, "2.htm"], #Decrease weight
"4":[25000, 4344, 3, "2.htm"], #Shield
"5":[25000, 4345, 3, "2.htm"], #Might
"6":[25000, 4346, 4, "2.htm"], #Mental Shield
"7":[25000, 4347, 6, "2.htm"], #Bless the body
"8":[25000, 4348, 6, "2.htm"], #Bless the soul
"9":[25000, 4349, 2, "2.htm"], #Magic Barrier
"10":[25000, 4350, 4, "2.htm"], #Resist Shock
"11":[25000, 4351, 6, "2.htm"], #Concentration
"12":[25000, 4352, 2, "2.htm"], #Berserker Spirit
"13":[25000, 4353, 6, "2.htm"], #Bless Shield
"14":[25000, 4354, 4, "2.htm"], #Vampiric Rage
"15":[25000,4355,3,"2.html"], #Acumen
"16":[25000,4356,3,"2.html"], #Empower
"17":[25000,4357,2,"2.html"], #Haste
"18":[25000,4358,3,"2.html"], #Guidance
"19":[25000,4359,3,"2.html"], #Focus
"20":[25000,4360,3,"2.html"], #DeathWhisper
"21":[20000,271,1,"3.html"],
"22":[20000,272,1,"3.html"],
"23":[20000,273,1,"3.html"],
"24":[20000,274,1,"3.html"],
"25":[20000,275,1,"3.html"],
"26":[20000,276,1,"3.html"],
"27":[20000,277,1,"3.html"],
"28":[20000,307,1,"3.html"],
"29":[20000,309,1,"3.html"],
"30":[20000,310,1,"3.html"],
"31":[20000,311,1,"3.html"],
"32":[20000,366,1,"3.html"],
"33":[20000,365,1,"3.html"],
"34":[20000,264,1,"4.html"],
"35":[20000,265,1,"4.html"],
"36":[20000,266,1,"4.html"],
"37":[20000,267,1,"4.html"],
"38":[20000,268,1,"4.html"],
"39":[20000,269,1,"4.html"],
"40":[20000,270,1,"4.html"],
"41":[20000,304,1,"4.html"],
"42":[20000,305,1,"4.html"],
"43":[20000,306,1,"4.html"],
"44":[20000,308,1,"4.html"],
"45":[20000,363,1,"4.html"],
"46":[20000,364,1,"4.html"],
"47":[20000,349,1,"4.html"],
"48":[20000,1007,3,"5.html"], #ChantofBattle
"49":[20000,1009,3,"5.html"], #ChantofShielding
"50":[20000,1006,3,"5.html"], #ChantofFire
"51":[20000,1002,3,"5.html"], #ChantofFlame
"52":[20000,1229,18,"5.html"], #Chantoflife
"53":[20000,1251,2,"5.html"], #ChantofFury
"54":[20000,1252,3,"5.html"], #ChantofEvasion
"55":[20000,1253,3,"5.html"], #ChantofRage
"56":[20000,1284,3, "5.html"], #ChantofRevenge
"57":[20000,1310,4,"5.html"], #ChantofVampire
"58":[20000,1309,3,"5.html"], #ChantofEagle
"59":[20000,1308,3,"5.html"], #ChantofPredator
"60":[20000,1362,1,"5.html"], #ChantofSpirit
"61":[20000,1363,1,"5.html"], #ChantofVictory
"62":[20000,1413,1,"5.html"], #chantofmagnus
"63":[1000,1013,32,"1.html"], #MPreg
"64":[25000,1388,3,"2.html"], #greatmight
"65":[25000,1389,3,"2.html"], #greatshield
"66":[25000,1392,3,"2.html"], #holyresist
"67":[25000,1393,3,"2.html"], #Unholyresist
"68":[25000,1356,1,"2.html"], #pof
"69":[25000,1352,1,"2.html"], #elemtprotect
"70":[25000,1303,2,"2.html"], #wildmagic
"71":[25000,1304,3,"2.html"], #advblock
"72":[25000,1353,1,"2.html"], #divProtect
"73":[25000,1355,1,"2.html"], #pow
"74":[25000,1357,1,"2.html"], #powi
"75":[25000,1047,4,"2.html"], #manaregen
"76":[25000,1311,6,"2.html"], #ba
"77":[25000,1323,1,"1.html"] #noble
}
class Quest (JQuest) :
def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
def buffPlayer(self, event, st):
if not BUFFS.has_key(event):
return event
adena, skill_id, skill_lv, html = BUFFS[event]
player = st.getPlayer()
st.takeItems(ADENA_ID, adena)
SkillTable.getInstance().getInfo(skill_id, skill_lv).getEffects(player, player)
player.setCurrentMp(player.getMaxMp())
return html
def onEvent(self, event, st):
player = st.getPlayer()
htmltext = event
if st.getQuestItemsCount(ADENA_ID) < 150000 or player.getLevel() < 40 :
htmltext = "<html><head><body>No Tienes Adena</body></html>"
else:
player.setTarget(st.getPlayer())
if event == "1":
st.takeItems(ADENA_ID, 1000)
player.setCurrentCp(player.getMaxCp())
player.setCurrentHp(player.getMaxHp())
player.setCurrentMp(player.getMaxMp())
htmltext = "1.htm"
elif event == "78": #cancellation
st.takeItems(ADENA_ID, 5000)
player.useMagic(SkillTable.getInstance().getInfo(9950, 1), False, False)
player.setCurrentMp(player.getMaxMp())
htmltext = "1.htm"
else:
htmltext = self.buffPlayer(event, st)
return htmltext
def onTalk (self, npc, player):
st = player.getQuestState(qn)
st.setState(State.STARTED)
return InitialHtml
QUEST = Quest(QuestId, str(QuestId) + "_" + QuestName, QuestDesc)
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)