Перейти к содержанию
Asterios

ИН_Мобы в локации Sel Mahum Training Grounds


Letstat

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

Ревизия 24768

Локация Sel Mahum Training Grounds.

Имена мобов Sell Mahum Drill Sergeant, Sell Mahum Recruit, Sell Mahum Soldier, Sell Mahum Training Officer.

Собственно скрины мобов:

http://clip2net.com/s/1hRCA

http://clip2net.com/s/1hRDN

http://clip2net.com/s/1hREm

http://clip2net.com/s/1hREK

Проблема в том, что при агре единичного моба из кучки, остальные остаются абсолютно спокойны, хотя должны быть социальны друг к другу, поэтому приходится агрить каждого моба в отдельности АОЕ скилами.

Хотелось бы чтобы эту проблему решили.

Если что то нужно добавить, пожалуйста отпишите.

Спасибо.

Мобы которые стоят перед своими командирами, то есть кучками, не социальны, хотя в описании локации говорится что если потревожить хотя бы одного моба, сагрится кучка.

http://forums.goha.ru/showthread.php?t=381567

Прошу отписать особенность ли это нашего сервера, либо недоработка?

Спасибо.

Изменено пользователем Xandir
Ссылка на комментарий
Поделиться на другие сайты

Радиус равен 1000, хотя прописано в статах мобов clan_help_range=300

Дело в том, что в ai мобов прописан такой механизм:

1. При атаке моба вызывается событие: myself->BroadcastScriptEvent(( 10016 + trainer_id ),gg->GetIndexFromCreature(attacker),trainning_range);

В параметрах задается радиус его trainning_range, он задан вверху класса ai_xel_trainer_wiz и равен 1000. Тоже самое по ai_xel_trainer_war, ai_xel_trainer_sniper.

2. При получении такого события другими мобами, выполняется ряд действий:

2.1. С вероятностью 10% моб может сказать - либо "Who is mucking with my recruits!?!" либо "You are entering a world of hurt!"

2.2. Если этот моб не атакованный никем, тогда он бежит на того, кто вызвал это событие.

Вот исходники:


/***************************************************************************

*							    Change Log

*						    ------------------

*   07.11.2011

*   Script Decompiled by SauDecompiler build 102306.2

*

***************************************************************************/

class ai_xel_trainer_wiz : warrior_basic

{

parameter:

int trainer_id = 0;

int trainning_range = 1000;

int direction = 0;

handler:

EventHandler CREATED()

{

  myself->AddTimerEx(2219001,1000);

}

EventHandler NO_DESIRE(i0)

{

  myself.i_ai0 = 0;

  if( myself.i_ai5 == 1 )

  {

   return;

  }

  if( gg->FloatToInt(myself.sm.x) == myself.start_x

   && myself.start_y == gg->FloatToInt(myself.sm.y) )

  {

   myself->ChangeDir(myself.sm,0,direction);

  }

  else

  {

   myself->InstantTeleport(myself.sm,myself.start_x,myself.start_y,myself.start_z);

  }

}

EventHandler ATTACKED(attacker)

{

  if( myself.i_ai0 == 0 )

  {

   myself.c_ai0 = attacker;

   myself->BroadcastScriptEvent(( 10016 + trainer_id ),gg->GetIndexFromCreature(attacker),trainning_range);

   if( myself->IsNullCreature(myself.top_desire_target) == 0 )

   {

    myself.i_ai0 = 1;

    myself.i_ai1 = 1;

    myself->AddTimerEx(2219002,( 60 * 1000 ));

   }

  }

  super;

}

EventHandler TIMER_FIRED_EX(timer_id)

{

  if( timer_id == 2219002 )

  {

   myself.i_ai1 = 0;

  }

}

EventHandler MY_DYING(last_attacker)

{

  if( myself.i_ai1 == 1 )

  {

   if( myself->IsNullCreature(myself.c_ai0) == 0 )

   {

    myself->BroadcastScriptEvent(( 2219023 + trainer_id ),gg->GetIndexFromCreature(myself.c_ai0),trainning_range);

   }

  }

  myself.i_ai5 = 1;

  super;

}

EventHandler SCRIPT_EVENT(script_event_arg1,script_event_arg2,c0)

{

  if( script_event_arg1 == ( 10016 + trainer_id ) )

  {

   c0 = gg->GetCreatureFromIndex(script_event_arg2);

   if( myself->IsNullCreature(c0) == 0 )

   {

    if( gg->Rand(10) < 1 )

    {

	 if( gg->Rand(2) < 1 )

	 {

	  myself->Say(gg->MakeFString(1801112,"","","","",""));

	 }

	 else

	 {

	  myself->Say(gg->MakeFString(1801113,"","","","",""));

	 }

    }

    if( myself.i_ai0 == 0 )

    {

	 myself->AddAttackDesire(c0,1,5000);

    }

   }

  }

}

}

