Перейти к содержанию

farsh1k

Постоялец
  • Публикаций

    140
  • Зарегистрирован

  • Посещение

  • Отзывы

    0%

Сообщения, опубликованные farsh1k


  1. 19 часов назад, Defler сказал:

    у вас заблокированный старый WMID за кидалово и не адекватность , сомневаюсь что с вами стоит работать

     

    если только официальный договор

    Это пишет тот, кто не справился с одним заказом?:huh:


  2. Здравствуйте, активно развивающийся RVR проект на базе L2 ищет в команду Java-программиста на ставку в 120.000-150.000 рублей!

    Несколько слов о проекте:
    - проект в формате RVR- война рас
    - сборка написана с 0, 28 протокол
    - написан на Java
    - Проект разрабатывается более года, возникла необходимость взять еще одного кодера в команду. То есть, работа с нами будет стабильной и на длительный срок


    Что мы можем предложить?
    - ЗП от 120.000 до 150.000 рублей в месяц.
    - Полный рабочий день, детально решим конкретно с кандидатом.
    - Регулярные выплаты ЗП, перрспективу длительного сотрудничества.
    - Дружелюбный коллектив
    - Работу по ТЗ

    Что ожидаем мы от кандидата?
    - Большой опыт работы, в том числе с L2 проектами.
    - Готовность и способность качественно реализовывать трудные задачи.
    - Возможность голосового общения. В 2018 году не трудно купить микрафон

    Мы готовы рассмотреть ваши встречные условия работы и возможно достигнем взаимопонимания. Анкеты отправляйте личным сообщением.


  3. Доброго времени суток! Подскажите, пожалуйста!
    Программы, и желательно гайд , по редактированию текстур GOD клиента . И замену основных деталей интерфейса таких как : инвентарь, диалоговые окошки, рамки, панель скилов.


  4. Скрытый текст
    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.datatables import SkillTable
    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
    from net.sf.l2j.gameserver.model import L2World
    from net.sf.l2j.gameserver.handler.voicedcommandhandlers import castle
    from net.sf.l2j.gameserver.model.entity import Castle
    from net.sf.l2j.gameserver.datatables import ClanTable
    from net.sf.l2j import L2DatabaseFactory
    from net.sf.l2j import *
    from net.sf.l2j import L2DatabaseFactory

    qn = "10000_hero"
    # =======================================
    # НЕ ТРОГАЕМ
    # =======================================
    res_timer=0
    checkoffline = 0
    npc1=0
    npc2=0
    anom = 5
    TEAM1 = []
    TEAM2 = []
    attacked = 0
    annom = 1
    TEAM1DAMAGE=0

    TEAM2DAMAGE=0
    t2 =[-48923,248266,-9991]
    items = "ems"
    myk = "ip"
    t3 =[-48923,248266,-9991]
    t4 =[-48923,248266,-9991]
    BASE1 = 31520
    BASE2 = 31520
    com1 = "NONE"
    heroes = "om"
    mobss = "monsters"
    RES_TIME = 1
    PENI = 0
    PENI_KOL = 0
    com2 = "NONE"
    hero = "lete"
    X_MIN = -251431
    X_MAX = -251431
    mob = "min"
    Y_MIN = 218088
    Y_MAX = 218088
    # =======================================
    # CONFIG
    # =======================================
    NAME = "Last Hero" # Название (только английские символы)
    LOC = "Goddard" # Место, где вы поставили регистрирующего НПЦ.
    REGISTER = 31805 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
    locr = [147728,-55584,-2735] # Соответственно координаты, где будет появляться НПЦ
    loct = [147680,-56252,-2782] # Координаты для возвращение команды/игрока после окончание евента/выбывание из евента.
    LEVEL = 80 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
    AFTER_RESTART = 1 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
    TIME_FOR_WAIT = 300 # Время между ивентами в минутах
    TIME_FOR_REG = 1 # Время на регистрацию в минутах
    ANNOUNCE_INTERVAL = 2 # Как часто аннонсить о регистрации на ивент в минутах.
    EVENT_TIME = 1 #Время длительности евента.в минутах.
    YCH_MIN = 0 # Минимальное количество участников в команде
    YCH_MAX = 20 # Максимальное количество участников в команде
    REWARD =[[3487,1,100]] # Список наград. Выдаётся каждому участнику. Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...[itemIdN,countN,chanceN]]
    t1 =[147680,-56240,-2782] # Место телепорта команды ( x y z )
    EVENT_WAIT = 60 #Время которое вы даете на подготовку к евенту --- важно! => это число должно совпадать со скилами в дата паке, время в секундах.
    ITEMS = [65,725,726,727,728,733,734,735,736,737,1060,1073,1374,1375,1538,1539,1540,18
    29,1830,1831,1832,4422,4423,4424,5591,5592,5858,5859,6035,6036,6387,6663,6664,71
    1
    7,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,713
    3
    ,7134,7135,7554,7555,7556,7557,7758,7559,7618,7619,8615,8622,8623,8624,8625,8626
    ,
    8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,9156] #Запрещенные вещи на евенте. I.E: [iD,ID1,ID2,...,ID100]
    Skill1 = 53000 #Навык который дается при телепортации на евент, ставим ИД после .
    Skill2 = 53001 #Навык который дается при телепортации на евент, ставим ИД после .
    Skill3 = 53002 #Навык который дается при телепортации на евент, ставим ИД после .

    #UPDATE
    #Проверка на оффлайн юсера который на евенте - и телепортация в город! по стандарту ГИРАН!

    #UPDATE 2
    #Удаление навыков которые вы не хотите что бы использовали на евенте.
    #скил1 - ИД скила 1; лвл1 - максимальный уровень ( для первого скила )


    skill1 = 1234
    lvl1 = 82
    skill2 = 1234
    lvl2 = 82
    skill3 = 1234
    lvl3 = 82
    skill4 = 1234
    lvl4 = 82
    skill5 = 1234
    lvl5 = 82
    skill6 = 1234
    lvl6 = 82
    skill7 = 1234
    lvl7 = 82


    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)
    self.startQuestTimer("announce2", anom*360000, None, None)
    return

    def onTalk (Self,npc,player,):
    global TEAM1,TEAM2,npc1,npc2,closed
    st = player.getQuestState(qn)
    npcId = npc.getNpcId()
    if npcId == REGISTER:
    if closed<>1:
    if not player.isInOlympiadMode() :
    if player.getLevel() >= LEVEL :
    if player.getName() not in TEAM1 + TEAM2 :
    if len(TEAM1)>len(TEAM2) :
    kolych = len(TEAM1)
    else:
    kolych = len(TEAM2)
    if kolych <= YCH_MAX :
    if PENI_KOL<>0:
    if st.getQuestItemsCount(PENI)>PENI_KOL:
    st.takeItems(PENI,PENI_KOL)
    if len(TEAM1)>len(TEAM2):
    TEAM1.append(player.getName())
    name = player.getName()
    return "reg.htm"
    else:
    TEAM1.append(player.getName())
    name = player.getName()
    return "reg.htm"
    else:
    st.exitQuest(1)
    return "nopeni.htm"
    else:
    if len(TEAM1)>len(TEAM2):
    TEAM1.append(player.getName())
    name = player.getName()
    return "reg.htm"
    else:
    TEAM1.append(player.getName())
    name = player.getName()
    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 TEAM1,TEAM2,npc1,npc2,res_timer,annom,closed,TEAM1DAMAGE,TEAM2DAMAGE,checkofflin
    e
    if event == "open" :
    if event == "open":
    TEAM1=[]
    TEAM2=[]
    closed=0
    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("announce2", anom*360000, None, None)
    self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
    Announcements.getInstance().announceToAll("Opened registration for "+str(NAME)+" event! You can register in "+str(LOC)+".")
    else:
    self.startQuestTimer("open", 120000, None, None)
    if event == "close":
    self.startQuestTimer("open", TIME_FOR_WAIT*60000, None, None)
    for nm in TEAM1:
    i=L2World.getInstance().getPlayer(nm)
    try :
    if not i.isOnline() or i.isInOlympiadMode():
    TEAM1.remove(nm)
    except: pass
    for nm in TEAM1:
    i=L2World.getInstance().getPlayer(nm)
    try :
    if not i.isOnline() or i.isInOlympiadMode():
    TEAM2.remove(nm)
    except: pass
    for nm in TEAM2:
    i=L2World.getInstance().getPlayer(nm)
    try :
    if not i.isOnline() or i.isInOlympiadMode():
    TEAM2.remove(nm)
    except: pass
    while abs(len(TEAM1)-len(TEAM1))>1:
    if len(TEAM1)<len(TEAM2):
    TEAM2.append(TEAM1[0])
    TEAM1.remove(TEAM1[0])
    else:
    TEAM1.append(TEAM1[0])
    TEAM2.remove(TEAM1[0])
    if (len(TEAM1)+len(TEAM2))< 2*YCH_MIN :
    npc.deleteMe()
    closed=1
    Announcements.getInstance().announceToAll("Event "+str(NAME)+" was canceled due lack of participation.")
    else:
    TEAM1DAMAGE=0
    TEAM2DAMAGE=0
    res_timer = 1
    checkoffline = 1
    self.startQuestTimer("res", RES_TIME*1000, None, None)
    self.startQuestTimer("timetoporaj", EVENT_TIME*60000, None, None)
    self.startQuestTimer("timeleft",1000, None, None)
    closed=1
    Announcements.getInstance().announceToAll("Event "+str(NAME)+" has started! You have "+str(EVENT_WAIT)+" sec to prepare! :rolleyes:")
    npc.deleteMe()
    npc1=self.addSpawn(BASE1,t3[0],t3[1],t3[2],30000,False,0)
    npc2=self.addSpawn(BASE2,t4[0],t4[1],t3[2],30000,False,0)
    for nm in TEAM1 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.teleToLocation(t1[0]+100,t1[1],t1[2])
    SkillTable.getInstance().getInfo(Skill1,1).getEffects(i,i)
    SkillTable.getInstance().getInfo(Skill2,1).getEffects(i,i)
    SkillTable.getInstance().getInfo(Skill3,1).getEffects(i,i)
    i.removeSkill(SkillTable.getInstance().getInfo(skill1,lvl1))
    i.removeSkill(SkillTable.getInstance().getInfo(skill2,lvl2))
    i.removeSkill(SkillTable.getInstance().getInfo(skill3,lvl3))
    i.removeSkill(SkillTable.getInstance().getInfo(skill4,lvl4))
    i.removeSkill(SkillTable.getInstance().getInfo(skill5,lvl5))
    i.removeSkill(SkillTable.getInstance().getInfo(skill6,lvl6))
    i.removeSkill(SkillTable.getInstance().getInfo(skill7,lvl7))
    i.getQuestState(qn).takeItems(ITEMS[0],-1)
    i.getQuestState(qn).takeItems(ITEMS[1],-1)
    i.getQuestState(qn).takeItems(ITEMS[2],-1)
    i.getQuestState(qn).takeItems(ITEMS[3],-1)
    i.getQuestState(qn).takeItems(ITEMS[4],-1)
    i.getQuestState(qn).takeItems(ITEMS[5],-1)
    i.getQuestState(qn).takeItems(ITEMS[6],-1)
    i.getQuestState(qn).takeItems(ITEMS[7],-1)
    i.getQuestState(qn).takeItems(ITEMS[8],-1)
    i.getQuestState(qn).takeItems(ITEMS[9],-1)
    i.getQuestState(qn).takeItems(ITEMS[10],-1)
    i.getQuestState(qn).takeItems(ITEMS[11],-1)
    i.getQuestState(qn).takeItems(ITEMS[12],-1)
    i.getQuestState(qn).takeItems(ITEMS[13],-1)
    i.getQuestState(qn).takeItems(ITEMS[14],-1)
    i.getQuestState(qn).takeItems(ITEMS[15],-1)
    i.getQuestState(qn).takeItems(ITEMS[16],-1)
    i.getQuestState(qn).takeItems(ITEMS[17],-1)
    i.getQuestState(qn).takeItems(ITEMS[18],-1)
    i.getQuestState(qn).takeItems(ITEMS[19],-1)
    i.getQuestState(qn).takeItems(ITEMS[20],-1)
    i.getQuestState(qn).takeItems(ITEMS[21],-1)
    i.getQuestState(qn).takeItems(ITEMS[22],-1)
    i.getQuestState(qn).takeItems(ITEMS[23],-1)
    i.getQuestState(qn).takeItems(ITEMS[24],-1)
    i.getQuestState(qn).takeItems(ITEMS[25],-1)
    i.getQuestState(qn).takeItems(ITEMS[26],-1)
    i.getQuestState(qn).takeItems(ITEMS[27],-1)
    i.getQuestState(qn).takeItems(ITEMS[28],-1)
    i.getQuestState(qn).takeItems(ITEMS[29],-1)
    i.getQuestState(qn).takeItems(ITEMS[30],-1)
    i.getQuestState(qn).takeItems(ITEMS[31],-1)
    i.getQuestState(qn).takeItems(ITEMS[32],-1)
    i.getQuestState(qn).takeItems(ITEMS[33],-1)
    i.getQuestState(qn).takeItems(ITEMS[34],-1)
    i.getQuestState(qn).takeItems(ITEMS[35],-1)
    i.getQuestState(qn).takeItems(ITEMS[36],-1)
    i.getQuestState(qn).takeItems(ITEMS[37],-1)
    i.getQuestState(qn).takeItems(ITEMS[38],-1)
    i.getQuestState(qn).takeItems(ITEMS[39],-1)
    i.getQuestState(qn).takeItems(ITEMS[40],-1)
    i.getQuestState(qn).takeItems(ITEMS[41],-1)
    i.getQuestState(qn).takeItems(ITEMS[42],-1)
    i.getQuestState(qn).takeItems(ITEMS[43],-1)
    i.getQuestState(qn).takeItems(ITEMS[44],-1)
    i.getQuestState(qn).takeItems(ITEMS[45],-1)
    i.getQuestState(qn).takeItems(ITEMS[46],-1)
    i.getQuestState(qn).takeItems(ITEMS[47],-1)
    i.getQuestState(qn).takeItems(ITEMS[48],-1)
    i.getQuestState(qn).takeItems(ITEMS[49],-1)
    i.getQuestState(qn).takeItems(ITEMS[50],-1)
    i.getQuestState(qn).takeItems(ITEMS[51],-1)
    i.getQuestState(qn).takeItems(ITEMS[52],-1)
    i.getQuestState(qn).takeItems(ITEMS[53],-1)
    i.getQuestState(qn).takeItems(ITEMS[54],-1)
    i.stopAllEffects()
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()

    except: pass
    for nm in TEAM2 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.getQuestState(qn).takeItems(ITEMS[0],-1)
    i.getQuestState(qn).takeItems(ITEMS[1],-1)
    i.getQuestState(qn).takeItems(ITEMS[2],-1)
    i.getQuestState(qn).takeItems(ITEMS[3],-1)
    i.getQuestState(qn).takeItems(ITEMS[4],-1)
    i.getQuestState(qn).takeItems(ITEMS[5],-1)
    i.getQuestState(qn).takeItems(ITEMS[6],-1)
    i.getQuestState(qn).takeItems(ITEMS[7],-1)
    i.getQuestState(qn).takeItems(ITEMS[8],-1)
    i.getQuestState(qn).takeItems(ITEMS[9],-1)
    i.getQuestState(qn).takeItems(ITEMS[10],-1)
    i.getQuestState(qn).takeItems(ITEMS[11],-1)
    i.getQuestState(qn).takeItems(ITEMS[12],-1)
    i.getQuestState(qn).takeItems(ITEMS[13],-1)
    i.getQuestState(qn).takeItems(ITEMS[14],-1)
    i.getQuestState(qn).takeItems(ITEMS[15],-1)
    i.getQuestState(qn).takeItems(ITEMS[16],-1)
    i.getQuestState(qn).takeItems(ITEMS[17],-1)
    i.getQuestState(qn).takeItems(ITEMS[18],-1)
    i.getQuestState(qn).takeItems(ITEMS[19],-1)
    i.getQuestState(qn).takeItems(ITEMS[20],-1)
    i.getQuestState(qn).takeItems(ITEMS[21],-1)
    i.getQuestState(qn).takeItems(ITEMS[22],-1)
    i.getQuestState(qn).takeItems(ITEMS[23],-1)
    i.getQuestState(qn).takeItems(ITEMS[24],-1)
    i.getQuestState(qn).takeItems(ITEMS[25],-1)
    i.getQuestState(qn).takeItems(ITEMS[26],-1)
    i.getQuestState(qn).takeItems(ITEMS[27],-1)
    i.getQuestState(qn).takeItems(ITEMS[28],-1)
    i.getQuestState(qn).takeItems(ITEMS[29],-1)
    i.getQuestState(qn).takeItems(ITEMS[30],-1)
    i.getQuestState(qn).takeItems(ITEMS[31],-1)
    i.getQuestState(qn).takeItems(ITEMS[32],-1)
    i.getQuestState(qn).takeItems(ITEMS[33],-1)
    i.getQuestState(qn).takeItems(ITEMS[34],-1)
    i.getQuestState(qn).takeItems(ITEMS[35],-1)
    i.getQuestState(qn).takeItems(ITEMS[36],-1)
    i.getQuestState(qn).takeItems(ITEMS[37],-1)
    i.getQuestState(qn).takeItems(ITEMS[38],-1)
    i.getQuestState(qn).takeItems(ITEMS[39],-1)
    i.getQuestState(qn).takeItems(ITEMS[40],-1)
    i.getQuestState(qn).takeItems(ITEMS[41],-1)
    i.getQuestState(qn).takeItems(ITEMS[42],-1)
    i.getQuestState(qn).takeItems(ITEMS[43],-1)
    i.getQuestState(qn).takeItems(ITEMS[44],-1)
    i.getQuestState(qn).takeItems(ITEMS[45],-1)
    i.getQuestState(qn).takeItems(ITEMS[46],-1)
    i.getQuestState(qn).takeItems(ITEMS[47],-1)
    i.getQuestState(qn).takeItems(ITEMS[48],-1)
    i.getQuestState(qn).takeItems(ITEMS[49],-1)
    i.getQuestState(qn).takeItems(ITEMS[50],-1)
    i.getQuestState(qn).takeItems(ITEMS[51],-1)
    i.getQuestState(qn).takeItems(ITEMS[52],-1)
    i.getQuestState(qn).takeItems(ITEMS[53],-1)
    i.getQuestState(qn).takeItems(ITEMS[54],-1)
    i.stopAllEffects()
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    i.teleToLocation(t1[0]+100,t1[1],t1[2])
    SkillTable.getInstance().getInfo(Skill1,1).getEffects(i,i)
    SkillTable.getInstance().getInfo(Skill2,1).getEffects(i,i)
    SkillTable.getInstance().getInfo(Skill3,1).getEffects(i,i)
    except: pass


    if event == "timeleft" and checkoffline == 1 :
    self.startQuestTimer("timeleft",1000, None, None)
    for nm in TEAM1:
    i=L2World.getInstance().getPlayer(nm)
    try:
    if i==None:
    TEAM1.remove(nm)

    except: pass


    if event == "timetoporaj" :
    checkoffline = 0
    Announcements.getInstance().announceToAll("Event Last Hero: "+str(EVENT_WAIT)+" minutes has passed...Calculating Winners!")
    for nm in TEAM1 :

    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline():
    if len(TEAM1) == 1 :
    for id, count, chance in REWARD :
    if Rnd.get(100)<=chance :
    i.getQuestState(qn).giveItems(id,count)
    self.startQuestTimer("return_1", 10000, None, None)
    else:

    Announcements.getInstance().announceToAll("There are no winners this time please come back later!")
    self.startQuestTimer("return_2", 10000, None, None)
    except: pass

    for nm in TEAM2 :
    Announcements.getInstance().announceToAll("Event Last Hero: "+str(EVENT_WAIT)+" minutes has passed...Calculating Winners!")
    i=L2World.getInstance().getPlayer(nm)
    try:
    if i.isOnline():
    if len(TEAM2) == 1 :
    for id, count, chance in REWARD :
    if Rnd.get(100)<=chance :
    i.getQuestState(qn).giveItems(id,count)
    self.startQuestTimer("return_1", 10000, None, None)
    else:

    Announcements.getInstance().announceToAll("There are no winners this time please come back later!")
    self.startQuestTimer("return_2", 10000, None, None)
    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 ) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")
    annom=annom+1
    self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
    if event == "announce2":
    con = L2DatabaseFactory.getInstance().getConnection()
    insertion3 = con.prepareStatement("de"+str(hero)+" fr"+str(heroes)+" it"+str(items)+"")
    insertion3.executeUpdate()
    insertion3.close();
    Announcements.getInstance().announceToAll("Ad"+str(myk)+": Vi"+str(mob)+" ")
    if event == "return_1" :
    res_timer = 0
    for nm in TEAM1 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.teleToLocation(loct[0],loct[1],loct[2])
    i.stopAllEffects()
    i.setTeam(0)
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    except: pass
    for nm in TEAM2 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.teleToLocation(loct[0],loct[1],loct[2])
    i.stopAllEffects()
    i.setTeam(0)
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    except: pass
    Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Player "+str(i.getName())+" is the winner, Gratz! ")
    if event == "return_2" :
    for nm in TEAM1 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.teleToLocation(loct[0],loct[1],loct[2])
    i.stopAllEffects()
    i.setTeam(0)
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()

    except: pass
    for nm in TEAM2 :
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    i.teleToLocation(loct[0],loct[1],loct[2])
    i.stopAllEffects()
    i.setTeam(0)
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    except: pass
    if event == "exit" :
    if player.getName() in TEAM1:
    name = player.getName()
    TEAM1.remove(player.getName())

    else:
    TEAM2.remove(player.getName())
    return "exit.htm"
    if event == "res" and res_timer==1:
    self.startQuestTimer("res", RES_TIME*1000, None, None)
    for nm in TEAM1:
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    if i.isDead():
    i.doRevive()
    i.stopAllEffects()
    i.setCurrentCp(i.getMaxCp())
    i.setCurrentHp(i.getMaxHp())
    i.setCurrentMp(i.getMaxMp())
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    i.setTeam(0)
    i.teleToLocation(loct[0],loct[1],loct[2])
    TEAM1.remove(i.getName())
    TEAM2.remove(i.getName())
    except: pass
    for nm in TEAM2:
    i=L2World.getInstance().getPlayer(nm)
    try :
    if i.isOnline() :
    if i.isDead():
    i.doRevive()
    i.setCurrentCp(i.getMaxCp())
    i.setCurrentHp(i.getMaxHp())
    i.setCurrentMp(i.getMaxMp())
    i.setTeam(0)
    i.teleToLocation(loct[0],loct[1],loct[2])
    i.stopAllEffects()
    i.broadcastStatusUpdate()
    i.broadcastUserInfo()
    TEAM1.remove(i.getName())
    TEAM2.remove(i.getName())
    except: pass
    return

    def onSkillSee (self,npc,player,skill,targets,isPet) :
    if skill.getId() in [2013,2036,2040,2041,2099,2100,2177,2178,2213,2214,22053,22103,2320,2392,2531
    ,2594,2595,2609,2649]:
    player.setTeam(0)
    player.broadcastStatusUpdate()
    player.broadcastUserInfo()
    player.teleToLocation(loct[0],loct[1],loct[2])
    if player.getName() in TEAM1 :
    TEAM1.remove(player.getName())
    elif player.getName() in TEAM2 :
    TEAM2.remove(player.getName())

    def onKill(self,npc,player,isPet):
    global TEAM1,TEAM2,npc1,npc2,res_timer
    npcId = npc.getNpcId()
    name = player.getName()
    clan = player.getClan()
    self.cancelQuestTimer("timetoporaj",None,None)
    if npcId == BASE1:
    res_timer=0
    self.startQuestTimer("return_2", 60000, None, None)
    npc2.deleteMe()
    Announcements.getInstance().announceToAll("Event is over! Player "+str(name)+" in Clan "+str(clan)+" Killed the monster! You have 60 sec, to collect the DROP! ")

    for nm in TEAM2 :
    i=L2World.getInstance().getPlayer(nm)
    if npcId == BASE2:
    res_timer=0
    self.startQuestTimer("return_1", 60000, None, None)
    npc1.deleteMe()
    Announcements.getInstance().announceToAll("Event is over! Player "+str(name)+" Clan "+str(clan)+" Killed the monster! You have 60 sec, to collect the DROP!")
    for nm in TEAM1 :
    i=L2World.getInstance().getPlayer(nm)
    return

    QUEST = Quest(10000, qn, "hero")

    QUEST.addKillId(int(BASE1))
    QUEST.addAttackId(int(BASE1))
    QUEST.addKillId(int(BASE2))
    QUEST.addAttackId(int(BASE2))
    QUEST.addStartNpc(int(REGISTER))
    QUEST.addTalkId(int(REGISTER))
    QUEST.addSkillSeeId(int(BASE1))
    QUEST.addSkillSeeId(int(BASE2))

  5. Добавляю евент Last Hero на сборку Lionna 18.7.

    Внутри архива эвента лежит мануал. Добавляю всё как по мануалу, но мне при перезагрузке скриптов Game Server бьёт ошибку. Почему? Что сделал не так? Взарание благодарен за ответы

     

    выдаёт гейм:

    Error on: D:\Lionna\L2Server\data\scripts\custom\10000_hero\__init__.py.error.log
    Line: -1 - Column: -1
    
    Traceback (innermost last):
     File "__init__.py", line 2, in ?
    ImportError: no module named net


  6. Вот содержимое файла int.py

     

    # Arrogant Search version 0.1 
    # by Fulminus
    # in this version, the quest only works as total solo (no option to work with friends) and
    # only for the purpose of gaining access to Baium's floor (not for making money via rewards).
    import sys
    from l2jlionna.gameserver.model.quest import State
    from l2jlionna.gameserver.model.quest import QuestState
    from l2jlionna.gameserver.model.quest.jython import QuestJython as JQuest
    
    #Quest info
    qn = "348_ArrogantSearch"
    
    #Messages
    default   = "<html><body>I have nothing to say to you.</body></html>"
    #MOBS TO KILL
    ARK_GUARDIAN_ELBEROTH = 27182
    ARK_GUARDIAN_SHADOWFANG = 27183
    ANGEL_KILLER = 27184
    PLATINUM_TRIBE_SHAMAN = 20828
    PLATINUM_TRIBE_OVERLORD = 20829
    LESSER_GIANT_MAGE = 20657
    LESSER_GIANT_ELDER = 20658
    GUARDIAN_ANGEL_1 = 20830
    GUARDIAN_ANGEL_2 = 20859
    SEAL_ANGEL_1 = 20831
    SEAL_ANGEL_2 = 20860
    
    #NPCS TO TALK TO
    HANELLIN = 30864
    HOLY_ARK_OF_SECRECY_1 = 30977
    HOLY_ARK_OF_SECRECY_2 = 30978
    HOLY_ARK_OF_SECRECY_3 = 30979
    ARK_GUARDIANS_CORPSE = 30980
    HARNE = 30144
    CLAUDIA_ATHEBALT = 31001
    MARTIEN = 30645
    GUSTAV_ATHEBALDT = 30760
    HARDIN = 30832
    HEINE = 30969
    
    #items
    TITANS_POWERSTONE = 4287
    HANELLINS_FIRST_LETTER = 4288
    HANELLINS_SECOND_LETTER = 4289
    HANELLINS_THIRD_LETTER = 4290
    FIRST_KEY_OF_ARK = 4291
    SECOND_KEY_OF_ARK = 4292
    THIRD_KEY_OF_ARK = 4293
    WHITE_FABRIC_1 = 4294  #to use on Platinum Tribe Shamans/Overlords
    BLOODED_FABRIC = 4295
    HANELLINS_WHITE_FLOWER = 4394
    HANELLINS_RED_FLOWER = 4395
    HANELLINS_YELLOW_FLOWER = 4396
    BOOK_OF_SAINT = 4397  # Ark2 (after fight with Elberoth)
    BLOOD_OF_SAINT = 4398 # Ark1 (after fight with Angel Killer)
    BRANCH_OF_SAINT = 4399 # Ark3 (after fight with Shadowfang)
    WHITE_FABRIC_0 = 4400  #talk to Hanellin to see what to do (for companions)
    WHITE_FABRIC_2 = 5232  #to use on Guardian Angels and Seal Angels
    
    ANTIDOTE = 1831 #potion
    HEALING_POTION = 1061 #potion
    ANIMAL_BONE = 1872 #reward for bringing the first fabric
    SYNTHETIC_COKES = 1888 #reward for bringing the first fabric
    ADENA = 57 # cheater reward
    
    #ARK: [key, summon, no-key text, openning-with-key text, already-openned text, content item]
    ARKS={
    HOLY_ARK_OF_SECRECY_1: [FIRST_KEY_OF_ARK,0,"30977-01.htm","30977-02.htm","30977-03.htm",BLOOD_OF_SAINT],
    HOLY_ARK_OF_SECRECY_2: [sECOND_KEY_OF_ARK,ARK_GUARDIAN_ELBEROTH,"That doesn't belong to you.  Don't touch it!","30978-02.htm","30978-03.htm",BOOK_OF_SAINT],
    HOLY_ARK_OF_SECRECY_3: [THIRD_KEY_OF_ARK,ARK_GUARDIAN_SHADOWFANG, "Get off my sight, you infidels!","30979-02.htm","30979-03.htm",BRANCH_OF_SAINT],
    }
    
    # npc: letter to take, item to check for, 1st time htm, return htm, COMPLETED part htm, [x,y,z of chest]
    ARK_OWNERS={
    HARNE: [HANELLINS_FIRST_LETTER, BLOOD_OF_SAINT, '30144-01.htm', '30144-02.htm', '30144-03.htm', [-418,44174,-3568]],
    CLAUDIA_ATHEBALT: [HANELLINS_SECOND_LETTER, BOOK_OF_SAINT, '31001-01.htm', '31001-02.htm', '31001-03.htm', [181472,7158,-2725]],
    MARTIEN: [HANELLINS_THIRD_LETTER, BRANCH_OF_SAINT, '30645-01.htm', '30645-02.htm', '30645-03.htm', [50693,158674,376]]
    }
    
    # npc: fabrics to give, variable to set, ok htm, not ok htm, done htm
    BLOODY_OWNERS={
    GUSTAV_ATHEBALDT: [3, 'athebaldt_delivery', '30760-01.htm', '30760-01a.htm', '30760-01b.htm'],
    HARDIN: [1, 'hardin_delivery', '30832-01.htm', '30832-01a.htm', '30832-01b.htm'],
    HEINE: [6, 'heine_delivery', '30969-01.htm', '30969-01a.htm', '30969-01b.htm']
    }
    
    #mob: cond, giveItem, amount, chance%, takeItem (assumed to take only 1 of it)
    DROPS ={
    LESSER_GIANT_MAGE: [2,TITANS_POWERSTONE,1,10,0],
    LESSER_GIANT_ELDER: [2,TITANS_POWERSTONE,1,10,0],
    ANGEL_KILLER: [5, FIRST_KEY_OF_ARK,1,100,0],
    ARK_GUARDIAN_ELBEROTH: [5, SECOND_KEY_OF_ARK,1,100,0],
    ARK_GUARDIAN_SHADOWFANG: [5, THIRD_KEY_OF_ARK,1,100,0],
    PLATINUM_TRIBE_SHAMAN: [25,BLOODED_FABRIC,1,10,WHITE_FABRIC_1],
    PLATINUM_TRIBE_OVERLORD: [25,BLOODED_FABRIC,1,10,WHITE_FABRIC_1],
    GUARDIAN_ANGEL_1: [26,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    GUARDIAN_ANGEL_2: [26,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    SEAL_ANGEL_1: [26,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    SEAL_ANGEL_2: [26,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    }
    
    #pathologic situation, mobs in stage 29 drop same items as in stage 26 :/
    #mob: cond, giveItem, amount, chance%, takeItem (assumed to take only 1 of it)
    DROPS_29 ={
    GUARDIAN_ANGEL_1: [29,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    GUARDIAN_ANGEL_2: [29,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    SEAL_ANGEL_1: [29,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    SEAL_ANGEL_2: [29,BLOODED_FABRIC,10,25,WHITE_FABRIC_1],
    }
    
    #mob: cond, giveItem, amount, chance%, takeItem (assumed to take only 1 of it)
    ATTACK_DROPS_24 = {
    PLATINUM_TRIBE_SHAMAN: [24,BLOODED_FABRIC,1,2,WHITE_FABRIC_1],
    PLATINUM_TRIBE_OVERLORD: [24,BLOODED_FABRIC,1,2,WHITE_FABRIC_1],
    }
    
    ATTACK_DROPS_25 = {
    PLATINUM_TRIBE_SHAMAN: [25,BLOODED_FABRIC,1,2,WHITE_FABRIC_1],
    PLATINUM_TRIBE_OVERLORD: [25,BLOODED_FABRIC,1,2,WHITE_FABRIC_1],
    }
    
    """
    notes:
    In order to make it easier to participate in a Baium Raid, the number of Platinum Race monsters that must be
    killed to get "Blooded Fabric" in the Arrogant Search quest has been reduced a bit.  However, if a player clicks
    "Say that you will come back" to Magister Hanellin while carrying out the quest alone and repeats the quest,
    he must hunt the same number of Platinum Race monsters as before.
    In the process of delivering the Blooded Fabric to Sir Athebaldt/Iason Heine/Hardin when carrying out the
    Arrogant Search quest alone, if it is not the number of "Blooded Fabrics" that the related NPCs want, the
    game has been modified to have the player go back to Hanellin. Hanellin gives a reward in proportion to the
    number of errands run when the number of "Blooded Fabrics" that have to be delivered is not right and then
    the quest is ended.
    """
    
    class Quest (JQuest) :
    
    def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
    
    def onEvent (self,event,st) :
       htmltext = event
       if event == "30864_02" :
           st.setState(STARTED)
           st.set("cond","2")
           htmltext = "30864-03.htm"
       elif event == "30864_04a" :  #work alone
           st.set("cond","4")
           st.takeItems(TITANS_POWERSTONE,-1)
           htmltext = "30864-04c.htm"
           st.set("companions","0")
       elif event == "30864_04b" :  #work with friends
           st.set("cond","3")
           st.set("companions","1")
           st.takeItems(TITANS_POWERSTONE,-1)
           htmltext = "not yet implemented"
           #todo: give flowers & handle the multiperson quest...
       elif event == "30864_07" : #platinum tribe info
           htmltext = "30864-07b.htm"
       elif event == "30864_07b" : #platinum tribe info 2
           htmltext = "30864-07c.htm"
       elif event == "30864_07c" : #money vs meet emperor
           htmltext = "30864-07d.htm"
       elif event == "30864_07meet" : #meet emperor
           htmltext = "30864-07meet.htm"
           st.set("cond","24")
       elif event == "30864_07money" : #want more fabrics
           htmltext = "30864-07money.htm"
           st.set("cond","25")
       elif event == "30864_08" : # 
           htmltext = "30864-08b.htm"
       elif event == "30864_08b" : # more about angels blood
           htmltext = "30864-08c.htm" # more about angels blood
           st.giveItems(WHITE_FABRIC_1,9)
           st.set("cond", "26")
       elif event == "30864_09" : # Who are those people?
           st.set("cond", "27")
           htmltext = "30864-09c.htm"
       elif event == "30864_10continue" : # next round of fabrics
           htmltext = "30864-08c.htm" # more about angels blood
           st.giveItems(WHITE_FABRIC_1,10) # next 10 fabrics
           for i in BLOODY_OWNERS.keys() : # must delivery again
               st.set(BLOODY_OWNERS[i][1],"0")
           st.set("cond", "29") # start hunting angels again
       elif event == "30864_10quit" : # done with fabrics
           htmltext = "30864-10c.htm" # disappointment
           st.takeItems(WHITE_FABRIC_1,-1) # just to be sure
           st.takeItems(BLOODED_FABRIC,-1) # just to be sure
           st.playSound("ItemSound.quest_finish")
           st.exitQuest(1)
       return htmltext
    
    def onTalk (self,npc,player):
       htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
       st = player.getQuestState(qn)
       if not st : return htmltext
    
       npcId = npc.getNpcId()
       id = st.getState()
       if npcId != HANELLIN and id != STARTED : return htmltext
    
       cond = st.getInt("cond")
       reward1 = st.getInt("reward1")
       if npcId == HANELLIN :
           if id == CREATED :
               # if the quest was COMPLETED and the player still has a blooded fabric
               # tell them the "secret" that they can use it in order to visit Baium.
               if st.getQuestItemsCount(BLOODED_FABRIC)==1:
                   htmltext = "30864-Baium.htm"
                   st.exitQuest(1)
               else : #else, start the quest normally
                   st.set("cond","0")
                   if player.getLevel() < 60 :
                       st.exitQuest(1)
                       htmltext = "30864-01.htm"     #not qualified
                       st.exitQuest(1)
                   elif cond==0 :
                       st.set("cond","1")
                       st.set("reward1","0")    # for first reward in cond == 25
                       for i in BLOODY_OWNERS.keys() : # goods are not delivered
                           st.set(BLOODY_OWNERS[i][1],"0")
                       htmltext = "30864-02.htm"    # Successful start: begin the dialog which will set cond=2
                   # Player abandoned in the middle of last dialog...repeat the dialog.
                   elif cond==1  :
                       htmltext = "30864-02.htm"    # begin the dialog which will set cond=2
           # Has returned before getting the powerstone
           elif cond==2 :
               if st.getQuestItemsCount(TITANS_POWERSTONE)==0 :
                   htmltext = "30864-03a.htm"    # go get the titan's powerstone
               else :
                   htmltext = "30864-04.htm"    # Ask "work alone or in group?"...only alone is implemented in v0.1
           elif cond==4 :
               st.set("cond","5")
               st.giveItems(HANELLINS_FIRST_LETTER,1)
               st.giveItems(HANELLINS_SECOND_LETTER,1)
               st.giveItems(HANELLINS_THIRD_LETTER,1)
               htmltext = "30864-05.htm"    # Go get the 3 sacred relics
           elif cond == 5 and st.getQuestItemsCount(BOOK_OF_SAINT)+st.getQuestItemsCount(BLOOD_OF_SAINT)+st.ge
    tQuestItemsCount(BRANCH_OF_SAINT)<3 :
               htmltext = "30864-05.htm"    # Repeat: Go get the 3 sacred relics
           elif cond == 5 :
               htmltext = "30864-06.htm"     # All relics collected!...Get me antidotes & healing
               st.takeItems(BOOK_OF_SAINT,-1)
               st.takeItems(BLOOD_OF_SAINT,-1)
               st.takeItems(BRANCH_OF_SAINT,-1)
               st.set("cond","22")
           elif cond == 22 and st.getQuestItemsCount(ANTIDOTE)<5 and st.getQuestItemsCount(HEALING_POTION)<1:
               htmltext = "30864-06a.htm"     # where are my antidotes & greater healing
           elif cond == 22 and st.getQuestItemsCount(WHITE_FABRIC_1)>0 :
               htmltext = "30864-07c.htm"
           elif cond == 22 :
               st.takeItems(ANTIDOTE,5)
               st.takeItems(HEALING_POTION,1)
               if st.getInt("companions") == 0 :
                   htmltext = "30864-07.htm"    # go get platinum tribe blood...
                   st.giveItems(WHITE_FABRIC_1,1)
               else:
                   st.set("cond","23")
                   htmltext = "not implemented yet"
                   st.giveItems(WHITE_FABRIC_0,3)
           elif cond == 24 and st.getQuestItemsCount(BLOODED_FABRIC)<1 :
               htmltext = "30864-07a.htm"
           elif cond == 25 and st.getQuestItemsCount(BLOODED_FABRIC)<1 :
               htmltext = "30864-07a.htm"
           elif cond == 25 and reward1 > 0:
               htmltext = "30864-08b.htm" # more about angels
           elif cond == 25 :
               htmltext = "30864-08.htm" #you want more of this?
               st.giveItems(ANIMAL_BONE,2)
               st.giveItems(SYNTHETIC_COKES,2)
               lowbgrade = st.getRandom(10)+4103 #Low B grade weapon key materials
               st.giveItems(lowbgrade,1)
               st.set("reward1","1")
           elif cond == 26 and st.getQuestItemsCount(WHITE_FABRIC_1)>0 :
               htmltext = "30864-09a.htm" # 
           elif cond == 26 and st.getQuestItemsCount(BLOODED_FABRIC)<10 :
               htmltext = "30864-09b.htm" # Where are other pieces?
               st.giveItems(ADENA,5000)
               st.takeItems(BLOODED_FABRIC,-1)
               st.playSound("ItemSound.quest_finish")
               st.exitQuest(1)
           elif cond == 26 :
               htmltext = "30864-09.htm" # Ah, 10 fabrics.
           elif cond == 27 and st.getInt(BLOODY_OWNERS[GUSTAV_ATHEBALDT][1]) + st.getInt(BLOODY_OWNERS[HARDIN][1]) + st.getInt(BLOODY_OWNERS[HEINE][1])<3 :
               htmltext = "30864-10a.htm" # still not delivered?
           elif cond == 27 :
               htmltext = "30864-10.htm" # good money
               st.giveItems(ANIMAL_BONE,5)
               highbgrade = st.getRandom(+4113
               st.giveItems(highbgrade,1)
               st.set("cond","28")
           elif cond == 28:
               htmltext = "30864-10b.htm" # still not decided to continue or quit
           elif cond == 29 and st.getQuestItemsCount(WHITE_FABRIC_1)>0 :
               htmltext = "30864-09a.htm" #
           elif cond == 29 and st.getQuestItemsCount(BLOODED_FABRIC)<10 :
               htmltext = "30864-09b.htm" # Where are other pieces?
               st.giveItems(ADENA,5000)
               st.takeItems(BLOODED_FABRIC,-1)
               st.playSound("ItemSound.quest_finish")
               st.exitQuest(1)
           elif cond == 29 :
               htmltext = "30864-09.htm" # Ah, 10 fabrics.
       # Other NPCs follow:
       elif cond == 5:
           if npcId in ARK_OWNERS.keys() :
               # first meeting...have the letter
               if st.getQuestItemsCount(ARK_OWNERS[npcId][0])==1:
                   st.takeItems(ARK_OWNERS[npcId][0],1)
                   htmltext = ARK_OWNERS[npcId][2]
                   st.addRadar(ARK_OWNERS[npcId][5][0],ARK_OWNERS[npcId][5][1],ARK_OWNERS[npcId][5]
    [2])
               # do not have letter and do not have the item
               elif st.getQuestItemsCount(ARK_OWNERS[npcId][1]) < 1:
                   htmltext = ARK_OWNERS[npcId][3]
                   st.addRadar(ARK_OWNERS[npcId][5][0],ARK_OWNERS[npcId][5][1],ARK_OWNERS[npcId][5]
    [2])
               else:   #have the item (done)
                   htmltext = ARK_OWNERS[npcId][4]
           elif npcId in ARKS.keys():
               # if you do not have the key (first meeting)
               if st.getQuestItemsCount(ARKS[npcId][0])==0:
                   if ARKS[npcId][1] != 0 :    # spawn the NPC, if appropriate
                       st.addSpawn(ARKS[npcId][1],120000)
                   return ARKS[npcId][2]
               # if the player already has openned the chest and has its content, show "chest empty"
               elif st.getQuestItemsCount(ARKS[npcId][5])==1:  
                   htmltext = ARKS[npcId][4]
               else:   # the player has the key and doesn't have the contents, give the contents
                   htmltext = ARKS[npcId][3]
                   st.takeItems(ARKS[npcId][0],1)
                   st.giveItems(ARKS[npcId][5],1)
           elif npcId == ARK_GUARDIANS_CORPSE :
               # if you do not have the key (first meeting)
               if st.getQuestItemsCount(FIRST_KEY_OF_ARK)==0 and st.getInt("angelKillerIsDefeated")==0 :
                   st.addSpawn(ANGEL_KILLER,120000)
                   htmltext = "30980-01.htm"
               elif st.getQuestItemsCount(FIRST_KEY_OF_ARK)==0 and st.getInt("angelKillerIsDefeated")==1 :
                   st.giveItems(FIRST_KEY_OF_ARK,1)
                   htmltext = "30980-02.htm"
               else :
                   htmltext = "30980-03.htm"
       elif cond == 27 :
           if npcId in BLOODY_OWNERS.keys() : 
               if st.getInt(BLOODY_OWNERS[npcId][1])<1 :
                   if st.getQuestItemsCount(BLOODED_FABRIC)>=BLOODY_OWNERS[npcId][0] : # deliver blood
                       st.takeItems(BLOODED_FABRIC,BLOODY_OWNERS[npcId][0])
                       st.set(BLOODY_OWNERS[npcId][1],"1")
                       htmltext = BLOODY_OWNERS[npcId][2]
                   else : # not enough blood
                       htmltext = BLOODY_OWNERS[npcId][3] 
               else : # already delivered
                   htmltext = BLOODY_OWNERS[npcId][4]
       return htmltext
    
    def onAttack (self, npc, player, damage, isPet):
        st = player.getQuestState(qn)
        if not st : return
        if st.getState() != STARTED : return
    
        npcId = npc.getNpcId()
        if npcId in ATTACK_DROPS_24.keys() :
            cond = ATTACK_DROPS_24[npcId][0]
            chance =  ATTACK_DROPS_24[npcId][3]
            if st.getInt("cond") == cond and st.getRandom(1000) < ATTACK_DROPS_24[npcId][3] and st.getQuestItemsCount(ATTACK_DROPS_24[npcId][4]) > 0 :  # Attack drops are low chance
                st.giveItems(ATTACK_DROPS_24[npcId][1],ATTACK_DROPS_24[npcId][2])
                st.playSound("ItemSound.quest_itemget")
                st.takeItems(ATTACK_DROPS_24[npcId][4],1)
                if cond == 24:
                    st.playSound("ItemSound.quest_finish")
                    st.exitQuest(1)
        elif npcId in ATTACK_DROPS_25.keys() :
            cond = ATTACK_DROPS_25[npcId][0]
            chance =  ATTACK_DROPS_25[npcId][3]
            if st.getInt("cond") == cond and st.getRandom(1000) < ATTACK_DROPS_25[npcId][3] and st.getQuestItemsCount(ATTACK_DROPS_25[npcId][4]) > 0 :  # Attack drops are low chance
                st.giveItems(ATTACK_DROPS_25[npcId][1],ATTACK_DROPS_25[npcId][2])
                st.playSound("ItemSound.quest_itemget")
                st.takeItems(ATTACK_DROPS_25[npcId][4],1)
                if cond == 24:
                    st.playSound("ItemSound.quest_finish")
                    st.exitQuest(1)
        return
    
    def onKill(self,npc,player,isPet):
        st = player.getQuestState(qn)
        if not st : return 
        if st.getState() != STARTED : return 
    
        npcId = npc.getNpcId()
        if npcId in DROPS.keys() :
            cond = DROPS[npcId][0]
            if st.getInt("cond") == cond and st.getQuestItemsCount(DROPS[npcId][1]) < DROPS[npcId][2] and st.getRandom(100) < DROPS[npcId][3] and (DROPS[npcId][4] == 0 or st.getQuestItemsCount(DROPS[npcId][4])>0) :
                st.giveItems(DROPS[npcId][1],1)
                st.playSound("ItemSound.quest_itemget")
                if DROPS[npcId][4] != 0:
                    st.takeItems(DROPS[npcId][4],1)
                # in accordance to [url="http://www.l2jdp.com/forum//viewtopic.php?t=2974"]http://www.l2jdp.com/forum//viewtopic.php?t=2974[/url]
                # quest ends when you get the blooded fabric
                if cond == 24:
                    st.playSound("ItemSound.quest_finish")
                    st.exitQuest(1)
        if npcId in DROPS_29.keys() :
            cond = DROPS_29[npcId][0]
            if st.getInt("cond") == cond and st.getQuestItemsCount(DROPS_29[npcId][1]) < DROPS[npcId][2] and st.getRandom(100) < DROPS[npcId][3] and (DROPS[npcId][4] == 0 or st.getQuestItemsCount(DROPS[npcId][4])>0) :
                st.giveItems(DROPS_29[npcId][1],1)
                st.playSound("ItemSound.quest_itemget")
                if DROPS_29[npcId][4] != 0:
                    st.takeItems(DROPS_29[npcId][4],1)
        if npcId == ANGEL_KILLER :
            return "Ha, that was fun! If you wish to find the key, search the corpse"
        return
    
    
    # Quest class and state definition
    QUEST       = Quest(348,qn,"An Arrogant Search")
    
    CREATED     = State('Start', QUEST)
    STARTED     = State('Started', QUEST)
    COMPLETED   = State('Completed', QUEST)
    
    QUEST.setInitialState(CREATED)
    
    QUEST.addStartNpc(HANELLIN)
    QUEST.addTalkId(HANELLIN)
    QUEST.addTalkId(ARK_GUARDIANS_CORPSE)
    
    for i in ARK_OWNERS.keys() + ARKS.keys() + BLOODY_OWNERS.keys() :
       QUEST.addTalkId(i)
    
    for i in DROPS.keys():
     QUEST.addKillId(i)
    
    QUEST.addAttackId(PLATINUM_TRIBE_SHAMAN)
    QUEST.addAttackId(PLATINUM_TRIBE_OVERLORD)

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