Перейти к содержанию
Авторизация  
lotos

Проблемка С Java Скриптом

Рекомендуемые сообщения

Добрый день!

У меня проблема с написанием 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;
   }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

}

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или в самом начале сразу ставь его смертным:

 

public String onAttack(L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet)

{

npc.setIsInvul(false);

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин... Все ровно такой же эффект

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вижу почему:

 

 

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;}

}

}

Изменено пользователем Main
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

   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;
   }

Так что ли ??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто у меня все ровно не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 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.

Проверяем на оружие которым можно бить и если да - моб смертный, иначе - моб бессмертный.

Изменено пользователем Main
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даже не знаю. Отложу на время.

А если сделать через дроп ??

То есть если ты бьешь этим оружием, то выпадают вещи ??

    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);
   }

Я написал такой код, НО он все ровно не работает.. То есть нету дропа вообще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всее.. Сделал.. Огромное тебе спасибо за помощь )

Если тебе не будет лень, то можешь посмотреть эту часть скрипта:

    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
       }
   }

Дроп работает правильно, НО он дропает на пол, а не в сумку. Знаешь как поменять ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...