Хлоро-скрипт "Часы на сервере"
Сборка: L2Open rev.630 gracia final
Краткое изложение СУТИ проблемы: Решил переделать скрипт под l2open
from net.sf.l2j.gameserver.serverpackets import SystemMessage
from net.sf.l2j.gameserver.model import L2World
CONFIG = {
'format12-24': 12,
'debug': False # В консоль выведется все названия временных зон.
}
TOWNS = [
['Europe/Moscow', u'Moscow', '(MSK/GMT+3)'], # Первый параметр необходимо брать из TimeZones.txt
['Europe/Kiev', u'Kiev', '(GMT+2)'],
['Europe/Samara', u'Samara', '(GMT+4)'],
['Asia/Irkutsk', u'Irkutsk', '(GMT+8)'],
['Asia/Vladivostok', u'Vladivostok', '(GMT+10)']
]
def SysMessageToAll(msgID,addtext1,addtext2) :
players = L2World.getInstance().getAllPlayers().toArray()
for char in players:
sm1 = SystemMessage(msgID).addString(addtext1)
sm2 = sm1.addString(addtext2)
char.sendPacket(sm2)
return
def Clock_main() :
print "[Cron-script by XJIOPKA] Po voprosam priobretenija e-mail: [email protected]."
SysMessageToAll(432,'Priobresti CLOCK-script','e-mail: [email protected]')
return
Clock_main()
После смены
from net.sf.l2j.gameserver.model import L2World
На
from com.l2open.gameserver.network.serverpackets import SystemMessage
from com.l2open.gameserver.model import L2World
Вылезло:
Line: -1 - Column: -1
Traceback (innermost last):
File "clock.py", line 31, in ?
File "clock.py", line 27, in Clock_main
File "clock.py", line 18, in SysMessageToAll
AttributeError: toArray
Вопрос: в чем причина и как исправить?
Мои соображения по этому поводу: Нету,хотя может импорты не те?ТОгда какие должны быть?
Возможно в сборке нельзя сделать так?
А именно переход в массив. Ногами не пинать, сборку опенов в глаза не видел...
и как тогда быть?
l2jdb: и как тогда быть?
Возможно стоит посмотреть, что возвращает метод getAllPlayers, а потом из этого исходить?
может для примера выложить работующий скрипт из open где это встречается?
Просто я в этом не силен
from com.l2open.gameserver.model.quest import State
from com.l2open.gameserver.model.quest import QuestState
from com.l2open.gameserver.model.quest import Quest
from com.l2open.gameserver.datatables import DoorTable
from com.l2open.gameserver.datatables import SkillTable
from com.l2open.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2open.gameserver import Announcements
from com.l2open import L2DatabaseFactory
from com.l2open.gameserver.ai import CtrlIntention
from com.l2open.util import Rnd
from java.lang import System
from com.l2open.gameserver.model import L2World
from com.l2open.gameserver.model.actor.instance import L2DoorInstance
from com.l2open.gameserver.datatables import DoorTable;
qn = "777_LastHero"
# =======================================#
# Настройки #
# =======================================#
# Название Эвента (только английские символы)
Event_name = "LastHero"
# Город, в котором вы хотите поставить регистрирующего НПЦ.
StartLocation = "Giran"
# ID-номер регистрирующего нпц
Reg_Npc = 77777
# Координаты, где будет появляться регистрирующий НПЦ
StartNpcCoordinat = [82698,148638,-3468]
# Вещи, необходимый для участия в Эвенте.
# Формат записи [itemId1,itemId2,....]
Price = [5575,57]
# Сколько заданных вещей необходимых для участия в Эвенте. Если хотите чтобы участие было бесплатным - поставте 0.
# Формат записи [itemId1_count,itemId2_count,....]
Price_count = [0,5]
# Минимальный уровень, на котором игрок сможет принять участие в Эвенте.
Min_level = 40
# Через какое время эвент запустится после рестарта сервера.(указывать в секундах)
Time_to_start_after_restart = 1000
# Через какое время после телепортации на эвент начнеться битва.(указывать в секундах)
Time_to_wait_battle = 30
# Время между Эвентами.(указывать в минутах)
Time_to_next_start = 240
# Время на регистрацию.(указывать в минутах)
Time_for_regestration = 10
# Как часто аннонсить о регистрации на Эвент.(указывать в секундах)
Announce_reg_delay = 60
# Минимальное количество игроков(не меньше 2).
Min_participate_count = 2
# Максимальное количество игроков.
Max_participate_count = 80
# Список наград при победе в эвенте. Выдаётся каждому игроку.
# Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...]
Rewards = [[4356,500,100],[6393,100,100]]
# Координаты точки куда будут телепортироваться игроки.
Teleport_coordinat = [149438, 46785, -3413]
# Двери которые будут закрываться на периоод прохождения эвента.
# Формат записи: [Door_id1,Door_id2,...]
Doors = [24190002,24190003]
# ================Неизменять================ #
lastPlayers = []
lastX = []
lastY = []
lastZ = []
closed = 1
Players = []
Deadplayers = []
annom = 1
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 *1000, None, None)
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
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*60000, npc, None)
self.startQuestTimer("announce", Announce_reg_delay*1000, None, None)
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", 1000, None, None)
self.startQuestTimer("open_reg", Time_to_next_start*60000, None, None)
else:
closed=1
Announcements.getInstance().announceToAll("Event "+str(Event_name)+" has started!")
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)>1 :
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", 1000, None, None)
if event == "announce" and closed==0 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*1000, None, None)
if event == "set_winner" :
if len(Players) > 0 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 :
Announcements.getInstance().announceToAll("Event "+str(Event_name)+" has ended.")
Announcements.getInstance().announceToAll("Event: "+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:
n = 0
for nm in lastPlayers :
i=L2World.getInstance().getPlayer(nm)
i.teleToLocation(lastX[n],lastY[n],lastZ[n])
n = n + 1
if winner<>None:
if winner.isOnline() :
for id, count, chance in Rewards :
winner.getQuestState(qn).giveItems(id,count)
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*60000, None, None)
if event == "exit" :
if player.getName() in Players:
Players.remove(player.getName())
return "exit.htm"
else:
return "default.htm"
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*1000, None, None)
else :
self.startQuestTimer("start_event", 1000, None, None)
QUEST = Quest(777, qn, "Custom")
QUEST.addStartNpc(int(Reg_Npc))
QUEST.addTalkId(int(Reg_Npc))
l2jdb: может для примера выложить работующий скрипт из open где это встречается?
Просто я в этом не силен
Если возможно, то в ЛС, ссылку на трек/свн опенов, чтобы посмотреть, что возвращает этот метод. Далее уже можно будет и пример "настряпать".
отправил
Возможно что Л2ворд - статический класс попробуй L2World.getAllPlayers().toArray()
Line: -1 - Column: -1
Traceback (innermost last):
File "clock.py", line 31, in ?
File "clock.py", line 27, in Clock_main
File "clock.py", line 18, in SysMessageToAll
TypeError: getAllPlayers(): expected 1 args; got 0
Полностью скрипт выложи, попробую сделать.
_http://la2base.ru/java/dop_java/5920-xloro-skript-chasy-na-servere.html
или самый 1 пост
up
Извиняюсь за столь долгий ответ, возможно уже не актуально, но все же...
У карты нет метода toArray и никогда не было. Для построения массива нужно запросить коллекцию, а потом уже составлять массив (хотя я бы использовал попросту интераторы вместо массивов, имхо удобнее).
Замените эту строку:
На эту:
Спасибо , вроде запустился сервер без ошибок завтра проверю в игре
l2jdb: Сборка: L2Open rev.630 gracia final
Краткое изложение СУТИ проблемы: Решил переделать скрипт под l2openРаскрывающийся текстКодimport sys
from net.sf.l2j.gameserver.serverpackets import SystemMessage
from net.sf.l2j.gameserver.model import L2World
CONFIG = {
'format12-24': 12,
'debug': False # В консоль выведется все названия временных зон.
}
TOWNS = [
['Europe/Moscow', u'Moscow', '(MSK/GMT+3)'], # Первый параметр необходимо брать из TimeZones.txt
['Europe/Kiev', u'Kiev', '(GMT+2)'],
['Europe/Samara', u'Samara', '(GMT+4)'],
['Asia/Irkutsk', u'Irkutsk', '(GMT+8)'],
['Asia/Vladivostok', u'Vladivostok', '(GMT+10)']
]
def SysMessageToAll(msgID,addtext1,addtext2) :
players = L2World.getInstance().getAllPlayers().toArray()
for char in players:
sm1 = SystemMessage(msgID).addString(addtext1)
sm2 = sm1.addString(addtext2)
char.sendPacket(sm2)
return
def Clock_main() :
print "[Cron-script by XJIOPKA] Po voprosam priobretenija e-mail: [email protected]."
SysMessageToAll(432,'Priobresti CLOCK-script','e-mail: [email protected]')
return
Clock_main()
После сменыРаскрывающийся текстКодfrom net.sf.l2j.gameserver.serverpackets import SystemMessage
from net.sf.l2j.gameserver.model import L2World
На
from com.l2open.gameserver.network.serverpackets import SystemMessage
from com.l2open.gameserver.model import L2World
Вылезло:Раскрывающийся текстКодError on: E:\l2open630\Game\data\scripts\cron\clock.py.error.log
Line: -1 - Column: -1
Traceback (innermost last):
File "clock.py", line 31, in ?
File "clock.py", line 27, in Clock_main
File "clock.py", line 18, in SysMessageToAll
AttributeError: toArray
Вопрос: в чем причина и как исправить?
Мои соображения по этому поводу: Нету,хотя может импорты не те?ТОгда какие должны быть?
а зачем он вобще надо? оО как по мне бесполезная штука



