Skip to content
La2Base
Home
DownloadsWikiForumFAQ
Search
ruen
Sign up Login
HomeFilesWikiLogin
  • Home
  • Downloads
  • Wiki
  • FAQ
  • Contact Us
  • About
  • Rules
  • Privacy
  • Terms of Service

© 2026 la2base.com · All rights reserved

ruen
Forum/Форум для новичков[JAVA]/Помогите разобраться с Геройством!
Search

Помогите разобраться с Геройством!

25 replies436 viewsCurrently viewing: 1
kristo1980
kristo1980

User

Новичок

Posts: 16

На форуме с: 03/26/2009

Рейтинг: 0

· 10/31/2009, 09:57 AM

Доброго времени суток уважаемые форумчане.

Простите если эта тема уже поднималась, я пользовался поиском но точный ответ найти так и не смог.
Суть моей проблемы заключается в следующем.

Есть квест, он грузиться нормально все работает и за определеные монеты дает Геройство.
Но стоит персонажу перезайти и геройсто у него спадает.

Я проверял командой //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 дней.

Заранее большое спасибо за ответ

0
sff
sff

User

Участник

Posts: 83

На форуме с: 09/08/2008

Репутация: +19

Рейтинг: 0

· 10/31/2009, 11:28 AM

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 дней.

Заранее большое спасибо за ответ

Оно и будет слетать. Тебе нужно чтобы геройство напрямую в базу прописывалось.

0
kristo1980
kristo1980

User

Новичок

Posts: 16

На форуме с: 03/26/2009

Рейтинг: 0

· 10/31/2009, 12:27 PM

Спасибо за подсказку, тогда поставлю вопрос ребром как дописать данное чудо приведенное в виде эвента чтоб оно писало в базу? ... пусть даже с активацией херо после рестарта сервера.

Если это не возможно , тогда пожалуйста подскажите где раздобыть эвент наподобие ,последнего героя, для явы.
Если возможно ссылку на данный эвент.

Заранее большое спасибо за ответ.

0
DeadAdsl
DeadAdsl

User

Ветеран

Posts: 1208

На форуме с: 12/21/2007

Репутация: +592

Рейтинг: 0

· 10/31/2009, 12:47 PM

Я думаю можно вытащить способ из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337

— Заболел

0
kristo1980
kristo1980

User

Новичок

Posts: 16

На форуме с: 03/26/2009

Рейтинг: 0

· 10/31/2009, 12:56 PM

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)



Я уверен очень многие люди скажут вам спасибо и сейчас и в будущем когда столкнуться с данной проблемой.

Заранее большое спасибо за ответ.

0
DeadAdsl
DeadAdsl

User

Ветеран

Posts: 1208

На форуме с: 12/21/2007

Репутация: +592

Рейтинг: 0

· 10/31/2009, 01:25 PM

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)



Я уверен очень многие люди скажут вам спасибо и сейчас и в будущем когда столкнуться с данной проблемой.

Заранее большое спасибо за ответ.

Это только альтернатива, т.к. они написаны на разных языках

— Заболел

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 12:14 PM

Цитата
Я прошу прощенья за свою назойливость и заранее извиняюсь.
Пожалуйста подробнее покажите что из этого скрипта - http://la2base.ru/forum/index.php?s=&s...st&p=212337


вставить в мой код евента чтоб писало в базу.

вот код евента

смысла в данном коде нету, в нем вывоз процедуры херо такой же как и в коде получения херо
Код
st.getPlayer().setHero(True)
activeChar.setHero(true);

разница лишь в том что в первом случае присваивается данная команда итему, который используя вызываешь эту команду, а во втором напряму на чара действует, ну и + разные языки :)
я канечно ламер в таких вопросах, и у меня такой же косяк с квестом, однако я так понимаю что надо сделать что то подобное:
Код
def offlineMemberExit(st) :
  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

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 12:47 PM

покопался в ядре, откопал следующее:

Код
    public ExHeroList()
    {
        _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

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 02:30 PM

попытался разобраться в структуре подключения к бд через пион, пока что вышло следующее:

Цитата
def suscribe_members(st) :
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()

или я в чем то не прав?

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 05:53 PM

Код
def enchante(st) :
    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

вот, переделал функцию для внесения изменений в бд, но как её вызвать пока не могу понять :(

0
extrime
extrime

User

Участник

Posts: 85

На форуме с: 01/03/2008

Репутация: +118

Рейтинг: 0

· 01/07/2010, 06:12 PM

QUOTE
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)


Замени эту строчку своим кодом, может получится

0
Milenium
Milenium

User

Ветеран

Posts: 716

На форуме с: 12/30/2007

Репутация: +302

Рейтинг: 0

· 01/07/2010, 06:12 PM

Раскрывающийся текст
Код
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
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)


вот вам... а дальше сами допишите пару моментов)

ЗЫ: если не справитесь выложу доработанный вариант

— ^_^

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 07:18 PM

что то я не понял, о каких моментах идет речь

о LaZyHERO что ли? :)

а для чего сделанна двояная проверка?

Код
        if count < 1 :
            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() я так думаю, хатя можно сделать и запросом в базу :)

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/07/2010, 08:20 PM

mazillka, а ты умешь заставлять людей думать :), один тока твой энчантер чего стоит :)

0
Milenium
Milenium

User

Ветеран

Posts: 716

На форуме с: 12/30/2007

Репутация: +302

Рейтинг: 0

· 01/07/2010, 08:43 PM

xameleon: mazillka, а ты умешь заставлять людей думать :), один тока твой энчантер чего стоит :)


не энчантер)))

а криво совмещенные два "квеста" на выдачу хиро(с записью в бд) и нобл))
он лишь был поводом для ваших раздумий))


вот рабочий хиро вам))

Раскрывающийся текст
Код
import sys
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"


так же по этому примеру можно и другие вещи сделать)

ЗЫ: надеюсь импорты поправить под себя все смогут())

— ^_^

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/09/2010, 01:05 PM

Раскрывающийся текст
Код
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)'))

0
B
Baium
· 01/09/2010, 01:12 PM

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++

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/09/2010, 02:42 PM

Раскрывающийся текст
Код
import sys
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)'))

вроде все отступы верные, непонимаю....

0
Хам
Хам

User

Бывалый

Posts: 179

На форуме с: 03/16/2008

Репутация: +45

Рейтинг: 0

· 01/09/2010, 04:39 PM

квест отладил, вроде все работает, единственное, методом setHero(True) херо дается только до рестарта клиента, а данные херо которые заносятся в базу, только после рестарта сервера :).
как исправить этот промежуток я не знаю :(, есть у кого нибудь соображения по этому поводу?

мое предположение: херо дается и без рестарта сервера в том случае если у вас есть необходимое чисто очков, и по определенным дням, м.б. можно как то вызвать эту функцию на определенного игрока при выполнении квеста?!

0
E
eforia
· 01/09/2010, 05:11 PM

кто то писал что есть команда getHero то есть //gethero nick 1 (1-кол-во дней)
по поводу хиро, подскажите плз как можно сделать хиро ауру(само свечение) нпсу(ч-з скилл или еще как то?)
p.s. ребят может коды под спойлер уберете?

0
Topic is closed for replies