Kendor 211 Опубликовано 16 октября, 2016 Подскажите пожалуйста как изменить дроп с сундуков? И что бы сундук можно было открыть на любом лвле и что бы с него всегда рандомно выпадала награда в рюкзак и небыло такого что он не откроется? с меня много + Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TEPAH0BA 45 Опубликовано 16 октября, 2016 1 - найти ид в базе бокс чест и удалить их вообще, останутся одни боксы . 2 - найти все боксы ид ( не честы ) в место уровней ключей поставить 1 лвл ключа 3 - изменить дроб и поставить 100% ВСЕ в ваше бд ищите 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mwmkr 268 Опубликовано 16 октября, 2016 1 - найти ид в базе бокс чест и удалить их вообще, останутся одни боксы . 2 - найти все боксы ид ( не честы ) в место уровней ключей поставить 1 лвл ключа 3 - изменить дроб и поставить 100% ВСЕ в ваше бд ищите далеко не в бд, всё зависит от сборки, в основном идёт в ядре или в датапаке, начнём изучение со сборки, а там далее и будем отталкиваться. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sh1bzd1k 22 Опубликовано 17 октября, 2016 Подскажите пожалуйста как изменить дроп с сундуков? И что бы сундук можно было открыть на любом лвле и что бы с него всегда рандомно выпадала награда в рюкзак и небыло такого что он не откроется? с меня много + Что за сборка? Ели на угад писать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 17 октября, 2016 Подскажите пожалуйста как изменить дроп с сундуков? И что бы сундук можно было открыть на любом лвле и что бы с него всегда рандомно выпадала награда в рюкзак и небыло такого что он не откроется? с меня много + все зависит от сборки, в некоторых и в датапаке реализуется, а в некоторых нужно в исходах переписать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sh1bzd1k 22 Опубликовано 17 октября, 2016 Делается скрипт на ето Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mrDuck 5 Опубликовано 17 октября, 2016 Делается скрипт на ето Смотреть как реализован скилл Unlock, и заглнуть в AI или Tamplate сундука(смотря насколько изжопно всё это сделано) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sh1bzd1k 22 Опубликовано 17 октября, 2016 Смотреть как реализован скилл Unlock, и заглнуть в AI или Tamplate сундука(смотря насколько изжопно всё это сделано) и смотря какая сборка Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kendor 211 Опубликовано 17 октября, 2016 люцера Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 18 октября, 2016 люцера Если есть исходники, можешь взять. Только там в любом случае будет бокс. На любом уровне открывать, это уже сам смотри. package ru.catssoftware.gameserver.model.quest.pack.ai; import ru.catssoftware.gameserver.ai.CtrlIntention; import ru.catssoftware.gameserver.model.L2Character; import ru.catssoftware.gameserver.model.L2Object; import ru.catssoftware.gameserver.model.L2Skill; import ru.catssoftware.gameserver.model.actor.instance.L2ChestInstance; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.tools.random.Rnd; /** * Chest AI implementation. * @author Fulminus */ public class Chests extends L2AttackableAIScript { private static final int SKILL_DELUXE_KEY = 2229; //Base chance for BOX to be opened private static final int BASE_CHANCE = 100; // Percent to decrease base chance when grade of DELUXE key not match private static final int LEVEL_DECREASE = 40; // Chance for a chest to actually be a BOX (as opposed to being a mimic). private static final int IS_BOX = 100; private static final int[] NPC_IDS = { 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 }; public Chests() { // firstly, don't forget to call the parent constructor to prepare the event triggering // mechanisms etc. super(-1, "chests", "ai"); this.registerMobs(NPC_IDS); } public String onSkillSee (L2NpcInstance npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet) { if (npc instanceof L2ChestInstance) { // this behavior is only run when the target of skill is the passed npc (chest) // i.e. when the player is attempting to open the chest using a skill if (!contains(targets, npc)) return super.onSkillSee(npc, caster, skill, targets, isPet); L2ChestInstance chest = ((L2ChestInstance) npc); int npcId = chest.getNpcId(); int skillId = skill.getId(); int skillLevel = skill.getLevel(); // check if the chest and skills used are valid for this script. Exit if invalid. if (!contains(NPC_IDS, npcId)) return super.onSkillSee(npc, caster, skill, targets, isPet); // 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 (!chest.isInteracted()) { chest.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 int keyLevelNeeded = chest.getLevel() / 10; keyLevelNeeded -= skillLevel; if (keyLevelNeeded < 0) keyLevelNeeded *= -1; int chance = BASE_CHANCE - keyLevelNeeded * LEVEL_DECREASE; // success, pretend-death with rewards: chest.reduceCurrentHp(99999999, player) if (Rnd.get(100) < chance) { chest.setMustRewardExpSp(false); chest.setSpecialDrop(); chest.reduceCurrentHp(99999999, caster, null); return null; } } // used a skill other than chest-key, or used a chest-key but failed to open: disappear with no rewards chest.getSpawn().decreaseCount(chest); chest.deleteMe(); } else { L2Character originalCaster = isPet ? caster.getPet() : caster; chest.setRunning(); chest.addDamageHate(originalCaster, 0, 999); chest.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalCaster); } } } return super.onSkillSee(npc, caster, skill, targets, isPet); } public String onAttack (L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { if (npc instanceof L2ChestInstance) { L2ChestInstance chest = ((L2ChestInstance) npc); int npcId = chest.getNpcId(); // check if the chest and skills used are valid for this script. Exit if invalid. if (!contains(NPC_IDS, npcId)) return super.onAttack(npc, attacker, damage, isPet); // if this was a mimic, set the target, start the skills and become agro if (!chest.isInteracted()) { chest.setInteracted(); if (Rnd.get(100) < IS_BOX) { chest.getSpawn().decreaseCount(chest); chest.deleteMe(); } 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? L2Character originalAttacker = isPet ? attacker.getPet() : attacker; chest.setRunning(); chest.addDamageHate(originalAttacker, 0, (damage * 100) / (chest.getLevel() + 7)); chest.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, originalAttacker); } } } return super.onAttack(npc, attacker, damage, isPet); } public static void main(String[] args) { } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты