Два примера тебе уже привели, приведу еще и третий, кусочек из моего скрипта:
delphi Код:
const
MyName = 'Nooooob';
TargetCheckTime = 500; //интервал для проверки возможности вернуть таргет после хейта/миража, 0.5 сек
InventorySize = 180;
GCPReuseTime = 800;
QHPReuseTime = 200; //маленький интервал делает практически не убиваемым, 10 юзов * 480 хп = 4800 хп/сек
//но при этом клиент может тормозить на медленном инете из-за количества быстро отсылаемых пакетов
//в случае притормаживания надо увеличить интервал срабатывания
GHPReuseTime = 14500;
MPReuseTime = 2000;
BSOEReuseTime = 120000; //!!если в течении двух минут после BSOE ХП не станет больше BSOEUsePercent опять используем BSOE
GCPUsePercent = 98; //% после достижения которого банки перестают использоватся
QHPUsePercent = 75;
GHPUsePercent = 97;
MPUsePercent = 30;
BSOEUsePercent = 15; //% HP при котором использовать BSOE
//id итемов
GCPItemId = 5592; //Greater CP Potion
QHPItemId = 1540; //Quick Healing Potion
GHPItemId = 1539; //Greater Healing Potion
MPItemId = 728; //Mana Potion
BSOEItemId = 1538; //BSOE
//............................
procedure StatsUpdate;
var
i, tmpMaxHP, tmpCurHP, tmpMaxMP, tmpCurMP, tmpMaxCP, tmpCurCP, tmpCharObjectId :integer;
begin
tmpCharObjectId:=ReadD(2);
if (tmpCharObjectId<>CharObjectId) then Exit;
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: tmpCurHP:=ReadD(i*8+14);
#$0A: tmpMaxHP:=ReadD(i*8+14);
#$0B: tmpCurMP:=ReadD(i*8+14);
#$0C: tmpMaxMP:=ReadD(i*8+14);
#$21: tmpCurCP:=ReadD(i*8+14);
#$22: tmpMaxCP:=ReadD(i*8+14);
end;
if (tmpMaxHP<>0) then MaxHP:=tmpMaxHP;
if (tmpCurHP<>0) then CurHP:=tmpCurHP;
if (tmpMaxCP<>0) then MaxCP:=tmpMaxCP;
if (tmpCurCP<>0) then CurCP:=tmpCurCP;
if (tmpMaxMP<>0) then MaxMP:=tmpMaxMP;
if (tmpCurMP<>0) then CurMP:=tmpCurMP;
if (BSOEAutoUse) and (BSOEAmount>1) and (CurHP<>0) and (not TimerBSOE.Enabled) and (CurHP<((MaxHP*BSOEUsePercent)/100)) then
begin
UseItem(MyName, BSOEObjectId);
TimerBSOE.Enabled:=True;
end;
if (PotsAutoUse) then
begin
if (GCPAutoUse) and (GCPAmount>1) and (not TimerGCP.Enabled) and (CurCP<((MaxCP*GCPUsePercent)/100)) then
begin
UseItem(MyName, GCPObjectId);
TimerGCP.Enabled:=True
end;
if (QHPAutoUse) and (QHPAmount>1) and (CurHP<>0) and (not TimerQHP.Enabled) and (CurHP<((MaxHP*QHPUsePercent)/100)) then
begin
UseItem(MyName, QHPObjectId);
TimerQHP.Enabled:=True
end;
if (GHPAutoUse) and (GHPAmount>1) and (CurHP<>0) and (not TimerGHP.Enabled) and (CurHP<((MaxHP*GHPUsePercent)/100)) then
begin
UseItem(MyName, GHPObjectId);
TimerGHP.Enabled:=True;
end;
if (MPAutoUse) and (MPAmount>1) and (not TimerMP.Enabled) and (CurMP<((MaxMP*MPUsePercent)/100)) then
begin
UseItem(MyName, MPObjectId);
TimerMP.Enabled:=True;
end;
end;
end;
Запостил с секцией const что бы было более понятно о чем речь.
Цитата:
Сообщение от Infernale
Проблема в том что использование банок начинается
|
Кстати, при твем "упрощенном" подходе возникнет еще одна проблема - когда у тебя закончатся банки, а скрипт по прежнему будет отправлять ранее сохраненные пакеты на UseItem с уже не существующим id очень велика вероятность схватить бан аккаунта, потому как палево 100%. Советую не упрощать, а делать все по уму с чтением инвентаря, нахождением нужных банок и последующим подсчетом их количества.