Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
TargetToTile для рубки деревьев
-
- Neophyte
- Posts: 20
- Joined: 27.07.2009 17:11
TargetToTile для рубки деревьев
Хотелось бы использовать ТargetToTile(TileModel: Word; X,Y,Z: Integer) для рубки дерева.
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
Re: TargetToTile для рубки деревьев
Если не изменяет память то в инжекте есть командаFullmetal8ender wrote:Хотелось бы использовать ТargetToTile(TileModel: Word; X,Y,Z: Integer) для рубки дерева.
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
,infotile
при кликанье выдающее следующее
3286 5996 1501 1
дерево х у z
тайл дерева первое число.
я ни на что не намекаю, но исследование таких стелсовых команд, как
могло бы навести на некоторые интересные мысли...
Code: Select all
function ReadStaticsXY(X,Y: Word; WorldNum: Byte): TStaticCell; // Возвращает слои статики по координатам
TStaticCell = packed record
Statics : Array of TStaticItem;
StaticCount : Byte;
end;
TStaticItem = record
Tile : Word;
X : Byte;
Y : Byte;
Z : ShortInt;
Color : Word;
end;
function GetStaticTileData(Tile: Word): TStaticTileData; // Возвращает информацию по типу тайла
TStaticTileData = record
Flags : LongWord;
Weight : Byte;
Quality : Byte;
wUnknown: Word;
bUnknown: Byte;
Quantity: Byte;
AnimID : Word;
bSpacer : Byte;
Hue : Byte;
wSpacer : Word;
Height : Byte;
Name : Array[0..19] of Char;
end;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
навело )
Избавляемся от инжекта )
Следующий скрипт предназначен для автоматического поиска и пометки деревьев. Зона поиска - квадрат, размером 180х180 тайлов , центр которого - координаты чара при запуске скрипта. Ищите поляну с неоходимым кол-вом деревьев, ставите чара примерно посреди этой поляны и запускаете скрипт. По спирали, начиная от координат чара, проверяются тайлы и если найдено дерево, чар идёт у нему. Если смог дойти- дерево сохраняется в файл. Сохраняется в виде
Type X Y Z в файле C:/StealthTrees.dat . Собвсвенно , от Вас требуется настроить параметр MaxTreesNumber. И ещё. Скрипт писался на коленке, тольком не проверялся. Вполне возможно, что какие то типы тайлов я упустил, а какие то вписал лишние. Поэтому, если какие то типы Ваш чар не сможет рубить (сообщение типа It appears immune to blow), попытайтесь обнаружить этот тип и сообщите об этом общественности )
Ещё ньанс! Если какая нибудь сволочь поставит на Вашей поляне дом, придётся перезапустить скрипт, создав новый файл деревьев.
Избавляемся от инжекта )
Следующий скрипт предназначен для автоматического поиска и пометки деревьев. Зона поиска - квадрат, размером 180х180 тайлов , центр которого - координаты чара при запуске скрипта. Ищите поляну с неоходимым кол-вом деревьев, ставите чара примерно посреди этой поляны и запускаете скрипт. По спирали, начиная от координат чара, проверяются тайлы и если найдено дерево, чар идёт у нему. Если смог дойти- дерево сохраняется в файл. Сохраняется в виде
Type X Y Z в файле C:/StealthTrees.dat . Собвсвенно , от Вас требуется настроить параметр MaxTreesNumber. И ещё. Скрипт писался на коленке, тольком не проверялся. Вполне возможно, что какие то типы тайлов я упустил, а какие то вписал лишние. Поэтому, если какие то типы Ваш чар не сможет рубить (сообщение типа It appears immune to blow), попытайтесь обнаружить этот тип и сообщите об этом общественности )
Ещё ньанс! Если какая нибудь сволочь поставит на Вашей поляне дом, придётся перезапустить скрипт, создав новый файл деревьев.
Code: Select all
Program FindTreesAndSaveTheyInFile;
var
treeTile: array [0 .. 34] of word;
myX, myY : word;
x, y : word;
treesNumber , Range : integer;
List : TStringList;
Const
MaxTreesNumber=200; // Максимальное кол-во деревьев, которое нам нужно пометить. ))) Пометить :)
MaxRange=180; // зона поиска деревьев.
TypesCount = 34; // Количество типов деревьев в нашем массиве.
// checks tile. if that what we need, it save file parameters in text file.
function CheckTile(x,y : word): boolean;
var
Tile0: TStaticCell;
LayersCount: word;
i,j: integer;
Begin
Result:=false;
Tile0:=ReadStaticsXY(X,Y,WorldNum);
LayersCount:=GetLayerCount(X,Y,WorldNum);
i:=0;
While i < LayersCount Do
begin
For j:=0 to TypesCount do
If Tile0.Statics[i].Tile=TreeTile[j] then
begin
//AddToSystemJournal('Tree founded!');
If moveXY(X,Y,false,1,true) then
begin
List.Add(IntToStr(Tile0.Statics[i].Tile)+' '+IntToStr(X)+' '+IntToStr(Y)+' '+IntToStr(Tile0.Statics[i].Z));
List.SaveToFile('C:/StealthTrees.dat');
treesNumber:= treesNumber+1;
If (treesNumber >= MaxTreesNumber) then
begin
AddToSystemJournal('Пометили достаточное количество деревьев!');
Result:= true;
Exit;
end;
end;
end;
i := i+1;
end;
End;
BEGIN
TreeTile[0]:=3274;
TreeTile[1]:=3275;
TreeTile[2]:=3276;
TreeTile[3]:=3277;
TreeTile[4]:=3280;
TreeTile[5]:=3283;
TreeTile[6]:=3286;
TreeTile[7]:=3288;
TreeTile[8]:=3290;
TreeTile[9]:=3293;
TreeTile[10]:=3296;
TreeTile[11]:=3299;
TreeTile[12]:=3302;
TreeTile[13]:=3320;
TreeTile[14]:=3323;
TreeTile[15]:=3326;
TreeTile[16]:=3329;
TreeTile[17]:=3393;
TreeTile[18]:=3394;
TreeTile[19]:=3395;
TreeTile[20]:=3396;
TreeTile[22]:=3438;
TreeTile[23]:=3439;
TreeTile[24]:=3440;
TreeTile[25]:=3441;
TreeTile[26]:=3442;
TreeTile[27]:=3460;
TreeTile[28]:=3462;
TreeTile[29]:=3476;
TreeTile[30]:=3480;
TreeTile[31]:=3484;
TreeTile[32]:=3488;
TreeTile[33]:=3492;
TreeTile[34]:=3496;
List := TStringList.Create;
Range:=1;
TreesNumber:=0;
myX:=getX(self);
myY:=getY(self);
While Range < maxRange do
begin
y:= myY-range;
For x:= myX-range to myX+range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
x:= myX+range;
For y:= myY-range+1 to myY+range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
y:= myY+range;
For x:= myX+range-1 downTo myX-range do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
x:=myX-range;
For y:= myY+range-1 downTo myY-range+1 do begin If CheckTile(x,y) then break ; end;
If treesNumber >= MaxTreesNumber then break;
Range:= Range+1;
end;
List.Clear;
END.
Last edited by grundick on 16.08.2009 9:40, edited 2 times in total.
Странно У меня тайлов деревьев тоже 34 но они другие:
Code: Select all
R[1] = 3274;
R[2] = 3275;
R[3] = 3276;
R[4] = 3277;
R[5] = 3280;
R[6] = 3283;
R[7] = 3286;
R[8] = 3288;
R[9] = 3290;
R[10] = 3293;
R[11] = 3296;
R[12] = 3299;
R[13] = 3302;
R[14] = 3320;
R[15] = 3323;
R[16] = 3326;
R[17] = 3329;
R[18] = 3393;
R[19] = 3394;
R[20] = 3395;
R[21] = 3396;
R[22] = 3415;
R[23] = 3416;
R[24] = 3417;
R[25] = 3418;
R[26] = 3419;
R[27] = 3438;
R[28] = 3439;
R[29] = 3440;
R[30] = 3441;
R[31] = 3442;
R[32] = 3460;
R[33] = 3461;
R[34] = 3462;
да серверу вообще плевать на графику деревьев, он разрешает добычу только в зависимости от обжтайпа деревьев
а уж в какую графику будут закутаны эти деревья - это дело такое...
Code: Select all
if (theobj == 0x0c95 or theobj == 0x0c96 or theobj == 0x0c9e)
return 1;
elseif (theobj == 0x0ca8 or theobj == 0x0caa or theobj == 0x0cab)
return 1;
elseif (theobj >= 0x0cc8 and theobj <= 0x0cea)
return 1;
elseif (theobj >= 0x0cf8 and theobj <= 0x0d03)
return 1;
elseif (theobj == 0x0d37 or theobj == 0x0d38)
return 1;
elseif (theobj >= 0x0d41 and theobj <= 0x0dab)
return 1;
elseif (theobj >= 0x12b6 and theobj <= 0x12c7)
return 1;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: TargetToTile для рубки деревьев
На вопрос ответили четко и конкретно. Вобщем как всегда тутFullmetal8ender wrote:Хотелось бы использовать ТargetToTile(TileModel: Word; X,Y,Z: Integer) для рубки дерева.
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
Re: TargetToTile для рубки деревьев
Это к чему?Tomers wrote:На вопрос ответили четко и конкретно. Вобщем как всегда тут
Re: TargetToTile для рубки деревьев
ответили. а то что именно для тебя не расписали на страницу - увы и ах.Tomers wrote:На вопрос ответили четко и конкретно. Вобщем как всегда тутFullmetal8ender wrote:Хотелось бы использовать ТargetToTile(TileModel: Word; X,Y,Z: Integer) для рубки дерева.
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
да, тут всегда так. все злюки и жадины.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: TargetToTile для рубки деревьев
Вот же тебе ответили, четко и ясно.Mirage wrote:Если не изменяет память то в инжекте есть командаFullmetal8ender wrote:Хотелось бы использовать ТargetToTile(TileModel: Word; X,Y,Z: Integer) для рубки дерева.
Идея такая. Юзаю топор - появляеться прицел.
Вот теперь надо определить куда им тыкнуть.
Координаты тайла определяю как x=GetX, y=GetY+1 (соседний тайл от того, на котором я стою), z=GetZ
Не могу понять что надо подставить вместо TileModel: Word?
Или как можна определить дерево?
,infotile
при кликанье выдающее следующее
3286 5996 1501 1
дерево х у z
тайл дерева первое число.
Для тех кто в танке последние строки могу переписать так:
Code: Select all
тайл_модель х у z
тайл_модель(модель дерева) - это первое число, его и подставляй.
function CheckTile(x,y : word): boolean;
Re: TargetToTile для рубки деревьев
Дело не в том, что не ответили. Ответить то ответили, но вопрос задается, например, как получить тип тайла, а начинают рассказывать про то, как ходить по лесу, записывать маршруты ... и т.д., советуют использовать инжекты, всякую прочую хрень, но только не то, что конкретно спросили.Vizit0r wrote: ответили. а то что именно для тебя не расписали на страницу - увы и ах.
да, тут всегда так. все злюки и жадины.
Вобщем ладно, не обращайте внимания. Это просто я такой тупой, мне почему-то полсотни строк труднее понять, чем одну две строки.
-
- Neophyte
- Posts: 20
- Joined: 27.07.2009 17:11
Такс, вернулся я к рубке деревьев.
Но прежде чем использовать чей то скрипт хотелось бы своими руками срубить скриптом одно заданное дерево.
Поправте если ошибаюсь где-то
Деревко можна определить с помощью
Где
x=GetX,
y=GetY+1.
WorldNum=0
Запускаю функцию, и получаю все о тайле...осталось вытянуть это все из записи.
Если я записывал
то a.Statics[0].X, a.Statics[0].Y, a.Statics[0].Z, a.Statics[0].Tile это те значения которые нужно подставить в
ТargetToTile(TileModel: Word; X,Y,Z: Integer)?
В ходе столкнулся с тем, что не совсем умею работать с записями типа TStaticCell.
Вот в даном случае Statics : Array of TStaticItem; - это часть TStaticCell? Сколькомерный это массив? x y z tile colr это его элементы? Что еще за тогда?
Но прежде чем использовать чей то скрипт хотелось бы своими руками срубить скриптом одно заданное дерево.
Поправте если ошибаюсь где-то
Деревко можна определить с помощью
Code: Select all
function ReadStaticsXY(X,Y: Word; WorldNum: Byte): TStaticCell; // Возвращает тип тайла с координатами и цветом, а так же количество слоев
TStaticCell = packed record
Statics : Array of TStaticItem;
StaticCount : Byte;
end;
TStaticItem = record
Tile : Word;
X : Byte;
Y : Byte;
Z : ShortInt;
Color : Word;
end;
x=GetX,
y=GetY+1.
WorldNum=0
Запускаю функцию, и получаю все о тайле...осталось вытянуть это все из записи.
Если я записывал
Code: Select all
a := ReadStaticsXY(X,Y: Word; WorldNum: Byte): TStaticCell;
ТargetToTile(TileModel: Word; X,Y,Z: Integer)?
В ходе столкнулся с тем, что не совсем умею работать с записями типа TStaticCell.
Вот в даном случае Statics : Array of TStaticItem; - это часть TStaticCell? Сколькомерный это массив? x y z tile colr это его элементы? Что еще за тогда?