Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Как запомнить то что в руках?

тут можно задать вопрос по скриптингу
Post Reply
SkullCAT
Neophyte
Neophyte
Posts: 32
Joined: 28.10.2012 17:17

Как запомнить то что в руках?

Post by SkullCAT »

Еще раз всем добрый день!
собственно пытаюсь сделать простенький скрипт на хил, но с такой идеей что бы чар после лечение брал не заранее прописанный айтем по ид, а запоминал что что в руках uo.set arm аналог инжекта (или как он там прописывался)?
То есть я хочу сделать скрипт:
запомнить то что в руках
поюзать бинт
взять в руки, то что запомнили.
На примере левой руки с одноручем пытаюсь сделать так:

Code: Select all

procedure Heal_dr();
var
veap: Cardinal;
begin
if ObjAtLayer(RhandLayer) > 0 then;
veap = gettype(ObjAtLayer(RhandLayer); 
Heal_B; 
Equip(RhandLayer,veap);
end;  
подскажите пожалуйста, как можно исправить, что бы работало?
Спасибо!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Как запомнить то что в руках?

Post by Vizit0r »

почти правильно, gettype только ни к чему там был

Code: Select all

procedure Heal_dr();
var
veap: Cardinal;
begin
veap := 0;
if ObjAtLayer(RhandLayer) > 0 then;
veap = ObjAtLayer(RhandLayer); 
Heal_B; 
Equip(RhandLayer,veap);
end; 
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
SkullCAT
Neophyte
Neophyte
Posts: 32
Joined: 28.10.2012 17:17

Re: Как запомнить то что в руках?

Post by SkullCAT »

Хм. Пока общий скрипт получается таким:

Code: Select all

Program pvpscripts;
const
clean_bandages = $0E21;      //бинты

procedure Heal_B();
begin
UseObject(FindType(clean_bandages,Backpack)); 
      WaitTargetObject(Self);
//Equip(RhandLayer,$40000D1A);
end;

procedure Heal_dr();
var
veap: Cardinal;
begin
if ObjAtLayer(RhandLayer) > 0 then;
veap = ObjAtLayer(RhandLayer); 
Heal_B; 
Equip(RhandLayer,veap);
end;

begin
end.
Сама по себе хил работает без второй процедуры
Но все вместе выдает Compiler: [Error] ( at 17:30): Internal error (20)
В чем ошибка? подскажите пожалуйста.
Спасибо!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Как запомнить то что в руках?

Post by Vizit0r »

внутренние ошибки - они такие внутренние.

Code: Select all

Program pvpscripts;
const
clean_bandages = $0E21;      //бинты

procedure Heal_B();
begin
UseObject(FindType(clean_bandages,Backpack)); 
      WaitTargetObject(Self);
//Equip(RhandLayer,$40000D1A);
end;

procedure Heal_dr();
var
veap: Cardinal;
begin
if ObjAtLayer(RhandLayer) > 0 then
veap := ObjAtLayer(RhandLayer); 
Heal_B; 
Equip(RhandLayer,veap);
end;

begin
end.
мне кажется, так правильнее.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
SkullCAT
Neophyte
Neophyte
Posts: 32
Joined: 28.10.2012 17:17

Re: Как запомнить то что в руках?

Post by SkullCAT »

Спасибо!
То есть вся проблема в двоеточии была?
Эх еще учиться и учиться =(
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Как запомнить то что в руках?

Post by Vizit0r »

= сравнение, := присваивание
а точка с запятой после then вообще непонятно что там делала
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Как запомнить то что в руках?

Post by drabadan »

а чем вы хотите вызывать процедуры?
А реально ли - реализовать управление через журнал?

Code: Select all

program pvpScript;

var
i : Integer;
command : array[0..1] of String;

// заполняем массив данными
procedure initCommand;
  begin
    command[0] := "HealMe";
    command[1] := "SayMETALLICA"; // МИТОЛ!!!!!
  end;

// один из вариантов действий 
procedure healSelf;
  begin
    while Hp(self) < 150 do 
       begin
         usebandages; // лень вспоминать тип бинтов
        end;
   end;

// процедура которая выполняет команду
procedure doThing(param : String); 
  begin
    if param == command[0] then healSelf;
    if param == command[1] then UoSay("METALLICA!!!");
  end;

begin
  initCommand;
  while not dead do
    begin
      for i := 0 to command.length-1 do // проверяем нет ли какой-нить команды в ластмесадже.
        if (LastJournalMessage == command[i]) then doThing(command[i]); // тут пытаемся вызвать процедуру!
        wait(100);
    end;
end.
В клиенте набиндить команд типа "Say".
Код, конечно не верный - но я попытался, насколько мозгов хватило, выложить примерную логику. Просто, интересно можно так сделать или нет!

З.Ы. Я понимаю, что он будет 1 поточный - но ваааще можно было бы? Просто есть моменты когда надо гварда убить "в ручном режиме", а скрипт останавливать не хочется!
SkullCAT
Neophyte
Neophyte
Posts: 32
Joined: 28.10.2012 17:17

Re: Как запомнить то что в руках?

Post by SkullCAT »

А как правильно зациклить скрипт?

Code: Select all

procedure test2();
var 
MyChar2:Cardinal;
begin
MyBers := $000073A4;
    Repeat
    If GetHp(MyChar2) < GetMaxHp(MyChar2) then;
    UseObject(FindType(clean_bandages,Backpack)); 
    WaitTargetObject(MyChar2);
    wait(5000); 
    Until Dead;
end;
где какие задержки поставить или проверку по журналу?

так как получается что чар бинтует постоянно задержкой =(
Мозг пока не может придумать решение.
Спасибо за помощь!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Как запомнить то что в руках?

Post by Vizit0r »

опять эта точка с запятой после then!

Code: Select all

procedure test2();
var 
MyChar2:Cardinal;
begin
MyBers := $000073A4;
    Repeat
    If GetHp(MyChar2) < GetMaxHp(MyChar2) then
    begin
      UseObject(FindType(clean_bandages,Backpack)); 
      WaitTargetObject(MyChar2);
      wait(5000); 
    end;
    wait(500); 
    Until Dead;
end;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
SkullCAT
Neophyte
Neophyte
Posts: 32
Joined: 28.10.2012 17:17

Re: Как запомнить то что в руках?

Post by SkullCAT »

Добрый день, еще раз.
А есть способ более простой для запоминания оружия?
Когда экипирован двуруч или одноручное оружие, при условии что щит не выпадает - то все и так понятно.
Но вот какое должно быть условие, когда нужно запомнить и щит и меч, что бы одеть после использования бинтов? Просто по памяти в инжекте была команда uo.set(arm) ну или как то так.
По сути тут нужно просто задавать условия, типа есть что то в праой руке - запомнить. есть в левой - запомнить, поюзать бинты и экипировать то что запомнил.
Вот только на практике у меня получается что запоминает либо то что в правой либо то что в левой. особенно когда пытаюсь сделать скрипт на одноручное оружие с щитом и лук.

Я не прошу написать готовый скрипт, я прошу подсказать как грамотно задать условия, или как это можно сделать проще.
Спасибо большое, заранее!
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Как запомнить то что в руках?

Post by shinma »

процедура лалала
начало
запоминаем оружие в левой лапе
запоминаем оружие в правой лапе
юзаем бинты
одеваем оружие в левую лапу
одеваем оружие в правую лапу
конец

смотри мой скрипт - голден бой
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
Post Reply