На всем известном сервере HF x100 (название могу отправить в PM), не удаётся реализовать атаку "дружественных" целей. (Paty mates, pets)
Попробовал все способы (как мне показалось исходя из документации L2Helper).
Затем, решил проверить ответ сервера (через подписку ServerPacket(...)) на мой пакет и на "ручное" нажатие и заметил, что ответы отличаются.
При "Ручном" нажатии ответ:
"Id=1F ExId=0 Buffer="
При отправке моего пакета ответ:
"Id=1F ExId=НАБОР_БАЙТОВ Buffer="
Помогите разобраться пожалуйста, что я делаю не так.
Upd:
Вывод:
Попробовал все способы (как мне показалось исходя из документации L2Helper).
- Client.Attack() - атакует только "свободно атакуемые" цели;
- Client.UseAction(UserActions.Attack, true) - вообще закрывает окно с клиентом игры (возможно особенность сервера);
- Пакеты:
Поймал пакет атаки (для примера - "Id=1 ExId=0 Buffer=EA7F131094F10000E040FFFFCBF3FFFF02");
Разобрал его (для понимания, что куда и зачем):
Код:var rd = packet.GetReader(); var ObjectId = rd.ReadD(); // Object Id var Location_X = rd.ReadD();// Location X var Location_Y = rd.ReadD();// Location Y var Location_Z = rd.ReadD();// Location Z var AttackFlag = rd.ReadC();// Attack Flag (0 - attack, 1 - shift, 2 - attack force)
Затем, решил проверить ответ сервера (через подписку ServerPacket(...)) на мой пакет и на "ручное" нажатие и заметил, что ответы отличаются.
При "Ручном" нажатии ответ:
"Id=1F ExId=0 Buffer="
При отправке моего пакета ответ:
"Id=1F ExId=НАБОР_БАЙТОВ Buffer="
Помогите разобраться пожалуйста, что я делаю не так.
Upd:
Код:
using System;
using System.Linq;
using System.Collections.Generic;
using NewWidget.Core;
using NewWidget.Core.Native;
using NewWidget.Core.Scripting;
using NewWidget.Core.Network;
public class Script : ScriptBase {
public override void OnStart() {
base.OnStart();
Enabled = true;
BindKey(System.Windows.Forms.Keys.F2, OnKeyPressed);
ClientPacket(pack => pack.Id == 0x01, OnClientPacket);
ServerPacket(pack => pack.Id == 0x1F, OnServerPacket);
}
void OnKeyPressed()
{
// Отправка собственного пакета
Packet pack = new Packet(0x01, 0x00);
var Writer = pack.GetWriter();
Writer.WriteD(Me.Target.ObjectId);
Writer.WriteD(Me.Location.X);
Writer.WriteD(Me.Location.Y);
Writer.WriteD(Me.Location.Z);
Writer.WriteC(0x00);// 0x00 - attack, 0x01 - shift+attack, 0x02 - ctrl+attack
Client.SendToServer(pack);
}
void OnClientPacket(Packet pack)
{
Console.WriteLine("------CLIENT------");
Console.WriteLine(String.Format("Full: {0}", pack));
Console.WriteLine("------------------");
var rd = pack.GetReader();
var ObjectId = rd.ReadD(); // Target object Id
var X = rd.ReadD(); // Location X
var Y = rd.ReadD(); // Location Y
var Z = rd.ReadD(); // Location Z
var AttackFlag = rd.ReadC();// Attack Flag (0 - attack, 1 - shift, 2 - attack force)
Console.WriteLine(String.Format("Object ID: {0}", ObjectId));
Console.WriteLine(String.Format("Location X: {0}", X));
Console.WriteLine(String.Format("Location Y: {0}", Y));
Console.WriteLine(String.Format("Location Z: {0}", Z));
Console.WriteLine(String.Format("AttackFlag: {0}", AttackFlag));
Console.WriteLine("------------------");
Console.WriteLine(" ");
}
void OnServerPacket(Packet pack)
{
Console.WriteLine("------SERVER------");
Console.WriteLine(String.Format("Full: {0}", pack));
Console.WriteLine("------------------");
Console.WriteLine(" ");
}
}
Вывод:
Код:
// Отправка пакета
------CLIENT------
Full: Id=1 ExId=0 Buffer=5E774B1241C80100162E010075F5FFFF00
------------------
Object ID: 306935646
Location X: 116801
Location Y: 77334
Location Z: -2699
AttackFlag: 0
------------------
Ответ Server: Id=1F ExId=FF Buffer=
(получаю разные ExId)
--------------------------------------------------------------------------------------
// Используем ingame Attack
------CLIENT------
Full: Id=1 ExId=0 Buffer=5E774B1241C80100162E010075F5FFFF00
------------------
Object ID: 306935646
Location X: 116801
Location Y: 77334
Location Z: -2699
AttackFlag: 0
------------------
Ответ Server: Id=1F ExId=0 Buffer=
(стабильно ExId=0)
Последнее редактирование: