Перейти к содержимому
La2Base
Главная
ЗагрузкиВикиФорумFAQ
Поиск
ruen
Регистрация Войти
ГлавнаяФайлыВикиВойти
  • Главная
  • Загрузки
  • Вики
  • FAQ
  • Обратная связь
  • О проекте
  • Правила
  • Конфиденциальность
  • Условия использования

© 2026 la2base.com · Все права защищены

ruen
Форум/Форум для новичков[JAVA]/Хлоро-скрипт "Часы на сервере"
Поиск

Хлоро-скрипт "Часы на сервере"

16 ответов338 просмотровСейчас просматривают: 1
L
l2jdb
· 01.02.2010, 18:18

Сборка: 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

Вопрос: в чем причина и как исправить?

Мои соображения по этому поводу: Нету,хотя может импорты не те?ТОгда какие должны быть?

0
ProGramMoS
ProGramMoS

Пользователь

Участник

Постов: 91

На форуме с: 10.03.2008

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

Рейтинг: 0

· 01.02.2010, 18:36

Возможно в сборке нельзя сделать так?

Код
players = L2World.getInstance().getAllPlayers().toArray()


А именно переход в массив. Ногами не пинать, сборку опенов в глаза не видел...

0
L
l2jdb
· 01.02.2010, 18:41

и как тогда быть?

0
ProGramMoS
ProGramMoS

Пользователь

Участник

Постов: 91

На форуме с: 10.03.2008

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

Рейтинг: 0

· 01.02.2010, 18:45

l2jdb: и как тогда быть?

Возможно стоит посмотреть, что возвращает метод getAllPlayers, а потом из этого исходить?

0
L
l2jdb
· 01.02.2010, 18:55

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

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

0
ProGramMoS
ProGramMoS

Пользователь

Участник

Постов: 91

На форуме с: 10.03.2008

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

Рейтинг: 0

· 02.02.2010, 00:11

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

Если возможно, то в ЛС, ссылку на трек/свн опенов, чтобы посмотреть, что возвращает этот метод. Далее уже можно будет и пример "настряпать".

0
L
l2jdb
· 02.02.2010, 07:24

отправил

0
M
mafey

Пользователь

Участник

Постов: 78

На форуме с: 11.07.2007

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

Рейтинг: 0

· 02.02.2010, 17:28

Возможно что Л2ворд - статический класс попробуй L2World.getAllPlayers().toArray()

0
L
l2jdb
· 02.02.2010, 20:54

Раскрывающийся текст
Код
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
TypeError: getAllPlayers(): expected 1 args; got 0

0
W
Wh1tePower
· 03.02.2010, 10:26

Полностью скрипт выложи, попробую сделать.

0
L
l2jdb
· 03.02.2010, 12:31

_http://la2base.ru/java/dop_java/5920-xloro-skript-chasy-na-servere.html

или самый 1 пост

0
L
l2jdb
· 04.02.2010, 16:38

up

0
ProGramMoS
ProGramMoS

Пользователь

Участник

Постов: 91

На форуме с: 10.03.2008

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

Рейтинг: 0

· 04.02.2010, 21:00

Извиняюсь за столь долгий ответ, возможно уже не актуально, но все же...

У карты нет метода toArray и никогда не было. Для построения массива нужно запросить коллекцию, а потом уже составлять массив (хотя я бы использовал попросту интераторы вместо массивов, имхо удобнее).
Замените эту строку:

Код
players = L2World.getInstance().getAllPlayers().toArray()


На эту:
Код
players = L2World.getInstance().getAllPlayers().values().toArray()

0
L
l2jdb
· 05.02.2010, 21:26

Спасибо , вроде запустился сервер без ошибок завтра проверю в игре

0
He e6eT
He e6eT

Пользователь

Участник

Постов: 79

На форуме с: 18.05.2008

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

Рейтинг: 0

· 08.02.2010, 06:27

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

Вопрос: в чем причина и как исправить?

Мои соображения по этому поводу: Нету,хотя может импорты не те?ТОгда какие должны быть?


а зачем он вобще надо? оО как по мне бесполезная штука to_become_senile.gif

0
DeadAdsl
DeadAdsl

Пользователь

Ветеран

Постов: 1208

На форуме с: 21.12.2007

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

Рейтинг: 0

· 08.02.2010, 13:09

ZaRRaZa: а зачем он вобще надо? оО как по мне бесполезная штука to_become_senile.gif

3.3.7

— Заболел

0
Тема закрыта для ответов