lotos 0 Опубликовано 7 ноября, 2012 Добрый день! У меня проблема с написанием java скрипта. Я буду очень благодарен, если вы мне поможете. Смысл этой части в том, что при атаке NPC обычным оружием или питомцем, то он делает npc бессметным, НО у меня не получается вернуть функцию обратно, то есть если я один раз ударю обычным оружием, то станет бессмертным на всегда и больше с специального оружия его уже не убьешь.. Вот часть скрипта: public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { if (contains(SQUASH_LIST,npc.getNpcId())) { if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.setIsInvul(false); npc.getStatus().reduceHp(100, attacker); return null; } if(isPet) { npc.setIsInvul(true); return null; } else { npc.setIsInvul(true); return null; } } return null; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Main 85 Опубликовано 7 ноября, 2012 public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { if (contains(SQUASH_LIST,npc.getNpcId())) { if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.setIsInvul(false); npc.getStatus().reduceHp(100, attacker); return null; } if(isPet) { npc.setIsInvul(true); return null; } else { npc.setIsInvul(true); return null; } } npc.setIsInvul(false); return null; } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Main 85 Опубликовано 7 ноября, 2012 Или в самом начале сразу ставь его смертным: public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { npc.setIsInvul(false); 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lotos 0 Опубликовано 7 ноября, 2012 Блин... Все ровно такой же эффект Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Main 85 Опубликовано 7 ноября, 2012 (изменено) Вижу почему: if(isPet) { npc.setIsInvul(true); return null; } else { npc.setIsInvul(true); return null; } Вот тут кусок, если атакующий пет - моб становится бессмертным, а если атакующий НЕ пет - моб тоже становится бессмертным. Вот что надо изменить: public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { if (contains(SQUASH_LIST,npc.getNpcId())) { if(isPet) { npc.setIsInvul(true); return null; } else if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.setIsInvul(false); npc.getStatus().reduceHp(100, attacker); return null; } else {npc.setIsInvul(true); return null;} } } Изменено 7 ноября, 2012 пользователем Main 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lotos 0 Опубликовано 7 ноября, 2012 public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { npc.setIsInvul(false); if (contains(SQUASH_LIST,npc.getNpcId())) { if(isPet) { npc.setIsInvul(true); return null; } else if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.setIsInvul(false); npc.getStatus().reduceHp(100, attacker); return null; } else { npc.setIsInvul(true); return null; } } npc.setIsInvul(false); return null; } Так что ли ?? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lotos 0 Опубликовано 7 ноября, 2012 Просто у меня все ровно не работает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Main 85 Опубликовано 7 ноября, 2012 (изменено) public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet) { if (contains(SQUASH_LIST,npc.getNpcId())) { if(isPet) { npc.setIsInvul(true); return null; } else if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.setIsInvul(false); npc.getStatus().reduceHp(100, attacker); return null; } else { npc.setIsInvul(true); return null; } } return null; } Возможно ты услови не то сделал - из чего надо бить мобов чтоб их можно было убить, а проверки правильные. Изначально проверяем пет ли бьет моба, если да - моб бессмертный, а если нет - провера номер 2. Проверяем на оружие которым можно бить и если да - моб смертный, иначе - моб бессмертный. Изменено 7 ноября, 2012 пользователем Main 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lotos 0 Опубликовано 7 ноября, 2012 Даже не знаю. Отложу на время. А если сделать через дроп ?? То есть если ты бьешь этим оружием, то выпадают вещи ?? public String onKill (L2NpcInstance npc, L2PcInstance killer, boolean isPet, L2PcInstance attacker) { dropItem(npc, killer); if(attacker.getActiveWeaponItem() != null && contains(CHRONO_LIST,attacker.getActiveWeaponItem().getItemId())) { npc.getStatus().reduceHp(100, attacker); return null; } return super.onKill(npc, killer, isPet); } Я написал такой код, НО он все ровно не работает.. То есть нету дропа вообще. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lotos 0 Опубликовано 7 ноября, 2012 Всее.. Сделал.. Огромное тебе спасибо за помощь ) Если тебе не будет лень, то можешь посмотреть эту часть скрипта: private static final void dropItem(L2NpcInstance mob, L2PcInstance player) { final int npcId = mob.getNpcId(); final int chance = Rnd.get(100); for (int i = 0; i < DROPLIST.length; i++) { int[] drop = DROPLIST[i]; if (npcId == drop[0]) { if (chance < drop[2]) { if(drop[1] > 20000) ((L2MonsterInstance)mob).dropItem(player, drop[1], 2); else ((L2MonsterInstance)mob).dropItem(player, drop[1], Rnd.get(1, 3)); continue; } } if (npcId < drop[0]) return; // not found } } Дроп работает правильно, НО он дропает на пол, а не в сумку. Знаешь как поменять ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты