Page 1 of 1
Получение Durability, через ToolTip.
Posted: 20.12.2016 13:45
by ILTB
Добрый день!
Прошу помощи со следующим скриптом:
Code: Select all
Program CheckDurability;
var
Armor_Item_Layers : Array [0..6] of Word;
aa : TClilocRec;
procedure Init_Armor_Layers;
begin
Armor_Item_Layers[0] := HatLayer; //
Armor_Item_Layers[1] := NeckLayer; //
Armor_Item_Layers[2] := ArmsLayer; //
Armor_Item_Layers[3] := TorsoLayer; //
Armor_Item_Layers[4] := PantsLayer; //
Armor_Item_Layers[5] := GlovesLayer; //
Armor_Item_Layers[6] := LhandLayer; //
end;
procedure Check_Armor_Durability;
var
l : Integer;
begin
for l:= 0 to 6 do begin
aa := GetToolTipRec(ObjAtLayer(Armor_Item_Layers[l]));
AddToSystemJournal('Name: ' + aa.Items[0].Params[0]);
AddToSystemJournal(aa.Items[3].Params[0]);
end;
end;
procedure Check_Weapon_Durability;
var
String_Durability : String;
String_HP_Durability : String;
begin
aa := GetToolTipRec(ObjAtLayer(RhandLayer));
AddToSystemJournal('Name: ' + aa.Items[0].Params[0]);
AddToSystemJournal(aa.Items[4].Params[0]);
String_Durability := aa.Items[4].Params[0];
String_HP_Durability := Copy(String_Durability,13,2);
AddToSystemJournal(String_HP_Durability);
end;
begin
//Init_Armor_Layers;
//Check_Armor_Durability;
Check_Weapon_Durability;
end.
Проблема вся в том, что я не могу корректно обрезать через Copy получаемые значения 'Прочность: 10/10', если значение прочности падает, то выводится '8/'. Как можно обойти это?
По сути нужно, чтобы переменные выводили: Текущая прочность и Максимальная прочность.
Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 15:23
by drabadan
Code: Select all
Program New;
var
str, value1, value2 : String;
begin
str := 'Durability: 8/10';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
str := 'Durability: 10/10';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
str := 'Durability: 6/8';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
end.
Output:
Code: Select all
12:54:08:855 [AlexandrHeartwoodInceptum]: Compiling
12:54:08:974 [AlexandrHeartwoodInceptum]: Compiled succesfully
12:54:08:976 [AlexandrHeartwoodInceptum]: Value1 = 8 Value2 = 10
12:54:08:978 [AlexandrHeartwoodInceptum]: Value1 = 10 Value2 = 10
12:54:08:980 [AlexandrHeartwoodInceptum]: Value1 = 6 Value2 = 8
12:54:08:984 [AlexandrHeartwoodInceptum]: Succesfully executed
12:54:08:987 [AlexandrHeartwoodInceptum]: Script testShit1.sc stopped successfuly
Code: Select all
Program New;
type
TDurability = record
Current, Max : Integer;
end;
function GetDurability(Item : Cardinal) : TDurability;
var
toolTip : String;
begin
toolTip := GetToolTip(Item);
if (Pos('Durability', toolTip) <= 0) then
begin
AddToSystemJournal('Tooltip is broken');
Exit;
end;
Result.Current := StrToInt(Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2));
Result.Max := StrToInt(value2 := Copy(str, Pos('/', str) + 1, Length(str) -1));
end;
var
str, value1, value2 : String;
begin
str := 'Durability: 8/10';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
str := 'Durability: 10/10';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
str := 'Durability: 6/8';
value1 := Copy(str, Pos(':', str) + 2, (Length(str) - Pos(':', str)) - (Length(str) - Pos('/', str)) - 2);
value2 := Copy(str, Pos('/', str) + 1, Length(str) -1);
AddToSystemJournal('Value1 = ' + value1 + ' Value2 = ' + value2);
end.
Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 15:39
by ILTB
Спасибо, все получилось!
Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 21:04
by ILTB
Совсем забыл спросить: Какое количество результатов может выводить функция?
Например, если я захочу добавить в функцию помимо Result.Current(Integer) и Result.Max(Integer), еще Result.ItemName(String)?
А то у меня получается, что первый раз выводит все правильно, после Result.ItemName(String) выводит абракадабку и крашится

Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 21:09
by drabadan
ILTB wrote:Совсем забыл спросить: Какое количество результатов может выводить функция?
Например, если я захочу добавить в функцию помимо Result.Current(Integer) и Result.Max(Integer), еще Result.ItemName(String)?
А то у меня получается, что первый раз выводит все правильно, после Result.ItemName(String) выводит абракадабку и крашится

