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

KRUSS

Пользователи
  • Публикаций

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

  • Посещение

  • Отзывы

    0%

Весь контент KRUSS

  1. А у кого есть какая сборка сервера с нормальными сундуками тоесть чтоб в зависимости от типа сундука был и ID сундука
  2. Вот нашел на другом форуме якобы нужно вместо файла по адресу "gameserver\data\jscript\ai\group_template\" вместо файла chests.py нужно создать 2 файла chests.py и box.py и добавить их в __init__.py так выглядит оригинальный chests.py: Скрытый текст# # # # # # # # # # ## Chest AI implementation. # Written by Fulminus # # # # # # # # # # # import sys from net.sf.l2j.gameserver.ai import CtrlIntention from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest from net.sf.l2j.util import Rnd; SKILL_DELUXE_KEY = 2229 #Base chance for BOX to be opened BASE_CHANCE = 100 # Percent to decrease base chance when grade of DELUXE key not match LEVEL_DECREASE = 40 # Chance for a chest to actually be a BOX (as opposed to being a mimic). IS_BOX = 40 class chests(JQuest) : # init function. Add in here variables that you'd like to be inherited by subclasses (if any) def __init__(self,id,name,descr): # firstly, don't forget to call the parent constructor to prepare the event triggering # mechanisms etc. JQuest.__init__(self,id,name,descr) self.chests = [18265,18266,18267,18268,18269,18270,18271,18272,18273,18274, \ 18275,18276,18277,18278,18279,18280,18281,18282,18283,18284, \ 18285,18286,18287,18288,18289,18290,18291,18292,18293,18294, \ 18295,18296,18297,18298,21671,21694,21717,21740,21763,21786, \ 21801,21802,21803,21804,21805,21806,21807,21808,21809,21810, \ 21811,21812,21813,21814,21815,21816,21817,21818,21819,21820, \ 21821,21822] for i in self.chests : self.addSkillUseId(i) self.addAttackId(i) def onSkillUse (self,npc,player,skill): npcId = npc.getNpcId() skillId = skill.getId() skillLevel= skill.getLevel() # check if the npc and skills used are valid for this script. Exit if invalid. if npcId not in self.chests : return # if this has already been interacted, no further ai decisions are needed # if it's the first interaction, check if this is a box or mimic if not npc.isInteracted() : npc.setInteracted() if Rnd.get(100) < IS_BOX : # if it's a box, either it will be successfully openned by a proper key, or instantly disappear if skillId == SKILL_DELUXE_KEY : # check the chance to open the box keyLevelNeeded = int(npc.getLevel()/10) levelDiff = keyLevelNeeded - skillLevel if levelDiff < 0 : levelDiff = levelDiff * (-1) chance = BASE_CHANCE - levelDiff * LEVEL_DECREASE # success, pretend-death with rewards: npc.reduceCurrentHp(99999999, player) if Rnd.get(100) < chance : npc.setMustRewardExpSp(False) npc.setSpecialDrop(); npc.reduceCurrentHp(99999999, player) return # used a skill other than chest-key, or used a chest-key but failed to open: disappear with no rewards npc.onDecay() else : attacker = player if npc.getAttackByList().contains(player.getPet()): attacker = player.getPet() npc.setRunning() npc.addDamageHate(attacker,0,999) npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker) return def onAttack(self,npc,player,damage,isPet) : npcId = npc.getNpcId() # check if the npc and skills used are valid for this script. Exit if invalid. if npcId not in self.chests : return # if this was a mimic, set the target, start the skills and become agro if not npc.isInteracted() : npc.setInteracted() if Rnd.get(100) < IS_BOX : npc.onDecay() else : # if this weren't a box, upon interaction start the mimic behaviors... # todo: perhaps a self-buff (skill id 4245) with random chance goes here? attacker = player if isPet: attacker = player.getPet() npc.setRunning() npc.addDamageHate(attacker,0,(damage*100)/(npc.getLevel()+7)) npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker) return # now call the constructor (starts up the ai) QUEST = chests(-1,"chests","ai") И вместо него создать такие файлы с разделением сундуков chests.py: import sys from net.sf.l2j.gameserver.ai import CtrlIntention from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest class chests(JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) self.chests = [18265,18266,18267,18268,18269,18270,18271,18272,18273,18274, \ 18275,18276,18277,18278,18279,18280,18281,18282,18283,18284, \ 18285,18286,18287,18288,18289,18290,18291,18292,18293,18294, \ 18295,18296,18297,18298] for i in self.chests : self.addSkillUseId(i) self.addAttackId(i) def onSkillUse (self,npc,player,skill): npcId = npc.getNpcId() skillId = skill.getId() skillLevel= skill.getLevel() def onAttack(self,npc,player,damage,isPet) : #Проверка сундука на Id if npcId not in self.chests : return attacker = player if isPet: attacker = player.getPet() npc.setRunning() npc.addDamageHate(attacker,0,damage/(npc.getLevel()+7)) npc.getAI().setIntention(CtrlIntention.AI_INTENTIO N_ATTACK, attacker) else : attacker = player if isPet: attacker = player.getPet() npc.setRunning() npc.addDamageHate(attacker,0,999) npc.getAI().setIntention(CtrlIntention.AI_INTENTIO N_ATTACK, attacker) return QUEST = chests(-1,"chests","ai") и файл box.py: import sys from net.sf.l2j.gameserver.ai import CtrlIntention from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest from net.sf.l2j.util import Rnd; SKILL_DELUXE_KEY = 2229 #Base chance for BOX to be opened BASE_CHANCE = 100 # Percent to decrease base chance when grade of DELUXE key not match LEVEL_DECREASE = 40 class Box(JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) self.chests = [21671,21694,21717,21740,21763,21786,21801,21802,21803,21804, \ 21805,21806,21807,21808,21809,21810,21811,21812,21813,21814, \ 21815,21816,21817,21818,21819,21820,21821,21822] for i in self.chests : self.addSkillUseId(i) self.addAttackId(i) def onSkillUse (self,npc,player,skill): npcId = npc.getNpcId() skillId = skill.getId() skillLevel= skill.getLevel() #Проверка на Id if npcId not in self.chests : return if not npc.isInteracted() : npc.setInteracted() ### if skillId == SKILL_DELUXE_KEY : keyLevelNeeded = int(npc.getLevel()/10) levelDiff = keyLevelNeeded - skillLevel if levelDiff < 0 : levelDiff = levelDiff * (-1) chance = BASE_CHANCE - levelDiff * LEVEL_DECREASE if Rnd.get(100) < chance : npc.setMustRewardExpSp(False) npc.setSpecialDrop() npc.reduceCurrentHp(99999999, player) return npc.onDecay() ### def onAttack(self,npc,player,damage,isPet) : npcId = npc.getNpcId() if npcId not in self.chests : return if not npc.isInteracted() : npc.setInteracted() npc.onDecay() QUEST = Box(-1,"box","ai") ПОМОГИТЕ ДОВЕСТИ ДО УМА.... ЧТО НЕТ НИ ОДНОГО ШАРЯЩЕГО ФОРУМЧАНИНА....???? ОЧЕНЬ ПРОШУ!!!!!! HELP
  3. И что во всех ява сборках сундуки неизвестные и никто ни пытается их настроить?
  4. Хочу сделать чтоб было как на сервере на котором сам когда-то играл, перепробовал кучу всяких патчей на сундуки и нифига не работает! Очень удобно играть когда видно какой перед тобой сундук. Как сделать, чтобы сундуки Chest и Box были с разными ID и по разному назывались. Возьму для примера сундуки 21 левела сразу возле Диона, что нужно сделать, чтобы обычноый сундук с которого можно спойлить и дропать был (ID 21801 и назывался Treasure Chest), а когда его убиваешь вместо него появлялся сундук с которого только открыв ключем выпадали заточки или адена, был (ID 18265 и назывался Treasure Box) и соответственно у сундуков других лвлов по подобию ????? С именем и титулом сундука понятно - редактируется или на сервере в таблице НПС или в файле npcname-e.dat в клиенте. Меня больше интересует как сделать, чтобы у сундуков был разный ID в зависимости от типа сундука. Где-то вроди читал, что это редактируется в файлах chests.py и __init__.py ю (путь gameserver\data\jscript\ai\group_template\chests.py) но не знаю как их редактировать. Если кто шарит где зарыты и как правильно настраиваются сундуки просьба отписаться поподробнее.
×
×
  • Создать...