30.08.2010, 12:28
|
#23
|
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
|
Вот мой вариант ведения базы с использованием TStringList и свойства CommaText. Это только для примера поэтому в базу записывается только имя, координаты и профа.
Оффтоп
DELPHI Код:
const
characterName='ArchDevil';
var
CharData,CharInfo : TStringList;
CharDataIndex : integer;
procedure Init; //Вызывается при включении скрипта
begin
UseForConnectName := characterName;
CharData:=TStringList.Create;
CharInfo:=TStringList.Create;
end;
procedure Free; //Вызывается при выключении скрипта
begin
CharData.Free;
CharInfo.Free;
end;
Procedure ShowData;
var i:integer;
begin
SendMsg('==============================');
for i:=0 to CharData.Count-1 do SendMsg(CharData[i]);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer then
case pck[1] of
#$31: //char info. dobovlenie v bazy charov ili obnovlenie esli uzhe est'
begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(18)));
if CharDataIndex=-1 then //Esli -1 znach net v baze. ',' - simvol razdeleniya. Zanositsa v formate 0bjid=name, x, y, z, profa
CharData.Add(Format('%d=%s, %d, %d, %d, %d',[ReadD(18),ReadS(22),ReadD(2),ReadD(6),ReadD(10),ReadD(32+length(ReadS(22))*2)])) //dobovlenie v bazu
else
CharData[CharDataIndex]:=Format('%d=%s, %d, %d, %d, %d',[ReadD(18),ReadS(22),ReadD(2),ReadD(6),ReadD(10),ReadD(32+length(ReadS(22))*2)]); //obnovlenie
end;
#$2F: //obnovlenie coordinat charov s paketa movetolocation
begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(2)));
if CharDataIndex=-1 then exit //net v baze
else
begin
CharInfo.Clear; //commatext razlazhivaet stroky s simvolami ','
CharInfo.CommaText:=CharData.Values[inttostr(ReadD(2))]; //CharInfo[0]=Name CharInfo[1]=x
CharInfo[1]:=inttostr(ReadD(6)); //x //CharInfo[2]=y Charinfo[3]=z
CharInfo[2]:=inttostr(ReadD(10)); //y //CharInfo[4]=profa
CharInfo[3]:=inttostr(ReadD(14)); //z
CharData[CharDataIndex]:=inttostr(ReadD(2))+'='+CharInfo.CommaText; //posle obnovleniya obratno slazhivaem stroky i obnovlyaem v CharData
end;
end;
#$08: //Delete obj
begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(2)));
if CharDataIndex=-1 then exit else CharData.Delete(CharDataIndex);
end;
end;
if FromClient then //vivod bazi cherez SendMsg() pri socialnom deistvii
case pck[1] of
#$56: ShowData;
end;
end.
|
|
|