Page 1 of 1
Как запомнить то что в руках?
Posted: 08.06.2013 12:03
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;
подскажите пожалуйста, как можно исправить, что бы работало?
Спасибо!
Re: Как запомнить то что в руках?
Posted: 08.06.2013 12:33
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;
Re: Как запомнить то что в руках?
Posted: 08.06.2013 13:52
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)
В чем ошибка? подскажите пожалуйста.
Спасибо!
Re: Как запомнить то что в руках?
Posted: 08.06.2013 13:56
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.
мне кажется, так правильнее.
Re: Как запомнить то что в руках?
Posted: 08.06.2013 14:21
by SkullCAT
Спасибо!
То есть вся проблема в двоеточии была?
Эх еще учиться и учиться =(
Re: Как запомнить то что в руках?
Posted: 08.06.2013 18:17
by Vizit0r
= сравнение, := присваивание
а точка с запятой после then вообще непонятно что там делала
Re: Как запомнить то что в руках?
Posted: 08.06.2013 23:38
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 поточный - но ваааще можно было бы? Просто есть моменты когда надо гварда убить "в ручном режиме", а скрипт останавливать не хочется!
Re: Как запомнить то что в руках?
Posted: 09.06.2013 0:27
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;
где какие задержки поставить или проверку по журналу?
так как получается что чар бинтует постоянно задержкой =(
Мозг пока не может придумать решение.
Спасибо за помощь!
Re: Как запомнить то что в руках?
Posted: 09.06.2013 8:45
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;
Re: Как запомнить то что в руках?
Posted: 15.06.2013 12:43
by SkullCAT
Добрый день, еще раз.
А есть способ более простой для запоминания оружия?
Когда экипирован двуруч или одноручное оружие, при условии что щит не выпадает - то все и так понятно.
Но вот какое должно быть условие, когда нужно запомнить и щит и меч, что бы одеть после использования бинтов? Просто по памяти в инжекте была команда uo.set(arm) ну или как то так.
По сути тут нужно просто задавать условия, типа есть что то в праой руке - запомнить. есть в левой - запомнить, поюзать бинты и экипировать то что запомнил.
Вот только на практике у меня получается что запоминает либо то что в правой либо то что в левой. особенно когда пытаюсь сделать скрипт на одноручное оружие с щитом и лук.
Я не прошу написать готовый скрипт, я прошу подсказать как грамотно задать условия, или как это можно сделать проще.
Спасибо большое, заранее!
Re: Как запомнить то что в руках?
Posted: 15.06.2013 12:52
by shinma
процедура лалала
начало
запоминаем оружие в левой лапе
запоминаем оружие в правой лапе
юзаем бинты
одеваем оружие в левую лапу
одеваем оружие в правую лапу
конец
смотри мой скрипт - голден бой