KRUSS 0 Posted December 3, 2011 Хочу сделать чтоб было как на сервере на котором сам когда-то играл, перепробовал кучу всяких патчей на сундуки и нифига не работает! Очень удобно играть когда видно какой перед тобой сундук. Как сделать, чтобы сундуки 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) но не знаю как их редактировать. Если кто шарит где зарыты и как правильно настраиваются сундуки просьба отписаться поподробнее. Share this post Link to post Share on other sites
lacosta 206 Posted December 3, 2011 Хочу сделать чтоб было как на сервере на котором сам когда-то играл, перепробовал кучу всяких патчей на сундуки и нифига не работает! Очень удобно играть когда видно какой перед тобой сундук. Как сделать, чтобы сундуки 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) но не знаю как их редактировать. Если кто шарит где зарыты и как правильно настраиваются сундуки просьба отписаться поподробнее. только ядро копать или покупать птс Share this post Link to post Share on other sites
KRUSS 0 Posted December 3, 2011 И что во всех ява сборках сундуки неизвестные и никто ни пытается их настроить? Share this post Link to post Share on other sites
KRUSS 0 Posted December 3, 2011 Вот нашел на другом форуме якобы нужно вместо файла по адресу "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 Share this post Link to post Share on other sites
««†KENVOOD†»» 13 Posted December 4, 2011 ага и если в ядро вшито аи сундуков вот поржать можно будет))) название сборки говори может к ней вполне реально diff прикрутить) З.Ы. а сервак не фронт х100 случаем называется?) Share this post Link to post Share on other sites
Leon911 5 Posted December 4, 2011 Фронт.нормальный серв вот только наверное сделать такие же сундучки невыйдет,у них вроде птс Share this post Link to post Share on other sites
««†KENVOOD†»» 13 Posted December 4, 2011 не птс у них XD я уже серверов 10 штампанул таких же))) Share this post Link to post Share on other sites
Leon911 5 Posted December 4, 2011 ))я два годика играл на фронте,очень мне он понравился,но вот сундучки настроить как у них немагу,ядро перерыл-лишь только одни догадки как ети ящики сделать нормальными))и видать неодин я такой Share this post Link to post Share on other sites
Leon911 5 Posted December 4, 2011 Интересно а какая же тогда на фронте сборка?? Share this post Link to post Share on other sites
KRUSS 0 Posted December 4, 2011 А у кого есть какая сборка сервера с нормальными сундуками тоесть чтоб в зависимости от типа сундука был и ID сундука Share this post Link to post Share on other sites
««†KENVOOD†»» 13 Posted December 4, 2011 качай исходы и делай))))) или пиши тем кто шарит если сам сделать не можеш думаю рублей за 150 тебе с сундуками помогут))) Share this post Link to post Share on other sites
Leon911 5 Posted December 4, 2011 Может кто подскажет чего делать с сундуками чтоб они спавнились разные,сдесь патч непоможет,ето только нада ядро кусать,но что кусать там--незнаю,у меня сборка фрозенов,исходы есть Share this post Link to post Share on other sites
SmokiMo 892 Posted September 28, 2012 Автоматическое сообщение Эта тема была перемещена из "Форум для новичков" в "Архив". Share this post Link to post Share on other sites