142 lines
6.2 KiB
C#
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;
|
|
}
|
|
}
|