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

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

Ответ
Опции темы
Непрочитано 07.09.2010, 19:45   #1
Аватар для OkoPwnz
Пользователь

Автор темы (Топик Стартер) Как поменять место появления

Скажите плиз как поменять место появление в ивенте
вот код
Код:
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.datatables import DoorTable
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.ai import CtrlIntention
from net.sf.l2j.util import Rnd
from java.lang import System

qn = "5555_Peklo"
ATTAKERS = []
tek = 0
nyj = 1
NAME = "peklo" # Название (только английские символы)
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [82698,148638,-3473] # Соответственно координаты, где будет появляться НПЦ
PENI = 4037 # Итем, необходимый для участия
PENI_KOL = 0 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
TIME_FOR_WAIT = 90 # Время между ивентами в минутах
TIME_FOR_REG = 5 # Время на регистрацию в минутах
TEST_AFTER_RESTART = 2 # Время, через которое начнётся ивент после рестарта в минутах.
ANNOUNCE_INTERVAL = 2 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [174238,89532,5192] # Соответственно координаты, где будет появляться 1 моб
RADIUS = 400 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 #  Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 20 # Максимальное количество участников.
MOBS_TO_CHEL = 5 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
DOORS = [] # Пишем сюда список DoorId дверей через запятую, которые необходимо закрывать/открывать по началу/окончанию ивента. Или оставляем пустым.

class Quest (JQuest) :
 tek=0
 nyj=1
 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

 def init_LoadGlobalData(self) :
   self.saveGlobalQuestVar("annom", "1")
   closed = self.loadGlobalQuestVar("closed")
   self.saveGlobalQuestVar("count", "0")
   self.startQuestTimer("open", TEST_AFTER_RESTART *60000, None, None)
   return

 def onTalk (Self,npc,player):
   npcId = npc.getNpcId()
   if npcId == REGISTER:
        if player not in ATTAKERS :
         kolych = 0
         for i in ATTAKERS :
          kolych = kolych + 1
         if kolych <= YCH_MAX :
          if PENI_KOL<>0:   
           if st.getQuestItemsCount(PENI)>PENI_KOL:
                 st.takeItems(PENI,PENI_KOL)
                 ATTAKERS.append(player)
                 Self.saveGlobalQuestVar(str(player.getObjectId()), "in")
                 return "reg.htm"
           else:
                 st.exitQuest(1)
                 return "nopeni.htm"
          else:
                 ATTAKERS.append(player)
                 Self.saveGlobalQuestVar(str(player.getObjectId()), "in")
                 return "reg.htm"
         else:           
           return "max.htm"
        else:
         return "yje.htm"
   return

 def onAdvEvent (self,event,npc,player):
   global tek
   global nyj
   global ATTAKERS
   closed = self.loadGlobalQuestVar("closed")
   annom = int(self.loadGlobalQuestVar("annom"))
   if event == "open" :
         self.saveGlobalQuestVar("closed", "0")
         self.saveGlobalQuestVar("annom", "1")
         npc=self.addSpawn(REGISTER,locr[0],locr[1],locr[2],30000,False,0)
         self.startQuestTimer("close", TIME_FOR_REG*60000, npc, None)
         self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
         Announcements.getInstance().announceToAll("Opened registration for "+str(NAME)+" event!")
   if event == "close":
        tek=0
        nyj=1
        self.startQuestTimer("open", TIME_FOR_WAIT*60000, None, None)
        kolych = 0
        for i in ATTAKERS :
          kolych = kolych + 1
        if kolych < YCH_MIN :
          npc.deleteMe()
          self.saveGlobalQuestVar("closed", "1")
          Announcements.getInstance().announceToAll("Event "+str(NAME)+" was canceled.") 
        else:
          self.saveGlobalQuestVar("kolych", str(kolych))
          self.saveGlobalQuestVar("closed", "1")
          if DOORS<>[]:
           for i in DOORS:
                DoorTable.getInstance().getDoor(int(i)).closeMe()
          Announcements.getInstance().announceToAll("Event "+str(NAME)+" has started!")
          npc.deleteMe()
          self.addSpawn(MOB,locf[0],locf[1],locf[2],30000,False,600000)
          for i in ATTAKERS :
           if i.isOnline() :
                i.teleToLocation(174238,89532,-5192) 
   if event == "announce" and closed=="0" and (TIME_FOR_REG - ANNOUNCE_INTERVAL * int(annom))<>0: 
         Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * int(annom) ) + " minutes until event "+str(NAME)+" start!")
         self.saveGlobalQuestVar("annom", str(annom+1))
         self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
   if event == "return" :
         if DOORS<>[]:
           for i in DOORS:
                DoorTable.getInstance().getDoor(int(i)).openMe()
         self.saveGlobalQuestVar("count", "0")
         con=L2DatabaseFactory.getInstance().getConnection()
         delchars=con.prepareStatement("DELETE FROM `quest_global_data` WHERE quest_name='5555_Peklo' AND value='in'")
         try :
                delchars.executeUpdate()
                delchars.close()
                con.close()
         except :
                try : con.close()
                except : pass
         Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended!")
         for i in ATTAKERS :
           if i.isOnline() :
                i.teleToLocation(locr[0],locr[1],locr[2])
         ATTAKERS=[]
   if event == "exit" :
         ATTAKERS.remove(player)
         con=L2DatabaseFactory.getInstance().getConnection()
         delchars=con.prepareStatement("DELETE FROM `quest_global_data` WHERE quest_name='5555_Peklo' AND var=?")
         delchars.setString(1, str(player.getObjectId()))
         try :
                delchars.executeUpdate()
                delchars.close()
                con.close()
         except :
                try : con.close()
                except : pass
         return "exit.htm"
   return 
 
 def onAttack (self,npc,player,damage,isPet):
  if player not in ATTAKERS :
   if self.loadGlobalQuestVar(str(player.getObjectId())) == "in" :
         ATTAKERS.append(player)
   else:
         player.teleToLocation(174238,89532,5192)
  return

 def onKill(self,npc,player,isPet):
  global tek
  global nyj
  mobcount=(MOBS_TO_CHEL * int(self.loadGlobalQuestVar("kolych")))
  tek=tek+1
  if tek==nyj and (2*nyj) < mobcount:
   for i in range(0,2*tek) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
   nyj=2*tek
   tek=0
  elif tek==nyj and (2*nyj) > mobcount:
   for i in range(0,mobcount) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
   nyj=mobcount+1
   tek=0
  elif tek==mobcount:
   for i in range(0,mobcount) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          npc = self.addSpawn(MOB_R,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
          npc.reduceCurrentHp(9999999,player)
          npc.deleteMe()
   self.startQuestTimer("return", 120000, None, None)  
  return
        
QUEST = Quest(5555, qn, "Peklo")

QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))

Последний раз редактировалось Perfecto; 07.09.2010 в 19:53. Причина: Добавил тег [Code]
OkoPwnz вне форума Ответить с цитированием
Непрочитано 07.09.2010, 19:54   #2
Забанен за кидаловo/обман/развод

По умолчанию Re: Как поменять место появления

Код:
else:
player.teleToLocation(174238,89532,5192)
return
KilRoy вне форума Отправить сообщение для KilRoy с помощью ICQ Отправить сообщение для KilRoy с помощью Skype™ Ответить с цитированием
Непрочитано 07.09.2010, 19:56   #3
Аватар для OkoPwnz
Пользователь

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

пробовал поменять чар падает вниз и проваливается в текстуры
OkoPwnz вне форума Ответить с цитированием
Непрочитано 07.09.2010, 20:02   #4
Забанен за кидаловo/обман/развод

По умолчанию Re: Как поменять место появления

5192 это координата Z (Высота) Чтобы не проваливался, делай её выше, ниже, короче тут нужно чуть голову включить
KilRoy вне форума Отправить сообщение для KilRoy с помощью ICQ Отправить сообщение для KilRoy с помощью Skype™ Ответить с цитированием
Непрочитано 07.09.2010, 21:11   #5
Аватар для Casper
Эксперт

По умолчанию Re: Как поменять место появления

OkoPwnz, найди нужную тебе точку пропиши команду /loc а еще лучше ///stat l2 и тебе будут точные координаты, от и все...
Casper вне форума Отправить сообщение для Casper с помощью ICQ Отправить сообщение для Casper с помощью Skype™ Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
точка появления MROBAR Игровой клиент 2 26.06.2010 14:35
исчу место GM wow 3.2.2a или 3,2,2 Refresh Рынок / Marketplace 0 09.02.2010 18:26
Мануал Как поменять место рождения чаров. FlooderaS Lineage II 0 10.07.2009 08:58
как зделать тп в нужное мне место nago Lineage II 4 18.03.2009 17:15
место скачки kokaaaa Lineage II 1 22.11.2008 14:05


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

Вверх