using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static StackExchange.Redis.Role; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using static ServerCommon.MetaHelper; using GameServer; namespace GameServer { public class CharacterAppearanceCustomizeAction : EntityActionBase { public CharacterAppearanceCustomizeAction(Character owner) : base(owner) { } public override async Task onInit() { await Task.CompletedTask; var result = new Result(); return result; } public override void onClear() { return; } public async Task<(Result, CharacterAttribute.AppearanceProfile?)> tryCustomizeAppearance(AppearanceCustomization appearCustomize) { ArgumentNullReferenceCheckHelper.throwIfNull(appearCustomize, () => $"appearCustomize is null !!!"); var character = getOwner() as Character; NullReferenceCheckHelper.throwIfNull(character, () => $"character is null !!!"); var player = character.getRootParent() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); var result = new Result(); var err_msg = string.Empty; //===================================================================================== // 1. 금전을 소모 한다. //===================================================================================== var money_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(money_action, () => $"money_action is null !!! - {player.toBasicString()}"); var req_currency_type = (CurrencyType)ServerCommon.MetaHelper.GameConfigMeta.CharacterCustomizeCostType; result = await money_action.spendMoney(req_currency_type, GameConfigMeta.CharacterCustomizeCost); if (result.isFail()) { return (result, null); } //===================================================================================== // 2. 캐릭터 외형 커스마이징 정보를 갱신 한다. //===================================================================================== var appearance_profile = updateAppearanceCustomize(appearCustomize); NullReferenceCheckHelper.throwIfNull(appearance_profile, () => $"appearance_profile is null !!! - {player.toBasicString()}"); return (result, appearance_profile); } private CharacterAttribute.AppearanceProfile updateAppearanceCustomize(AppearanceCustomization appearCustomize) { ArgumentNullReferenceCheckHelper.throwIfNull(appearCustomize, () => $"appearCustomize is null !!!"); var character = getOwner() as Character; NullReferenceCheckHelper.throwIfNull(character, () => $"character is null !!!"); var character_attribute = character.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(character_attribute, () => $"character_attribute is null !!!"); var appearance_profile = character_attribute.AppearanceProfileValue; NullReferenceCheckHelper.throwIfNull(appearance_profile, () => $"appearance_profile is null !!!"); appearance_profile.BasicStyle = (UInt32)appearCustomize.BasicStyle; appearance_profile.BodyShape = (UInt32)appearCustomize.BodyShape; appearance_profile.HairStyle = (UInt32)appearCustomize.HairStyle; appearance_profile.CustomValues = appearCustomize.CustomValues.ToList(); character_attribute.modifiedEntityAttribute(); return appearance_profile; } } }