Квест итем всей пати

Refren

Участник
Пользователь
#1
Здравствуйте, подскажите, пожалуйста, как в PW-Soft реализовать квест ,при котором за убийство монстров итем давался бы всей пати сразу, у кого этот квест активен? Смотрел как реализован квест на ноблес, скопипастил - выдает ошибку. Насколько я понимаю, за выдачу всей группе итема отвечают строки:
for partyMember in party.getPartyMembers().toArray() :
pst = partyMember.getQuestState(qn)
if pst :
if pst.getInt("cond") == 2 :
pst.giveItems(QUEST_ITEM,1)

Но как их правильно прикрутить?
 

Refren

Участник
Пользователь
#3
Боюсь, что из-за непонимания, что как работает, данный метод мне не подходит, если убрать первые этапы квеста и оставить просто рб - выдает ошибку.
 

Мишаня

Интересующийся
Местный
#4
Боюсь, что из-за непонимания, что как работает, данный метод мне не подходит, если убрать первые этапы квеста и оставить просто рб - выдает ошибку.
ну Вы бы хотя бы сбросили сюда коды одного и второго под спойлер, ну или в лс скрипты с нобл квестом и тем который хотите сделать
 

Arty

Участник
Пользователь
#5
Боюсь, что из-за непонимания, что как работает, данный метод мне не подходит, если убрать первые этапы квеста и оставить просто рб - выдает ошибку.
Вы взяли нужные строки, но вместе с проверкой COND
Код:
if pst.getInt("cond") == 2 :
это параметр текущего состояния квеста у персонажа, если у Вас в квесте нет присвоений этого параметра или они не совпадают - этот кусок кода ничего не сделает, потому, что он никогда не выполнится, даже если скомпилится и загрузится
ps просто выбросите эту строку и напишите там где выдается нагдата за убийство рб (обратите внимание на getQuestState(qn))
Код:
...
for partyMember in party.getPartyMembers().toArray() :
pst = partyMember.getQuestState(qn)
if pst :
pst.giveItems(QUEST_ITEM,1)
...
pps не забудьте определить константу QUEST_ITEM
 

Refren

Участник
Пользователь
#6
Спасибо всем, кто пытался помочь, к сожалению, пока что не вижу своей ошибки. Ниже привожу коды стандартного квеста на нубл, второй - то, что работает, а третий - просто попытка сделать бонус на пати, которая успехом пока не увенчалась.
# Made by disKret
import sys
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 = "q246_PossessorOfAPreciousSoul_3"

#NPC
LADD = 30721
CARADINE = 31740
OSSIAN = 31741

#QUEST ITEM
CARADINE_LETTER = 7678
CARADINE_LETTER_LAST = 7679
WATERBINDER = 7591
EVERGREEN = 7592
RAIN_SONG = 7593
RELIC_BOX = 7594

#MOBS
PILGRIM_OF_SPLENDOR = 21541
JUDGE_OF_SPLENDOR = 21544
BARAKIEL = 25325

#CHANCE FOR DROP
CHANCE_FOR_DROP = 60

class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onEvent (self,event,st) :
htmltext = event
cond = st.getInt("cond")
if event == "31740-4.htm" :
if cond == 0 :
st.setState(STARTED)
st.takeItems(CARADINE_LETTER,1)
st.set("cond","1")
st.playSound("ItemSound.quest_accept")
if event == "31741-2.htm" :
if cond == 1 :
st.set("cond","2")
st.set("awaitsWaterbinder","1")
st.set("awaitsEvergreen","1")
st.playSound("ItemSound.quest_middle")
if event == "31741-5.htm" :
if cond == 3 :
st.set("cond","4")
st.takeItems(WATERBINDER,1)
st.takeItems(EVERGREEN,1)
st.playSound("ItemSound.quest_middle")
if event == "31741-9.htm" :
if cond == 5 :
st.set("cond","6")
st.takeItems(RAIN_SONG,1)
st.giveItems(RELIC_BOX,1)
st.playSound("ItemSound.quest_middle")
if event == "30721-2.htm" :
if cond == 6 :
st.set("cond","0")
st.takeItems(RELIC_BOX,1)
st.giveItems(CARADINE_LETTER_LAST,1)
st.playSound("ItemSound.quest_finish")
st.setState(COMPLETED)
return htmltext

def onTalk (self,npc,player):
htmltext = "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>"
st = player.getQuestState(qn)
if not st : return htmltext

npcId = npc.getNpcId()
id = st.getState()
if npcId != CARADINE and id != STARTED : return htmltext

cond=st.getInt("cond")
if player.isSubClassActive() :
if npcId == CARADINE and cond == 0 and st.getQuestItemsCount(CARADINE_LETTER) == 1 :
if id == COMPLETED :
htmltext = "<html><body>This quest has already been completed.</body></html>"
elif player.getLevel() < 65 :
htmltext = "31740-2.htm"
st.exitQuest(1)
elif player.getLevel() >= 65 :
htmltext = "31740-1.htm"
if npcId == CARADINE and cond == 1 :
htmltext = "31740-5.htm"
if npcId == OSSIAN and cond == 1 :
htmltext = "31741-1.htm"
if npcId == OSSIAN and cond == 2 :
htmltext = "31741-4.htm"
if npcId == OSSIAN and cond == 3 and st.getQuestItemsCount(WATERBINDER) == 1 and st.getQuestItemsCount(EVERGREEN) == 1 :
htmltext = "31741-3.htm"
if npcId == OSSIAN and cond == 4 :
htmltext = "31741-8.htm"
if npcId == OSSIAN and cond == 5 and st.getQuestItemsCount(RAIN_SONG) == 1 :
htmltext = "31741-7.htm"
if npcId == OSSIAN and cond == 6 and st.getQuestItemsCount(RELIC_BOX) == 1 :
htmltext = "31741-11.htm"
if npcId == LADD and cond == 6 :
htmltext = "30721-1.htm"
return htmltext

def onKill(self,npc,player,isPet):
npcId = npc.getNpcId()
if npcId == PILGRIM_OF_SPLENDOR :
#get a random party member who is doing this quest and needs this drop
partyMember = self.getRandomPartyMember(player,"awaitsWaterbinder","1")
if partyMember :
st = partyMember.getQuestState(qn)
chance = st.getRandom(100)
cond = st.getInt("cond")
if st.getQuestItemsCount(WATERBINDER) < 1 :
if chance < CHANCE_FOR_DROP :
st.giveItems(WATERBINDER,1)
st.unset("awaitsWaterbinder")
if st.getQuestItemsCount(EVERGREEN) < 1 :
st.playSound("ItemSound.quest_itemget")
else:
st.playSound("ItemSound.quest_middle")
st.set("cond","3")
elif npcId == JUDGE_OF_SPLENDOR :
#get a random party member who is doing this quest and needs this drop
partyMember = self.getRandomPartyMember(player,"awaitsEvergreen","1")
if partyMember :
st = partyMember.getQuestState(qn)
chance = st.getRandom(100)
cond = st.getInt("cond")
if cond == 2 and st.getQuestItemsCount(EVERGREEN) < 1 :
if chance < CHANCE_FOR_DROP :
st.giveItems(EVERGREEN,1)
st.unset("awaitsEvergreen")
if st.getQuestItemsCount(WATERBINDER) < 1 :
st.playSound("ItemSound.quest_itemget")
else:
st.playSound("ItemSound.quest_middle")
st.set("cond","3")
elif npcId == BARAKIEL :
#give the quest item and update variables for ALL PARTY MEMBERS who are doing the quest,
#so long as they each qualify for the drop (cond == 4 and item not in inventory)
#note: the killer WILL participate in the loop as a party member (no need to handle separately)
party = player.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
pst = partyMember.getQuestState(qn)
if pst :
if pst.getInt("cond") == 4 and pst.getQuestItemsCount(RAIN_SONG) < 1 :
pst.giveItems(RAIN_SONG,1)
pst.playSound("ItemSound.quest_middle")
pst.set("cond","5")
else :
pst = player.getQuestState(qn)
if pst :
if pst.getInt("cond") == 4 and pst.getQuestItemsCount(RAIN_SONG) < 1 :
pst.giveItems(RAIN_SONG,1)
pst.playSound("ItemSound.quest_middle")
pst.set("cond","5")
return

