const
MyFileName = 'c:\myfile.txt';
Var
name, CharNick, CharTitle, idx:string;
CharName, ProfName, ProfList: TStringList;
tmp, CharOID, CharClassID, CharClan, MyOID:integer;
charX, charY,charZ:integer;
function GetValue(ValName: string): string;
begin
result:=CharName.Values[ValName];
end;
function GetProf(ValName:string): string;
begin
result:=ProfName.Values[ValName];
end;
procedure SetValue(ValName: string; Value: string);
begin
CharName.Values[ValName]:=Value;
end;
procedure Init; //Вызывается при включении скриптаvar
i:integer;
begin
CharName:=TStringList.Create;
try
CharName.LoadFromFile(MyFileName);
exceptend;
ProfList:=TStringList.Create;
ProfName:=TStringList.Create;
try
ProfName.LoadFromFile('classid.ini');
except
SendMsg('classid.ini не найден!');
exit;
end;
MyOID:=0;
end;
procedure Free;
begin
CharName.Clear;
CharName.Free;
CharName.SaveToFile(MyFileName);
end;
beginif fromserver and(pck[1]=#$31)thenbegin
idx:=StrtoHex(pck[18])+StrtoHex(pck[19])+StrtoHex(pck[20])+StrtoHex(pck[21]);
name:='OID: '+idx;
tmp:=18;
CharOID:=ReadD(tmp);
if((GetValue(Name))='')thenbegin
CharX:=ReadD(2);
CharY:=ReadD(6);
CharZ:=ReadD(10);
CharNick:=ReadS(tmp);
ReadD(tmp);
ReadD(tmp);
CharClassId:=ReadD(tmp);
tmp:=tmp+276;
CharTitle:=ReadS(tmp);
CharClan:=ReadD(tmp);
name:='OID: '+idx;
SetValue(name,((CharNick)));
name:='Профессия основы: '+idx;
SetValue(name,(GetProf(inttostr(CharClassId))));
name:='Клан: '+idx;
SetValue(name,(inttostr(CharClan))); //тут значение вар\не вар прикрутить стоит
name:='Титул: '+idx;
SetValue(name,(CharTitle));
name:='CoordX: '+idx;
SetValue(name,(inttostr(CharX)));
name:='CoordY: '+idx;
SetValue(name,(inttostr(CharY)));
name:='CoordZ: '+idx;
SetValue(name,(inttostr(CharZ)));
CharName.SaveToFile(MyFileName);
endelsebegin
idx:=StrtoHex(pck[18])+StrtoHex(pck[19])+StrtoHex(pck[20])+StrtoHex(pck[21]);
name:='OID: '+idx;
If(GetValue(name)<>'')thenbegin
SendMsg('Ник: '+GetValue(name));
name:='Профессия основы: '+idx;
SendMsg('Профа: '+GetValue(name));
name:='Клан: '+idx;
SendMsg('Клан ИД: '+GetValue(name));
name:='Титул: '+idx;
if((GetValue(name))<>'')then SendMsg('Титул: '+GetValue(name));
end;
end;
end;
if fromserver and(pck[1]=#$2F)thenbegin// and ((ReadD(2))<>MyOID)
idx:=StrtoHex(pck[2])+StrtoHex(pck[3])+StrtoHex(pck[4])+StrtoHex(pck[5]);
CharOID:=ReadD(2);
CharX:=ReadD(6);
CharY:=ReadD(10);
CharZ:=ReadD(14);
if((GetValue('OID: '+idx))<>'')and(CharOID<>MyOID)and(MyOID<>0)thenbegintry
name:='CoordX: '+idx;
SetValue(name,(inttostr(CharX)));
name:='CoordY: '+idx;
SetValue(name,(inttostr(CharY)));
name:='CoordZ: '+idx;
SetValue(name,(inttostr(CharZ)));
CharName.SaveToFile(MyFileName);
exceptend;
end;
If(CharOID<>MyOID)and((GetValue('OID: '+idx))<>'')thenbegin
SendMsg('Перс '+GetValue('OID: '+idx)+' бежит в X:'+GetValue('CoordX: '+idx)+' Y:'+GetValue('CoordY: '+idx)+' Z:'+GetValue('CoordZ: '+idx)+);
endelsebeginIf(CharOID=MyOID)thenbegin
SendMsg('Вы бежите в X:'+inttostr(CharX)+' Y:'+inttostr(CharY)+' Z:'+inttostr(CharZ));
end;
end;
end;
// end of part I
(продолжение ниже)
После отключения скрипта - файл-лог очищается.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 29.08.2010 в 08:11.
Формат лога: <Параметр>: <ОИД перса, которому принадлежит> = <значение параметра>. Онлайн сервера - 1к примерно (с торговыми ботами) - по гирану бег без лагов. Еслиб знать на кой ляд оно вообще надо - ТЗ так сказать, иметь - было бы легче.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 29.08.2010 в 08:08.
Удаление как раз в Part II находится, имена строк имеют ОИД перса, к которому они относятся, так что удаление\обновление - не проблема. Проблема то, что в логе после удаления периодически остаются хвосты вида Оффтоп
- без понятия чего это оно так (может быть не стоит постоянно вызывать сохранение StringList'а в файл), поставил дополнительную очистку лога при ТП, как временную меру....а там как руки дойдут/
Насчет флага вар\не вар - немного сложнее - в том клане варлист - пустой Наугад не смогу сделать. Вывод в лог сообщний SendMsg - на мой взгляд - лучше будет закомментировать.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 29.08.2010 в 08:15.
if fromserver and(pck[1]=#$B9)thenbegin
idx:=StrtoHex(pck[2])+StrtoHex(pck[3])+StrtoHex(pck[4])+StrtoHex(pck[5]);
name:='OID: '+idx;
SendMsg('В таргете '+GetValue(name));
end;
idx - "индекс" - это ОИД - только записаный наоборот, как в пакете, просто начинал с использования лишь 3ех байт, 4ый появился позже, а переделывать - пока лень, вот и все. Вполне возможно заменить к привычной форме idx:=inttostr(ReadD(j)); - только менять надо сразу по всему скрипту.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 29.08.2010 в 09:18.
в чем разница между for o:=1 to max do и for o:=1 to 1500 do ?
как вообще реализуются такие массивы
моя реализация :
creatures - массив структур хранящих чаров
pciA-пакет чаринфо (если точнее его кусок)
bnew булево - чар уже имеетса в массиве или нет?
lastfree - индекс последней "дырки" образвовашейся по objectdelete
по возможности будем повторно использовать дырки если их нехватит то увеличим l2_maxcreatures (максимальный индекс используемый в массиве)
и добавим сверх
delphi Код:
n:=0;
lastfree:=-1;
index:=-1;
mc:=ClientHeader.l2_maxcreatures;
while(n<mc)dobegin// перебор масива от 0 до потолкового индексаif creatures[n].ID=pciA.IDthenbegin
index:=n; // если такой както уже оказалса в массиве заканчиваем
bNew:=false;
break;
end;
if creatures[n].ID=0then lastfree:=n; // опа "дырка"! запоминаем...inc(n);
end;
if(index= -1)thenbegin//ничего не нашли? пробуем использовать "дырку"
index:=lastfree;
end;
if(index= -1)thenbegin{ и дырки тоже нет? че делать
увеличиваем массив... и дописываем новую запись на вершину увеличив потолок}
index:=mc;
inc(ClientHeader.l2_maxcreatures);
end;
тут возможнв процедуры дефрагментации чтобы скинуть потолковое значение и код прилизать поидее.
у меня тормозов никаких нет правдо это выполняет RTL программы а не ФС
скрипт он хоть и фаст но он всеже скрипт )))