Page 1 of 1

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

Posted: 23.01.2012 19:34
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.
где здесь ошибка и почему?
(разбираюсь в скриптинге сам, поэтому не судите меня строго)

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

Posted: 23.01.2012 19:45
by nah nah

Code: Select all

for i:=0 to 4 do
begin
UseObject(ObjAtLayerEx(RhandLayer, self));
WaitTargetObject(obj[i]);
wait(1000);
end;

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

Posted: 23.01.2012 21:28
by untouch
[quote="nah nah"][/quote]
капец, :lol:
спс

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

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

Code: Select all

for i in (0x1239ABFF, 0x1239B519, 0x1239FD99, 0x123A1540, 0x123A7EBF):
    UseObject(ObjAtLayerEx(RhandLayer(), Self()))
    WaitTargetObject(i)
    Wait(1000)

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

Posted: 23.01.2012 23:25
by Vizit0r
что ни тема, то питонщики рассказывают за красоту и удобство кода:)

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

Posted: 23.01.2012 23:49
by Lietman
Сделали б уроки на питоне =) было бы круто =)

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

Posted: 24.01.2012 0:19
by chernysh
Lietman wrote:Сделали б уроки на питоне =) было бы круто =)
А что их делать? Все тоже самое, только синтаксис питона понять нужно.
Из преимуществ, нету типизации, т.е не нужно задавать везде переменные String, Char, Cardinal, Word. Да и синтаксис удобный :)

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

Posted: 24.01.2012 0:24
by Alex
Vizit0r wrote:что ни тема, то питонщики рассказывают за красоту и удобство кода:)
:mrgreen:

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

Posted: 24.01.2012 6:25
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 элементов для перебора в каждом?

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

Posted: 24.01.2012 9:34
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)


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

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

зы. не успел ответить

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

Posted: 05.03.2012 13:40
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);

п.с. С юзом объекта из руки не работал по причине отсутствия необходимости в таковой.

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

Posted: 05.03.2012 15:06
by nah nah
Tomers wrote:тут проблема не в масиве
Верно! У топик-стартера просто не было begin и end в скрипте после for