悲しいことに、私はこの質問をするのは 3 回目で、私が尋ねるたびに意味がないと思いますが、もう一度単語/コード、写真、簡単なテストを試してみましょう。2 つのクラスがあり、1 つはパケットを受け取り、値を取得しますそれらと他の値はこれらの値を使用する必要がありますが、このクラスからそれらを取得できませんでした注:この値は新しいスレッドで使用されるため、コードを表示します
namespace ProxyParadise.Network.Packets
{
public class PacketHandler
{
public PacketHandler() // takes no parameters using get/set , failed take 1
{
Console.WriteLine("defining an object to get x,y take 1, value now is (" + actualX + "," + actualY + ")");
}
public void getxy(ushort Actualx, ushort Actualy) //using get and set with parameters failed take 2
{
Console.WriteLine("defining an object to get x,y take 2, value now is (" + actualX + "," + actualY + ")");
actualX = actualX; Actualy = actualY;
}
public ushort actualX { get; set; }
public ushort actualY { get; set; }
public unsafe void HandleServer(byte[] data)
{
try
{
var type = *((ushort*)(ptr + 2));
switch (type)
{
case 10010:
{
if (BitConverter.ToUInt16(data, 24) != 0)
{
actualX = BitConverter.ToUInt16(data, 24);
actualY = BitConverter.ToUInt16(data, 26);
Console.WriteLine("account coords updated to (" + actualX + "," + actualY + ")");
}
break;
}
}
そして、これはこれをテストする写真です。このパケットを受信すると、更新されるたびにコンソールに書き込みます。 今、他のクラスでこれらの値を取得しようとしているので、それらを使用していくつかのことを行い、サーバーにもパケットを送信します。これが他のクラスです(クラス全体なので、重要な部分を投稿しないでくださいと言う人には意味があります)
public class ClientBase
{
GameUser role2;
PacketHandler ph = new PacketHandler();
public ushort X, Y;
PacketHandler ph2 = new PacketHandler();
public ClientBase(GameUser role)
{
role2 = role;
Thread T = new Thread(HuntThread) { Name = "Hunt Thread" };
T.Start(this);
Console.WriteLine("with name : " +T.Name + " with execution context : "+T.ExecutionContext +" with state : "+ T.IsAlive + " with id : " + T.ManagedThreadId);
T.Join();
}
Monster GetNextkill()
{
// byte Range = 18;
Monster CurrentTarget = null;
foreach (KeyValuePair<uint, Monster> Pair in Dictionary.Clone(Dictionary.Monsters))
{
// if (Math.Max(Math.Abs( - Pair.Value.X), Math.Abs(pp.Y - Pair.Value.Y)) > 18)
// {
// Dictionary.Monsters.Remove(Pair.Key);
// }
// else if (Math.Max(Math.Abs( - Pair.Value.X), Math.Abs(pp.Y - Pair.Value.Y)) <= Range)
// {
// Range = (byte)Math.Max(Math.Abs(this.X - Pair.Value.X), Math.Abs(this.Y - Pair.Value.Y));
CurrentTarget = Pair.Value;
// Console.WriteLine("there is " + Dictionary.Monsters.Count + " monster around you");
// }
}
return CurrentTarget;
}
public void HuntThread(object Sender)
{
try
{
ClientBase Client = Sender as ClientBase;
while (true)
{
Monster Target = GetNextkill();
if (Target != null)
{
Thread.Sleep(1000);
ProxyParadise.Network.Packets.PacketStructure ps = new ProxyParadise.Network.Packets.PacketStructure();
// ps.__Packet1022XP(Target.UID, Target.X, Target.Y);
int xxx = Target.X - 1;
int yyy = Target.Y - 1;
ph2.getxy(X, Y);
Console.WriteLine("x and y in the thread is " + X + Y);
ps.__Packet10010(Target.X, Target.Y, role2, "normal", "server", ph.actualX, ph.actualY);
Thread.Sleep(1000);
ps.__Packet10010(Target.X, Target.Y, role2, "sdasdsa", "client", role2.X, role2.Y);
Thread.Sleep(1000);
ps.__Packet1022NONEXP(Target.UID, Target.X , Target.Y, role2);
//if fatal strike is on attack the monster
//else
//jump next to the target and attack
Dictionary.Monsters.SafeRemove(Target.UID);
}
return;
}
}
catch (Exception ex)
{
Console.WriteLine("expection error : " + ex);
}
}
public uint UID;
}
したがって、問題は、値を取得するためのオブジェクトの設定/取得と定義の両方の方法です(メソッドから構造体でも取得しようとして2回実行しましたが、両方のケースで失敗しました)
これがテスト画像です
なぜそれがゼロなのか疑問に思っています。新しいオブジェクトが原因だと思うこともあれば、スレッドが原因だと思うこともあります
今回は本当に助けてもらいたいと思っています。同じことを4日間試みて、聞いたことがたくさんありました(ロックではありません)。これを読んで時間を割いてくれて本当にありがとうそして、私はこれを高く評価しました:)また、私のスペルと文法を修正するmodにも感謝します