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

Вопросы (разные вопросы)

тут можно задать вопрос по скриптингу
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

Code: Select all

var
 RegType:array of word;

Procedure init;
begin
RegType:=[ga,ns];   
end;

begin
 AddToSystemJournal('320 '+inttostr(count(RegType[0]))); 
end.
Почему так?

04:57:32:306 [_FW]: Compiling
04:57:32:317 [_FW]: Compiled succesfully
04:57:32:334 [_FW]: Out Of Range at 0.233

и собственно на деле то вот так

Code: Select all

     for i:=0 to (GetArrayLength(RegType)-1) do
     check_reag(RegType[i]);
но он даже не заходит в процедуру

Code: Select all

procedure check_reag(reg:word);
 begin
init;
AddToSystemJournal('251 '+inttostr(reg));       
 end;
где я делаю не так?

пришлось сделать так.но этот способ конечно хоть и рабочий, но тупой и не универсальный.

Code: Select all

     check_reag(ga);
     check_reag(ns);
Last edited by shinma on 17.07.2011 3:53, edited 1 time in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Re: Вопросы (разные вопросы)

Post by Scripts Writer »

shinma wrote:

Code: Select all

var
 RegType:array of word;

Procedure init;
begin
RegType:=[ga,ns];   
end;

begin
 AddToSystemJournal('320 '+inttostr(count(RegType[0]))); 
end.
Почему так?

04:57:32:306 [_FW]: Compiling
04:57:32:317 [_FW]: Compiled succesfully
04:57:32:334 [_FW]: Out Of Range at 0.233

и собственно на деле то вот так

Code: Select all

     for i:=0 to (GetArrayLength(RegType)-1) do
     check_reag(RegType[i]);
но он даже не заходит в процедуру

Code: Select all

procedure check_reag(reg:word);
 begin
AddToSystemJournal('251 '+inttostr(reg));       
 end;
где я делаю не так?

пришлось сделать так.но этот способ конечно хоть и рабочий, но тупой и не универсальный.

Code: Select all

     check_reag(ga);
     check_reag(ns);
Ты забыл вызвать процедуру инициализации массива в первом коде.
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

пля реально. ппц под утро мозх уже кипит.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

Code: Select all

while true do
begin
try
AddToSystemJournal('34');
if NewMoveXY(GetX(t),GetY(t),false,1,true) = false then Break;
CheckSave;
AddToSystemJournal('38');
if GetHP(t)=0 then Break;
AddToSystemJournal('40');
except;
end;
end;
20:10:10:523 [kain2004_FW]: newMoveXY: Too big distance for pathfinding: 3283
20:10:10:724 [_FW]: 34
20:10:10:726 [_FW]: newMoveXY: Too big distance for pathfinding: 3283
20:10:10:928 [_FW]: 34
20:10:10:930 [_FW]: newMoveXY: Too big distance for pathfinding: 3283
20:10:11:174 [_FW]: 34
20:10:11:176 [_FW]: newMoveXY: Too big distance for pathfinding: 3283
20:10:11:231 [_FW]: Succesfully executed

не могу разобраться
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

задача решилась проще

Code: Select all

p:=0;
repeat
if NewMoveXY(GetX(t),GetY(t),false,1,true) = false then p:=1;
if GetHP(t)=0 then p:=1;
until (p=1) or dead;	


Но уже просто интересно, как надо было решить задачу через способ описанный выше?
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

мде опять тот же самый баг. Визитор выручи плиз.
An exception raised at <<21 Июль>>, 20:26:06:216
Access violation at address 0067027A in module 'Stealth.exe'. Read of address 00000023
(0026F27A){Stealth.exe } [0067027A] Script.TScriptThread.Script_GetHP (Line 3880, "Script.pas" + 15) + $3

