Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 25.05.2008, 01:50   #1
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию Вопросы по синтаксису языка Паскаль!

Ребят у меня вопрос: Мне надо реализовать сборку информации об инвентаре нескольких чаров в одном скрипте и чтобы не писать для каждого чара отдельную процедуру я решил написать одну процедуру с возможностью подстановки разных массивов. Короче процедуру из скрипта бота Локомотива:
delphi Код:
procedure InventoryCreate; var   i,k : integer; begin   for i:=0 to 79 do     if (i<ReadH(4)) then begin       Inventory[i,0]:=ReadH(i*36+6)// itemType1       Inventory[i,1]:=ReadD(i*36+8)// ObjectId       Inventory[i,2]:=ReadD(i*36+12); // ItemID       Inventory[i,3]:=ReadD(i*36+16); // count       Inventory[i,4]:=ReadH(i*36+20); // itemType2       Inventory[i,5]:=ReadH(i*36+22); // CustType1       Inventory[i,6]:=ReadH(i*36+24); // isEquipped       Inventory[i,7]:=ReadD(i*36+26); // BodyPart       Inventory[i,8]:=ReadH(i*36+30); // EnchantLevel       Inventory[i,9]:=ReadH(i*36+32); // CustType2     end else       for k:=0 to 9 do Inventory[i,k]:=0; end;
Переделал так:
delphi Код:
procedure InventoryCreate(array1: array[0..79,0..9] of integer); var   i,k : integer; begin   for i:=0 to 79 do     if (i<ReadH(4)) then begin       array1[i,0]:=ReadH(i*36+6)// itemType1        array1[i,1]:=ReadD(i*36+8)// ObjectId        array1[i,2]:=ReadD(i*36+12); // ItemID        array1[i,3]:=ReadD(i*36+16); // count        array1[i,4]:=ReadH(i*36+20); // itemType2        array1[i,5]:=ReadH(i*36+22); // CustType1        array1[i,6]:=ReadH(i*36+24); // isEquipped        array1[i,7]:=ReadD(i*36+26); // BodyPart        array1[i,8]:=ReadH(i*36+30); // EnchantLevel        array1[i,9]:=ReadH(i*36+32); // CustType2     end else       for k:=0 to 9 do  array1[i,k]:=0; end;
Как вы уже поняли такой подход не сработал... массив который я подставляю в процедуру в качестве аргумента остается забитым нулями. Кто знает что я сделал не так, прошу отпишите. Заранее Спасибо

Добавлено через 3 минуты
Кстати я проделал то же самое с Функцией GetInv (то есть добавил новый аргумент: массив в котором нужно проводить поиск) И все работает. Разницу вижу в том, что в случае с процедурой InventoryCreat в аргумент должна записываться информация, а в функции GetInv происходит считывание информации из аргумента. Думаю дело в этом ... я прав?

Последний раз редактировалось ChiterEPT, 25.05.2008 в 01:51. Причина: Добавлено сообщение
ChiterEPT вне форума   Ответить с цитированием
Старый 25.05.2008, 03:14   #2
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Попробуй создать массив и вызывать его по типу этого:
var
ItemsBase: array[0..79,0..9] of integer

procedure InventoryCreate(array1 : array of integer);
begin
end;

begin
InventoryCreate(ItemsBase);
end.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 25.05.2008, 20:05   #3
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 51
Сказал Спасибо: 14
Имеет 36 спасибок в 11 сообщенях
alexsl пока неопределено
По умолчанию

ИМХО через VAR, т.е. передавать указатель на переменную, иначе параметры передаются как значения.

procedure InventoryCreate(var array1: array[0..79,0..9] of integer);
alexsl вне форума   Ответить с цитированием
За это сообщение alexsl нажился 2 спасибками от:
Старый 25.05.2008, 21:02   #4
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию

Сейчас попробую оба варианта, спасибо что откликнулись.

Добавлено через 33 минуты
Цитата:
Сообщение от alexsl Посмотреть сообщение
ИМХО через VAR, т.е. передавать указатель на переменную, иначе параметры передаются как значения.

procedure InventoryCreate(var array1: array[0..79,0..9] of integer);
Во так работает спасибо Алекс , а теперь объясни мне в чем дело... когда мы обьявляем array1 как переменную процедура получает возможность записывать в нее данные???
Цитата:
Сообщение от NLObP Посмотреть сообщение
procedure InventoryCreate(array1 : array of integer);
begin
end;
Ругается на Too many actual parameters.

Последний раз редактировалось ChiterEPT, 25.05.2008 в 21:02. Причина: Добавлено сообщение
ChiterEPT вне форума   Ответить с цитированием
Старый 25.05.2008, 22:47   #5
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от ChiterEPT Посмотреть сообщение
Во так работает спасибо Алекс , а теперь объясни мне в чем дело... когда мы обьявляем array1 как переменную процедура получает возможность записывать в нее данные???
если пишеш
procedure InventoryCreate(array1: array[0..79,0..9] of integer);
то в процедуру передаётся не сам массив а его копия, если
procedure InventoryCreate(var array1: array[0..79,0..9] of integer);
то в процедуру передаётся указатель на массив и все действия которые мы с ним делаем делаются с переданным массивом, если бы мы писали
procedure InventoryCreate(const array1: array[0..79,0..9] of integer);
то мы бы так же передавали указатель но при этом он бы был доступен только для чтения

ЗЫ есть ещё ключевые слова типа var и const но я неуверен что они поддерживаются FastScript так что лучше небуду о них писать...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 2 спасибками от:
Старый 26.05.2008, 02:55   #6
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию

Спасибо Хкор исчерпывающий ответ.
ChiterEPT вне форума   Ответить с цитированием
Старый 28.05.2008, 01:42   #7
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию

Господа созрел еще один вопрос.. представим себе строку кода:
delphi Код:
If ReadD(2)<>X and ReadD(2)<>Y and ReadD(2)<>Z then
Нельзя ее заменить на что-нибудь подобное этому?
delphi Код:
If ReadD(2)<>X,Y,Z then
ChiterEPT вне форума   Ответить с цитированием
Старый 28.05.2008, 11:19   #8
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Нет, так нельзя.
В нашем случае нужно делать так
Код:
If (ReadD(2)<>X) and (ReadD(2)<>Y) and (ReadD(2)<>Z) then
условие надо в скобках писать, иначе ошибка.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 28.05.2008, 13:33   #9
Рыцарь
 
Аватар для dmitry501
 
Регистрация: 01.10.2007
Сообщений: 293
Сказал Спасибо: 42
Имеет 50 спасибок в 37 сообщенях
dmitry501 пока неопределено
По умолчанию

Можно на верно извратится
Код:
A:=ReadD(2);
if A IN (X,Y,Z) then
dmitry501 вне форума   Ответить с цитированием
За это сообщение dmitry501 нажился спасибкой от:
Старый 28.05.2008, 15:08   #10
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Пакетхак выдает ошибку: ')' expected
NLObP вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:42.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!