Raxus 0 Опубликовано 5 мая, 2012 (изменено) Решил реализовать такую штучку: За определённое кол-во монет, персонажу даётся скилл который даёт единоразовую защиту от дропа при пк (кол-во пк неважно). Копал в скиллах Clan Luck и Lucky - насколько я понял они такую защиту не дают, да и в исходах не нашёл кода этих скилов. Так вот как бы мне сделать такой скильчик, или хотя бы его иллюзию, главное чтоб эффект был соответствующий? Изменено 5 мая, 2012 пользователем Raxus Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 5 мая, 2012 ПО алгоритму могу сказать что тут скорее он таков : Если использовать итем , то кол-во итемов , которое дропнется 0 на определенное время. ПОсле заданое Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 5 мая, 2012 ПО алгоритму могу сказать что тут скорее он таков :Если использовать итем , то кол-во итемов , которое дропнется 0 на определенное время. ПОсле заданое именно надо не на определённое время. Если тебя слили когда ты был пк, защита сработала и исчезла. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 5 мая, 2012 средненький алгоритм Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 5 мая, 2012 Могу сделать на платной основе, пишите Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 5 мая, 2012 Могу сделать на платной основе, пишите я могу и сам сделать, только мну нужно подтолкнуть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TryBat9 20 Опубликовано 5 мая, 2012 Akuma ты тока платно все делаешь походу? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 6 мая, 2012 (изменено) Akuma ты тока платно все делаешь походу? В подобных случаях, у человека два выхода: 1. Учить язык. 2. Заказывать работу. Если бы человек занимался обучением, его вопрос бы стоял иначе: Он бы обращался с конкретной проблемой/вопросом по коду. В таких случаях я никогда не отказываю в помощи, а вот тратить свое время и помогать человеку у которого нету желания вкладывать свои силы в обучение, нет ни малейшего желания. PS. Ник читается как "Акуму". Изменено 6 мая, 2012 пользователем Akumu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ScrepY 19 Опубликовано 6 мая, 2012 Когда сделаете, кидайте сюда Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 (изменено) В подобных случаях, у человека два выхода: 1. Учить язык. 2. Заказывать работу. Если бы человек занимался обучением, его вопрос бы стоял иначе: Он бы обращался с конкретной проблемой/вопросом по коду. В таких случаях я никогда не отказываю в помощи, а вот тратить свое время и помогать человеку у которого нету желания вкладывать свои силы в обучение, нет ни малейшего желания. PS. Ник читается как "Акуму". Ну хорошо, вот вам конкретный вопрос по коду Скрытый текст private void onDieDropItem(L2Character killer) { if (atEvent || (CTF._started && _inEventCTF) || killer == null) return; if (getKarma()<=0 && killer instanceof L2PcInstance && ((L2PcInstance)killer).getClan()!=null && getClan()!=null && ( ((L2PcInstance)killer).getClan().isAtWarWith(getClanId()) // || this.getClan().isAtWarWith(((L2PcInstance)killer).getClanId()) ) ) return; if (!isInsideZone(ZONE_PVP) && (!isGM() || Config.KARMA_DROP_GM)) { boolean isKarmaDrop = false; boolean isKillerNpc = (killer instanceof L2NpcInstance); int pkLimit = Config.KARMA_PK_LIMIT;; int dropEquip = 0; int dropEquipWeapon = 0; int dropItem = 0; int dropLimit = 0; int dropPercent = 0; if (getKarma() > 0 && getPkKills() >= pkLimit) { isKarmaDrop = true; dropPercent = Config.KARMA_RATE_DROP; dropEquip = Config.KARMA_RATE_DROP_EQUIP; dropEquipWeapon = Config.KARMA_RATE_DROP_EQUIP_WEAPON; dropItem = Config.KARMA_RATE_DROP_ITEM; dropLimit = Config.KARMA_DROP_LIMIT; } else if (isKillerNpc && getLevel() > 4 && !isFestivalParticipant()) { dropPercent = Config.PLAYER_RATE_DROP; dropEquip = Config.PLAYER_RATE_DROP_EQUIP; dropEquipWeapon = Config.PLAYER_RATE_DROP_EQUIP_WEAPON; dropItem = Config.PLAYER_RATE_DROP_ITEM; dropLimit = Config.PLAYER_DROP_LIMIT; } int dropCount = 0; while (dropPercent > 0 && Rnd.get(100) < dropPercent && dropCount < dropLimit) { int itemDropPercent = 0; List<Integer> nonDroppableList = new FastList<Integer>(); List<Integer> nonDroppableListPet = new FastList<Integer>(); nonDroppableList = Config.KARMA_LIST_NONDROPPABLE_ITEMS; nonDroppableListPet = Config.KARMA_LIST_NONDROPPABLE_ITEMS; for (L2ItemInstance itemDrop : getInventory().getItems()) { // Don't drop if ( itemDrop.isAugmented() || // Dont drop augmented items itemDrop.isShadowItem() || // Dont drop Shadow Items !itemDrop.isDropable() || itemDrop.getItemId() == 57 || // Adena itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST || // Quest Items nonDroppableList.contains(itemDrop.getItemId()) || // Item listed in the non droppable item list nonDroppableListPet.contains(itemDrop.getItemId()) || // Item listed in the non droppable pet item list getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() // Control Item of active pet ) continue; if (itemDrop.isEquipped()) { // Set proper chance according to Item type of equipped Item itemDropPercent = itemDrop.getItem().getType2() == L2Item.TYPE2_WEAPON ? dropEquipWeapon : dropEquip; getInventory().unEquipItemInSlotAndRecord(itemDrop.getEquipSlot()); } else itemDropPercent = dropItem; // Item in inventory // NOTE: Each time an item is dropped, the chance of another item being dropped gets lesser (dropCount * 2) if (Rnd.get(100) < itemDropPercent) { dropItem("DieDrop", itemDrop, killer, true); if (isKarmaDrop) _log.warning(getName() + " has karma and dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount()); else _log.warning(getName() + " dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount()); dropCount++; break; } } } } } Где в этом куске кода, можно указать, что кол-во дропнутых вещеё будет равно 0? Изменено 6 мая, 2012 пользователем Akumu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 6 мая, 2012 Достаточно просто остановить выполнение функции, до того как она достигнет стадии выполнения цикла дропа. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sn1ke 6 Опубликовано 6 мая, 2012 Ну хорошо, вот вам конкретный вопрос по коду Скрытый текст private void onDieDropItem(L2Character killer) { if (atEvent || (CTF._started && _inEventCTF) || killer == null) return; if (getKarma()<=0 && killer instanceof L2PcInstance && ((L2PcInstance)killer).getClan()!=null && getClan()!=null && ( ((L2PcInstance)killer).getClan().isAtWarWith(getClanId()) // || this.getClan().isAtWarWith(((L2PcInstance)killer).getClanId()) ) ) return; if (!isInsideZone(ZONE_PVP) && (!isGM() || Config.KARMA_DROP_GM)) { boolean isKarmaDrop = false; boolean isKillerNpc = (killer instanceof L2NpcInstance); int pkLimit = Config.KARMA_PK_LIMIT;; int dropEquip = 0; int dropEquipWeapon = 0; int dropItem = 0; int dropLimit = 0; int dropPercent = 0; if (getKarma() > 0 && getPkKills() >= pkLimit) { isKarmaDrop = true; dropPercent = Config.KARMA_RATE_DROP; dropEquip = Config.KARMA_RATE_DROP_EQUIP; dropEquipWeapon = Config.KARMA_RATE_DROP_EQUIP_WEAPON; dropItem = Config.KARMA_RATE_DROP_ITEM; dropLimit = Config.KARMA_DROP_LIMIT; } else if (isKillerNpc && getLevel() > 4 && !isFestivalParticipant()) { dropPercent = Config.PLAYER_RATE_DROP; dropEquip = Config.PLAYER_RATE_DROP_EQUIP; dropEquipWeapon = Config.PLAYER_RATE_DROP_EQUIP_WEAPON; dropItem = Config.PLAYER_RATE_DROP_ITEM; dropLimit = Config.PLAYER_DROP_LIMIT; } int dropCount = 0; while (dropPercent > 0 && Rnd.get(100) < dropPercent && dropCount < dropLimit) { int itemDropPercent = 0; List<Integer> nonDroppableList = new FastList<Integer>(); List<Integer> nonDroppableListPet = new FastList<Integer>(); nonDroppableList = Config.KARMA_LIST_NONDROPPABLE_ITEMS; nonDroppableListPet = Config.KARMA_LIST_NONDROPPABLE_ITEMS; for (L2ItemInstance itemDrop : getInventory().getItems()) { // Don't drop if ( itemDrop.isAugmented() || // Dont drop augmented items itemDrop.isShadowItem() || // Dont drop Shadow Items !itemDrop.isDropable() || itemDrop.getItemId() == 57 || // Adena itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST || // Quest Items nonDroppableList.contains(itemDrop.getItemId()) || // Item listed in the non droppable item list nonDroppableListPet.contains(itemDrop.getItemId()) || // Item listed in the non droppable pet item list getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() // Control Item of active pet ) continue; if (itemDrop.isEquipped()) { // Set proper chance according to Item type of equipped Item itemDropPercent = itemDrop.getItem().getType2() == L2Item.TYPE2_WEAPON ? dropEquipWeapon : dropEquip; getInventory().unEquipItemInSlotAndRecord(itemDrop.getEquipSlot()); } else itemDropPercent = dropItem; // Item in inventory // NOTE: Each time an item is dropped, the chance of another item being dropped gets lesser (dropCount * 2) if (Rnd.get(100) < itemDropPercent) { dropItem("DieDrop", itemDrop, killer, true); if (isKarmaDrop) _log.warning(getName() + " has karma and dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount()); else _log.warning(getName() + " dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount()); dropCount++; break; } } } } } Где в этом куске кода, можно указать, что кол-во дропнутых вещеё будет равно 0? я думаю Акуму иммел виду помощь по коду который Вы писали и пытались что то сделать а не тупо скопировать с исходов и выложить что бы все дописали пользователи. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 я думаю Акуму иммел виду помощь по коду который Вы писали и пытались что то сделать а не тупо скопировать с исходов и выложить что бы все дописали пользователи. ну это же конкретный вопрос по коду Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sn1ke 6 Опубликовано 6 мая, 2012 (изменено) Как вариант: L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила); if(Skill != null) return; Изменено 6 мая, 2012 пользователем sn1ke Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 6 мая, 2012 Как вариант:L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила); if(Skill != null) return; Не думаю что проверка на наличие данного скила в датапаке вам чем-то поможет Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 Как вариант:L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила); if(Skill != null) return; т.е. вы имеете в виду, что если у перса нет этого скила то не дропаться, скороей всего надо равно поставить, или вы что-то другое имели в виду Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sn1ke 6 Опубликовано 6 мая, 2012 Не думаю что проверка на наличие данного скила в датапаке вам чем-то поможет ех забыл точно как проверить есть ли скил вроде так?) if(getKnownSkill(Skill) != null) return; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
sn1ke 6 Опубликовано 6 мая, 2012 т.е. вы имеете в виду, что если у перса нет этого скила то не дропаться, скороей всего надо равно поставить, или вы что-то другое имели в виду Ну если у персонажа есть скил то дропа нет с него. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Armast 33 Опубликовано 6 мая, 2012 адену поставьте если есть деньги то дропа нету Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 ех забыл точно как проверить есть ли скил вроде так?) if(getKnownSkill(Skill) != null) return; getLearnSkill Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
iceman 42 Опубликовано 6 мая, 2012 Хз мб конечно я не так понял тебя ... но думаю надо "пробижатся" по всем еффектам которые весят на чаре for(L2Effect effect : activeChar.getAllEffects()){ if(effect.getSkill().getId() == id скила) return; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 а ну щас попробую Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Raxus 0 Опубликовано 6 мая, 2012 (изменено) Хз мб конечно я не так понял тебя ...но думаю надо "пробижатся" по всем еффектам которые весят на чаре for(L2Effect effect : activeChar.getAllEffects()){ if(effect.getSkill().getId() == id скила) return; } наоборот, если у чара нет этого скила то return, и не эффекты а скиллы Изменено 6 мая, 2012 пользователем Raxus Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
iceman 42 Опубликовано 6 мая, 2012 наоборот, если у чара нет этого скила то return, и не эффекты а скиллы мм.. значит не правельно понял, я думал скилл как то юзается и вешается бафф. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
qwe923 3 Опубликовано 6 мая, 2012 дать Х итем, в базе убрать все манипуляции с ним если есть итем - удаляем,выходим иначе идем дальше Скрытый текст final int ITEM_ID=57; if(getInventory().getItemByItemId(ITEM_ID)!=null) { destroyItemByItemId("Anti_PK", ITEM_ID, 1, this, false); return; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты