Temen 0 Опубликовано 17 мая, 2015 (изменено) Добрый день , хотел попросить помощи в изменении или за разумную плату переписывания скриптов для Сундуков в исходниках Overlord HF. Суть проблемы в том что имеется скрипт где указано что при разнице в лвл >6(между персонажем и сундуком) шанс открытия сундука 0% , но при этом сундуки открываются скиллом Unlock и собственно ключем при любой разнице лвл (т.е. 40 лвл может открывать 84 сундуки) . Собсно сам скрипт TreasureChestinstance.java @SuppressWarnings("serial") public class TreasureChestInstance extends ChestInstance { private static final int TREASURE_BOMB_ID = 4143; public TreasureChestInstance(int objectId, NpcTemplate template) { super(objectId, template); } public void tryOpen(Player opener, Skill skill) { double chance = calcChance(opener, skill); if(Rnd.chance(chance)) { getAggroList().addDamageHate(opener, 10000, 0); doDie(opener); } else { fakeOpen(opener); } } public double calcChance(Player opener, Skill skill) { double chance = skill.getActivateRate(); int npcLvl = getLevel(); if(!isCommonTreasureChest()) { double levelmod = (double) skill.getMagicLevel() - npcLvl; chance += levelmod * skill.getLevelModifier(); } else { int openerLvl = opener.getLevel(); int lvlDiff = Math.max(openerLvl - npcLvl, 0); if((openerLvl <= 77 && lvlDiff >= 6) || (openerLvl >= 78 && lvlDiff >= 5)) { chance = 0; } } if(chance < 0) { chance = 1; } return chance; } private void fakeOpen(Creature opener) { Skill bomb = SkillTable.getInstance().getInfo(TREASURE_BOMB_ID, getBombLvl()); if(bomb != null) { doCast(bomb, opener, false); } onDecay(); } private int getBombLvl() { int npcLvl = getLevel(); int lvl = 1; if(npcLvl >= 78) { lvl = 10; } else if(npcLvl >= 72) { lvl = 9; } else if(npcLvl >= 66) { lvl = 8; } else if(npcLvl >= 60) { lvl = 7; } else if(npcLvl >= 54) { lvl = 6; } else if(npcLvl >= 48) { lvl = 5; } else if(npcLvl >= 42) { lvl = 4; } else if(npcLvl >= 36) { lvl = 3; } else if(npcLvl >= 30) { lvl = 2; } return lvl; } private boolean isCommonTreasureChest() { int npcId = getNpcId(); if(npcId >= 18265 && npcId <= 18286) return true; return false; } @Override public void onReduceCurrentHp(final double damage, final Creature attacker, Skill skill, final boolean awake, final boolean standUp, boolean directHp) { if(!isCommonTreasureChest()) fakeOpen(attacker); } } Изменено 17 мая, 2015 пользователем Temen Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Region 55 Опубликовано 17 мая, 2015 так тебе надо что бы он не открывался вообще? просто тут шанс то на дроп а не на открытие само Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Temen 0 Опубликовано 17 мая, 2015 (изменено) так тебе надо что бы он не открывался вообще? просто тут шанс то на дроп а не на открытие само Можно в любом виде , просто дроп тоже падает с 100% шансом с них и с разницей в уровнях, вполне устроит если будет открыватся но дропа не будет при разнице в лвл >6 . Шанс открытия насколько я понимаю в datapack в скиллах , там стоит 100 но опять же никакого дополнение касаемо разницы в уровнях <skill id="27" levels="14" name="Unlock"> <table name="#itemConsumeCount">2 2 3 3 4 5 6 7 8 10 11 13 15 17</table> <table name="#unlockPower">30 50 75 105 130 175 205 230 275 300 300 300 300 300</table> <table name="#mpConsume2">19 22 25 28 31 35 39 43 47 51 55 59 63 67</table> <table name="#magicLevel">20 24 28 32 36 40 44 48 52 56 60 64 68 72</table> <set name="icon" val="icon.skill0027" /> <set name="reuseDelay" val="30000" /> <set name="magicLevel" val="#magicLevel" /> <set name="hitTime" val="2500" /> <set name="hitCancelTime" val="500" /> <set name="mpConsume2" val="#mpConsume2" /> <set name="activateRate" val="100" /> <set name="unlockPower" val="#unlockPower" /> <set name="itemConsumeId" val="1661" /> <set name="itemConsumeCount" val="#itemConsumeCount" /> <set name="target" val="TARGET_UNLOCKABLE" /> <set name="skillType" val="UNLOCK" /> <set name="operateType" val="OP_ACTIVE" /> </skill> И скилл самого ключика <skill id="22271" levels="1" name="Maestro's Key"> <set name="icon" val="icon.skill0000" /> <set name="reuseDelay" val="3000" /> <set name="hitTime" val="500" /> <set name="hitCancelTime" val="500" /> <set name="activateRate" val="25" /> <set name="itemConsumeId" val="21746" /> <set name="itemConsumeCount" val="1" /> <set name="isHandler" val="true" /> <set name="target" val="TARGET_CHEST" /> <set name="skillType" val="UNLOCK" /> <set name="operateType" val="OP_ACTIVE" /> <cond msgId="109"> <or> <target mobId="18265" /> <target mobId="18266" /> <target mobId="18267" /> <target mobId="18268" /> <target mobId="18269" /> <target mobId="18270" /> <target mobId="18271" /> <target mobId="18272" /> <target mobId="18273" /> <target mobId="18274" /> <target mobId="18275" /> <target mobId="18276" /> <target mobId="18277" /> <target mobId="18278" /> <target mobId="18279" /> <target mobId="18280" /> <target mobId="18281" /> <target mobId="18282" /> <target mobId="18283" /> <target mobId="18284" /> <target mobId="18285" /> <target mobId="18286" /> </or> </cond> </skill> Изменено 17 мая, 2015 пользователем Temen Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 17 мая, 2015 (изменено) int lvlDiff = Math.max(npcLvl - openerLvl, 0); Изменено 17 мая, 2015 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Temen 0 Опубликовано 17 мая, 2015 int lvlDiff = Math.max(npcLvl - openerLvl, 0); Спасибо , помогло . Тему можно закрывать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты