Помогите разобраться с Геройством!
Доброго времени суток уважаемые форумчане.
Простите если эта тема уже поднималась, я пользовался поиском но точный ответ найти так и не смог.
Суть моей проблемы заключается в следующем.
Есть квест, он грузиться нормально все работает и за определеные монеты дает Геройство.
Но стоит персонажу перезайти и геройсто у него спадает.
Я проверял командой //sethero тоже самое и нет разници укажу я 1 день или 360 дней ,все равно после релога нет геройство и все тут.
вот код евента
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
COINOFLUCK=4037
# Start pages for quest
StartPages = "startPages.htm"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(COINOFLUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1":
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isHero() :
st.takeItems(COINOFLUCK,1000)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COINOFLUCK,15)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
если проблема в коде просьба подсказать где именно.
в базе данных вовремя покупки Геройство не создается строка с таблице `heroes` но геройсто дается и скилы поеявляютя, но стоит сделать релог все слетает(в рюкзаке остается только # Wings of Destiny Circlet (Hero))
Подскажите пожалуйста каким образом в квесте поправить чтоб геройство не слетало и держалось 30 дней.
Заранее большое спасибо за ответ
kristo1980: Доброго времени суток уважаемые форумчане.
Простите если эта тема уже поднималась, я пользовался поиском но точный ответ найти так и не смог.
Суть моей проблемы заключается в следующем.
Есть квест, он грузиться нормально все работает и за определеные монеты дает Геройство.
Но стоит персонажу перезайти и геройсто у него спадает.
Я проверял командой //sethero тоже самое и нет разници укажу я 1 день или 360 дней ,все равно после релога нет геройство и все тут.
вот код евентаКодimport sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
COINOFLUCK=4037
# Start pages for quest
StartPages = "startPages.htm"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(COINOFLUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1":
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isHero() :
st.takeItems(COINOFLUCK,1000)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COINOFLUCK,15)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
если проблема в коде просьба подсказать где именно.
в базе данных вовремя покупки Геройство не создается строка с таблице `heroes` но геройсто дается и скилы поеявляютя, но стоит сделать релог все слетает(в рюкзаке остается только # Wings of Destiny Circlet (Hero))
Подскажите пожалуйста каким образом в квесте поправить чтоб геройство не слетало и держалось 30 дней.
Заранее большое спасибо за ответ
Оно и будет слетать. Тебе нужно чтобы геройство напрямую в базу прописывалось.
Спасибо за подсказку, тогда поставлю вопрос ребром как дописать данное чудо приведенное в виде эвента чтоб оно писало в базу? ... пусть даже с активацией херо после рестарта сервера.
Если это не возможно , тогда пожалуйста подскажите где раздобыть эвент наподобие ,последнего героя, для явы.
Если возможно ссылку на данный эвент.
Заранее большое спасибо за ответ.
Я думаю можно вытащить способ из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337
— Заболел
DeadAdsl: Я думаю можно вытащить способ из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337
Я прошу прощенья за свою назойливость и заранее извиняюсь.
Пожалуйста подробнее покажите что из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337
вставить в мой код евента чтоб писало в базу.
вот код евента
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
COINOFLUCK=4037
# Start pages for quest
StartPages = "startPages.htm"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(COINOFLUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1":
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isHero() :
st.takeItems(COINOFLUCK,1000)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COINOFLUCK,15)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
Я уверен очень многие люди скажут вам спасибо и сейчас и в будущем когда столкнуться с данной проблемой.
Заранее большое спасибо за ответ.
kristo1980: Я прошу прощенья за свою назойливость и заранее извиняюсь.
Пожалуйста подробнее покажите что из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337
вставить в мой код евента чтоб писало в базу.
вот код евентаКодКод
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
COINOFLUCK=4037
# Start pages for quest
StartPages = "startPages.htm"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(COINOFLUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1":
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isHero() :
st.takeItems(COINOFLUCK,1000)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COINOFLUCK,15)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
Я уверен очень многие люди скажут вам спасибо и сейчас и в будущем когда столкнуться с данной проблемой.
Заранее большое спасибо за ответ.
Это только альтернатива, т.к. они написаны на разных языках
— Заболел
Пожалуйста подробнее покажите что из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337
вставить в мой код евента чтоб писало в базу.
вот код евента
смысла в данном коде нету, в нем вывоз процедуры херо такой же как и в коде получения херо
activeChar.setHero(true);
разница лишь в том что в первом случае присваивается данная команда итему, который используя вызываешь эту команду, а во втором напряму на чара действует, ну и + разные языки :)
я канечно ламер в таких вопросах, и у меня такой же косяк с квестом, однако я так понимаю что надо сделать что то подобное:
clan=st.getPlayer().getClan().getClanId()
con=L2DatabaseFactory.getInstance().getConnection()
offline=con.prepareStatement("DELETE FROM character_quests WHERE name = ? and char_id IN (SELECT obj_id FROM characters WHERE clanId =? AND online=0")
offline.setString(1, qn)
offline.setInt(2, clan)
try :
offline.executeUpdate()
offline.close()
con.close()
except :
try : con.close()
except : pass
покопался в ядре, откопал следующее:
{
_heroList = Hero.getInstance().getHeroes();
}
protected void writeImpl()
{
writeC(254);
writeH(35);
writeD(_heroList.size());
StatsSet hero;
for(Iterator i$ = _heroList.keySet().iterator(); i$.hasNext(); writeD(hero.getInteger("count")))
{
Integer heroId = (Integer)i$.next();
hero = (StatsSet)_heroList.get(heroId);
writeS(hero.getString("char_name"));
writeD(hero.getInteger("class_id"));
writeS(hero.getString("clan_name", ""));
writeD(hero.getInteger("clan_crest", 0));
writeS(hero.getString("ally_name", ""));
writeD(hero.getInteger("ally_crest", 0));
}
}
что то мне подсказывает что это как раз и надо использовать, только не знаю как :(
пакет: ExHeroList.class
попытался разобраться в структуре подключения к бд через пион, пока что вышло следующее:
clan=st.getPlayer().getClan().getClanId() # запрашиваем статус клан ид (равен 0)
con=L2DatabaseFactory.getInstance().getConnection() # подключаемся к бд
offline=con.prepareStatement("SELECT obj_Id FROM characters WHERE clanid=? AND online=0") # запрос obj_Id из таблицы characters согласно clanid и online
offline.setInt(1, clan) # clanid приравниваем clan (т.е. 0) и вводим в con.prepareStatement
rs=offline.executeQuery() # Выполняем con.prepareStatement
while (rs.next()) : # Ступор (не знаю что это и зачем) (предположение: после выполнения вышенаписанного следует вывод)
char_id=rs.getInt("obj_Id") # получаем obj_Id
try : # Вся что ниже импорт в таблицу определенных чисел
insertion = con.prepareStatement("INSERT INTO character_quests (char_id,name,var,value) VALUES (?,?,?,?)")
insertion.setInt(1, char_id)
insertion.setString(2, qn)
insertion.setString(3, "<state>")
insertion.setString(4, "Started")
insertion.executeUpdate()
insertion.close();
except : # Не знаю
try : insertion.close() # Вроде как повтор закрытия
except : pass # Не знаю
try :
con.close() # Похоже на закрытие con
except : # Не знаю
pass # Не знаю
Очень прошу поправить где ошибся и помочь разобраться с тем что пометил как не знаю
сории за синтаксис, так уж работает тег коде
да и еще, не понимаю зачем столько гемора для получения obj_Id, точнее предпологаю что данный гемор делался что бы сделать проверку на наличие id клана, но проверки не вижу, потом не проще ли было вывести obj_Id следующим кодом:
или я в чем то не прав?
obj_Id = st.getPlayer().getObjectId()
con = L2DatabaseFactory.getInstance().getConnection()
getList = conn.prepareStatement("SELECT char_name FROM characters WHERE obj_Id=?")
getList = conn.prepareStatement("SELECT class_id FROM characters WHERE obj_Id=?")
getList.setInt(1, obj_Id)
rs=getList.executeQuery()
while (rs.next()) :
ch_name=rs.getInt("char_name")
cs_id=rs.getInt("class_id")
try :
insertion = con.prepareStatement("INSERT INTO heroes (char_id,char_name,class_id,count,played) VALUES (?,?,?,?,?)")
insertion.setInt(1, obj_Id)
insertion.setString(2, ch_name)
insertion.setInt(1, cs_id)
insertion.setInt(1, 1)
insertion.setInt(1, 1)
insertion.executeUpdate()
insertion.close();
except :
try : insertion.close()
except : pass
try : con.close()
except : pass
вот, переделал функцию для внесения изменений в бд, но как её вызвать пока не могу понять :(
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
COINOFLUCK=4037
# Start pages for quest
StartPages = "startPages.htm"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
htmltext = event
count=st.getQuestItemsCount(COINOFLUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1":
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isHero() :
st.takeItems(COINOFLUCK,1000)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COINOFLUCK,15)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
Замени эту строчку своим кодом, может получится
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.serverpackets import *
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.model.entity import Hero
qn = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[40000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
Coin_Of_Luck=4037
Price_Of_Hero=2000
Price_Of_Noble=500
# Start pages for quest
StartPages = "startPages.htm"
#SQL
INSERT_HERO = "INSERT INTO heroes VALUES (?,?,?,?,?)"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onTalk (self,npc,player):
htmltext = " "
st = player.getQuestState(qn)
if not st : return htmltext
npcId=npc.getNpcId()
chariid=st.getPlayer().getObjectId()
classid=player.getClassId().getId()
count=st.getQuestItemsCount(COIN_OF_LUCK)
if count < 1 :
htmltext = "noCoinOfLuck.htm"
else:
if event == "1" && npcId == NPC :
if st.getQuestItemsCount(Coin_Of_Luck) < Price_Of_Hero :
htmltext = "noCoinOfLuck.htm"
if st.getPlayer().isHero() :
return "youHero.htm"
st.setState(State.COMPLETED)
else:
con=L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement(INSERT_HERO)
statement.setInt(1, chariid)
statement.setString(2, "LaZyHERO")
statement.setInt(3, classid)
statement.setInt(4, 1)
statement.setInt(5, 0)
statement.execute()
player.setHero(True)
player.sendPacket(UserInfo(player))
st.giveItems(DESTINY,1)
return "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if st.getPlayer().isNoble() :
return "youNoble.htm"
st.setState(State.COMPLETED)
if not st.getPlayer().isNoble() :
st.takeItems(COIN_OF_LUCK,Price_Of_Noble)
st.getPlayer().setNoble(True)
st.giveItems(TIARA,1)
return "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
htmltext = "exitQuest.htm"
st = st.getQuestState(qn)
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
вот вам... а дальше сами допишите пару моментов)
ЗЫ: если не справитесь выложу доработанный вариант
— ^_^
что то я не понял, о каких моментах идет речь
о LaZyHERO что ли? :)
а для чего сделанна двояная проверка?
htmltext = "noCoinOfLuck.htm"
else:
if event == "1" && npcId == NPC :
if st.getQuestItemsCount(Coin_Of_Luck) < Price_Of_Hero :
htmltext = "noCoinOfLuck.htm"
аа понял :) если типа колов меньше 1, т.е. 0 то он даже квест не запускает, а если больше 0 но меньше нужного кол-ва то квест запускает, и не закрывает :)
что то типа getPlayer().getName() я так думаю, хатя можно сделать и запросом в базу :)
mazillka, а ты умешь заставлять людей думать :), один тока твой энчантер чего стоит :)
xameleon: mazillka, а ты умешь заставлять людей думать :), один тока твой энчантер чего стоит :)
не энчантер)))
а криво совмещенные два "квеста" на выдачу хиро(с записью в бд) и нобл))
он лишь был поводом для ваших раздумий))
вот рабочий хиро вам))
from net.l2emuproject import L2DatabaseFactory
from net.l2emuproject.gameserver.network.serverpackets import *
from net.l2emuproject.gameserver.model.entity import Hero
from net.l2emuproject.gameserver.model.quest import State
from net.l2emuproject.gameserver.model.quest import QuestState
from net.l2emuproject.gameserver.model.quest.jython import QuestJython as JQuest
qn = "9000_Hero"
#NPC
NPC = 40000
#Required Items
adena = 57
#Price
price = 100
#SQL
INSERT_HERO = "INSERT INTO heroes VALUES (?,?,?,?,?)"
class Quest (JQuest) :
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
def onTalk (self,npc,player):
htmltext = " "
st = player.getQuestState(qn)
if not st : return htmltext
npcId=npc.getNpcId()
charid=st.getPlayer().getObjectId()
classid=player.getClassId().getId()
charname=player.getName()
if npcId == NPC :
if st.getQuestItemsCount(adena) < price :
htmltext = "Announce: Not Enough Adena"
else:
con=L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement(INSERT_HERO)
statement.setInt(1, charid)
statement.setString(2, charname)
statement.setInt(3, classid)
statement.setInt(4, 1)
statement.setInt(5, 1)
statement.execute()
player.setHero(True)
player.sendPacket(UserInfo(player))
htmltext = "Announce: Congratulations, you have a hero"
return htmltext
QUEST = Quest(9000,qn,"Hero")
QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)
print "Announce: Loaded Succeseful"
так же по этому примеру можно и другие вещи сделать)
ЗЫ: надеюсь импорты поправить под себя все смогут())
— ^_^
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[90000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
Item=4037
CountHero=2000
CountNooblesse=500
# Start pages for quest
StartPages = "startPages.htm"
#SQL
INSERT_HERO = "INSERT INTO heroes VALUES (?,?,?,?,?)"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
player = st.getPlayer()
count = st.getQuestItemsCount(Item)
charid = player.getObjectId()
classid = player.getClassId().getId()
charname = player.getName()
if count < 1 :
htmltext = "noCoinOfLuck.htm"
elif player.isHero() :
htmltext = "youHero.htm"
st.setState(State.COMPLETED)
elif not player.isNoble() :
htmltext = "noNoble.htm"
st.setState(State.COMPLETED)
else :
if event == "1":
if not player.isHero() :
st.takeItems(Item,CountHero)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
else :
con=L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement(INSERT_HERO)
statement.setInt(1, charid)
statement.setString(2, charname)
statement.setInt(3, classid)
statement.setInt(4, 1)
statement.setInt(5, 1)
statement.execute()
player.sendPacket(UserInfo(player))
htmltext = "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if player.isNoble() :
htmltext = "youNoble.htm"
st.setState(State.COMPLETED)
if not player.isNoble() :
st.takeItems(Item,CountNooblesse)
player.setNoble(True)
st.giveItems(TIARA,1)
htmltext = "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
st = player.getQuestState(qn)
if not st : htmltext = "exitQuest.htm"
return htmltext
npcId=npc.getNpcId()
if npcId == NPC :
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
print "importing Quest: 9000_NPCHeroAndNobles done"
пишет следующую ошибку:
SyntaxError: ('inconsistent dedent', ('__init__.py', 51, 49, '\t\t\t\t\t\tst.getPlayer().setHero(True)'))
xameleon:Раскрывающийся текстКодimport sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[90000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
Item=4037
CountHero=2000
CountNooblesse=500
# Start pages for quest
StartPages = "startPages.htm"
#SQL
INSERT_HERO = "INSERT INTO heroes VALUES (?,?,?,?,?)"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
player = st.getPlayer()
count = st.getQuestItemsCount(Item)
charid = player.getObjectId()
classid = player.getClassId().getId()
charname = player.getName()
if count < 1 :
htmltext = "noCoinOfLuck.htm"
elif player.isHero() :
htmltext = "youHero.htm"
st.setState(State.COMPLETED)
elif not player.isNoble() :
htmltext = "noNoble.htm"
st.setState(State.COMPLETED)
else :
if event == "1":
if not player.isHero() :
st.takeItems(Item,CountHero)
st.getPlayer().setHero(True)
st.giveItems(DESTINY,1)
else :
con=L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement(INSERT_HERO)
statement.setInt(1, charid)
statement.setString(2, charname)
statement.setInt(3, classid)
statement.setInt(4, 1)
statement.setInt(5, 1)
statement.execute()
player.sendPacket(UserInfo(player))
htmltext = "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if player.isNoble() :
htmltext = "youNoble.htm"
st.setState(State.COMPLETED)
if not player.isNoble() :
st.takeItems(Item,CountNooblesse)
player.setNoble(True)
st.giveItems(TIARA,1)
htmltext = "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
def onTalk (self,npc,st):
st = player.getQuestState(qn)
if not st : htmltext = "exitQuest.htm"
return htmltext
npcId=npc.getNpcId()
if npcId == NPC :
st.setState(State.STARTED)
return StartPages
QUEST = Quest(9000, qn, "Hero and Nobles")
for npcId in NPC:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
print "importing Quest: 9000_NPCHeroAndNobles done"
пишет следующую ошибку:
SyntaxError: ('inconsistent dedent', ('__init__.py', 51, 49, '\t\t\t\t\t\tst.getPlayer().setHero(True)'))
Не правильно сделал отступ. Смотри инит файл в notepad++
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.serverpackets import *
from net.sf.l2j.gameserver.model.entity import Hero
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 = "9000_NPCHeroAndNobles"
# Quest NPC
NPC=[90000]
# Wings of Destiny Circlet (Hero)
DESTINY=6842
# Noblesse Tiara (Noblesse)
TIARA=7694
# Coin of Luck
Item=4037
CountHero=2000
CountNooblesse=500
# Start pages for quest
StartPages = "startPages.htm"
#SQL
INSERT_HERO = "INSERT INTO heroes VALUES (?,?,?,?,?)"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent(self,event,st):
player = st.getPlayer()
count = st.getQuestItemsCount(Item)
charid = player.getObjectId()
classid = player.getClassId().getId()
charname = player.getName()
if count < 1 :
htmltext = "noCoinOfLuck.htm"
elif player.isHero() :
htmltext = "youHero.htm"
st.setState(State.COMPLETED)
elif not player.isNoble() :
htmltext = "noNoble.htm"
st.setState(State.COMPLETED)
else :
if event == "1":
if not player.isHero() :
st.takeItems(Item,CountHero)
con=L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement(INSERT_HERO)
statement.setInt(1, charid)
statement.setString(2, charname)
statement.setInt(3, classid)
statement.setInt(4, 1)
statement.setInt(5, 1)
statement.execute()
st.giveItems(DESTINY,1)
player.setHero(True)
player.sendPacket(UserInfo(player))
htmltext = "congrYouIsHero.htm"
st.setState(State.COMPLETED)
if event == "3":
if player.isNoble() :
htmltext = "youNoble.htm"
st.setState(State.COMPLETED)
if not player.isNoble() :
st.takeItems(Item,CountNooblesse)
player.setNoble(True)
st.giveItems(TIARA,1)
htmltext = "congrYouIsNoble.htm"
st.setState(State.COMPLETED)
if htmltext != event:
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
SyntaxError: ('inconsistent dedent', ('__init__.py', 72, 49, '\t\t\t\t\t\tplayer.setNoble(True)'))
вроде все отступы верные, непонимаю....
квест отладил, вроде все работает, единственное, методом setHero(True) херо дается только до рестарта клиента, а данные херо которые заносятся в базу, только после рестарта сервера :).
как исправить этот промежуток я не знаю :(, есть у кого нибудь соображения по этому поводу?
мое предположение: херо дается и без рестарта сервера в том случае если у вас есть необходимое чисто очков, и по определенным дням, м.б. можно как то вызвать эту функцию на определенного игрока при выполнении квеста?!
кто то писал что есть команда getHero то есть //gethero nick 1 (1-кол-во дней)
по поводу хиро, подскажите плз как можно сделать хиро ауру(само свечение) нпсу(ч-з скилл или еще как то?)
p.s. ребят может коды под спойлер уберете?






