Tytuł: [analiza kodu] Własny quest + własne quest itemy
Wiadomość wysłana przez: NoAd w Grudzień 11, 2009, 11:15:58 AM
Wiadomość wysłana przez: NoAd w Grudzień 11, 2009, 11:15:58 AM
Chcę zrobić własnego questa, nieco już zmodyfikowałem kod, ale brak doświadczenia w tworzeniu questów oraz mała znajomość Jythona zmuszają mnie do zasięgnięcia rady.
Kod jest przebudowany z innego questa stąd może tu być nieco zbędnych linii.
Generalnie q chciałbym aby wyglądał tak:
Start u NPC: ADAM
Następnie odwiedzamy npc FIRST,SECOND,THIRD (dowolna kolejność) każdy z nich ma dać nam q itema (WAND_PART)
Po odwiedzaniu wszystkich npc wracamy do startowego a ten mam daje w nagrodę PASS_TO_LL_VILLAGE.
I tu dodatkowe pytanie: quest itemy z tego co wiem wystarczy dodać w etcitem w bazie danych, i tu pytania: 1. gdzie zdefiniować jak ma wyglądać nowo dodany item ? czyżby to była tabela item_icon ?
2. gdzie mogę zdefiniować opis quest itema ?
tutaj zapewne maja być przedziały q itemów, które utworzę ?
Mam nadzieję że przejrzyście przekazałem swój problem. I że zbytnio nikogo nie zirytuję ^^
Edit:
Zapomniałem dodać że serwer to L2JServer
Kod [Zaznacz]
# version 0.01
# by NoAd
import sys
from net.sf.l2j import Config
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
qn = "90090_Adam"
#NPCs
ADAM = 90090
FIRST = 90091
SECOND = 90092
THIRD = 90093
#Rewards
PASS_TO_LL_VILLAGE = XX
WAND_PART = XXX
# Main Quest Code
class Quest (JQuest):
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.questItemIds = range(3417,3428)+range(10164,10166)
def onEvent (self,event,st):
id = st.getState()
if id == State.CREATED :
if event == "talk" :
st.set("progress","0")
if event == "talk1" :
st.giveItems(WAND_PART)
return "90091_1.htm"
if event == "talk2" :
st.set("progress", str(st.getInt("progress") | 1))
st.giveItems(WAND_PART)
return "90092_1.htm"
if event == "talk3" :
st.set("progress", str(st.getInt("progress") | 2))
st.giveItems(WAND_PART)
return "90093_1.htm"
if event == "talk4" :
st.set("progress", str(st.getInt("progress") | 4))
st.takeItems(WAND_PART,3)
return "90090_4.htm"
return
def onTalk (self,npc,player):
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
st = player.getQuestState(qn)
if not st : return htmltext
npcId = npc.getNpcId()
id = st.getState()
if npcId != ADAM and id == State.STARTED:
if st.get("step")!="" : return htmltext
if id == State.COMPLETED: st.setState(State.CREATED)
if npcId == ADAM :
if id == State.CREATED :
if player.getLevel() < 60 :
st.exitQuest(1)
return "90090_low_level.htm"
return "Start.htm"
if id == State.STARTED
st.giveItems(LIST_OF_NPC)
if id == State.STARTED :
if st.getInt("progress") == 7 :
return "Talked.htm"
return "90090_PENDING_TALK.htm"
elif id == State.STARTED:
if npcId == FIRST :
return "90091_2.htm"
elif npcId == SECOND :
return "90092_2.htm"
elif npcId == THIRD :
return "90093_2.htm"
return
# Quest class and state definition
QUEST = Quest(90090, qn, "Pass to LifeLand Village")
# Quest NPC starter initialization
QUEST.addStartNpc(ADAM)
# Quest NPC initialization
QUEST.addTalkId(ADAM)
QUEST.addTalkId(FIRST)
QUEST.addTalkId(SECOND)
QUEST.addTalkId(THIRD)
Kod jest przebudowany z innego questa stąd może tu być nieco zbędnych linii.
Generalnie q chciałbym aby wyglądał tak:
Start u NPC: ADAM
Następnie odwiedzamy npc FIRST,SECOND,THIRD (dowolna kolejność) każdy z nich ma dać nam q itema (WAND_PART)
Po odwiedzaniu wszystkich npc wracamy do startowego a ten mam daje w nagrodę PASS_TO_LL_VILLAGE.
I tu dodatkowe pytanie: quest itemy z tego co wiem wystarczy dodać w etcitem w bazie danych, i tu pytania: 1. gdzie zdefiniować jak ma wyglądać nowo dodany item ? czyżby to była tabela item_icon ?
2. gdzie mogę zdefiniować opis quest itema ?
Kod [Zaznacz]
self.questItemIds = range(3417,3428)+range(10164,10166)tutaj zapewne maja być przedziały q itemów, które utworzę ?
Mam nadzieję że przejrzyście przekazałem swój problem. I że zbytnio nikogo nie zirytuję ^^
Edit:
Zapomniałem dodać że serwer to L2JServer