mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
* Fix issue where GG resets in BBM would throw DB errors on Postgres. * Fix issue where attempting to discard a job emblem immediately after upgrading it would throw an error. * Fix issue where attempting to upgrade a job emblem immediately after restoring it would throw an error. * Add plaintext error for ERROR_CODE_DB_FAILURE denoting that it will disconnect the offending player.
66 lines
2.8 KiB
C#
66 lines
2.8 KiB
C#
using Arrowgene.Ddon.GameServer.Characters;
|
|
using Arrowgene.Ddon.Server;
|
|
using Arrowgene.Ddon.Server.Network;
|
|
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
|
|
using Arrowgene.Ddon.Shared.Entity.Structure;
|
|
using Arrowgene.Ddon.Shared.Model;
|
|
using Arrowgene.Logging;
|
|
using System;
|
|
|
|
namespace Arrowgene.Ddon.GameServer.Handler
|
|
{
|
|
public class JobEmblemUpdateParamLevelHandler : GameRequestPacketQueueHandler<C2SJobEmblemUpdateParamLevelReq, S2CJobEmblemUpdateParamLevelRes>
|
|
{
|
|
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(JobEmblemUpdateParamLevelHandler));
|
|
|
|
public JobEmblemUpdateParamLevelHandler(DdonGameServer server) : base(server)
|
|
{
|
|
}
|
|
|
|
public override PacketQueue Handle(GameClient client, C2SJobEmblemUpdateParamLevelReq request)
|
|
{
|
|
var packets = new PacketQueue();
|
|
var updateCharacterItemNtc = new S2CItemUpdateCharacterItemNtc()
|
|
{
|
|
UpdateType = ItemNoticeType.EmblemStatUpdate,
|
|
};
|
|
|
|
var emblemData = client.Character.JobEmblems[request.JobId];
|
|
foreach (var param in request.UpdatedEmblemParamList)
|
|
{
|
|
emblemData.StatLevels[param.StatId] = param.Add;
|
|
}
|
|
emblemData.EmblemPointsUsed = Server.JobEmblemManager.CalculatedUsedPoints(emblemData);
|
|
|
|
Server.Database.ExecuteInTransaction(connection =>
|
|
{
|
|
Server.Database.UpsertJobEmblemData(client.Character.CharacterId, emblemData, connection);
|
|
});
|
|
|
|
foreach (var uid in request.EmblemUIDs)
|
|
{
|
|
(StorageType storageType, Tuple<ushort, Item, uint> itemProps) = client.Character.Storage.FindItemByUIdInStorage(ItemManager.EquipmentStorages, uid);
|
|
var (slotNo, item, amount) = itemProps;
|
|
|
|
item.EquipStatParamList = Server.JobEmblemManager.GetEquipStatParamList(emblemData);
|
|
updateCharacterItemNtc.UpdateItemList.Add(Server.ItemManager.CreateItemUpdateResult(client.Character, item, storageType, slotNo, 1, 1));
|
|
}
|
|
client.Enqueue(updateCharacterItemNtc, packets);
|
|
|
|
client.Enqueue(new S2CJobEmblemUpdateParamLevelRes()
|
|
{
|
|
JobId = request.JobId,
|
|
EquipStatParamList = Server.JobEmblemManager.GetEquipStatParamList(emblemData),
|
|
EmblemStatParamList = emblemData.GetEmblemStatParamList(),
|
|
EmblemPoints = new CDataJobEmblemPoints()
|
|
{
|
|
JobId = request.JobId,
|
|
Amount = Server.JobEmblemManager.GetAvailableEmblemPoints(emblemData),
|
|
MaxAmount = Server.JobEmblemManager.MaxEmblemPointsForLevel(emblemData)
|
|
}
|
|
}, packets);
|
|
|
|
return packets;
|
|
}
|
|
}
|
|
}
|