Files
caliverse_server/GameServer/Contents/AppearanceCustomize/Action/BeaconAppearanceCustomizeAction.cs
2025-05-01 07:20:41 +09:00

142 lines
6.2 KiB
C#

using ServerCore;
using ServerBase;
using ServerCommon;
namespace GameServer;
public class BeaconAppearanceCustomizeAction : EntityActionBase
{
public BeaconAppearanceCustomizeAction(UgcNpc 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> tryLoadAppearanceCustomizeFromDoc(AppearanceCustomizeDoc appearanceCustomizeDoc)
{
var beacon = getOwner() as UgcNpc;
NullReferenceCheckHelper.throwIfNull(beacon, () => $"beacon is null !!!");
NullReferenceCheckHelper.throwIfNull(appearanceCustomizeDoc, () => $"appearanceCustomizeDoc is null !!! - {beacon.toBasicString()}");
var result = new Result();
var err_msg = string.Empty;
var appearance_customize_attrib = appearanceCustomizeDoc.getAttrib<AppearanceCustomizeAttrib>();
NullReferenceCheckHelper.throwIfNull(appearance_customize_attrib, () => $"appearance_customize_attrib is null !!! - {beacon.toBasicString()}");
var appearance_customize_attribute = beacon.getEntityAttribute<AppearanceCustomizeAttribute>();
NullReferenceCheckHelper.throwIfNull(appearance_customize_attribute, () => $"appearance_customize_attribute is null !!!");
result = await ServerBase.DataCopyHelper.copyEntityAttributeFromDocs(appearance_customize_attribute, new List<DynamoDbDocBase>() { appearanceCustomizeDoc });
if (result.isFail())
{
err_msg = $"Failed to copyEntityAttributeFromDocs() !!!, to:{appearance_customize_attribute.getTypeName()}, from:{appearanceCustomizeDoc.getTypeName()} : {result.toBasicString()} - {beacon.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
return result;
}
public async Task<Result> tryCustomizeAppearance(AppearanceCustomization appearCustomize)
{
var beacon = getOwner() as UgcNpc;
NullReferenceCheckHelper.throwIfNull(beacon, () => $"beacon is null !!!");
var player = beacon.onGetMasterEntity();
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
ArgumentNullReferenceCheckHelper.throwIfNull(appearCustomize, () => $"appearCustomize is null !!!");
var result = new Result();
var err_msg = string.Empty;
var ugcn_npc_action = beacon.getEntityAction<UgcNpcAction>();
NullReferenceCheckHelper.throwIfNull(ugcn_npc_action, () => $"ugcn_npc_action is null !!! - {player.toBasicString()}");
//=====================================================================================
// 1. 비컨의 배치 상태를 체크 한다.
//=====================================================================================
if (true == ugcn_npc_action.isLocatedUgcNpc())
{
err_msg = $"UgcNpc located state !!! : {beacon.toSummaryString()} - {player.toBasicString()}";
result.setFail(ServerErrorCode.UgcNpcLocatedState, err_msg);
return result;
}
//=====================================================================================
// 2. 금전을 소모 한다.
//=====================================================================================
var money_action = player.getEntityAction<MoneyAction>();
NullReferenceCheckHelper.throwIfNull(money_action, () => $"money_action is null !!! - {player.toBasicString()}");
var req_currency_type = (CurrencyType)ServerCommon.MetaHelper.GameConfigMeta.NpcCustomizeCostType;
result = await money_action.spendMoney(req_currency_type, ServerCommon.MetaHelper.GameConfigMeta.NpcCustomizeCost);
if (result.isFail())
{
return result;
}
//=====================================================================================
// 3. 비컨 외형 커스마이징 정보를 갱신 한다.
//=====================================================================================
updateAppearanceCustomize(appearCustomize);
return result;
}
private void updateAppearanceCustomize(AppearanceCustomization appearCustomize)
{
ArgumentNullReferenceCheckHelper.throwIfNull(appearCustomize, () => $"appearCustomize is null !!!");
var beacon = getOwner() as UgcNpc;
NullReferenceCheckHelper.throwIfNull(beacon, () => $"beacon is null !!!");
var player = beacon.onGetMasterEntity();
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var appearance_customize_attribute = beacon.getEntityAttribute<AppearanceCustomizeAttribute>();
NullReferenceCheckHelper.throwIfNull(appearance_customize_attribute, () => $"appearance_customize_attribute is null !!!");
appearance_customize_attribute.BasicStyle = appearCustomize.BasicStyle;
appearance_customize_attribute.BodyShape = appearCustomize.BodyShape;
appearance_customize_attribute.HairStyle = appearCustomize.HairStyle;
appearance_customize_attribute.CustomValues = appearCustomize.CustomValues.ToList();
appearance_customize_attribute.modifiedEntityAttribute(true);
}
public AppearanceCustomization toAppearanceCustomization()
{
var beacon = getOwner() as UgcNpc;
NullReferenceCheckHelper.throwIfNull(beacon, () => $"beacon is null !!!");
var appearance_customize_attribute = beacon.getEntityAttribute<AppearanceCustomizeAttribute>();
NullReferenceCheckHelper.throwIfNull(appearance_customize_attribute, () => $"appearance_customize_attribute is null !!!");
var appearance_customize = new AppearanceCustomization();
appearance_customize.BasicStyle = appearance_customize_attribute.BasicStyle;
appearance_customize.BodyShape = appearance_customize_attribute.BodyShape;
appearance_customize.HairStyle = appearance_customize_attribute.HairStyle;
appearance_customize.CustomValues.AddRange(appearance_customize_attribute.CustomValues.ToList());
return appearance_customize;
}
}