Code: Select all
//объект содержащий в себе необходимые тебе поля
type
TDurability = record
//добавляем в объект новое поле
ItemName : String;
Current, Max : Integer;
end;
//интерфейс функции, в котором содержится имя, аргументы и тип возвращаемого функцией объекта
function GetDurability(Item : Cardinal) : TDurability;
если у тебя в объекте не содержится поля ItemName то каким боком ты его можешь себе вернуть, а тем более присвоить ему значение.
Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 21:28
by ILTB
Ненене в том-то и дело, что я его объявляю, и первый раз он выводит верное имя, но вот если я повторяю запуск скрипта он начинает писать абракадабку.
+ Ко всему зависает сам клиент и Stealth.
Code: Select all
Program FunctionsCheckDurability;
type
TDurability = Record
R_H_L_ItemName : String;
R_H_L_D_Current, R_H_L_D_Max : Integer;
L_H_L_D_Current, L_H_L_D_Max : Integer;
end;
var
t : TClilocRec;
String_Durability : String;
R_H_L_D : TDurability;
L_H_L_D : TDurability;
function Get_R_H_L_Durability : TDurability;
begin
t := GetToolTipRec(ObjAtLayer(RhandLayer));
String_Durability := t.Items[4].Params[0];
Result.R_H_L_ItemName := t.Items[0].Params[0];
Result.R_H_L_D_Current := StrToInt(Copy(String_Durability, Pos(':', String_Durability) + 2, (Length(String_Durability) - Pos(':', String_Durability)) - (Length(String_Durability) - Pos('/', String_Durability)) - 2));
Result.R_H_L_D_Max := StrToInt(Copy(String_Durability, Pos('/', String_Durability) + 1, Length(String_Durability) -1));
end;
function Get_L_H_L_Durability : TDurability;
begin
t := GetToolTipRec(ObjAtLayer(LhandLayer));
String_Durability := t.Items[3].Params[0];
Result.L_H_L_D_Current := StrToInt(Copy(String_Durability, Pos(':', String_Durability) + 2, (Length(String_Durability) - Pos(':', String_Durability)) - (Length(String_Durability) - Pos('/', String_Durability)) - 2));
Result.L_H_L_D_Max := StrToInt(Copy(String_Durability, Pos('/', String_Durability) + 1, Length(String_Durability) -1));
end;
begin
R_H_L_D := Get_R_H_L_Durability;
AddToSystemJournal('Name: ' + R_H_L_D.R_H_L_ItemName + ', ' + 'Durability: ' + IntToStr(R_H_L_D.R_H_L_D_Current) + '/' + IntToStr(R_H_L_D.R_H_L_D_Max));
L_H_L_D := Get_L_H_L_Durability;
AddToSystemJournal(IntToStr(L_H_L_D.L_H_L_D_Current) + '/' + IntToStr(L_H_L_D.L_H_L_D_Max));
end.
Первый запуск:
Code: Select all
19:53:45:001 [Ololo]: Compiling
19:53:45:093 [Ololo]: Compiled succesfully
19:53:45:093 [Ololo]: Name: Copper Katana, Durability: 25/25
19:53:45:093 [Ololo]: 14/25
19:53:45:093 [Ololo]: Succesfully executed
19:53:45:093 [Ololo]: Script FunctionsCheckDurability.sc stopped successfuly
Второй запуск:
Code: Select all
19:53:46:715 [Ololo]: Compiling
19:53:46:809 [Ololo]: Compiled succesfully
19:53:46:810 [Ololo]: Name: SetJournalLine, Durability: 25/25
19:53:46:810 [Ololo]: 14/25
19:53:46:810 [Ololo]: Succesfully executed
19:53:46:810 [Ololo]: Script FunctionsCheckDurability.sc stopped successfuly
Третий запуск:
Code: Select all
19:57:55:124 [Ololo]: Compiling
19:57:55:214 [Ololo]: Compiled succesfully
19:57:55:215 [Ololo]: Name: &op_Equality, Durability: 25/25
19:57:55:217 [Ololo]: 14/25
19:57:55:219 [Ololo]: Succesfully executed
19:57:55:220 [Ololo]: Script FunctionsCheckDurability.sc stopped successfuly
Re: Получение Durability, через ToolTip.
Posted: 20.12.2016 21:52
by drabadan
а хз, что там с тултипреком. Юзай GetTooltip(ItemId : Cardinal) : String; и не люби себе мозги.
Re: Получение Durability, через ToolTip.
Posted: 21.12.2016 14:50
by ILTB
Мужики выручайте, совсем голова не варит.
Как вычленить все, что находится между знаками ' | ' и записать построчно, в строке (Или между конкретных знаков): Параметр | Параметр | Параметр | Параметр | Параметр
Re: Получение Durability, через ToolTip.
Posted: 21.12.2016 15:23
by drabadan
ILTB wrote:Мужики выручайте, совсем голова не варит.
Как вычленить все, что находится между знаками ' | ' и записать построчно, в строке (Или между конкретных знаков): Параметр | Параметр | Параметр | Параметр | Параметр
http://www.delphibasics.ru/TStringList.php
Code: Select all
Program New;
procedure TestSLGetValuesFromString(Delimiter, SourceString : String);
var
SL : TStringList;
i : Integer;
begin
try
SL := TStringList.Create;
SL.Delimiter := Delimiter;
SL.DelimitedText := SourceString;
for i := 0 to SL.Count-1 do
AddToSystemJournal(SL[i]);
finally
SL.Free;
end;
end;
begin
//Body of Script
AddToSystemJournal('Test1');
TestSLGetValuesFromString('|', 'Value1|Value2|Value3');
AddToSystemJournal('Test2');
TestSLGetValuesFromString(';', 'Value1;Value2;Value3');
end.
Re: Получение Durability, через ToolTip.
Posted: 21.12.2016 21:12
by Vizit0r
ILTB
какой нажористый скрипт, я на нем уже третий баг ловлю, а до основного еще и не дошел даже

