проблема с Евентом - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 31.10.2010, 20:13   #1
Пользователь

Автор темы (Топик Стартер) проблема с Евентом

возникла проблема после добавления евента LastHiro на сборку скории, суть проблемы в том что после нажатия в окошке Участвовать, окошко проподает и в геим сервере показивает вот ето: http://s016.radikal.ru/i336/1010/97/1705bd07ac01.jpg

Но после второй попытке регает без проблем, может кто подскажит в чём проблема? может в импортах или питоне?
mar4ello24 вне форума Ответить с цитированием
Непрочитано 31.10.2010, 20:22   #2
Аватар для Array
Супергерой

По умолчанию Re: проблема с Евентом

Твой захламленный рабочий стол видно, но вот ошибку не очень.
Заодно скрипт эвента бы выложил.
P.S. ошибку из консоли можно было в виде текста показать.
Array вне форума Ответить с цитированием
Непрочитано 31.10.2010, 22:54   #3
Пользователь

Автор темы (Топик Стартер) Re: проблема с Евентом

Цитата:
Сообщение от Array Посмотреть сообщение
Твой захламленный рабочий стол видно, но вот ошибку не очень.
Заодно скрипт эвента бы выложил.
P.S. ошибку из консоли можно было в виде текста показать.

Не повериш, рабочий стол каждый день чишю,

PHP код:
Вот сам инит.ру :

import sys
from com
.l2scoria.gameserver.model.quest import State
from com
.l2scoria.gameserver.model.quest import QuestState
from com
.l2scoria.gameserver.datatables.csv import DoorTable
from com
.l2scoria.gameserver.datatables import SkillTable
from com
.l2scoria.gameserver.model.quest.jython import QuestJython as JQuest
from com
.l2scoria.gameserver.model.entity import Announcements
from com
.l2scoria.util.database import L2DatabaseFactory
from com
.l2scoria.gameserver.ai import CtrlIntention
from com
.l2scoria.util.random import Rnd
from java
.lang import System
from com
.l2scoria.gameserver.model import L2World

qn 
"777_LastHero"
# =======================================#
#               Настройки                #
# =======================================#
# Название Эвента (только английские символы)
Event_name "LastHero" 

# Город, в котором вы хотите поставить регистрирующего НПЦ.
StartLocation "Giran" 

# ID-номер регистрирующего нпц
Reg_Npc 31230

# Координаты, где будет появляться регистрирующий НПЦ
StartNpcCoordinat = [83238,148623,-3400

# Вещи, необходимый для участия в Эвенте.
# Формат записи [itemId1,itemId2,....]
Price = [57]

# Сколько заданных вещей необходимых для участия в Эвенте. Если хотите чтобы участие было бесплатным - поставте 0.
# Формат записи [itemId1_count,itemId2_count,....]
Price_count = [0]

# Минимальный уровень, на котором игрок сможет принять участие в Эвенте.
Min_level 1

# Через какое время эвент запустится после рестарта сервера.(указывать в секундах)
Time_to_start_after_restart 3600

# Через какое время после телепортации на эвент начнеться битва.(указывать в секундах)
Time_to_wait_battle 30

# Длительность эвента. (указывать в минутах)
EVENT_INTERVAL 5

# Время между Эвентами.(указывать в минутах)
Time_to_next_start 3600

# Время на регистрацию.(указывать в минутах)
Time_for_regestration 20

# Как часто аннонсить о регистрации на Эвент.(указывать в секундах)
Announce_reg_delay 300

# Минимальное количество игроков(не меньше 2).
Min_participate_count 2

# Максимальное количество игроков.
Max_participate_count 80

# Список наград при победе в эвенте. Выдаётся каждому игроку. 
# Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...]
Rewards = [[4356,500,100],[6393,100,100]] 

# Координаты точки куда будут телепортироваться игроки.
Teleport_coordinat = [14943846785, -3413]

# Двери которые будут закрываться на периоод прохождения эвента.
# Формат записи: [Door_id1,Door_id2,...]
Doors = [24190002,24190003]


# ================Неизменять================ #
lastPlayers = []
lastX = []
lastY = []
lastZ = []
closed 1
Players 
= []
Deadplayers = []
annom 1
0
# ========================================== #

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

 
def init_LoadGlobalData(self) :
   
self.startQuestTimer("open_reg"Time_to_start_after_restart *1000NoneNone)
   return

 
def onTalk (Self,npc,player):
  global 
Players,closed
  st 
player.getQuestState(qn)
  
npcId npc.getNpcId()
  if 
npcId == Reg_Npc:
   if 
closed<>1:
    if 
not player.isInOlympiadMode() :
     if 
player.getLevel() >= Min_level:
      if 
player.getName() not in Players:
       if 
len(Players) <= Max_participate_count :
        if 
Price_count[0]<>0:   
         if 
st.getQuestItemsCount(Price[0])>Price_count[0]:
           
st.takeItems(Price[0],Price_count[0])
           
Players.append(player.getName())
           return 
"reg.htm"
         
else:
           
st.exitQuest(1)
           return 
"noPrice.htm"
        
else:
            
Players.append(player.getName())
            return 
"reg.htm"
       
else:         
         return 
"max.htm"
      
else:
       return 
"yje.htm"
     
else:
      return 
"lvl.htm"
    
else:
     return 
"You register in olympiad games now"
   
else:
    return 
"noreg.htm"
  
return

 
def onAdvEvent (self,event,npc,player):
   global 
Deadplayers,Players,annom,closed,Doors,lastPlayers,lastX,lastY,lastZ,f,n
   
if event == "open_reg" :
    
closed 0
    annom 
1
    lastPlayers 
= []
    
Players = []
    
Deadplayers = []
    
lastX = []
    
lastY = []
    
lastZ = []
    
npc self.addSpawn(Reg_Npc,StartNpcCoordinat[0],StartNpcCoordinat[1],StartNpcCoordinat[2],30000,False,0)
    
self.startQuestTimer("wait_battle"Time_for_regestration*60000npcNone)
    
self.startQuestTimer("announce"Announce_reg_delay*1000NoneNone)
    
Announcements.getInstance().announceToAll("Opened registration for "+str(Event_name)+" event! You can register in "+str(StartLocation)+".")
   if 
event == "start_event":
    if 
len(Players)< Min_participate_count :
      
closed=1
      Announcements
.getInstance().announceToAll("Event "+str(Event_name)+" was canceled due lack of participation.")
      
self.startQuestTimer("set_winner"1000NoneNone)
      
self.startQuestTimer("open_reg"Time_to_next_start*60000NoneNone)
    else:
      
closed=1
      Announcements
.getInstance().announceToAll("Event "+str(Event_name)+" has started!")
      
self.startQuestTimer("konec"EVENT_INTERVAL*60000NoneNone)
      
f=0
      
for nm in Players :
       
i=L2World.getInstance().getPlayer(nm)
       if 
i<>None:
        if 
i.isOnline() :
         
i.getAppearance().setVisible()
         
i.broadcastStatusUpdate()
         
i.broadcastUserInfo()
      while 
len(Players)>:
       for 
nm in Players :
        
i=L2World.getInstance().getPlayer(nm)
        if 
i<>None:
         if 
i.isDead():
          
i.reviveAnswer(0)
          
Deadplayers.append(i.getName())
          
Players.remove(i.getName())
      
self.startQuestTimer("set_winner"1000NoneNone)
   if 
event == "announce" and closed==and (Time_for_regestration*60 Announce_reg_delay annom)>0
     
Announcements.getInstance().announceToAll(str(Time_for_regestration*60 Announce_reg_delay annom ) + " seconds until event "+str(Event_name)+" will start! You can register in "+str(StartLocation)+".")
     
annom=annom+1
     self
.startQuestTimer("announce"Announce_reg_delay*1000NoneNone)
   if 
event == "set_winner" :
     if 
len(Players) > and len(Players Deadplayers) >= Min_participate_count:
         
winner=L2World.getInstance().getPlayer(Players[0])
         
Deadplayers.append(Players[0])
         if 
winner.isDead():
             
Announcements.getInstance().announceToAll("Event "+str(Event_name)+" has ended. All players is dead. Nobody Win")
         else :
             
f=
             Announcements
.getInstance().announceToAll("Event "+str(Event_name)+" has ended. "+str(Players[0])+" win!")
         for 
nm in Deadplayers :
             
i=L2World.getInstance().getPlayer(nm)
             if 
i<>None and i.isOnline():
                 if 
i.isDead():
                     
i.doRevive()
                 
i.setCurrentCp(i.getMaxCp())
                 
i.setCurrentHp(i.getMaxHp())
                 
i.setCurrentMp(i.getMaxMp())
                 
i.stopAllEffects()
                 
i.broadcastStatusUpdate()
                 
i.broadcastUserInfo()
         if 
len(Deadplayers)>0:
             
0
             
for nm in lastPlayers :
                 
i=L2World.getInstance().getPlayer(nm)
                 
i.teleToLocation(lastX[n],lastY[n],lastZ[n])
                 
1
         
if winner<>None:
           if 
winner.isOnline() :
               
L2World.getInstance().getPlayer(Players[0]).setHero(True)
     
Announcements.getInstance().announceToAll("Next time registration opend at "+str(Time_to_next_start)+" minute(s)")
     for 
d in Doors:
         
door DoorTable.getInstance().getDoor(d)
         
door.openMe()
     
lastPlayers = []
     
Players = []
     
Deadplayers = []
     
lastX = []
     
lastY = []
     
lastZ = []
     
self.startQuestTimer("open_reg"Time_to_next_start*60000NoneNone)
   if 
event == "exit" :
     if 
player.getName() in Players:
       
Players.remove(player.getName())
       return 
"exit.htm"
     
else:
       return 
"default.htm"

   
if event == "konec" :
    if 
f==0:
     for 
nm in Players :
      
i=L2World.getInstance().getPlayer(nm)
      if 
i<>None:
       if 
i.isOnline() :
        
i.teleToLocation(82698,148638,-3468)
        
i.broadcastStatusUpdate()
        
i.broadcastUserInfo()
     
Announcements.getInstance().announceToAll("Event "+str(Event_name)+" was ended in drawn.")
     
self.startQuestTimer("open_reg"Time_to_next_start*60000NoneNone)

   if 
event == "wait_battle":
    
npc.deleteMe()
    if 
len(Players) >= Min_participate_count:
      for 
nm in Players:
        
i=L2World.getInstance().getPlayer(nm)
        if 
i<>None:
          if 
not i.isOnline() or i.isInOlympiadMode() or i.isInJail():
            
Players.remove(nm)
        else:
            
Players.remove(nm)
      for 
nm in Players:
        
i=L2World.getInstance().getPlayer(nm)
        if 
i<>None:
          if 
i.isOnline() :
            if 
i.isDead():
              
i.doRevive()
            
i.setCurrentCp(i.getMaxCp())
            
i.setCurrentHp(i.getMaxHp())
            
i.setCurrentMp(i.getMaxMp())
            
i.stopAllEffects()
            
i.getAppearance().setInvisible();
            
i.broadcastStatusUpdate()
            
i.broadcastUserInfo()
            
lastPlayers.append(nm)
            
lastX.append(i.getX())
            
lastY.append(i.getY())
            
lastZ.append(i.getZ())
            
i.teleToLocation(Teleport_coordinat[0],Teleport_coordinat[1],Teleport_coordinat[2])
      for 
d in Doors:
        
door DoorTable.getInstance().getDoor(d)
        
door.closeMe()
      
Announcements.getInstance().announceToAll("Event "+str(Event_name)+": Registration close. You have "+str(Time_to_wait_battle)+" seconds for buffs before battle start")
      
self.startQuestTimer("start_event"Time_to_wait_battle*1000NoneNone)
    else :
        
self.startQuestTimer("start_event"1000NoneNone)

QUEST Quest(777qn"Custom")

QUEST.addStartNpc(int(Reg_Npc))
QUEST.addTalkId(int(Reg_Npc)) 
шяс сделаю по больше скрин ГС

Вот: http://s013.radikal.ru/i324/1010/ef/f61500c195ec.jpg

Добавлено через 11 часов 7 минут
может что то с питоном? вот с другова квеста:

PHP код:
# Made by Mr. - Version 0.3 by DrLecter
import sys
from com
.l2scoria.gameserver.model.quest import State
from com
.l2scoria.gameserver.model.quest import QuestState
from com
.l2scoria.gameserver.model.quest.jython import QuestJython as JQuest

qn 
"4_LongLiveLordOfFlame"

HONEY_KHANDAR,BEAR_FUR_CLOAK,BLOODY_AXE,ANCESTOR_SKULL,SPIDER_DUST,DEEP_SEA_ORB range(1541,1547)
NPC_GIFTS = {30585:BEAR_FUR_CLOAK,30566:HONEY_KHANDAR,30562:BLOODY_AXE,30560:ANCESTOR_SKULL,30559:SPIDER_DUST,30587:DEEP_SEA_ORB}

class 
Quest (JQuest) :

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

 
def onEvent (self,event,st) :
    
htmltext event
    
if event == "30578-03.htm" :
      
st.set("cond","1")
      
st.set("id","1")
      
st.setState(STARTED)
      
st.playSound("ItemSound.quest_accept")
    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()
   
cond st.getInt("cond")
   if 
id == COMPLETED :
     
htmltext "<html><body>This quest has already been completed.</body></html>"
   
elif npcId == 30578 :
     if 
cond == :
       if 
player.getRace().ordinal() != :
         
htmltext "30578-00.htm"
         
st.exitQuest(1)
       
elif player.getLevel() >= :
         
htmltext "30578-02.htm"
       
else:
         
htmltext "30578-01.htm"
         
st.exitQuest(1)
     
elif cond == :
       
htmltext "30578-04.htm"
     
elif cond == :
       
htmltext "30578-06.htm"
       
st.giveItems(4,1)
       for 
item in NPC_GIFTS.values():
           
st.takeItems(item,-1)
       
st.unset("cond")
       
st.setState(COMPLETED)
       
st.playSound("ItemSound.quest_finish")
   
elif npcId in NPC_GIFTS.keys() and cond == and id == STARTED:
     
item=NPC_GIFTS[npcId]
     
npc=str(npcId)
     if 
st.getQuestItemsCount(item) :
       
htmltext npc+"-02.htm"
     
else :
       
st.giveItems(item,1)
       
htmltext npc+"-01.htm"
       
count 0
       
for item in NPC_GIFTS.values():
         
count += st.getQuestItemsCount(item)
       if 
count == :
         
st.set("cond","2")
         
st.set("id","2")
         
st.playSound("ItemSound.quest_middle")
       else :
         
st.playSound("ItemSound.quest_itemget")
   return 
htmltext

QUEST     
Quest(4,qn,"Long Live the Paagrio Lord")
CREATED   State('Start',     QUEST)
STARTING  State('Starting',  QUEST)
STARTED   State('Started',   QUEST)
COMPLETED State('Completed'QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(30578)

QUEST.addTalkId(30578)

QUEST.addTalkId(30559)
QUEST.addTalkId(30560)
QUEST.addTalkId(30562)
QUEST.addTalkId(30566)
QUEST.addTalkId(30578)
QUEST.addTalkId(30585)
QUEST.addTalkId(30587)

for 
i in range(1541,1547) :
   
STARTED.addQuestDrop(30578,i,1
Добавлено через 23 часа 7 минут
вот после окончания евента ( тоесть не хватило сареганых на евент )
выдаёт питон ошыбку вот скрин http://s010.radikal.ru/i314/1011/25/d4fc44f7f689.jpg

вот пункт 202 :

Announcements.getInstance().announceToAll("Next time registration opend at "+str(Time_to_next_start)+" minute(s)")
for d in Doors:
door = DoorTable.getInstance().getDoor(d)
door.openMe()

может изза етого?

Последний раз редактировалось mar4ello24; 01.11.2010 в 22:01. Причина: Добавлено сообщение
mar4ello24 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 09:10. Часовой пояс GMT +3.

Вверх