Показать сообщение отдельно
Старый 22.07.2010, 23:01   #4
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Отличная идея, да и на первый взгляд не сложная в реализации.

В грации эпилог пакет с клавишами выглядит следующим образом:
Код:
45 = id
05 00 00 00 = количество используемых клавиш
................
01 00 00 00 =тип клавиши (итем)
00 00 00 00 =позиция (в данном случаи F1)
BC AF 41 10 =ObjectId итема
01 00 00 00 = хз
FF FF FF FF = хз (вроде как количество, но не уверен)
00 00 00 00 = хз
00 00 00 00 = хз
00 00 00 00 = хз
..................
02 00 00 00 =тип клавиши (скил)
01 00 00 00 =позиция (в данном случаи F2)
64 00 00 00 =id скила
0F 00 00 00 =лвл скила
00 = хз
01 00 00 00 = хз 
.....................
03 00 00 00 =тип клавиши (действие)
02 00 00 00 =позиция (в данном случаи F3)
00 00 00 00 =id действия (в данном случаи сесть)
01 00 00 00 =хз что, но для всех действий всегда такой
.......................
04 00 00 00 =тип клавиши (макрос)
03 00 00 00 =позиция (в данном случаи F4)
E8 03 00 00 =id макроса
01 00 00 00 = хз что, но  для всех макросов всегда такой
Рецептов у меня в сумке не было, так что их я не смотрел. Собственно исходя из выше написанной информации можно написать следующую обработку пакета (в виде массива считаю хорошим решением).

Код:
var
type1,slot,id,lvl,a1,a2,a3,a4,a5,a6,a7,a8,a9:array [0..99] of integer; 
//массивы клавиш, 100 значений потому что максимум 100 клавиш.
//массивы а будут использоваться для хранения неизвестных параметров пакета.
//согласен что не оптимально объявлять 9 массивов неизвестных значений:) 

procedure ShortCutInit;

var
count,i,number:integer;

begin

number:=2;//позиция "курсора" в пакете 

count:=ReadD(2); //количество используемых клавиш

for i:=0 to count do
begin

type1[i]:=ReadD(number); //смотрим тип клавиши

case  type1[i] of

1:begin         //обрабатываем клавишу с итемом
slot[i]:=ReadD(number+4);
id[i]:=ReadD(number+8);
lvl[i]:=ReadD(number+12);
a1[i]:=ReadD(number+16);
a2[i]:=ReadD(number+20);
a3[i]:=ReadD(number+24);
a4[i]:=ReadD(number+28);
a5[i]:=ReadD(number+32);
number:=number+36;  //перемещаем курсор на следующую клавишу
end;

2:begin   //обрабатываем клавишу со скилом
slot[i]:=ReadD(number+4);
id[i]:=ReadD(number+8);
lvl[i]:=ReadD(number+12);
a6[i]:=ReadC(number+16);
a7[i]:=ReadD(Number+17);
number:=number+21;  //перемещаем курсор на следующую клавишу
end;

3:begin     //обрабатываем клавишу с действием
slot[i]:=ReadD(number+4);
id[i]:=ReadD(number+8);
lv[i]l:=ReadD(number+12)
a8[i]:=ReadD(number+16);
number:=number+20;
end;

4:begin    // обрабатываем клавишу с макросом
slot[i]:=ReadD(number+4);
id[i]:=ReadD(number+8);
lvl[i]:=ReadD(number+12)
a9[i]:=ReadD(number+16);
number:=number+20;
end;

5:begin 
//а тут надо рецепт дописать, но времени нету :)
number:=number+0;
end;
end;
end;
end;
Дальше надо будет изменить пакет что пойдет в главное окно (в принципе получается что вторичное окно надо будет грузить до того как загружено главное). Код примерно такой:
Код:
for i:=1 to count do
case slot[i] of
12:begin {тут изменим клавишу что предлагает сервер, значения возьмем с ранее полученных массивов}end;//если клавиша для F1 второй панельки
13:begin{тут изменим клавишу что предлагает сервер} end;//если клавиша для F2 второй панельки
14:begin{тут изменим клавишу что предлагает сервер} end;//если клавиша для F3 второй панельки
end;
Это уже будем править под себя пакет пакет с главного окна.


PS: не уверен в правильности кода, писал в блокноте
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber

Последний раз редактировалось J-Fobos, 22.07.2010 в 23:12.
J-Fobos вне форума   Ответить с цитированием
За это сообщение J-Fobos нажился 2 спасибками от: