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

Работа с массивом

тут можно задать вопрос по скриптингу
Post Reply
untouch
Neophyte
Neophyte
Posts: 14
Joined: 09.01.2012 22:56

Работа с массивом

Post by untouch »

Здравствуйте,

При написании скрипта столкнулся с проблемой, а именно с работой массива, вот ниже пример:

Допустим, необходимо произвести действие с рядом стоящими объектами, по-очереди:

Code: Select all

Program test;

{$Include 'all.inc'}

var

i : integer;
obj :array[0..4] of cardinal;

Begin

obj[0] := $1239ABFF;
obj[1] := $1239B519;
obj[2] := $1239FD99;
obj[3] := $123A1540;
obj[4] := $123A7EBF;

for i:=0 to 4 do

UseObject(ObjAtLayerEx(RhandLayer, self));
WaitTargetObject(obj[i]);
wait(1000);

End.
где здесь ошибка и почему?
(разбираюсь в скриптинге сам, поэтому не судите меня строго)
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Работа с массивом

Post by nah nah »

Code: Select all

for i:=0 to 4 do
begin
UseObject(ObjAtLayerEx(RhandLayer, self));
WaitTargetObject(obj[i]);
wait(1000);
end;
untouch
Neophyte
Neophyte
Posts: 14
Joined: 09.01.2012 22:56

Re: Работа с массивом

Post by untouch »

[quote="nah nah"][/quote]
капец, :lol:
спс
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Работа с массивом

Post by nah nah »

На питоне разбираться удобнее. Весь код можно было бы уместить в 4 строки

Code: Select all

for i in (0x1239ABFF, 0x1239B519, 0x1239FD99, 0x123A1540, 0x123A7EBF):
    UseObject(ObjAtLayerEx(RhandLayer(), Self()))
    WaitTargetObject(i)
    Wait(1000)
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Работа с массивом

Post by Vizit0r »

что ни тема, то питонщики рассказывают за красоту и удобство кода:)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Lietman
Novice
Novice
Posts: 74
Joined: 12.12.2010 14:17
Contact:

Re: Работа с массивом

Post by Lietman »

Сделали б уроки на питоне =) было бы круто =)
chernysh
Novice
Novice
Posts: 61
Joined: 05.06.2011 14:54
Location: Ukraine

Re: Работа с массивом

Post by chernysh »

Lietman wrote:Сделали б уроки на питоне =) было бы круто =)
А что их делать? Все тоже самое, только синтаксис питона понять нужно.
Из преимуществ, нету типизации, т.е не нужно задавать везде переменные String, Char, Cardinal, Word. Да и синтаксис удобный :)
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: Работа с массивом

Post by Alex »

Vizit0r wrote:что ни тема, то питонщики рассказывают за красоту и удобство кода:)
:mrgreen:
Новый стелс лежит тут. Стелс это произведение искусства! :)
Scripts Writer
Novice
Novice
Posts: 130
Joined: 06.05.2008 18:03

Re: Работа с массивом

Post by Scripts Writer »

nah nah wrote:На питоне разбираться удобнее. Весь код можно было бы уместить в 4 строки

Code: Select all

for i in (0x1239ABFF, 0x1239B519, 0x1239FD99, 0x123A1540, 0x123A7EBF):
    UseObject(ObjAtLayerEx(RhandLayer(), Self()))
    WaitTargetObject(i)
    Wait(1000)
А если у тебя будет 50 элементов массива и понадобится работать с ним в 5 разных местах, продублируешь код 5 раз с коллекций по 50 элементов для перебора в каждом?
Проще научить человека ловить рыбу, чем постоянно ею его кормить. (с) Destruction
chernysh
Novice
Novice
Posts: 61
Joined: 05.06.2011 14:54
Location: Ukraine

Re: Работа с массивом

Post by chernysh »

Scripts Writer wrote:
nah nah wrote:На питоне разбираться удобнее. Весь код можно было бы уместить в 4 строки

Code: Select all

for i in (0x1239ABFF, 0x1239B519, 0x1239FD99, 0x123A1540, 0x123A7EBF):
    UseObject(ObjAtLayerEx(RhandLayer(), Self()))
    WaitTargetObject(i)
    Wait(1000)
А если у тебя будет 50 элементов массива и понадобится работать с ним в 5 разных местах, продублируешь код 5 раз с коллекций по 50 элементов для перебора в каждом?

На самом деле это был пример говнокода :) Не в обиду автора.
Конечно же, писать нужно так:

Code: Select all

obj_ids = [0x1239ABFF, 0x1239B519, 0x1239FD99, 0x123A1540, 0x123A7EBF]

for obj in obj_ids:
    UseObject(ObjAtLayerEx(RhandLayer(), Self()))
    WaitTargetObject(obj)
    Wait(1000)

nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Работа с массивом

Post by nah nah »

Scripts Writer wrote:А если у тебя будет 50 элементов массива и понадобится работать с ним в 5 разных местах, продублируешь код 5 раз с коллекций по 50 элементов для перебора в каждом?
Я бы присвоил список переменной

зы. не успел ответить
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

Re: Работа с массивом

Post by Tomers »

У меня реализовано так:

Code: Select all

var
obj:array of cardinal;
i:integer;

begin
obj:=[$1239ABFF,$1239B519,$1239FD99,$123A1540,$123A7EBF];
for i:=0 to hight(obj) do begin
...
end;

End.
Плюс этого метода в том, что при необходимости увеличения колличества обрабатываемых предметов, просто добавляеш их в obj:=[$1239ABFF,$1239B519,...]; и все.

Впринципе и твой код верен, тут проблема не в масиве, у меня была подобна проблема, когда просто не успевал отработать прицел. Не особо вдаваясь в причину я ставил после юза объекта: wait(200);

п.с. С юзом объекта из руки не работал по причине отсутствия необходимости в таковой.
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Работа с массивом

Post by nah nah »

Tomers wrote:тут проблема не в масиве
Верно! У топик-стартера просто не было begin и end в скрипте после for
Post Reply