QUEST = Quest(246,qn,"Possessor Of A Precious Soul - 3")
CREATED = State('Start', QUEST)
STARTED = State('Started', QUEST)
COMPLETED = State('Completed', QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(CARADINE)
QUEST.addTalkId(CARADINE)

QUEST.addTalkId(OSSIAN)
QUEST.addTalkId(LADD)

QUEST.addKillId(PILGRIM_OF_SPLENDOR)
QUEST.addKillId(JUDGE_OF_SPLENDOR)
QUEST.addKillId(BARAKIEL)

STARTED.addQuestDrop(CARADINE,CARADINE_LETTER_LAST,1)
STARTED.addQuestDrop(CARADINE,WATERBINDER,1)
STARTED.addQuestDrop(CARADINE,EVERGREEN,1)
STARTED.addQuestDrop(CARADINE,RAIN_SONG,1)
STARTED.addQuestDrop(CARADINE,RELIC_BOX,1)

# Made by Mr. Have fun! - Version 0.3 by DrLecter
import sys
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 = "q250_exp_cruma"


DUSHA = 9427
ADENA = 12262
ADENA1 = 57

class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onEvent (self,event,st) :
htmltext = event
if event == "2.htm" :
st.set("cond","1")
st.setState(STARTED)
#1 lvl 100 dush
elif event == "5.htm" :
st.takeItems(DUSHA,25)
st.set("cond","2")
elif event == "8.htm" :
st.takeItems(DUSHA,50)
st.set("cond","3")
elif event == "11.htm" :
st.takeItems(DUSHA,100)
st.set("cond","4")
elif event == "14.htm" :
st.takeItems(DUSHA,150)
st.set("cond","5")
elif event == "17.htm" :
st.takeItems(DUSHA,250)
st.set("cond","6")
elif event == "20.htm" :
st.takeItems(DUSHA,500)
st.set("cond","7")
elif event == "24.htm" :
st.takeItems(DUSHA,1000)
st.set("cond","8")







return htmltext

def onTalk (self,npc,player):
htmltext = "<html><body>This quest has already been completed.</body></html>"
st = player.getQuestState(qn)
if not st : return htmltext

npcId = npc.getNpcId()
id = st.getState()

if id == CREATED :
st.set("cond","0")
#если кв не взят, дать квест
if st.getInt("cond")==0 :
htmltext = "1.htm"
#если взял кв, нет 100 душ
if st.getInt("cond")==1 and st.getQuestItemsCount(DUSHA) < 25:
htmltext = "3.htm"
#если взял кв, есть 100+ душ
if st.getInt("cond")==1 and st.getQuestItemsCount(DUSHA) >= 25:
htmltext = "4.htm"

#гильда 1 лвл, нет душ
if st.getInt("cond")==2 and st.getQuestItemsCount(DUSHA) < 50:
htmltext = "6.htm"

#гильда 1 лвл, есть души
if st.getInt("cond")==2 and st.getQuestItemsCount(DUSHA) >= 50:
htmltext = "7.htm"

#гильда 2 лвл, нет души
if st.getInt("cond")==3 and st.getQuestItemsCount(DUSHA) < 100:
htmltext = "9.htm"
#гильда 2 лвл, есть души
if st.getInt("cond")==3 and st.getQuestItemsCount(DUSHA) >= 100:
htmltext = "10.htm"

#гильда 3 лвл, нет души
if st.getInt("cond")==4 and st.getQuestItemsCount(DUSHA) >= 150:
htmltext = "12.htm"
#гильда 3 лвл, есть души
if st.getInt("cond")==4 and st.getQuestItemsCount(DUSHA) >= 150:
htmltext = "13.htm"

#гильда 4 лвл, нет души
if st.getInt("cond")==5 and st.getQuestItemsCount(DUSHA) >= 250:
htmltext = "15.htm"
#гильда 4 лвл, есть души
if st.getInt("cond")==5 and st.getQuestItemsCount(DUSHA) >= 250:
htmltext = "16.htm"

#гильда 5 лвл, нет души
if st.getInt("cond")==6 and st.getQuestItemsCount(DUSHA) >= 500:
htmltext = "18.htm"
#гильда 5 лвл, есть души
if st.getInt("cond")==6 and st.getQuestItemsCount(DUSHA) >= 500:
htmltext = "19.htm"

#гильда 6 лвл, нет души
if st.getInt("cond")==7 and st.getQuestItemsCount(DUSHA) < 1000:
htmltext = "22.htm"
#гильда 6 лвл, есть души
if st.getInt("cond")==7 and st.getQuestItemsCount(DUSHA) >= 1000:
htmltext = "23.htm"

if st.getInt("cond")==8:
htmltext = "25.htm"


return htmltext

def onKill(self,npc,player,isPet):
partyMember = self.getRandomPartyMember(player,"1")
if not partyMember: return
st = partyMember.getQuestState(qn)

npcId = npc.getNpcId()
chance=17


if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 9712);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 13267);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 18447);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 18447);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 13267);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 13267);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 9123);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 9123);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 6683);

if st.getInt("cond") == 2 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 6683);






if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 24280);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 33167);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 46117);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 46117);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 33167);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 33167);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 22807);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 22807);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 16707);

if st.getInt("cond") == 3 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 16707);







if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 48560);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 66334);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 66334);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 66334);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 92234);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 92234);


if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 45614);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 45614);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 33414);

if st.getInt("cond") == 4 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 33414);












if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 72840);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 99501);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 99501);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 99501);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 138351);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 138351);


if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 68421);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 68421);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 50121);

if st.getInt("cond") == 5 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 50121);






if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 97123);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 132672);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 132672);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 132672);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 184473);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 184473);


if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 91230);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 91230);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 66830);

if st.getInt("cond") == 6 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 66830);