Re: Получение Durability, через ToolTip.
Posted: 22.12.2016 7:55
by Vizit0r
нашел и исправил штук 5 багов, включая этот глобальный со строками.
Re: Получение Durability, через ToolTip.
Posted: 23.12.2016 2:03
by ILTB
drabadan
Спасибо, все сделал. Осталось только разобраться, как все это дело прикрутить, чтобы была возможность с одного надетого предмета выдергивать тот или иной параметр по надобности.
Vizit0r
Прошу прощения, скриптер и кодер из меня так себе. Пробую и пытаюсь. Скажем так, это чисто для души

Могу я у Вас узнать как это все дело оптимизировать и куда вообще копать?
Re: Получение Durability, через ToolTip.
Posted: 23.12.2016 12:53
by Vizit0r
ILTB
я сейчас пытаюсь решить вопросы со строками в паксе.
Пока получается или отличная беспроблемная работа, но с вагоном утечек - или глючная работа со строками, зато без утечек.
Что так хреново, что так. Думаю дальше.
Re: Получение Durability, через ToolTip.
Posted: 24.12.2016 23:34
by ILTB
Vizit0r
На самом деле скрипт написанный в самом первом посте, у меня отрабатывает отлично. Без багов.
А вот второй у меня работает криво. Да и написан видимо также.
Или я что-то неправильно понял?
Re: Получение Durability, через ToolTip.
Posted: 25.12.2016 11:01
by Vizit0r
ну как бы логично, в первом не используется некоторые моменты, которые приводят к багу.
Сейчас последние обкатывания проводятся, может завтра будет выложен стелс. А если не успею - значит уже числа так первого будет.