Объясняю как изменять скрипт при переходе на другие хроники. Например с Интерлюдии на Грацию.
Берем packetsT0.ini - здесь описан формат пакетов интерлюдии. Лежит в папке .\SETTINGS пакетхака версий больше 100.
Берем packetsT1.ini - здесь описан формат пакетов грации. Лежит также в папке .\SETTINGS.
Берем скрипт, который хотим изменить, например бот локомотив для Интерлюдии (выдержки)
delphi Код:
Const ProgramName =
'Бот - локомотив от Alexus '+
'версия : 0.4 (бета) '+
'дата: 03.01.09';
begin
if pck = '' then exit;
if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$01: MoveToLocation01;
// #$03: ; // CharInfo:d(X)d(Y)d(Z)-(4)h(ObjectID)s(Name)d(Race)d(Sex)d(ClassID)
begin
UserInfo;
btnInit.enabled:= false;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
end;
#$05: if (ReadD(6) = MyID) and (not InitMode) then Attack05; // 05= Attack:d(AttackerID)d(TargetID)d(Damage)b(Flags)d(X)d(Y)d(Z)h(Hits)
{ #$48: ; } // 48= MagicSkillUse:h(CharID)h(targetID)d(skillID)d(skillLvl)d(hitTime)d(reuseDelay)d(X)d(Y)d(Z)w(count)d(d)d(d)d(d)
#$06: Die06; // Die:d(ChaID)
#$0C: if LastKilledMobObjID = ReadD(2) then // DropItem:h(PlayerID)h(ObjectID)i(ItemID)d(X)d(Y)d(Z)d(Stackable)d(Count)
begin
AddDroppedItem(ReadD(6), ReadD(10), ReadD(14), ReadD(18), ReadD(22));
end;
#$0D: if TargetID = ReadD(6) then // GetItem:d(PlayerID)h(ObjectID)d(X)d(Y)d(Z)
begin
TargetID:= 0;
end;
#$0E: if MyID=ReadD(2) then // StatusUpdate:h(ObjectID)d(Attributes)
begin
StatusUpdate;
if (MyHP > 0) and (MyHP < HPlevelProcent) then if Wait(time1,DrinkDelay) then DrinkBottle; // пьем бутылки
if MyHP > HPlevelProcent then time1:=1;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
end;
#$12: DeleteObject12; // DeleteObject:h(ObjectID)
#$16: if (ReadD(10)=1) and (pck[121]=#$00) then NpcInfo16; // NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d(X)d(Y)d(Z)d(Heading)d(Unknown)d(MAtkSpd)d(PAtkSpd)d(RunSpd)d(WalkSpd)d(SwimRunSpd)d(SwimWalkSpd)d(FlRunSpd)d(FlWalkSpd)d(FlyRunSpd)d(FlyWalkSpd)f(ProperMultiplier)f(PAtkSpd)f(CollisionRadius)f(CollisionHeight)d(RHand)d(Unknown)d(LHand)b(Unknown)b(IsRunning)b(IsInCombat)b(IsALikeDead)b(IsSummoned)s(Name)s(Title)
#$1B: begin
InventoryCreate; // Инвентарь
if HPBottleID <> 0 then
begin
HPBottleObjID:= getinv(HPBottleID, 2,1);
HPBottleCount:= getinv(HPBottleID, 2,3);
end;
if Bottle_1_ID <> 0 then
begin
Bottle_1_ObjID:=getinv(Bottle_1_ID, 2,1);
Bottle_1_Count:=getinv(Bottle_1_ID, 2,3);
end;
if Bottle_2_ID <> 0 then
begin
Bottle_2_ObjID:=getinv(Bottle_2_ID, 2,1);
Bottle_2_Count:=getinv(Bottle_2_ID, 2,3);
end;
end;
#$27: begin
InventoryUpdate;
HPBottleCount:= getinv(HPBottleID, 2,3);
Bottle_1_Count:=getinv(Bottle_1_ID, 2,3);
Bottle_2_Count:=getinv(Bottle_2_ID, 2,3);
end;
#$13: if RestartMode then // CharacterSelectionInfo
begin
buf:=#$0D; // CharacterSelected
WriteD(CharNumber);
buf:= buf + hstr('00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(NickName);
RestartMode:= false;
end;
end;
if (ConnectName = NickName) and FromClient then // разбор пакетов от клиента
case pck[1] of
#$04: if InitMode then TargetID:= ReadD(2); // Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ActionID)
#$38: UserCommands; // Say2:s(Text)d(Type)s(Target)
#$48: begin // ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data)
MyX:= ReadD(2);
MyY:= ReadD(6);
MyZ:= ReadD(10);
if (not CenterFixed) and InitMode then
begin
CenterX:= MyX;
CenterY:= MyY;
CenterZ:= MyZ;
end;
end;
end;
end.
Смотрим, что в основном теле begin ... end. отлавливается, первое что видим
Код:
if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$01: MoveToLocation01;
смотрим в packetst0.ini пакет с ID=01 от сервера (FromServer) это MoveToLocation
ищем соответствие пакету MoveToLocationв packetst1.ini и находим пакет 2F=MoveToLocation от сервера (FromServer). Меняем ID=01 на ID=2F в скрипте получаем
Код:
if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$2F: MoveToLocation01;
Далее по аналогии...