PDA

Просмотр полной версии : проблема скрипта в HexToString


metalFan
26.11.2008, 23:11
//Ищет ПК в округе
//Пишем в чате: "\start" - работают обе выборки (таргет пк, сообщение в чат)
//Пишем "/stop" - стоп работы таргета (мессаг не выключается)
// Авторы: Furious, metalFan
// Версия: Gracia 1.0b
var
ObjectID, KarmaPK, TargetPK, MessagePK, i: Integer;
NamePK, CvarPK, x: String;
Const UserName=('sehseh');

procedure Free;
begin
end;
procedure OnConnect(WithClient: Boolean);
begin
end;
procedure OnDisonnect(WithClient: Boolean);
begin
end;
//(c) xkor
function StringToHex(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
procedure Init;
begin
MessagePK:=1
end;
procedure MessageSend(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(UserName);
end;
procedure TargetingPK(ObjectID: Integer);
begin
buf:=#$1F;
WriteD(ObjectID); WriteD(0); Writed(0); Writed(0); WriteC(0);
SendToServerEx(UserName);
end;
begin
if (FromServer) and (ConnectName=UserName) and (pck[1]=#$31) then
begin
i:=22;
ObjectID:=ReadD(18);
NamePK:=ReadS(i);
KarmaPK:=ReadD(i+176);
x:=StringToHex(ReadS(i+176));
if (KarmaPK>0) then
begin
if MessagePK=1 then begin MessageSend('>'+NamePK+) end;
if TargetPK=1 then TargetingPK(ObjectID);
end;
end;
if (FromClient) and (ConnectName=UserName) and (pck[1]=#$49) then
begin
CvarPK:=ReadS(2);
case CvarPK of
'\start':
begin
TargetPK:=1;
MessageSend('Search On!');
pck:='';
end;
'\stop':
begin
TargetPK:=0;
MessageSend('Stopped all services!');
pck:='';
end;
end;
end;
end.
у меня есть скрипт, но в строке
if MessagePK=1 then begin MessageSend('>'+NamePK+) end;
я хочу вывести хексы с количеством кармы, профой, другими статами...
уже все перепробывал, может я что пропустил... может выход прост...
скрипт работает, но что нужно вставить чтобы мона было значения хекса вывести?
и че в синтаксисе не так, пиет лист аут оф баундс 5 :(
мб надо перекомпилить пакетхак? нежелательно...:o

QaK
27.11.2008, 13:12
лист аут оф баундс эт значит где-то вылетел за пределы пакета, скорее всего. Попробуй посчитать вместе со скриптом, мож где есть ошибка.

PanAm
27.11.2008, 15:58
МБKarmaPK:=ReadD(i+60);?

уже писал, что в ПХ надо в просмотре пакетов сделать смещение в десятичной системе....

Добавлено через 6 минут
x:=StringToHex(ReadS(i+176));а смысл этого вообще не понял...

metalFan
27.11.2008, 16:01
да это я просто уже незнаю что сделать... как мне вывести в сообщении величину выраженную хексом вордом или байтом?
я хочу вывести число в чат просто, объясните:o

PanAm
27.11.2008, 16:25
читать fs.rtf
Преобразование типов
function IntToStr(i: Integer): String
Перевод целого в строку
MessageSend('>'+NamePK+' '+IntToStr(KarmaPK))вроде так

Добавлено через 20 минут
Профы я так вывожу
1. создал файл ClassName.ini Под C4
Human Fighter
Warrior
Gladiator
Warlord
Human Knight
Paladin
Dark Avenger
Rogue
Treasure Hunter
Hawkeye
Human Mystic
Human Wizard
Sorceror
Necromancer
Warlock
Cleric
Bishop
Prophet
Elven Fighter
Elven Knight
Temple Knight
Swordsinger
Elven Scout
Plainswalker
Silver Ranger
Elven Mystic
Elven Wizard
Spellsinger
Elemental Summoner
Elven Oracle
Elven Elder
Dark Fighter
Palus Knight
Shillien Knight
Bladedancer
Assassin
Abyss Walker
Phantom Ranger
Dark Elven Mystic
Dark Elven Wizard
Spellhowler
Phantom Summoner
Shillien Oracle
Shillien Elder
Orc Fighter
Orc Raider
Destroyer
Orc Monk
Tyrant
Orc Mystic
Orc Shaman
Overlord
Warcryer
Dwarven Fighter
Dwarven Scavenger
Bounty Hunter
Dwarven Artisan
Warsmith
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
Duelist
DreadNought
Phoenix Knight
Hell Knight
Sagittarius
Adventurer
Archmage
Soultaker
Arcana Lord
Cardinal
Hierophant
Eva Templar
Sword Muse
Wind Rider
Moonlight Sentinel
Mystic Muse
Elemental Master
Evas Saint
Shillien Templar
Spectral Dancer
Ghost Hunter
Ghost Sentinel
Storm Screamer
Spectral Master
Shillien Saint
Titan
Grand Khauatari
Dominator
Doomcryer
Fortune Seeker
Maestro
название проф тут полное, лучше сократить до 2-4 символов на свой вкус
2. добавил глобальную переменную - ClassName: TStringList
3. и Init и Free - соответственно добавить
ClassName :=TStringList.Create;
ClassName.LoadFromFile('ClassName.ini');
ClassName.free;
4. видираю из CharInfo профу, и вывожу
function GetClassName(CID : integer) : string;
begin
result :=ClassName.Strings[CID];
end;
MessageSend(GetClassName(ClassID))

metalFan
30.11.2008, 16:55
спасибо помогло :)) inttostr