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

Баг в функции ReadStaticsXY()?

Post Reply
GuitarMonster
Neophyte
Neophyte
Posts: 26
Joined: 12.01.2011 1:52

Баг в функции ReadStaticsXY()?

Post by GuitarMonster »

Баг роняет весь скрипт (команда AddToSystemJournal('Test 1') из примеров ниже уже не срабатывает). Задача была с помощью функции ReadStaticsXY() собрать массив тайлов в которых можно копать стоя на краю шахты, поэтому собиралась статистика от -3 по х и у и до +3 по х и у относительно текущего положения.

1) Сервак DragonWorld, клиент 2.0.3

Минус тайл по иску и по игреку:
Image

Code: Select all

Program ReadStaticsXY;
var TType:TStaticCell;
begin
TType:=ReadStaticsXY(Getx(self)-1, GetY(self)-1, WorldNum)
AddToSystemJournal(IntToStr(TType.Statics[0].Tile))
AddToSystemJournal(IntToStr(TType.Statics[0].Color))
AddToSystemJournal('Test 1')
end.
Результат:
16:52:25:125 [User]: Compiling
16:52:25:140 [User]: Compiled succesfully
16:52:25:140 [User]: Out Of Range at 0.224
16:52:25:140 [User]: Script ReadStaticsXY.sc stopped successfuly


2) Сервак другой, клиент 5.0.8

В Миноке, да и в любой шахте результат такой же как и в первом примере.

Это в Т2А уже просто на траве, тайл на котором стоит перс, город Delucia:

Image

Code: Select all

Program ReadStaticsXY;
var TType:TStaticCell;
begin
TType:=ReadStaticsXY(Getx(self), GetY(self), WorldNum)
AddToSystemJournal(IntToStr(TType.Statics[0].Tile))
AddToSystemJournal(IntToStr(TType.Statics[0].Color))
AddToSystemJournal('Test 1')
end.
17:20:48:765 [User]: Compiling
17:20:48:796 [User]: Compiled succesfully
17:20:48:796 [User]: Out Of Range at 0.192
17:20:48:796 [User]: Script ReadStaticsXY.sc stopped successfuly

Пример из справки (http://stealth.od.ua/forum/viewtopic.ph ... dstaticsxy):

Code: Select all

Program Statistics;
var
    X0,Y0,Z0,Tile: Word;
    Tile0: TStaticCell;
    C,W0: Byte;
begin

      X0:=GetX(Self);
      Y0:=GetY(Self);
      Z0:=GetZ(Self);
      W0:=WorldNum;
      Tile0:=ReadStaticsXY(X0,Y0,W0);
      C:=GetLayerCount(X0,Y0,WorldNum);
      Addtosystemjournal('GetLayerCount = '+IntToStr(c)+' | X = ' +IntToStr(X0)+' | Y = ' +IntToStr(Y0)+' | Z = '+IntToStr(Z0)+' | World = ' +IntToStr(W0));
      Addtosystemjournal('Layers = '+IntToStr(Tile0.StaticCount)+' | Tile = ' +IntToStr(Tile0.Statics[0].Tile)+
      ' | X = ' +IntToStr(Tile0.Statics[0].X)+' | Y = ' +IntToStr(Tile0.Statics[0].Y)+' | Z = ' +IntToStr(Tile0.Statics[0].Z)+' | Color = ' +IntToStr(Tile0.Statics[0].Color));
      Addtosystemjournal('Tile = ' +IntToStr(GetMapCell(X0,Y0,WorldNum).Tile)+' | Z = ' +IntToStr(GetMapCell(X0,Y0,WorldNum).Z));
      Tile:= (GetMapCell(X0,Y0,WorldNum).Tile);
      Addtosystemjournal('Flags = '+IntToHex(GetLandTileData(Tile).Flags,8)+' | TextureID = ' +IntToStr(GetLandTileData(Tile).TextureID));
      Addtosystemjournal('Flags = '+IntToHex(GetStaticTileData(Tile).Flags,8)+' | Weight = ' +IntToStr(GetStaticTileData(Tile).Weight)+' | Height = ' +IntToStr(GetStaticTileData(Tile).Height));

end. 
17:41:22:984 [User]: Compiling
17:41:23:000 [User]: Compiled succesfully
17:41:23:000 [User]: GetLayerCount = 0 | X = 5155 | Y = 4068 | Z = 41 | World = 0
17:41:23:000 [User]: Out Of Range at 0.874
17:41:23:000 [User]: Script TileStatics - SAMPLE.sc stopped successfuly
Last edited by GuitarMonster on 02.02.2011 14:32, edited 1 time in total.
Stealth: 3.3.0-8
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Баг в функции ReadStaticsXY()

Post by CFA »

в TStaticCell неспроста есть поле StaticCount
GuitarMonster
Neophyte
Neophyte
Posts: 26
Joined: 12.01.2011 1:52

Post by GuitarMonster »

Расскажи пожалуйста подробнее, почему StaticCount тайла с травой так же как и чёрного (пустого) тайла в пещере = 0, а тайл пола пещеры = 1?
Stealth: 3.3.0-8
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

потому что на траве или черном полу нет статики (там карта), а пол пещеры статика. StaticCount это количество тайлов (слоев) статики в этой клетке (те количество элементов в массиве Statics), если в GetMapCell 0, значит массив пустой. Чтоб прочитать тайл карты, надо использовать GetMapCell
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Post by grundick »

CFA wrote: если в GetMapCell 0, значит массив пустой. Чтоб прочитать тайл карты, надо использовать GetMapCell
Ты хотел сказать в GetLayerCount ноль?
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

StaticCount
Post Reply