using ServerCommon; using ServerCore; using ServerBase; using META_ID = System.UInt32; using ITEM_GUID = System.String; using static ClientToGameReq.Types; namespace GameServer; [ChatCommandAttribute("ugcnpccreate", typeof(ChatCommandUgcNpcCreate), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandUgcNpcCreate : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call ugcnpccreate !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (args.Length < 3) { err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } if ( false == int.TryParse(args[1], out int body_item_meta_id) || false == bool.TryParse(args[2], out bool is_show_tattoo ) ) { err_msg = $"Invalid argument !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var nickname = args[0]; if (true == nickname.isNullOrWhiteSpace()) { err_msg = $"Nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var user_inventory_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(user_inventory_action, () => $"user_inventory_action is null !!! - {player.toBasicString()}"); var found_body_items = user_inventory_action.tryGetItemAllByItemMetaId((META_ID)body_item_meta_id); if (0 >= found_body_items.Count) { err_msg = $"Not found Body Item !!! : bodyItemMetaId:{body_item_meta_id} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var item_attribute_base = found_body_items[0].getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}"); var body_item_guid = item_attribute_base.ItemGuid; var cloth_item_guids = new List(); var cloth_item_sample_meta_ids = new List() { 15230180, 15231430, 15230420, 15131035 }; foreach (var cloth_item_meta_id in cloth_item_sample_meta_ids) { var found_cloth_items = user_inventory_action.tryGetItemAllByItemMetaId(cloth_item_meta_id); if (0 >= found_cloth_items.Count) { err_msg = $"Not found Cloth Item !!! : clothItemMetaId:{cloth_item_meta_id} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } item_attribute_base = found_cloth_items[0].getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}"); var cloth_item_guid = item_attribute_base.ItemGuid; cloth_item_guids.Add(cloth_item_guid); } var tattoo_item_guids = new List(); var tattoo_item_sample_meta_ids = new List() { 11851003, 11851005, 11851008 }; foreach (var tattoo_item_meta_id in tattoo_item_sample_meta_ids) { var found_tattoo_items = user_inventory_action.tryGetItemAllByItemMetaId(tattoo_item_meta_id); if (0 >= found_tattoo_items.Count) { err_msg = $"Not found Tattoo Item !!! : tattooItemMetaId:{tattoo_item_meta_id} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } item_attribute_base = found_tattoo_items[0].getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {player.toBasicString()}"); var tattoo_item_guid = item_attribute_base.ItemGuid; tattoo_item_guids.Add(tattoo_item_guid); } var default_action_sample_meta_id = 110004; var social_action_sample_meta_ids = new List() { 110009, 110013, 110017 }; var dialogue_social_action_sample_meta_ids = new List() { 110054 }; var beacon_tag_meta_ids = new List() { 1, 2, 3, 4, 5, 6, 7 }; var tattoo_slot_visibles = is_show_tattoo == true ? new Dictionary() { { (int)TattooSlotType._1, BoolType.True }, { (int)TattooSlotType._2, BoolType.True }, { (int)TattooSlotType._3, BoolType.True } } : new Dictionary() { { (int)TattooSlotType._1, BoolType.False }, { (int)TattooSlotType._2, BoolType.False }, { (int)TattooSlotType._3, BoolType.False } }; var server_logic = GameServerApp.getServerLogic(); NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}"); var db_connector = server_logic.getDynamoDbClient(); NullReferenceCheckHelper.throwIfNull(db_connector, () => $"db_connector is null !!! - {player.toBasicString()}"); var session = player as IEntityWithSession; NullReferenceCheckHelper.throwIfNull(session, () => $"session is null !!! - {player.toBasicString()}"); //===================================================================================== // 패킷 구성 //===================================================================================== var packet = new ClientToGame(); packet.Request = new ClientToGameReq(); var request = new C2GS_REQ_UGC_NPC_CREATION(); packet.Request.ReqUgcNpcCreation = request; request.Nickname = nickname; request.Title = "Test Ugc Npc by Cheat !!!"; request.Description = "I AI Ugc Npc !!!"; request.WorldScenario = "good luck !!!"; request.BodyItemGuid = body_item_guid; request.MaterialItemGuids.AddRange(cloth_item_guids); request.MaterialItemGuids.AddRange(tattoo_item_guids); request.DefaultSocialActionId = default_action_sample_meta_id; request.HabitSocialActionIds.AddRange(social_action_sample_meta_ids.Select(x => (int)x).ToList()); request.DialogueSocialActionIds.AddRange(dialogue_social_action_sample_meta_ids.Select(x => (int)x).ToList()); request.TattooSlotVisibles.Add(tattoo_slot_visibles.toMapField()); request.HashTagMetaIds.Add(beacon_tag_meta_ids.Select(x => (int)x).ToList()); result = await server_logic.onCallProtocolHandler(session, packet); if (result.isFail()) { err_msg = $"Failed to onCallProtocolHandler() !!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } } } [ChatCommandAttribute("ugcnpcdelete", typeof(ChatCommandUgcNpcDelete), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandUgcNpcDelete : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call ugcnpcdelete !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (args.Length < 1) { err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var to_delete_nickname = args[0]; if (true == to_delete_nickname.isNullOrWhiteSpace()) { err_msg = $"To delete Nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var player_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!!"); result = await player_action.tryDeleteUgcNpc(to_delete_nickname); if (result.isFail()) { Log.getLogger().error(result.toBasicString()); } } } [ChatCommandAttribute("ugcnpclikecheck", typeof(ChatCommandUgcNpcLikeCheck), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandUgcNpcLikeCheck : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call ugcnpclikecheck !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (args.Length < 2) { err_msg = $"Not enough argument !!! : argCount:{args.Length} == 2 - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var target_user_nickname = args[0]; if (true == target_user_nickname.isNullOrWhiteSpace()) { err_msg = $"target_user_nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var target_ugc_npc_nickname = args[1]; if (true == target_ugc_npc_nickname.isNullOrWhiteSpace()) { err_msg = $"target_ugc_npc_nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var server_logic = GameServerApp.getServerLogic(); NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}"); var db_connector = server_logic.getDynamoDbClient(); NullReferenceCheckHelper.throwIfNull(db_connector, () => $"db_connector is null !!! - {player.toBasicString()}"); (result, var found_user_info) = await EntitySearchHelper.findUserInfoByUserNickname(db_connector, target_user_nickname); if (result.isFail()) { err_msg = $"Failed to findUserInfoByUserNickname() !!! : userNickname:{target_user_nickname} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } NullReferenceCheckHelper.throwIfNull(found_user_info, () => $"found_user_info is null !!! - {player.toBasicString()}"); (result, var found_ugc_npc_info) = await EntitySearchHelper.findUgcNpcInfoByUgcNpcNickname(db_connector , OwnerEntityType.User, found_user_info.UserGuid , target_ugc_npc_nickname); if (result.isFail()) { err_msg = $"Failed to findUgcNpcInfoByUgcNpcNickname() !!! : userNickname:{target_user_nickname} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } NullReferenceCheckHelper.throwIfNull(found_ugc_npc_info, () => $"found_ugc_npc_info is null !!! - {player.toBasicString()}"); var session = player as IEntityWithSession; NullReferenceCheckHelper.throwIfNull(session, () => $"session is null !!! - {player.toBasicString()}"); //===================================================================================== // 패킷 구성 //===================================================================================== var packet = new ClientToGame(); packet.Request = new ClientToGameReq(); var request = new C2GS_REQ_UGC_NPC_LIKE(); packet.Request.ReqUgcNpcLike = request; request.NpcGuid = found_ugc_npc_info.UgcNpcAttrib.UgcNpcMetaGuid; request.OwnerGuid = found_ugc_npc_info.UgcNpcAttrib.OwnerGuid; result = await server_logic.onCallProtocolHandler(session, packet); if (result.isFail()) { err_msg = $"Failed to onCallProtocolHandler() !!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } } } [ChatCommandAttribute("beaconsell", typeof(ChatCommandBeaconSell), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandBeaconSell : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call beaconsell !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (args.Length < 1) { err_msg = $"Not enough argument !!! : argCount:{args.Length} == 3 - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var to_sell_nickname = args[0]; if (true == to_sell_nickname.isNullOrWhiteSpace()) { err_msg = $"To sell Nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var player_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!!"); var found_ugc_npc = player_action.findUgcNpcByNickname(to_sell_nickname); if(null == found_ugc_npc) { err_msg = $"Not found Beacon !!! : beaconNickName:{to_sell_nickname} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var server_logic = GameServerApp.getServerLogic(); NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}"); var session = player as IEntityWithSession; NullReferenceCheckHelper.throwIfNull(session, () => $"session is null !!! - {player.toBasicString()}"); //===================================================================================== // 패킷 구성 //===================================================================================== var packet = new ClientToGame(); packet.Request = new ClientToGameReq(); var request = new C2GS_REQ_BEACON_SELL(); packet.Request.ReqBeaconSell = request; request.ToSellUgcNpcMetaGuid = found_ugc_npc.getUgcNpcMetaGuid(); result = await server_logic.onCallProtocolHandler(session, packet); if (result.isFail()) { err_msg = $"Failed to onCallProtocolHandler() !!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } } }