Hello Shigeo here and I want to help you to fix your ON Bugs. (Packet Crashes, Dupes etc.)
I have just one request, leave my texts as they are.
Hf
PetMove (CRASH): (NpcPacketHandler.cs)
to
DeleteCharacter (CRASH): (CharacterScreenPacketHandler.cs)
to
MultiTargetListHit (CRASH): (BattlePacketHandler.cs)
to
NRun (Gold BUG): (NRunHandler.cs)
to
MoveItem (Itemdupe): (InventoryPacketHandler.cs) (Found by Bull.)
to
CreateCharacter (Crash): (CharacterScreenPacketHandler.cs)
to
If I helped you, just let a thanks there <3
I have just one request, leave my texts as they are.
Hf
PetMove (CRASH): (NpcPacketHandler.cs)
Code:
public void PetMove(PtCtlPacket ptCtlPacket) {
string[] packetsplit = ptCtlPacket.PacketEnd.Split(' ');
for (int i = 0; i < ptCtlPacket.Amount * 3; i += 3) {
if (packetsplit.Length >= ptCtlPacket.Amount * 3 && int.TryParse(packetsplit[i], out int petId) && short.TryParse(packetsplit[i + 1], out short positionX) && short.TryParse(packetsplit[i + 2], out short positionY))
{
Mate mate = Session.Character?.Mates.Find(s => s.MateTransportId == petId);
if (mate != null) {
mate.PositionX = positionX;
mate.PositionY = positionY;
Session.CurrentMapInstance?.Broadcast(StaticPacketHelper.Move(UserType.Npc, petId, positionX, positionY, mate.Monster.Speed));
}
}
}
}
Code:
public void PetMove(PtCtlPacket ptCtlPacket) {
if (ptCtlPacket.PacketEnd == null)
{
Session.SendPacket($"say 1 0 10 Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: user {Session.Character.Name} tried a Crash: PetMove");
return;
}
string[] packetsplit = ptCtlPacket.PacketEnd.Split(' ');
for (int i = 0; i < ptCtlPacket.Amount * 3; i += 3) {
if (packetsplit.Length >= ptCtlPacket.Amount * 3 && int.TryParse(packetsplit[i], out int petId) && short.TryParse(packetsplit[i + 1], out short positionX) && short.TryParse(packetsplit[i + 2], out short positionY))
{
Mate mate = Session.Character?.Mates.Find(s => s.MateTransportId == petId);
if (mate != null) {
mate.PositionX = positionX;
mate.PositionY = positionY;
Session.CurrentMapInstance?.Broadcast(StaticPacketHelper.Move(UserType.Npc, petId, positionX, positionY, mate.Monster.Speed));
}
}
}
}
DeleteCharacter (CRASH): (CharacterScreenPacketHandler.cs)
Code:
public void DeleteCharacter(CharacterDeletePacket characterDeletePacket)
{
if (Session.HasCurrentMapInstance)
{
return;
}
Logger.LogUserEvent("DELETECHARACTER", Session.GenerateIdentity(), $"[DeleteCharacter]Name: {characterDeletePacket.Slot}");
AccountDTO account = DAOFactory.AccountDAO.LoadById(Session.Account.AccountId);
if (account == null)
{
return;
}
if (account.Password.ToLower() == CryptographyBase.Sha512(characterDeletePacket.Password))
{
CharacterDTO character = DAOFactory.CharacterDAO.LoadBySlot(account.AccountId, characterDeletePacket.Slot);
if (character == null)
{
return;
}
DAOFactory.GeneralLogDAO.SetCharIdNull(Convert.ToInt64(character.CharacterId));
DAOFactory.CharacterDAO.DeleteByPrimaryKey(account.AccountId, characterDeletePacket.Slot);
LoadCharacters(string.Empty);
}
else
{
Session.SendPacket($"info {Language.Instance.GetMessageFromKey("BAD_PASSWORD")}");
}
}
Code:
public void DeleteCharacter(CharacterDeletePacket characterDeletePacket)
{
if (Session.HasCurrentMapInstance)
{
return;
}
Logger.LogUserEvent("DELETECHARACTER", Session.GenerateIdentity(), $"[DeleteCharacter]Name: {characterDeletePacket.Slot}");
AccountDTO account = DAOFactory.AccountDAO.LoadById(Session.Account.AccountId);
if (account == null)
{
return;
}
if (characterDeletePacket.Password == null)
{
Session.SendPacket($"info Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: account {Session.Account.Name} tried a Crash: DeleteCharacter");
return;
}
if (account.Password.ToLower() == CryptographyBase.Sha512(characterDeletePacket.Password))
{
CharacterDTO character = DAOFactory.CharacterDAO.LoadBySlot(account.AccountId, characterDeletePacket.Slot);
if (character == null)
{
return;
}
DAOFactory.GeneralLogDAO.SetCharIdNull(Convert.ToInt64(character.CharacterId));
DAOFactory.CharacterDAO.DeleteByPrimaryKey(account.AccountId, characterDeletePacket.Slot);
LoadCharacters(string.Empty);
}
else
{
Session.SendPacket($"info {Language.Instance.GetMessageFromKey("BAD_PASSWORD")}");
}
}
MultiTargetListHit (CRASH): (BattlePacketHandler.cs)
Code:
public void MultiTargetListHit(MultiTargetListPacket mutliTargetListPacket)
{
if (!Session.HasCurrentMapInstance)
{
return;
}
bool isMuted = Session.Character.MuteMessage();
if (isMuted || Session.Character.IsVehicled)
{
Session.SendPacket(StaticPacketHelper.Cancel());
return;
}
if ((DateTime.Now - Session.Character.LastTransform).TotalSeconds < 3)
{
Session.SendPacket(StaticPacketHelper.Cancel());
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_ATTACK"), 0));
return;
}
if (mutliTargetListPacket.TargetsAmount > 0 && mutliTargetListPacket.TargetsAmount == mutliTargetListPacket.Targets.Count && mutliTargetListPacket.Targets != null)
{
Session.Character.MTListTargetQueue.Clear();
foreach (MultiTargetListSubPacket subpacket in mutliTargetListPacket.Targets)
{
Session.Character.MTListTargetQueue.Push(new MTListHitTarget(subpacket.TargetType, subpacket.TargetId));
}
}
}
Code:
public void MultiTargetListHit(MultiTargetListPacket mutliTargetListPacket)
{
if (!Session.HasCurrentMapInstance)
{
return;
}
bool isMuted = Session.Character.MuteMessage();
if (isMuted || Session.Character.IsVehicled)
{
Session.SendPacket(StaticPacketHelper.Cancel());
return;
}
if ((DateTime.Now - Session.Character.LastTransform).TotalSeconds < 3)
{
Session.SendPacket(StaticPacketHelper.Cancel());
Session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_ATTACK"), 0));
return;
}
if (mutliTargetListPacket.TargetsAmount > 0 && mutliTargetListPacket.Targets == null)
{
Session.SendPacket($"say 1 0 10 Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: user {Session.Character.Name} tried an Crash: MultiTargetListHit");
return;
}
if (mutliTargetListPacket.TargetsAmount > 0 && mutliTargetListPacket.TargetsAmount == mutliTargetListPacket.Targets.Count && mutliTargetListPacket.Targets != null)
{
Session.Character.MTListTargetQueue.Clear();
foreach (MultiTargetListSubPacket subpacket in mutliTargetListPacket.Targets)
{
Session.Character.MTListTargetQueue.Push(new MTListHitTarget(subpacket.TargetType, subpacket.TargetId));
}
}
}
NRun (Gold BUG): (NRunHandler.cs)
Code:
case 17:
double currentRunningSeconds = (DateTime.Now - Process.GetCurrentProcess().StartTime.AddSeconds(-50)).TotalSeconds;
double timeSpanSinceLastPortal = currentRunningSeconds - Session.Character.LastPortal;
if (!(timeSpanSinceLastPortal >= 4) || !Session.HasCurrentMapInstance || ServerManager.Instance.ChannelId == 51 || Session.CurrentMapInstance.MapInstanceId == ServerManager.Instance.ArenaInstance.MapInstanceId || Session.CurrentMapInstance.MapInstanceId == ServerManager.Instance.FamilyArenaInstance.MapInstanceId)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("CANT_MOVE"), 10));
return;
}
if (Session.Character.Gold >= 500 * (1 + packet.Type))
{
Session.Character.LastPortal = currentRunningSeconds;
Session.Character.Gold -= 500 * (1 + packet.Type);
Session.SendPacket(Session.Character.GenerateGold());
MapCell pos = packet.Type == 0 ? ServerManager.Instance.ArenaInstance.Map.GetRandomPosition() : ServerManager.Instance.FamilyArenaInstance.Map.GetRandomPosition();
ServerManager.Instance.ChangeMapInstance(Session.Character.CharacterId, packet.Type == 0 ? ServerManager.Instance.ArenaInstance.MapInstanceId : ServerManager.Instance.FamilyArenaInstance.MapInstanceId, pos.X, pos.Y);
}
else
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10));
}
break;
Code:
case 17:
double currentRunningSeconds = (DateTime.Now - Process.GetCurrentProcess().StartTime.AddSeconds(-50)).TotalSeconds;
double timeSpanSinceLastPortal = currentRunningSeconds - Session.Character.LastPortal;
if (!(timeSpanSinceLastPortal >= 4) || !Session.HasCurrentMapInstance || ServerManager.Instance.ChannelId == 51 || Session.CurrentMapInstance.MapInstanceId == ServerManager.Instance.ArenaInstance.MapInstanceId || Session.CurrentMapInstance.MapInstanceId == ServerManager.Instance.FamilyArenaInstance.MapInstanceId)
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("CANT_MOVE"), 10));
return;
}
if(packet.Type < 0)
{
Session.SendPacket($"say 1 0 10 Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: user {Session.Character.Name} tried an Gold Bug: NRun");
return;
}
if (Session.Character.Gold >= 500 * (1 + packet.Type))
{
Session.Character.LastPortal = currentRunningSeconds;
Session.Character.Gold -= 500 * (1 + packet.Type);
Session.SendPacket(Session.Character.GenerateGold());
MapCell pos = packet.Type == 0 ? ServerManager.Instance.ArenaInstance.Map.GetRandomPosition() : ServerManager.Instance.FamilyArenaInstance.Map.GetRandomPosition();
ServerManager.Instance.ChangeMapInstance(Session.Character.CharacterId, packet.Type == 0 ? ServerManager.Instance.ArenaInstance.MapInstanceId : ServerManager.Instance.FamilyArenaInstance.MapInstanceId, pos.X, pos.Y);
}
else
{
Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MONEY"), 10));
}
break;
MoveItem (Itemdupe): (InventoryPacketHandler.cs) (Found by Bull.)
Code:
if (mviPacket.Amount == 0)
{
return;
}
Code:
if (mviPacket.Amount <= 0)
{
Session.SendPacket($"say 1 0 10 Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: user {Session.Character.Name} tried an Gold Bug: MoveItem");
return;
}
CreateCharacter (Crash): (CharacterScreenPacketHandler.cs)
Code:
public void CreateCharacter(CharacterCreatePacket characterCreatePacket)
{
if (Session.HasCurrentMapInstance)
{
return;
}
Code:
public void CreateCharacter(CharacterCreatePacket characterCreatePacket)
{
if (Session.HasCurrentMapInstance)
{
return;
}
if (characterCreatePacket.Name == null)
{
Session.SendPacket($"say 1 0 10 Fixxed by Shigeo: https://www.elitepvpers.com/forum/nostale/4451612-crash-fixes-collection.html");
Logger.Log.Debug($"ShigeoWall: user {Session.Account.Name} tried an Crash: CreateCharacter");
return;
}
If I helped you, just let a thanks there <3