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

Простенькая слипалка для варка дуо с гномом

Рег
9 Ноя 2016
Сообщения
8
Реакции
0
Простенькая слипалка как упражнение в написании скриптов.

Скрипт чекает мобов в радиусе 500.
Если моб атакует патимембера и при этом не находится в таргете гнома, моб слипается.
Код:
uses SysUtils, Classes;

function isSleeping(target: TL2Live): Boolean;
begin
	result := target.AbnormalID and $80 = $80;
end;

function ExtraAggroes(self: TL2Spawn; party: TParty): TL2Npc; 
var num, innernum:integer;
	target:TL2Live;
	npc: TL2Npc;
begin 
for num:=0 to NpcList.Count - 1 do
	begin
	  	npc := NpcList.Items(num);
	  	target := npc.Target;
	  	if (npc.DistTo(self) < 500) and (not (npc.Dead)) and
	  		((target = Self) or (target.IsMember)) then 
	  	begin
	  		if isSleeping(npc) then
	  		begin
	  			print(npc.Name + ' уже спит!');
	  			continue;
	  		end;
	  		if party.Leader.Target <> npc then
	  		begin
	  			result := npc;
	  			exit;
	  		end;
	    end;
    end;
end;
 
var mobToSleep: TL2Npc;

begin
while true do
	begin
		if User.Cast.EndTime > 0 then 
			begin 
			print('Кастую что-то');
			delay(User.Cast.EndTime);
			continue;
		end;
		mobToSleep := ExtraAggroes(User, Party);
		if (mobToSleep = nil) then
			begin
			print('Чет некого слипать');
			delay(500);
		end
		else
		begin
			Engine.FaceControl(0, False);
			Engine.SetTarget(mobToSleep);
			Engine.UseSkill('Сонный Дух');
			delay(500);
			Engine.FaceControl(0, True);
			print('Слипаю лишнего ' + mobToSleep.Name)
		end;
	end;
end.
 
vincevince написал(а):
много где таргет у мобов "не видит" и лучше использовать atkoid
http://asiwin.com/api/adrenalin/Classes/TL2Live

if User.Cast.EndTime > 0 then
begin
print('Кастую что-то');
delay(400);
continue;
почему не использовать сразу же user.cast.endtime в delay?)

Engine.UseSkill('Сонный Дух');
лучше по ид скилы юзать.
 
SoundShocking написал(а):
много где таргет у мобов "не видит" и лучше использовать atkoid http://asiwin.com/ap...Classes/TL2Live
Каким образом сделать проверку

((target = Self) or (target.IsMember))

если использовать AtkOID?

Старый код не работает ибо incompatible types - T2Live and Cardinal.
 
vincevince написал(а):
Где проще всего выцепить айди? Алсо, айди не меняется с левлом скилла?
базы, клиент или в боте в умениях, не меняется.



vincevince написал(а):
Каким образом сделать проверку
Код:
for i:=0 to npclist.count-1 do
  begin
    mob:=npclist(i);
    if((not mob.dead) and not(mob.atkoid=obj.oid) and (mob.inzone) and (obj.distto(mob)<=range))
      then inc(result);
  end;
 
Назад
Сверху