using ServerCommon; using ServerCore; using ServerBase; using static ClientToGameReq.Types; using ENTITY_GUID = System.String; namespace GameServer; [ChatCommandAttribute("farmingstart", typeof(ChatCommandFarmingStart), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandFarmingStart : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call farmingstarbyuser !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (args.Length < 3) { err_msg = $"Not enough argument !!! : argCount:{args.Length} == 2 - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var farming_entity_type = args[0]; if (true == farming_entity_type.isNullOrWhiteSpace()) { err_msg = $"farming_entity_type is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var target_enity_nickname = args[1]; if (true == target_enity_nickname.isNullOrWhiteSpace()) { err_msg = $"target_enity_nickname is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } if (false == int.TryParse(args[2], out var farming_try_count)) { Log.getLogger().error($"farming_try_count param parsing Error args : {args[0]}"); return; } var game_zone_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(game_zone_action, () => $"game_zone_action is null !!! - {player.toBasicString()}"); var curr_map = game_zone_action.getLinkedToMap(); NullReferenceCheckHelper.throwIfNull(curr_map, () => $"curr_map is null !!! - {player.toBasicString()}"); var found_farming_anchor = curr_map.getFirstAnchorInfoOfFarming(); if (null == found_farming_anchor) { err_msg = $"found_farming_anchor is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); if (false == farming_entity_type.toInt32(out var number)) { err_msg = $"invalid 1 arg : EntityType !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } ENTITY_GUID entity_guid = string.Empty; if (number == FarmingSummonedEntityType.User.castTo()) { entity_guid = player.getUserGuid(); } else if (number == FarmingSummonedEntityType.Beacon.castTo()) { var player_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!! - {player.toBasicString()}"); var found_ugc_npc = player_action.findUgcNpcByNickname(target_enity_nickname); if (null == found_ugc_npc) { err_msg = $"Not found UgcNpc !!! : ugcNpcName:{target_enity_nickname} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } entity_guid = found_ugc_npc.getUgcNpcMetaGuid(); } else { err_msg = $"invalid 1 arg : EntityType !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } 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_FARMING_START(); packet.Request.ReqFarmingStart = request; request.FarmingAnchorMetaId = found_farming_anchor.AnchorGuid; request.FarmingActionTryCount = (Int32)farming_try_count; request.ToUseEntityType = (FarmingSummonedEntityType)number; request.ToUseEnityGuid = entity_guid; 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("farmingcancel", typeof(ChatCommandFarmingCancel), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] internal class ChatCommandFarmingCancel : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"Call farmingstarbyuser !!! - {player.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; var game_zone_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(game_zone_action, () => $"game_zone_action is null !!! - {player.toBasicString()}"); var curr_map = game_zone_action.getLinkedToMap(); NullReferenceCheckHelper.throwIfNull(curr_map, () => $"curr_map is null !!! - {player.toBasicString()}"); var found_farming_anchor = curr_map.getFirstAnchorInfoOfFarming(); if (null == found_farming_anchor) { err_msg = $"found_farming_anchor is empty !!! - {player.toBasicString()}"; Log.getLogger().error(err_msg); return; } var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); 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_FARMING_CANCEL(); packet.Request.ReqFarmingCancel = request; request.FarmingAnchorMetaId = found_farming_anchor.AnchorGuid; 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; } } }