Files
caliverse_server/GameServer/z.Backup/OwnedBuff.cs
2025-05-01 07:20:41 +09:00

339 lines
13 KiB
C#

//using Amazon.OpenSearchService.Model.Internal.MarshallTransformations;
//using Amazon.Runtime.Internal.Transform;
//using Google.Protobuf.WellKnownTypes;
//using Nettention.Proud;
//using Newtonsoft.Json;
//using ServerCommon;
//using ServerCore; using ServerBase;
//using System;
//using System.Collections.Concurrent;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using static ServerCommon.BuffData;
//namespace GameServer
//{
// public class OwnedBuff
// {
// Dictionary<EBuffCategory, ConcurrentDictionary<int,Buff>> BuffInfo = new ();
// string AccountId = string.Empty;
// Player? player = null;
// public async Task InitLoadRedisBuff(string accountId, Player player)
// {
// AccountId = accountId;
// this.player = player;
// List<AttributeInfo> attributeList = new();
// foreach (EBuffCategory category in System.Enum.GetValues(typeof(EBuffCategory)))
// {
// var buffchannelInfo = new ConcurrentDictionary<int, Buff>();
// BuffInfo.TryAdd(category, buffchannelInfo);
// }
// var BuffList = await GameServerApp.Instance.buffStorage.GetBuffInfo(AccountId);
// if (BuffList != null)
// {
// foreach(var buff in BuffList)
// {
// if (!TableData.Instance._BuffTable.TryGetValue(buff.BuffId, out var buffData))
// {
// Log.getLogger().error($"Not Found Table key : {buff.BuffId}");
// continue;
// }
// if(BuffInfo[buffData.BuffCategory].TryAdd(buffData.BuffChannel, buff) == false)
// {
// Log.getLogger().error($"TryAdd Failed. buffCategoty : {buffData.BuffCategory}, BuffChannel {buffData.BuffChannel}");
// continue;
// }
// changeAttribute(buff.BuffId, false);
// }
// }
// }
// private void changeAttribute(int buffId, bool isDelete)
// {
// if(player == null)
// {
// return;
// }
// int constant = isDelete ? -1 : 1;
// if (!TableData.Instance._BuffTable.TryGetValue(buffId, out var buffData))
// {
// Log.getLogger().error($"Not Found Table key : {buffId}");
// return;
// }
// foreach (var buffAttribute in buffData.traitsInfos)
// {
// if (TableData.Instance._AttributeDefinitionDataTable.TryGetValue(buffAttribute.Attrivute, out var attributeData) == false)
// {
// Log.getLogger().error($"TryAdd Failed. buffAttribute.Attrivute : {buffAttribute.Attrivute}");
// continue;
// }
// if (buffAttribute.Operation == "Sub")
// {
// constant *= -1;
// }
// player.ApplyAttribute(attributeData.ID, buffAttribute.Value * constant);
// }
// }
// //안의 값까지의 깊은 복사가 아닌 컨테이너만 복사.
// public Dictionary<EBuffCategory, Dictionary<int, Buff>> getCopyBuff()
// {
// Dictionary<EBuffCategory, Dictionary<int, Buff>> copyBuff = BuffInfo.ToDictionary(a => a.Key, b => new Dictionary<int, Buff>());
// foreach (var buffChannel in BuffInfo)
// {
// copyBuff[buffChannel.Key] = buffChannel.Value.ToDictionary(a => a.Key, b => b.Value);
// }
// return copyBuff;
// }
// public bool getBuff(EBuffCategory category, int channel, out Buff? buff)
// {
// return BuffInfo[category].TryGetValue(channel, out buff);
// }
// public ServerErrorCode AddBuffProcess(int buffId, out Buff? startBuff, out Buff? endBuff)
// {
// startBuff = null;
// endBuff = null;
// if (!TableData.Instance._BuffTable.TryGetValue(buffId, out var buffData))
// {
// Log.getLogger().error($"Not Found Table key : {buffId}");
// return ServerErrorCode.NotFoundBuffTableId;
// }
// var copyBuffInfo = getCopyBuff();
// //카테고리별 버프
// if (copyBuffInfo.TryGetValue(buffData.BuffCategory, out var buffchannelInfo) == false)
// {
// Log.getLogger().error($"Not Found Table key : {buffData.BuffCategory}");
// return ServerErrorCode.NotFoundBuffTableId;
// }
// //이미 동일한 채널의 버프가 있는경우
// if (buffchannelInfo.TryGetValue(buffData.BuffChannel, out var buffInfo) == true)
// {
// if (!TableData.Instance._BuffTable.TryGetValue(buffInfo.BuffId, out var oldBuffData))
// {
// Log.getLogger().error($"Not Found Table key : {buffInfo.BuffId}");
// return ServerErrorCode.NotFoundBuffTableId;
// }
// //새로운것이 더 높거나 같으면 교체
// if(oldBuffData.BuffPriority <= buffData.BuffPriority)
// {
// DelBuff(buffData.BuffCategory, buffData.BuffChannel, out var delBuff);
// AddBuff(buffData, out startBuff);
// }
// return ServerErrorCode.Success;
// }
// string MaxBuffCategoty = "";
// switch (buffData.BuffCategory)
// {
// case EBuffCategory.NORMAL: MaxBuffCategoty = "MaxNormalBuffNum"; break;
// case EBuffCategory.INSTANCE: MaxBuffCategoty = "MaxInstanceBuffNum"; break;
// case EBuffCategory.EVENT: MaxBuffCategoty = "MaxEventBuffNum"; break;
// case EBuffCategory.TOOL: MaxBuffCategoty = "MaxToolBuffNum";break;
// case EBuffCategory.WEAR: MaxBuffCategoty = "MaxWearBuffNum"; break;
// default:
// break;
// }
// if (!TableData.Instance._GameConfigDataTable.TryGetValue(MaxBuffCategoty, out var strMaxBuffCount))
// {
// Log.getLogger().error($"Not Found Table key : {MaxBuffCategoty}");
// return ServerErrorCode.NotFoundTable;
// }
// if(ServerUtil.MakeStringToInt(strMaxBuffCount, out var maxBuffCount) == false)
// {
// Log.getLogger().error($"string to int parse failed. data : {strMaxBuffCount}");
// return ServerErrorCode.TableError;
// }
// Timestamp? removeBuffStartTime = null;
// int removeBuffChannel = -1;
// //최대 버퍼수량을 초과했을경우 가장 오래된 버프 제거
// if (buffchannelInfo.Count >= maxBuffCount)
// {
// foreach(var oldBuffInfo in buffchannelInfo)
// {
// if(removeBuffStartTime == null || removeBuffStartTime > oldBuffInfo.Value.BuffStartTime)
// {
// removeBuffStartTime = oldBuffInfo.Value.BuffStartTime;
// removeBuffChannel = oldBuffInfo.Key;
// }
// }
// if(removeBuffStartTime != null)
// {
// DelBuff(buffData.BuffCategory, removeBuffChannel, out var delBuff);
// }
// }
// AddBuff(buffData, out startBuff);
// return ServerErrorCode.Success;
// }
// public ServerErrorCode DelBuffProcess(int buffId, out Buff? delBuff)
// {
// delBuff = null;
// if (!TableData.Instance._BuffTable.TryGetValue(buffId, out var buffData))
// {
// return ServerErrorCode.NotFoundBuffTableId;
// }
// if(DelBuff(buffData.BuffCategory, buffData.BuffChannel, out delBuff) == false)
// {
// return ServerErrorCode.NotFoundBuff;
// }
// return ServerErrorCode.Success;
// }
// public async Task<bool> MovePlace(EPlaceType toMove)
// {
// var copyBuffInfo = getCopyBuff();
// List<Buff> buffListForRedis = new ();
// List<Buff> delBuff = new();
// foreach (var ChannelBuff in copyBuffInfo)
// {
// foreach(var buff in ChannelBuff.Value)
// {
// if (!TableData.Instance._BuffTable.TryGetValue(buff.Value.BuffId, out var buffData))
// {
// Log.getLogger().error($"Not Found Table key : {buff.Value.BuffId}");
// continue;
// }
// if(isRemainBuff(toMove, buffData) == true)
// {
// buffListForRedis.Add(buff.Value);
// continue;
// }
// delBuff.Add(buff.Value);
// }
// }
// if(await GameServerApp.Instance.buffStorage.SaveBuff(AccountId, buffListForRedis) == false)
// {
// Log.getLogger().error($"SaveBuff Failed. AccountId : {AccountId}");
// return false;
// }
// foreach(var buff in delBuff)
// {
// changeAttribute(buff.BuffId, true);
// }
// var session = ClientSessionManager.Instance.GetSessionByName(AccountId);
// if (session == null)
// {
// return true;
// }
// ClientToGame message = new();
// message.Message = new();
// message.Message.DelBuffListNoti = new();
// message.Message.DelBuffListNoti.DelBuffList.AddRange(delBuff);
// session.Send(RmiContext.ReliableSend, message);
// return true;
// }
// private bool isRemainBuff(EPlaceType toMove, BuffData buffData)
// {
// switch (toMove)
// {
// case EPlaceType.Concert: return buffData.IsConcertRemain;
// case EPlaceType.Meeting: return buffData.IsMeetingRemain;
// case EPlaceType.MyHome: return buffData.IsMyhomeRemain;
// case EPlaceType.Movie: return buffData.IsMovieRemain;
// case EPlaceType.World: return buffData.IsNormalRemain;
// case EPlaceType.Instance:
// case EPlaceType.DressRoom:
// default:
// return false;
// }
// }
// private bool AddBuff(BuffData buffData, out Buff? buff)
// {
// buff = null;
// if (BuffInfo.TryGetValue(buffData.BuffCategory, out var buffchannelInfo) == false)
// {
// return false;
// }
// buff = new();
// buff.BuffId = buffData.BuffId;
// buff.BuffStartTime = DateTime.UtcNow.ToTimestamp();
// buff.Step = 0;
// buff.RandomState = 0;
// buff.ActionStartTime = 0;
// if(buffchannelInfo.TryAdd(buffData.BuffChannel, buff) == false)
// {
// return false;
// }
// changeAttribute(buffData.BuffId, false);
// return true;
// }
// private bool DelBuff(EBuffCategory category, int channel, out Buff? delBuff)
// {
// delBuff = null;
// if (BuffInfo.TryGetValue(category, out var buffchannelInfo) == false)
// {
// return false;
// }
// if(buffchannelInfo.Remove(channel, out delBuff) == false)
// {
// return false;
// }
// changeAttribute(delBuff.BuffId, true);
// return true;
// }
// public void SendInfo(HostID hostId)
// {
// ClientToGame clientToGame = new ClientToGame();
// clientToGame.Message = new ClientToGameMessage();
// clientToGame.Message.LoginBuffNoti = new ClientToGameMessage.Types.LoginBuffNoti();
// clientToGame.Message.LoginBuffNoti.BuffInfo = new BuffInfo();
// var buffInfo = getCopyBuff();
// foreach (var channelBuff in buffInfo)
// {
// clientToGame.Message.LoginBuffNoti.BuffInfo.Buff.AddRange(channelBuff.Value.Values.AsEnumerable());
// }
// GameServer.Instance._proxy.Message(hostId, RmiContext.ReliableSend, clientToGame);
// }
// }
//}