if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 145684);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 199008);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 199008);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 199008);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 276709);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 276709);


if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 136845);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 136845);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 100245);

if st.getInt("cond") == 7 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 100245);








if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39100]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 291368);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39082]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 398016);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39085]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 398016);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39086]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 398016);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39083]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 553418);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39084]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 553418);


if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39087]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 273690);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39088]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 273690);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39101]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 200490);

if st.getInt("cond") == 8 and player.getLevel() == 80 and npcId in [39112]:
if st.getRandom(10)<chance :
st.addExpAndSp(0, 200490);

return


QUEST = Quest(250,qn,"exp cruma")
CREATED = State('Start', QUEST)
STARTING = State('Starting', QUEST)
STARTED = State('Started', QUEST)
COMPLETED = State('Completed', QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(50004)

QUEST.addTalkId(50004)

QUEST.addKillId(39100)
QUEST.addKillId(39082)
QUEST.addKillId(39083)
QUEST.addKillId(39084)
QUEST.addKillId(39085)
QUEST.addKillId(39086)
QUEST.addKillId(39087)
QUEST.addKillId(39088)
QUEST.addKillId(39101)
QUEST.addKillId(39112)

# Made by disKret
import sys
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 = "q250_exp_cruma"


SOUL = 9427

GIGA = 39112
GIGAN = 39101


class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onEvent (self,event,st) :
htmltext = event
if event == "2.htm" :
st.set("cond","1")
st.setState(STARTED)
elif event == "5.htm" :
st.takeItems(SOUL,25)
st.set("cond","2")
elif event == "8.htm" :
st.takeItems(SOUL,50)
st.set("cond","3")
return htmltext


def onTalk (self,npc,player):
htmltext = "<html><body>This quest has already been completed.</body></html>"
st = player.getQuestState(qn)
if not st : return htmltext

npcId = npc.getNpcId()
id = st.getState()

if id == CREATED :
st.set("cond","0")
#если кв не взят, дать квест
if st.getInt("cond")==0 :
htmltext = "1.htm"
#если взял кв, нет 25 душ
if st.getInt("cond")==1 and st.getQuestItemsCount(SOUL) < 25:
htmltext = "3.htm"
#если взял кв, есть 25+ душ
if st.getInt("cond")==1 and st.getQuestItemsCount(SOUL) >= 25:
htmltext = "4.htm"

#гильда 1 лвл, нет душ
if st.getInt("cond")==2 and st.getQuestItemsCount(SOUL) < 50:
htmltext = "6.htm"

#гильда 1 лвл, есть души
if st.getInt("cond")==2 and st.getQuestItemsCount(SOUL) >= 50:
htmltext = "7.htm"

return htmltext

def onKill(self,npc,player,isPet):
npcId = npc.getNpcId()
if npcId == GIGA :
party = player.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
pst = partyMember.getQuestState(qn)
if pst :
if pst.getInt("cond") == 2 :
pst.giveItems(SOUL,1)
else :
pst = player.getQuestState(qn)
if pst :
if pst.getInt("cond") == 2 :
pst.giveItems(SOUL,1)
return

QUEST = Quest(250,qn,"exp cruma")
CREATED = State('Start', QUEST)
STARTED = State('Started', QUEST)
COMPLETED = State('Completed', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(50004)

QUEST.addTalkId(50004)

QUEST.addKillId(39100)
QUEST.addKillId(39082)
QUEST.addKillId(39083)
QUEST.addKillId(39084)
QUEST.addKillId(39085)
QUEST.addKillId(39086)
QUEST.addKillId(39087)
QUEST.addKillId(39088)
QUEST.addKillId(39101)
QUEST.addKillId(39112)
 

Refren

Участник
Пользователь
#7
Нашел вариант, при котором квест работает, но если игроки в пати, то бонус не распределяется равномерно, как в случае с нубл РБ, а выдается одному случайному члену группы, если 2 человека в группе то х2, если 3 члена - то х3 и так далее. Верно ли я понимаю, что с нубл РБ тот же принцип работает, но за счет условия "pst.getQuestItemsCount(RAIN_SONG) < 1" больше одного итема каждый член группы получить не может, и "остаток" переходит к следующему члену группы, или это должно работать иначе?
def onKill(self,npc,player,isPet):
partyMember = self.getRandomPartyMember(player)
if not partyMember: return

npcId = npc.getNpcId()
party = player.getParty()

if npcId in [39112] :

if party :
for partyMember in party.getPartyMembers().toArray() :
pst = partyMember.getQuestState(qn)
if pst :
st.addExpAndSp(0, 9712);

else :
pst = player.getQuestState(qn)
if pst :
st.addExpAndSp(0, 9712);
 
Сверху Снизу