Skip to content

Commit b4a30f7

Browse files
committed
Clear CreatureStorage when logging into a new character
Don't throw an error on invalid MessageModes. Narrow down client version of GraphicalEffect packet change.
1 parent 3654569 commit b4a30f7

7 files changed

Lines changed: 22 additions & 22 deletions

File tree

TibiaAPI/Client.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class Client : IDisposable
1414

1515
public WorldMap.WorldMapStorage WorldMapStorage { get; } = new WorldMap.WorldMapStorage();
1616

17+
public Creatures.Creature Player { get; } = new Creatures.Creature(0, Constants.CreatureType.Player);
18+
1719
public Network.Connection Connection { get; }
1820

1921
public Utilities.Logger Logger { get; } = new Utilities.Logger();

TibiaAPI/Network/ClientPackets/Talk.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
5353
}
5454
break;
5555
default:
56-
throw new Exception($"Invalid MessageMode: {MessageMode}");
56+
Client.Logger.Warning($"[ClientPackets.Talk.ParseFromNetworkMessage] Invalid MessageMode: {MessageMode}");
57+
break;
5758
}
5859
Text = message.ReadString();
5960
}
@@ -93,7 +94,8 @@ public override void AppendToNetworkMessage(NetworkMessage message)
9394
}
9495
break;
9596
default:
96-
throw new Exception($"Invalid MessageMode: {MessageMode}");
97+
Client.Logger.Warning($"[ClientPackets.Talk.ParseFromNetworkMessage] Invalid MessageMode: {MessageMode}");
98+
break;
9799
}
98100
message.Write(Text);
99101
}

TibiaAPI/Network/NetworkMessage.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,10 @@ public Creature ReadCreatureInstance(int id = -1, Position position = null)
391391
var removeCreatureId = ReadUInt32();
392392
var creatureId = ReadUInt32();
393393

394-
//creature = (creatureId == _client.Player.Id) ? _client.Player : new Creature(creatureId);
395-
creature = new Creature(creatureId)
396-
{
397-
Type = (CreatureType)ReadByte(),
398-
RemoveCreatureId = removeCreatureId,
399-
InstanceType = (CreatureInstanceType)id
400-
};
394+
creature = (creatureId == _client.Player.Id) ? _client.Player : new Creature(creatureId);
395+
creature.Type = (CreatureType)ReadByte();
396+
creature.RemoveCreatureId = removeCreatureId;
397+
creature.InstanceType = (CreatureInstanceType)id;
401398

402399
creature = _client.CreatureStorage.ReplaceCreature(creature, creature.RemoveCreatureId);
403400
if (creature == null)

TibiaAPI/Network/ServerPackets/GraphicalEffects.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public GraphicalEffects(Client client)
2323
public override void ParseFromNetworkMessage(NetworkMessage message)
2424
{
2525
Position = message.ReadPosition();
26-
if (Client.VersionNumber < 12000000)
26+
if (Client.VersionNumber <= 12007695)
2727
{
2828
Effect = message.ReadByte();
2929
}

TibiaAPI/Network/ServerPackets/LoginSuccess.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class LoginSuccess : ServerPacket
1010
public double SpeedB { get; set; }
1111
public double SpeedC { get; set; }
1212

13-
public int PlayerId { get; set; }
13+
public uint PlayerId { get; set; }
1414

1515
public ushort BeatDuration { get; set; }
1616

@@ -31,7 +31,12 @@ public LoginSuccess(Client client)
3131

3232
public override void ParseFromNetworkMessage(NetworkMessage message)
3333
{
34-
PlayerId = message.ReadInt32();
34+
PlayerId = message.ReadUInt32();
35+
if (Client.Player.Id != PlayerId)
36+
{
37+
Client.CreatureStorage.Reset();
38+
}
39+
Client.Player.Id = PlayerId;
3540
BeatDuration = message.ReadUInt16();
3641
SpeedA = message.ReadDouble();
3742
SpeedB = message.ReadDouble();

TibiaAPI/Network/ServerPackets/Message.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
7878
case MessageModeType.OfflineTraining:
7979
break;
8080
default:
81-
throw new Exception($"Invalid MessageMode: {MessageMode}");
81+
Client.Logger.Warning($"[ServerPackets.Message.ParseFromNetworkMessage] Invalid MessageMode: {MessageMode}");
82+
break;
8283
}
8384
Text = message.ReadString();
8485
}
@@ -134,7 +135,8 @@ public override void AppendToNetworkMessage(NetworkMessage message)
134135
case MessageModeType.BoostedCreature:
135136
break;
136137
default:
137-
throw new Exception($"Invalid MessageMode: {MessageMode}");
138+
Client.Logger.Warning($"[ServerPackets.Message.AppendToNetworkMessage] Invalid MessageMode: {MessageMode}");
139+
break;
138140
}
139141
message.Write(Text);
140142
}

TibiaAPI/Network/ServerPackets/WorldEntered.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
1414
{
1515
if (Client.Connection.ConnectionState == ConnectionState.Pending)
1616
{
17-
// I've experienced intermittent instances where the server
18-
// will resend the whole login process (WorldEntered, FullMap, etc.)
19-
// after it has already done so, and the creatures in the FullMap
20-
// packet are tagged as outdated. Because of the following WorldEntered
21-
// packet, this will reset the creature storage and the parser will be
22-
// unable to find any existing creatures because they've been cleared.
23-
// Just commenting out the code and leaving this comment as a reminder.
24-
//Client.CreatureStorage.Reset();
2517
Client.WorldMapStorage.ResetMap();
2618
Client.WorldMapStorage.SetPosition(0, 0, 0);
2719
}

0 commit comments

Comments
 (0)