Перейти к содержанию
Авторизация  
chiton

Удаления НСП на python

Рекомендуемые сообщения

Всем доброго времени суток.

Ну вопрос сам по себе простой.

Как удалить НПС на питоне
например делаю спавн

self.addSpawn(BOS,LOCATION[0],LOCATION[1],LOCATION[2],30000,False,0)

а вот как его потом убрать?(на python)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создай таймер, а по истечению юзай

 

npc.deleteMe()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а 

npc.deleteMe()

будет удалять именно того НПС что надо? недумаю.
если у меня в скрипте к примеру прописан спавн 20 НПС,
может както создать масив и идНПС потом их удалять.
нужен пример полного кода со спавном и удалением дальше я разберусь сам)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например эвент пекло

 

qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
 
NAME = u"\u041f\u0435\u043a\u043b\u043e" # Название (только английские символы)
LOC = u"\u0413\u0438\u0440\u0430\u043d" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 53 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[82840,149361,-3469]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 0 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 76 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 1 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 50 # Время между ивентами в минутах
TIME_FOR_REG = 2 # Время на регистрацию в минутах 
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 29054 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [-88957,136220,-3085] # Соответственно координаты, где будет появляться 1 моб
locfp = [-88651,136535,-3118] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RADIUS = 10 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 # Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников 
YCH_MAX = 35 # Максимальное количество участников.
MOBS_TO_CHEL = 1 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 10 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[57,250000,250000,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 10000 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
 
class Quest (JQuest) :
 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
 
 def init_LoadGlobalData(self) :
   self.startQuestTimer("open", AFTER_RESTART *60000, None, None)
   return
 
 def onTalk (Self,npc,player):
  global closed
  st = player.getQuestState(qn)
  global ATTAKERS
  npcId = npc.getNpcId()
  if npcId == REGISTER:
   if closed<>1 and int(Date().getHours()) not in TIM :
    if not player.isInOlympiadMode() :
     if player.getLevel() >= LEVEL:
      if player.getName() not in ATTAKERS :
       kolych = len(ATTAKERS)
       if kolych <= YCH_MAX :
        if PENI_KOL<>0:   
         if st.getQuestItemsCount(PENI)>PENI_KOL:
           st.takeItems(PENI,PENI_KOL)
           ATTAKERS.append(player.getName())
           return "reg.htm"
         else:
           st.exitQuest(1)
           return "nopeni.htm"
        else:
           ATTAKERS.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 tek,nyj,ATTAKERS,kolych,annom,closed
   if event == "open" :
     ATTAKERS=[]
     closed=0
     annom=1
     spawncoord=locr[Rnd.get(len(locr))]
     npc=self.addSpawn(REGISTER,spawncoord[0],spawncoord[1],spawncoord[2],30000,False,0)
     npc.startAbnormalEffect(8192)
     self.startQuestTimer("close", TIME_FOR_REG*60000, npc, None)
     self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
   if event == "close":
    tek=0
    nyj=1
    self.startQuestTimer("open", TIME_FOR_WAIT*60000, None, None)
    kolych = len(ATTAKERS)
    if kolych < YCH_MIN :
      npc.deleteMe()
      closed=1
      Announcements.getInstance().announceToAll(u"\u042d\u0432\u0435\u043d\u0442 "+str(NAME)+u" \u043e\u0442\u043c\u0435\u043d\u0451\u043d \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432!!!") 
    else:
      closed=1
      Announcements.getInstance().announceToAll("Event "+str(NAME)+" has started!")
      npc.deleteMe()
      self.addSpawn(MOB,locf[0],locf[1],locf[2],30000,False,CANCEL_TIME*60000)
      self.startQuestTimer("return_l", CANCEL_TIME*60000, None, None)
      for nm in ATTAKERS :
       i=L2World.getInstance().getPlayer(nm)
       try :
        if i.isOnline() :
         i.stopAllEffects()
         i.teleToLocation(locfp[0],locfp[1],locfp[2]) 
       except : pass
   if event == "announce" and closed==0 and (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom)<>0: 
      Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom ) + u" \u043c\u0438\u043d\u0443\u0442(\u044b) \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0432\u0435\u043d\u0442\u0430 "+str(NAME)+u" \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0432 \u0433\u043e\u0440\u043e\u0434\u0435 "+str(LOC)+".")
      annom=annom+1
      self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
   if event == "return" :
     Announcements.getInstance().announceToAll(u"\u042d\u0432\u0435\u043d\u0442 "+str(NAME)+u" \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f. \u0418\u0433\u0440\u043e\u043a\u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u043b\u0438!!!")
     for nm in ATTAKERS :
      i=L2World.getInstance().getPlayer(nm)
      try :
       if i.isOnline() :
        i.teleToLocation(83456,148208,-3406)
      except : pass
   if event == "return_l" :
     Announcements.getInstance().announceToAll(u"\u042d\u0432\u0435\u043d\u0442 "+str(NAME)+u" \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f. \u041c\u043e\u043d\u0441\u0442\u0440\u044b \u043f\u043e\u0431\u0435\u0434\u0438\u043b\u0438!!!")
     for nm in ATTAKERS :
      i=L2World.getInstance().getPlayer(nm)
      try :
       if i.isOnline() :
        i.teleToLocation(83456,148208,-3406)
      except : pass
   if event == "exit" :
     ATTAKERS.remove(player.getName())
     return "exit.htm"
   return 
 
 def onAttack (self,npc,player,damage,isPet):
  if player.getName() not in ATTAKERS :
    try:
     player.teleToLocation(147725,-56517,9999)
    except : pass
  return
 
 def onKill(self,npc,player,isPet):
  global tek,nyj,kolych
  mobcount=(MOBS_TO_CHEL * kolych)+15
  tek=tek+1
  if tek==nyj and (2*nyj) < mobcount:
   for i in range(0,2*tek) :
      randx = 25*(20-Rnd.get(40))
      randy = 25*(20-Rnd.get(40))
      self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
   nyj=2*tek
   tek=0
   self.cancelQuestTimer("return_l",None,None)
   self.startQuestTimer("return_l", CANCEL_TIME*60000, None, None)
   npcppc=self.addSpawn(MOB,locf[0],locf[1],locf[2]+100,30000,False,CANCEL_TIME*60000)
   npcppc.broadcastPacket(CreatureSay(npcppc.getObjectId(), 1, u"\u042d\u0432\u0435\u043d\u0442 "+str(NAME)+": ",u"\u0423 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c "+str(CANCEL_TIME)+u" \u043c\u0438\u043d\u0443\u0442 \u0447\u0442\u043e\u0431\u044b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432!!!"))
   npcppc.deleteMe()
  elif tek==nyj and (2*nyj) >= mobcount:
   for i in range(0,mobcount) :
      randx = 25*(20-Rnd.get(40))
      randy = 25*(20-Rnd.get(40))
      mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
      mobb.startAbnormalEffect(8192)
   nyj=mobcount+1
   tek=0
   self.cancelQuestTimer("return_l",None,None)
   self.startQuestTimer("return_l", (CANCEL_TIME)*60000, None, None)
   npcppc=self.addSpawn(MOB,locf[0],locf[1],locf[2]+100,30000,False,CANCEL_TIME*60000)
   npcppc.broadcastPacket(CreatureSay(npcppc.getObjectId(), 1, u"\u042d\u0432\u0435\u043d\u0442 "+str(NAME)+": ",u"\u0423 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c "+str(CANCEL_TIME)+u" \u043c\u0438\u043d\u0443\u0442 \u0447\u0442\u043e\u0431\u044b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432!!!"))
   npcppc.deleteMe()
  elif tek==mobcount:
   for nm in ATTAKERS :
    player=L2World.getInstance().getPlayer(nm)
    if player<>None:
     if abs(abs(player.getX())-abs(locf[0]))>RAD or abs(abs(player.getY())-abs(locf[1]))>RAD :
      ATTAKERS.remove(nm)
    else:
      ATTAKERS.remove(nm)
   for nm in ATTAKERS :
    i=L2World.getInstance().getPlayer(nm)
    try:
     for id, countmin, countmax, chance in REWARD :
      if Rnd.get(100)<=chance :
       count=Rnd.get(countmin,countmax)
       i.getQuestState(qn).giveItems(id,count)
    except : pass
   self.startQuestTimer("return", 30000, None, None)  
   self.cancelQuestTimer("return_l",None,None)     
  return
 
QUEST = Quest(5555, qn, "Peklo")
 
QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))

 

 

Изменено пользователем NerfPl0x
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это просто создайте sql файл, и вставьте текст сюда указав id боса

DELETE FROM spawnlist WHERE id='Id-боса';

Потом отправьте  sql запрос в базу.

Изменено пользователем Ira3451

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это просто создайте sql файл, и вставьте текст сюда указав id боса

DELETE FROM spawnlist WHERE itemId='Id-боса';

Потом отправьте  sql запрос в базу.

Ну написано же на Python, а ето удаление на SQL.

спасибо конешно, но ответ не в тему)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...