Местный
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
|
Да об чем речь - бери конечно
Добавлено через 7 часов 34 минуты
Ну начерно каркас набросал примерно вот такой:
Оффтоп
delphi Код:
//запустить скрипт,в окне donor-переместить ярлык
соц.действ:Greeting-временно вернуть первоначальный вид листа (повторный вызов - выведет опять модифицированный)
//Victory - сбросить все к первоначальному виду
Const
rec='';
donor='';
var
SKkolvo,j,i,ii,iii,isPas,lvl,sID,n:integer;
Slot,SKID:Integer;
Pskill:array[1..12] of string;
proba:array [1..30000,1..2] of string; //небольшой массив для индикации свой\чужой
NewPS:Boolean;
values:array[0..100] of variant;
pckSL:string; //пакет с итемлист
pckSLm,Temp:string; //его моды
procedure Init;
begin
pckSL:='';
Temp:='';
for i:=1 to 30000 do begin
proba[i,1]:='';
proba[i,2]:='';
end;
buf:=#$50;
Sendtoserverex(rec);
end;
procedure Free;
begin
end;
begin
//формируем первоначальный массив со скилами
if fromserver and (pck[1]=#$5F) and (connectname=rec) and (Temp='') then begin
pckSL:=pck; //исходный вид для возможной последующей отмены
pckSLm:=Strtohex(pckSL);
SKkolvo:=ReadD(2);
j:=6;
for i:= 1 to Skkolvo do begin
isPas:=ReadD(j);
lvl:=ReadD(j);
sID:=ReadD(j);
n:=ReadC(j);
if (proba[sID,1]='') then begin
proba[sID,1]:=rec;
proba[sID,2]:=inttostr(lvl);
SendMSG(inttostr(sID)+' '+proba[sID,1]+' '+proba[sID,2]);
NewPS:=False;
end;
end;
end else begin
if fromserver and (pck[1]=#$5F) and (connectname=rec) and (Temp<>'') then begin //избегаем случайного отката
pck:=Temp; // скилл листа
end;
end;
//добавляем в массив скилы, пришедшие с пакетом SkillList
if fromserver and (pck[1]=#$45) and (connectname=donor) then begin
i:=(ReadD(2)); //kol-vo Skills
Sendmsg('Kol-vo Skills: '+Inttostr(i));
ii:=6;
for iii:=1 to i do begin
case (ReadD(ii)) of
1:begin //item
ReadMask('ddddddhh',2,values);
ii:=ii+28;
end;
2:begin //skill
Slot:=ReadD(ii);
SKID:=ReadD(ii);
lvl:=ReadD(ii);
ReadC(ii);
ReadD(ii);
if (slot>107) then begin //Запись только с 10ой панельки
if (proba[skID,1]='') then begin //d - пассивен\нет, d - лвл, d - ид, c - 0
proba[skID,1]:=donor;
proba[skID,2]:=inttostr(lvl);
SendMSG(inttostr(skID)+' '+proba[skID,1]+' '+proba[skID,2]);
NewPS:=False;
buf:=Hstr(pckSLm);
WriteD(0);
WriteD(lvl);
WriteD(skID);
WriteC(0);
pckSLm:=StrtoHex(buf);
//SendMsg(StrtoHex(buf));
skKolvo:=skKolvo+1;
end;
end;
end;
3:begin //social action
ReadMask('ddd',2,values);
ii:=ii+12;
end;
4:begin //macro
ReadMask('ddd',2,values);
ii:=ii+12;
end;
5:begin //recipe
ReadMask('ddd',2,values);
ii:=ii+12;
end;
end;
end;
if (temp='') then begin
Temp:=Copy(buf,6,(Length(buf)-5));
buf:=#$5F;
WriteD(skKolvo); //создание пакета SkillList
buf:=buf+Temp;
SendMsg('105: '+StrtoHex(buf));
Temp:=buf;
Sendtoclientex(rec);
end;
end;
if fromclient and (pck[1]+pck[2]=#$56#$0c) and (connectname=rec) then begin
SendMsg('------Clear Skills--------'); //Greeting - временная очистка скилл-листа
buf:=pckSL;// ну глянуть может там скилы свои, чтоб не путаться...
Sendtoclientex(rec);
end;
if fromclient and (pck[1]+pck[2]=#$56#$0D) and (connectname=rec) then begin
SendMsg('--Rebuild Skills--');//Victory - очистка существующего массива
Temp:='';//для требуемой переделки набора скилов
buf:=pckSL;
pckSL:='';
for i:=1 to 30000 do begin //очистка
proba[i,1]:='';
proba[i,2]:='';
skKolvo:=0;
end;
Sendtoclientex(rec);
buf:=#$50;
Sendtoserverex(rec);
end;
end.
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 27.07.2010 в 08:23.
Причина: Добавлено сообщение
|