Call stack:
(0026F27A){Stealth.exe } [0067027A] Script.TScriptThread.Script_GetHP (Line 3880, "Script.pas" + 15) + $3
(000F6A36){Stealth.exe } [004F7A36] uPSRuntime.RealCall_Register (Line 115, "x86.inc" + 16) + $0
(000F7AFC){Stealth.exe } [004F8AFC] uPSRuntime.TPSExec.InnerfuseCall (Line 589, "x86.inc" + 84) + $7E
(000FD1B5){Stealth.exe } [004FE1B5] uPSRuntime.DelphiFunctionProc (Line 11819, "uPSRuntime.pas" + 21) + $1B
(000FD25A){Stealth.exe } [004FE25A] uPSRuntime.DelphiFunctionProc_Register (Line 11832, "uPSRuntime.pas" + 1) + $F
(000F1958){Stealth.exe } [004F2958] uPSRuntime.TPSExec.RunScript (Line 7842, "uPSRuntime.pas" + 283) + $16
(0012EC1F){Stealth.exe } [0052FC1F] uPSComponent.TPSScript.Execute (Line 678, "uPSComponent.pas" + 8) + $6
(002869CA){Stealth.exe } [006879CA] Script.TScriptThread.ExecuteScript (Line 10949, "Script.pas" + 64) + $B
(002661D7){Stealth.exe } [006671D7] Script.TScriptThread.Execute (Line 1401, "Script.pas" + 92) + $3
(0002AA54){Stealth.exe } [0042BA54] Classes.ThreadProc (Line 9877, "common\Classes.pas" + 7) + $5
(0000476C){Stealth.exe } [0040576C] System.ThreadWrapper (Line 12110, "sys\system.pas" + 33) + $0
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
NoSilence
Novice
Novice
Posts: 94
Joined: 02.01.2010 13:55

Re: Вопросы (разные вопросы)

Post by NoSilence »

shinma wrote: 20:10:10:523 [kain2004_FW]: newMoveXY: Too big distance for pathfinding: 3283
20:10:10:724 [_FW]: 34
20:10:10:726 [_FW]: newMoveXY: Too big distance for pathfinding: 3283
...

не могу разобраться
Там же на англ написано, что дистанция превышает норму (1000).

1. Cкорее всего, это дистанция к (0, 0), т.к. цель вне зоны видимости/не существует/в хайде/мертва (без спирита и вара).
2. GetHP вернет 0 в аналогичных случаях.

Code: Select all

repeat
  if GetHP(t) > 0 then begin
    lX:= GetX(t);
    lY:= GetY(t);
  end else if (GetX(Self) = lX) and (GetY(Self) = lY) then
    break;
  if not NewMoveXY(lX, lY, false, 1, true) then break;
until Dead;
Небольшой пруфит по поводу отрывания цели. Если цель выбежала за экран, то бежит в последние координаты.
Я бы заменил на шаг в сторону цели, а не NewMoveXY, если это догон.
///
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

Даже по твоему посту я так и не понял чем тебе не удовлетворило условие

Code: Select all

p:=0;
repeat
if NewMoveXY(GetX(t),GetY(t),false,1,true) = false then p:=1;
if GetHP(t)=0 then p:=1;
until (p=1) or dead;  
это не догон. я никуда не тороплюсь. если ты внимательно посмотришь условие то увидешь, что NewMoveXY при неудаче выведет из цикла. так же как и ХП жертвы выведет из цикла. И даже если цель у черта на куличике NewMoveXY должна выдать фелс или труе. и если труе должна идти.если фелс выйти из цикла банально как три копейки. Но ошибка тут не в этом. как раз это все херня по сравнению с
Access violation at address 0067027A in module 'Stealth.exe'. Read of address 00000023
в общем я ничего не понял чем может помочь твоя идея

ах да и делать на стелсе догон через NewMoveXY по меньше мере глупо.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

Code: Select all

try
except
Попробую так.
ЫЫЫ визитор класная это фишка,

Code: Select all

try
except
но блин немного приходится мозг ломать над новой логикой. И местом с ошибками. для меня это немного непривычно.
Last edited by shinma on 22.07.2011 7:56, edited 1 time in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

FindDistance:=20;
Ноу сайленс у меня не может быть при таком раскладе расстояние больше 20 тайлов + на обход препядствий, но это неикак не больше 1000 тайлов. вторая догадка что может он стоит в 0,0 к кому идем . тоже не верно он будет повторять пока чар может встать на координаты +1 тайл от заданных Х и У. тоесть как тока он получил х и У ему пофиг ноль это или дето поблизости он пойдет туда нормально и там встанет.и будет зациклен пока ХП у таргета не упадет до нуля.

О визитор есть идея возможно, но это только теоретически в цикле чар подошел к таргету убил его и пока он трупом падал цикл этого еще не понял что ХП =0 и успел перескочить на NewMoveXY а так как переменная T уже отсутствует так как она стала другой вещью - трупоv с другим ID. то скрипт на этом зацикливается и не может выйти.
но это не решает вторую проблему с крашем GetHP.

надеюсь проканает через вот так убить проблему

try
except

сейчас буду тестить, но как ты говоришь это не решение проблемы, а уход от неё
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Вопросы (разные вопросы)

Post by shinma »

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