101 lines
3.9 KiB
C#
101 lines
3.9 KiB
C#
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<Result> 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<MoneyAction>();
|
|
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<CharacterAttribute>();
|
|
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;
|
|
}
|
|
}
|
|
} |