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

Скрипт Auto gift seraphim summon

Рег
26 Дек 2015
Сообщения
21
Реакции
0
Код:
uses
  Classes, SysUtils;
  
const
charname = 'magnatune';


function skillCoolTime(ID: integer): integer;
var
skill: TL2Skill;
begin
if Skilllist.byID(id, skill) then
Result := skill.Endtime
else  
Result := -1; 
end;


procedure follow;
var
  tchar: tl2char;
begin
 while true do
 begin
 delay(500);
  charlist.byname(charname, tchar);
  if (user.DistTo(tchar) > 200) then
    Engine.MoveTo(tchar, -100);
  end;
end;


procedure rebuff;
var
  tchar: tl2char;
  eff: tl2buff;
begin
  while true do
  begin
    delay(50);


    if (petlist.count = 0) and not user.dead then
    begin
      Engine.UseSkill(1332);
      delay(400);
      delay(user.cast.endtime);
    end;


    if (User.PVP) and not User.inCombat then
    begin
      Engine.Restart;
      delay(1000);
      Engine.GameStart(0);
    end;   
    
    if (party.chars.count = 0) then
      continue;


    if party.chars.byname(charname, tchar) and (User.DistTo(tchar) < 900) then
    begin
      if ((tchar.buffs.byid(4703, eff)) or tchar.buffs.byid(4702, eff))
             and (eff.endtime > 40 * 1000) then
        continue;
    
      if (tchar.buffs.byid(1073, eff)) then
        Engine.UseAction(1010)
      else
        Engine.UseAction(1011);


        delay(1000);
        delay(petlist.items(0).cast.endtime + 200);


        if (User.PVP) and not User.inCombat and not tchar.buffs.byid(1043, eff) then
        begin
          Engine.Restart;
          delay(1000);
          Engine.GameStart(0);
          continue;
        end;   
      
        if ((tchar.buffs.byid(4703, eff)) or tchar.buffs.byid(4702, eff)) and (eff.endtime > 40 * 1000)
         and not tchar.buffs.byid(1043, eff) then 
          Engine.LeaveParty; 
    end;
   
    
    
  end;
end;


procedure summon;
var
  obj: TL2Live;
  delayTime: Cardinal;
  objName: string;
begin
  while true do
  begin
  delay(500);


  if user.dead then
    continue;


  if ChatMessage.Unread and (integer(ChatMessage.ChatType) = 2) and AnsiSameText(ChatMessage.text, 'sum') then
begin


 if (skillCoolTime(1403) > 0) then
 begin
   Engine.Say('Soz, summon in cd. Try in ' + IntToStr(Trunc(skillCoolTime(1403) / 1000)) + ' secs', 2, ChatMessage.Sender);
   continue;
 end;    


 objName := ChatMessage.Sender;


 Engine.InviteParty(objName);


 delay(3000);


 if Party.Chars.ByName(objName, obj) then
 begin
   Engine.SetTarget(obj);
   Engine.UseSkill(1403);


   delayTime := GetTickCount + 7000;
   
   while (User.DistTo(obj) > 500) and (GetTickCount < delayTime) do
     delay(500);
    
   Engine.LeaveParty;
 end;


  end;
  
  end;
end;


begin
  script.newThread(@summon);
  script.newthread(@follow);
  script.newThread(@rebuff);


РЕБЯТА ПОДСКАЖИТЕ ПОЧЕМУ НЕ РАБОТАЕТ!?
 
Как сделать чтобы чар останавливал бой отзывал одного боевого коня, призывал Мерроу, давал баф серафима, отзывал Мерроу, призывал боевого коня. Кому не трудно набросайте плиз.
 
@magnatune, а что конкретно не работает? Скрипт не запускается, выводит ошибку или скрипт запускается, но ничего не происходит? Могу предположить, что в конце не хватает строки
Код:
end.
 
@savant, end. не докопипастился с исходника, в общем как я понял сам скрип имеет не то предназначение которое мне нужно, хотелось бы разобраться с этим "Как сделать чтобы чар останавливал бой отзывал одного боевого коня, призывал Мерроу, давал баф серафима, отзывал Мерроу, призывал боевого коня." (Собственно необходимо для фарма саммонером коневодом, т.к. именно с этим бафом он стабильно фармит локацию)
 
@magnatune, Этот скрипт для оконного коня, а не для мейна (самонит, бафает и релогается у меня как часы)

P.S если скопипастить процедуру ребаф и напичкать её командами на отзыв ребаф и т.д. то будет замечательно работать.

