using ServerCore; using ServerBase; using ServerCommon; namespace GameServer; public class BeaconAppearanceCustomizeAction : EntityActionBase { public BeaconAppearanceCustomizeAction(UgcNpc 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 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(); NullReferenceCheckHelper.throwIfNull(appearance_customize_attrib, () => $"appearance_customize_attrib is null !!! - {beacon.toBasicString()}"); var appearance_customize_attribute = beacon.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(appearance_customize_attribute, () => $"appearance_customize_attribute is null !!!"); result = await ServerBase.DataCopyHelper.copyEntityAttributeFromDocs(appearance_customize_attribute, new List() { 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 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(); 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(); 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(); 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(); 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; } }