PDA

Просмотр полной версии : Масивы помогите плиз очень нада


goodvin1709
23.02.2011, 00:34
Так Люди очень прошу кто знает помогите
нашел какойто масив но я непонимаю вобще что ето и как з ним работать((
Procedure GetItemBase ;
Var
i : integer ;
ReadIndex : integer ;
Begin
Timer.Enabled := False ;
For i := 1 to 8 do
Begin
ItemBase[i,1] := 0 ;
ItemBase[i,2] := 0 ;
ItemBase[i,3] := 0 ;
ItemBase[i,4] := 0 ;
End ;

ReadIndex := 4 ;
ItemCount := ReadH(ReadIndex) ;
For i := 1 to ItemCount do
Begin
ReadH(ReadIndex) ;
ItemBase[i,2] := ReadD(ReadIndex) ; //objID
ItemBase[i,1] := ReadD(ReadIndex) ; //ItemID
ReadD(ReadIndex) ;
ReadH(ReadIndex) ;
ReadH(ReadIndex) ;
ReadH(ReadIndex) ;
ReadD(ReadIndex) ;
ItemBase[i,3] := ReadH(ReadIndex) ; //EnchLvl
ReadH(ReadIndex) ;
End ;
Timer.Enabled := true ;
End ;
Вот з етим

помогите розобратся з масивом дайте какойто пример з масивом и нафиг он вобще нада
Пример киньте какойто Плиз очень нада:help::help::help::help:

червь
23.02.2011, 12:50
тебе для каких целей массив то? просишь пример, хотя не знаешь что такое массив вообще?

Nickers
23.02.2011, 14:02
"Скрипт: Создание базы интвентаря":
Const
Name='ArchDevil';
Max=300;
var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
timer:TTimer;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //время задержки
buf:=#$0F;
SendToServerEx(Name);
end;

procedure CreateItemBase;
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
inc(j,12);
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType, lvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-во
inc(j,10);
lvl:=ReadH(j);
case UpdType of
1: begin
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;

procedure OnTimer(Sender: TObject);
begin
if GetItem(57,2,3)>2000000000 then begin
buf:=#$A7;
WriteD(9003);
WriteD(100000);
WriteD(1);
WriteD(0);
WriteD(0);
SendToServerEx(name);
end;
end;

begin
if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!
end.
Тут гдет выкладывался... Вроде под Интерлюд...

Создает базу инвентаря (Массив с записями всех вещей из кармана) по таким Хар-кам:
1. OID - Обжект ИД Уникальный номер у каждого предмета свой, если вещи в пачке их кол-во не влияет на изменение ОИДа
2. ID ИД определяющий тип предмета (Гугл поможет в определении нужного ИД для выбранного предмета)
3. kКол-во предметов (Стопковые когда)
4. Энчант лвл (Если Шмот или Пухи)

Создает Базу CreateItemBase; процедура берет все нужные параметры и значения из пакета 1B, который и запускает данную функцию...

Процедура InventoryUpdate; Обновляет (Добовляет удоляет определенные разделы существующей базы) работает через пакет 27...

GetItem; Функция позволяет легко и удобно пользоваться созданной базой вводятся ИД 2х параметров, по которым буим искать (Любые из 4х представленных, но 2 разных) и 3й параметр - Число относящееся к Типу указанному 1м параметром и своеобразный поиск по базе осуществляется на основе сочетания этих 2х параметров...
Например вводим 1(Оид) и 2(ИД) и (Обжект ИД итема, который ищем например это адена у вас в кармане) функция выдает вам ИД этого итема (57) и так в любых комбинациях...

Так же есть встроенный таймер и для примера в нем находится проверка адены если ее на кол-во, если ее больше 2ккк, то скрипт юзает скилл обращающий 2ккк в 1гб (Пвп серваки)... Использует при этом проверка Функцию GetItem;

goodvin1709
23.02.2011, 16:17
if GetItem(57,2,3)>2000000000 then begin
Вот я понел getitem и 57 ето ид
2
3 что ето?

j:=4; ну у нас есть что j =4
ListCount:=ReadH(j); а лист коунт ето ReadH(j)
j:=8; и знов
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10); а нафига его увеличивать на 10
itemBase[4,i]:=ReadH(j);//EnchantLevel и что за [4,i] где мы взяли 4
inc(j,12); и нафиг его увеличивать на 12
end;
end;

ну я понел что I ето инвентарь вроде

и обесните
function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;
что такое FieldIn FieldOut

Nickers
23.02.2011, 19:39
if GetItem(57,2,3)>2000000000 then begin
Вот я понел getitem и 57 ето ид
2
3 что ето?
2 это ID, 3 это кол-во => Поиск количества итема с ID=57 (Выводит кол-во Адены в кармане)
что такое FieldIn FieldOut
вводятся ИД 2х параметров, по которым буим искать (Любые из 4х представленных, но 2 разных)
1. OID - Обжект ИД Уникальный номер у каждого предмета свой, если вещи в пачке их кол-во не влияет на изменение ОИДа
2. ID ИД определяющий тип предмета (Гугл поможет в определении нужного ИД для выбранного предмета)
3. kКол-во предметов (Стопковые когда)
4. Энчант лвл (Если Шмот или Пухи)

inc(j,12); и нафиг его увеличивать на 12
Функция ReadD(j) считывает из пакета (тут это 1B) 4 пары начиная с j и расшифровывает, как Dword и получает значение... При увеличении j Скрипт "продвигается дальше" по пакету (Переходя к новому пункту - новый итем) при этом записывая все в Базу... В это можно особо не вдумываться)))


и что за [4,i] где мы взяли 4
Массив двумерный (Матрица) Это как массив в массиве...
--1 2 3 4 5 .. ListCount
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0

supernewbie
23.02.2011, 21:10
на самом деле в этой ситуации больше интересно как сделали что работает и ReadD(j) и ReadD(2) (вар и не вар параметр) ведь оверлоад в делфи распознает только функции разным типов параметров а var const и тп не учитывает

Nickers
23.02.2011, 21:15
А я хз чесн слово... Я ток поверхностно в нем разобрался (Изменение переменных не проверял) посмотрел алгоритм и начал использовать в своих скриптах))

Добавлено через 2 минуты
Пакет двумерный
*facepalm*

Вот это оговорка ппц(

goodvin1709
23.02.2011, 21:27
Спасибо тебе огромное ) теперь хоть поверхносно узнать что ето)