Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Помогите со скриптом, альтернативны бой!

Рег
11 Янв 2016
Сообщения
4
Реакции
0
Суть в следующем, у меня на сервере, после минут 15 бот начинает тупить и не брать в таргет мобов которые стоят подальше от него, только рядом, а если в паре шагов некого нету, стоит тупит! Подскажите что в этом скрипте не так?


Код:
function get_next: TL2Npc;
var
  value: TL2Npc;
  value_priority: integer;
  npc: TL2Npc;
  i, j: integer;
  priority: integer;
  distance: Cardinal;
  begin
       value:= nil;
       value_priority:= 0;
       for i:= 0 to NpcList.Count do begin
           priority:= 0;
           npc:= NpcList.Items(i);
           distance:= npc.DistTo(User);
           if (npc.IsPet or npc.IsMember or npc.Dead or (distance > 5000)) then Continue;


           /// Если у цели персонаж или группа в таргете
           if (npc.Target.Valid) and (npc.Target.OID = User.OID) or (npc.Target.IsMember)  then
              priority:= (5000 + 20 * (100 - npc.HP));


           /// Если цель находится в бою, умножить на два
           if (npc.InCombat) then
              priority:= priority * 2;


           /// Изменяем приоритет в зависимости от дистанции
           priority:= priority + (5000 - distance);


           /// Если цель в бою и дерется с другим игроком
           if npc.InCombat and npc.Target.Valid and ( (npc.Target.OID <> User.OID) or not npc.Target.IsMember ) then begin
              priority:= Trunc(priority * npc.HP / 500);
           end;


           /// Проверяем соседних монстров на дистацию от текущего монстра
           for j:= 0 to NpcList.Count do begin
               if (NpcList.Items(j).OID = npc.OID) then Continue;
               if (NpcList.Items(j).DistTo(npc) < 500) then
                  priority:= priority - (100 + Random(100));
           end;


           /// Сравниваем с нашим монстром
           if (value = nil) then begin
              value:= npc;
              value_priority:= priority;
           end;


           if (priority > value_priority) then begin
              value:= npc;
              value_priority:= priority;
           end;
           // Print(npc.Name +'[ ' + npc.ID.toString + '] priority: ' + priority.toString);
       end;
         Result:= value;
  end;
 
Код:
function get_next: TL2Npc;
var
  value: TL2Npc;
  value_priority: integer;
  npc: TL2Npc;
  i, j: integer;
  priority: integer;
  distance: Cardinal;
  begin
       value:= nil;
       value_priority:= 0;
       for i:= 0 to NpcList.Count do begin
           priority:= 0;
           npc:= NpcList.Items(i);
           distance:= npc.DistTo(User);
           if (npc.IsPet or npc.IsMember or npc.Dead or (distance > 5000)) then Continue;

           /// Если у цели персонаж или группа в таргете
           if (npc.Target.Valid) and (npc.Target.OID = User.OID) or (npc.Target.IsMember)  then
              priority:= (5000 + 20 * (100 - npc.HP));

           /// Если цель находится в бою, умножить на два
           if (npc.InCombat) then
              priority:= priority * 2;

           /// Изменяем приоритет в зависимости от дистанции
           priority:= priority + (5000 - distance);

           /// Если цель в бою и дерется с другим игроком
           if npc.InCombat and npc.Target.Valid and ( (npc.Target.OID <> User.OID) or not npc.Target.IsMember ) then begin
              priority:= Trunc(priority * npc.HP / 500);
           end;

           /// Проверяем соседних монстров на дистацию от текущего монстра
           for j:= 0 to NpcList.Count do begin
               if (NpcList.Items(j).OID = npc.OID) then Continue;
               if (NpcList.Items(j).DistTo(npc) < 500) then
                  priority:= priority - (100 + Random(100));
           end;

           /// Сравниваем с нашим монстром
           if (value = nil) then begin
              value:= npc;
              value_priority:= priority;
           end;

           if (priority > value_priority) then begin
              value:= npc;
              value_priority:= priority;
           end;
           // Print(npc.Name +'[ ' + npc.ID.toString + '] priority: ' + priority.toString);
       end;
         Result:= value;
  end;

begin
while true do begin
get_next;
delay (1111);
end.
 
Назад
Сверху