uses
Classes, SysUtils;


function skillCoolTime(ID: integer): integer;
var
skill: TL2Skill;
begin
if Skilllist.byID(id, skill) then
Result := skill.Endtime
else
Result := -1;
end;

procedure rebuff;
var
tchar: tl2char;
eff: tl2buff;
begin
while true do
begin
delay(50);

if (petlist.count = 1) and not user.dead and not User.Buffs.ByID(4703, eff) then
begin
Engine.FaceControl(0,false);
delay(15000);
Engine.UseAction(ИД действия на ансамон);
Engine.UseSkill(1332);
delay(400);
delay(user.cast.endtime);
Engine.UseAction(1011);
delay(1000);
Engine.UseAction(ИД действия на ансамон);
Engine.UseSkill(1277);
delay(1000);
Engine.FaceControl(0,true);
end;
end;
end;

procedure summon;
var
obj: TL2Live;
delayTime: Cardinal;
objName: string;
begin
while true do
begin
delay(500);

if user.dead then
continue;

if ChatMessage.Unread and ((ChatMessage.ChatType) = mtPrivate) and AnsiSameText(ChatMessage.text, 'sum') then
begin

if (skillCoolTime(1403) > 0) then
begin
Engine.Say('Сумон в кд. Притяну через ' + IntToStr(Trunc(skillCoolTime(1403) / 1000)) + ' secs', 2, ChatMessage.Sender);
continue;
end;

objName := ChatMessage.Sender;

Engine.InviteParty(objName);

delay(3000);

if Party.Chars.ByName(objName, obj) then
begin
Engine.SetTarget(obj);
Engine.UseSkill(1403);

delayTime := GetTickCount + 7000;

while (User.DistTo(obj) > 500) and (GetTickCount < delayTime) do
delay(500);

Engine.LeaveParty;
end;

end;

end;
end;



begin
script.newThread(@rebuff);
script.newThread(@summon);
end.


Правь сам ID действия отзыва сумона. Вроде должно работать сам не проверял.
 
@Plegas, А как прописать дополнительно, чтобы он из боевого режима выходил и остановил активность, на время процедуры вызова и ребафа, иначе в бою он не отзывает самона.
 
@magnatune, Там в скрипте есть выключение автоматики, выжыдание боевого режима, и отсумон пета
 
@Plegas, Получилась вот такая штука в итоге

uses SysUtils, Classes;

var
Buff:TL2Buff; monster: TL2Npc;
i: integer;



procedure attack;

begin
if (not User.Target.Dead) and (User.target <> nil) then begin
Engine.Facecontrol(0,true);
print('отбиваюсь');
end;

if (not User.Buffs.ByID(4703,Buff) or (buff.EndTime<5000)) and (not User.Dead)
and (User.Target.Dead) and (User.target <> nil) then begin
Engine.CancelTarget;
Engine.Facecontrol(0,False);
print('моб здох сбросил таргет');
end;
delay(100);
end;





begin
while 1 <> 2 do begin
if (not User.Buffs.ByID(4703,Buff) or (buff.EndTime<5000)) and (not User.Dead) then
Engine.UseAction(52);
delay(2000);
Engine.UseSkill(1332);
delay(3000);
Engine.UseAction(1011);
delay(3000);
Engine.UseAction(1057);
delay(1500);
Engine.UseAction(1055);
delay(2500);
Engine.UseAction(52);
Engine.UseSkill(1226);
delay(1000);
Engine.FaceControl(0,true);

while User.InCombat do attack;
// бафаемся
end;
delay(500);



end.




Из недоработок,
1)самон бежит на моба, моб бьет самона, если чат в этот момент выключил интерфейс, то чар не берет этого моба в таргет, соответственно самон умирает. Можно исправить куском для проверки на атаку самона мобами.
Вот пример такого куска только для проверки выделения мобами чара.
var
monster: TL2Npc;
i: integer;

begin
while i < NpcList.count do begin
monster := NpcList.Items(i);
if monster.target = user then begin
Print('Втргете у >> '+monster.name);
end;
delay(111);
end;
end.
2) Т.к. ребаф самоном находится в цикле :lool: то выделить себя через SetTarget и бафнуть себе WildMagik (например) самоновский , не получается.
Если есть идеи как это исправить отпишите пожалуйста, думаю пригодится скрипт тем кто играет на коневоде.
 
@magnatune, Дак включи его там где даешь откаты в самом цикле
не смогу щас проверить, и отредактировать твой, но через часов 8 буду в состоянии :pandaredlol:
 
Назад
Сверху