При чем, когда умирает лидер кучки, у всех мобов кучки начинается паника и все они начинают бежать к убийце их главаря. Это событие (2219023) описывается так: 1. При смерти лидера убираются все желания мобов атаковать 2. Добавляется огромное желание бежать на убийцу, при этом с вероятностью 25% моб кричит "They done killed da Sarge... Run!!" или "Don't Panic... Okay, Panic!" Вот исходник поведения простых мобов из кучки:

/***************************************************************************

*xel_recruit_warrior

*xel_recruit_high_warrior

*ai_xel_recruit_mage-xel_recruit_mage, xel_recruit_high_mage

*ai_xel_recruit_sniper-xel_recruit_sniper,xel_recruit_high_sniper

*							    Change Log

*						    ------------------

*   07.11.2011

*   Script Decompiled by SauDecompiler build 102306.2

*

***************************************************************************/

class ai_xel_recruit_warrior : ai_xel_recruit_war

{

parameter:

int Skill01_Probablity = 100;

int Skill02_Probablity = 100;

handler:

EventHandler CREATED()

{

  if( gg->Rand(18) < 1 )

  {

   myself.i_ai0 = 1;

   myself.i_quest0 = 1;

   myself->AddTimerEx(2019999,1000);

  }

}

EventHandler SCRIPT_EVENT(script_event_arg1,script_event_arg2,c0,i0,attacker)

{

  if( script_event_arg1 == ( 10016 + trainer_id ) )

  {

   c0 = gg->GetCreatureFromIndex(script_event_arg2);

   if( myself->IsNullCreature(c0) == 0 )

   {

    if( myself.sm.alive == 0 )

    {

	 return;

    }

    myself->RemoveAllAttackDesire();

    if( c0.is_pc != 0

	 || myself->IsInCategory(12,c0.npc_class_id) )

    {

	 myself->AddAttackDesire(c0,1,( 1 * 100 ));

    }

    myself->AddAttackDesire(c0,1,5000);

   }

  }

  if( script_event_arg1 == ( 2219023 + trainer_id ) )

  {

   c0 = gg->GetCreatureFromIndex(script_event_arg2);

   if( myself->IsNullCreature(c0) == 0 )

   {

    myself.i_ai6 = 1;

    myself->RemoveAllDesire();

    myself->AddFleeDesire(c0,50000000);

    if( gg->Rand(4) < 1 )

    {

	 if( gg->Rand(2) < 1 )

	 {

	  myself->Say(gg->MakeFString(1801114,"","","","",""));

	 }

	 else

	 {

	  myself->Say(gg->MakeFString(1801115,"","","","",""));

	 }

    }

    myself.c_ai1 = c0;

    myself->AddTimerEx(2019777,10);

    myself->AddTimerEx(2019888,( 5 * 1000 ));

   }

  }

  if( script_event_arg2 == trainer_id

    && myself.i_ai6 == 0 )

  {

   select(script_event_arg1)

   {

    case 2219011:

	 if( myself.i_ai0 == 1 )

	 {

	 }

	 else

	 {

	  myself.i_ai2 = 70;

	  myself.i_ai3 = 4;

	  myself.i_ai4 = 2;

	  myself->AddTimerEx(22201,100);

	 }

	 select(2219012)

	 {

	  case 2219012:

	   if( myself.i_ai0 == 1 )

	   {

	   }

	   else

	   {

	    myself.i_ai2 = 130;

	    myself.i_ai3 = 1;

	    myself.i_ai4 = 2;

	    myself->AddTimerEx(22201,100);

	   }

	   select(2219013)

	   {

	    case 2219013:

		 if( myself.i_ai0 != 1 )

		 {

		  myself.i_ai2 = 30;

		  myself.i_ai3 = 5;

		  myself.i_ai4 = 4;

		  myself->AddTimerEx(22201,100);

		 }

		 else

		 {

		  myself.i_ai2 = 30;

		  myself.i_ai3 = 6;

		  myself.i_ai4 = 4;

		  myself->AddTimerEx(22201,100);

		 }

		 break;

	    case 2219014:

		 if( myself.i_ai0 == 1 )

		 {

		 }

		 else

		 {

		  myself.i_ai2 = 30;

		  myself.i_ai3 = 7;

		  myself.i_ai4 = 2;

		  myself->AddTimerEx(22201,100);

		 }

	   }

	 }

    }

EventHandler TIMER_FIRED_EX(timer_id)

{

  if( timer_id == 2019999 )

  {

   myself->AddTimerEx(2019999,5000);

  }

  if( timer_id == 2019888 )

  {

   myself.i_ai6 = 0;

  }

  if( timer_id == 2019777 )

  {

   myself->AddFleeDesire(myself.c_ai1,50000000);

   if( myself.i_ai6 == 1 )

   {

    myself->AddTimerEx(2019777,1000);

   }

  }

  if( timer_id == 22201 )

  {

   myself->AddEffectActionDesire(myself.sm,myself.i_ai3,( ( myself.i_ai2 * 1000 ) / 30 ),500);

   if( myself.i_ai4 != 0 )

   {

    myself.i_ai4 = ( myself.i_ai4 - 1 );

    myself->AddTimerEx(22201,( ( myself.i_ai2 * 1000 ) / 30 ));

   }

  }

}

}

Вот еще часть ai от простых мобов, где видно что также вызывается событие 10016 при простой атаке (агр на членов группы):

/***************************************************************************

*ai_xel_trainer_war->ai_xel_trainer_warrior->xel_trainer_warrior

*ai_xel_trainer_mage->xel_trainer_mage

*ai_xel_trainer_sniper->xel_trainer_sniper

*							    Change Log

*						    ------------------

*   07.11.2011

*   Script Decompiled by SauDecompiler build 102306.2

*

***************************************************************************/

class ai_xel_recruit_war : warrior_basic

{

parameter:

int trainer_id = 0;

int direction = 0;

handler:

EventHandler NO_DESIRE(i0)

{

  if( myself.i_ai5 == 1 )

  {

   return;

  }

  if( gg->FloatToInt(myself.sm.x) == myself.start_x

   && myself.start_y == gg->FloatToInt(myself.sm.y) )

  {

   myself->ChangeDir(myself.sm,0,direction);

  }

  else if( myself.i_ai6 == 0 )

  {

   myself->InstantTeleport(myself.sm,myself.start_x,myself.start_y,myself.start_z);

  }

}

EventHandler ATTACKED(attacker)

{

  if( myself.i_ai6 == 1 )

  {

   return;

  }

  myself->BroadcastScriptEvent(( 10016 + trainer_id ),gg->GetIndexFromCreature(attacker),1000);

  super;

}

EventHandler CLAN_ATTACKED(attacker)

{

  if( myself.i_ai6 == 1 )

  {

   return;

  }

  super;

}

EventHandler MY_DYING(last_attacker)

{

  myself.i_ai5 = 1;

  super;

}

}

Изменено пользователем Steelgar
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Сделал мобов, стоящих строем социальными в r24875. По остальным элементам АИ позже.

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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