mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
- Fixed an issue where the player context is not sent to the player on login, which causes emblem stats to not be calculated. - Renamed JobEmblemUpdateParamLevel.cs to JobEmblemUpdateParamLevelHandler.cs - Renamed UnlockSkill to UnlockCustomSkill. - Found new item update notices which seem to be designed for the emblem. - Fixed an issue where a field in one of the emblem packets was hard coded to figter job id.
79 lines
3.6 KiB
C#
79 lines
3.6 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 JobEmblemResetParamLevelHandler : GameRequestPacketQueueHandler<C2SJobEmblemResetParamLevelReq, S2CJobEmblemResetParamLevelRes>
|
|
{
|
|
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(JobEmblemResetParamLevelHandler));
|
|
|
|
public JobEmblemResetParamLevelHandler(DdonGameServer server) : base(server)
|
|
{
|
|
}
|
|
|
|
public override PacketQueue Handle(GameClient client, C2SJobEmblemResetParamLevelReq request)
|
|
{
|
|
var packets = new PacketQueue();
|
|
|
|
var updateCharacterItemNtc = new S2CItemUpdateCharacterItemNtc()
|
|
{
|
|
UpdateType = ItemNoticeType.EmblemStatUpdate,
|
|
};
|
|
|
|
var emblemData = client.Character.JobEmblems[request.JobId];
|
|
foreach (var statId in emblemData.StatLevels.Keys)
|
|
{
|
|
emblemData.StatLevels[statId] = 0;
|
|
}
|
|
emblemData.EmblemPointsUsed = Server.JobEmblemManager.CalculatedUsedPoints(emblemData);
|
|
|
|
Server.Database.ExecuteInTransaction(connection =>
|
|
{
|
|
Server.Database.UpsertJobEmblemData(client.Character.CharacterId, emblemData, connection);
|
|
|
|
foreach (var walletPoint in request.EmblemPointResetGGCostList)
|
|
{
|
|
updateCharacterItemNtc.UpdateWalletList.Add(Server.WalletManager.RemoveFromWallet(client.Character, (WalletType)walletPoint.PointType, walletPoint.Amount, connection));
|
|
}
|
|
|
|
foreach (var playPoint in request.EmblemPointResetPPCostList)
|
|
{
|
|
S2CJobUpdatePlayPointNtc playPointNtc = Server.PPManager.RemovePlayPoint2(client, request.JobId, playPoint.Amount, connectionIn: connection);
|
|
client.Enqueue(playPointNtc, packets);
|
|
}
|
|
});
|
|
|
|
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;
|
|
|
|
updateCharacterItemNtc.UpdateItemList.Add(Server.ItemManager.CreateItemUpdateResult(client.Character, item, storageType, slotNo, 0, 0));
|
|
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 S2CJobEmblemResetParamLevelRes()
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|