using Nettention.Proud; using ServerCore; using ServerBase; using ServerCommon; namespace GameServer; [ChatCommandAttribute("battleinstanceinit", typeof(CheatBattleInstanceInit), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] public class CheatBattleInstanceInit : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"battleinstanceinit"); var server_logic = GameServerApp.getServerLogic(); var room_id = player.getCurrentInstanceRoomId(); if (room_id.Equals(string.Empty)) { Log.getLogger().error($"cheat:battleinstanceinit.... this cheat only use in instance"); return; } var battle_instance_room = BattleInstanceManager.It.getBattleInstanceRoom(room_id); if (battle_instance_room is null) { Log.getLogger().error($"cheat:battleinstanceinit.... battle_instance_room is null room_id : {room_id}"); return; } using (var releaser = await battle_instance_room.getAsyncLock()) { var attribute = battle_instance_room.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!"); if (false == attribute.m_combat_pod_mode.m_round_state_type.Equals(BattleRoundStateType.RoundEndAll) && false == attribute.m_combat_pod_mode.m_round_state_type.Equals(BattleRoundStateType.Destroyed)) { Log.getLogger().error($"cheat:battleinstanceinit.... this cheat only RoundEndAll room_id : {room_id}"); return; } var now = DateTimeHelper.Current; battle_instance_room.setEventStartTime(now); attribute.m_combat_pod_mode.m_round_state_type = BattleRoundStateType.Rounding; attribute.m_combat_pod_mode.m_current_state_start_time = now; attribute.m_combat_pod_mode.m_current_round = 1; attribute.m_combat_pod_mode.m_charged_step = 0; attribute.m_combat_pod_mode.m_rewarded_step = 0; attribute.m_combat_pod_mode.m_pod_combat.setActive(now); (Result result, var anchor_guid) = BattleRoomHelper.getRandomCombatPodAnchorGuid(attribute, battle_instance_room); if (result.isFail()) { Log.getLogger().error("get Random pod combat anchor guid faile !!! "); return; } attribute.m_combat_pod_mode.m_pod_combat.m_source_storage_anchor_guid = anchor_guid; BattleRoomNotifyHelper.broadcast_GS2C_NTF_BATTLE_INSTANCE_STATE(battle_instance_room); var update_action = battle_instance_room.getEntityAction(); NullReferenceCheckHelper.throwIfNull(update_action, () => $"attribute is null !!!"); update_action.battleObjectStateInitAndNotify(battle_instance_room, attribute); BattleRoomNotifyHelper.broadcast_GS2C_NTF_POD_COMBAT_STATE(battle_instance_room); } } } [ChatCommandAttribute("gamemodeoccupyhost", typeof(BattleHostOccupy), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] public class BattleHostOccupy : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { //Log.getLogger().info($"battleinstanceinit"); var server_logic = GameServerApp.getServerLogic(); var room_id = player.getCurrentInstanceRoomId(); if (room_id.Equals(string.Empty)) { Log.getLogger().error($"cheat:gamemodeoccupyhost.... this cheat only use in instance"); return; } //kihoon todo : 임시 분기 처리 //나중에 게임모드로 분리되면 그때 재작업 if (room_id.Contains("battle")) { var battle_instance_room = BattleInstanceManager.It.getBattleInstanceRoom(room_id); if (battle_instance_room is null) { Log.getLogger().error($"cheat:gamemodeoccupyhost.... battle_instance_room is null room_id : {room_id}"); return; } using (var releaser = await battle_instance_room.getAsyncLock()) { battle_instance_room.m_host_migrator.modifyHost(player.getUserGuid()); } BattleRoomNotifyHelper.broadcast_GS2C_NTF_P2P_HOST_UPDATE(battle_instance_room.m_instance_room, player.getUserGuid()); } else if (room_id.Contains("1017101")) { var instance_room = InstanceRoomManager.Instance.getInstanceRoomByRoomId(room_id); if (instance_room is null) { Log.getLogger().error($"cheat:gamemodeoccupyhost.... instance_room is null room_id : {room_id}"); return; } BattleRoomNotifyHelper.broadcast_GS2C_NTF_P2P_HOST_UPDATE(instance_room, player.getUserGuid()); } } } //====================================================================================================================== // //====================================================================================================================== [ChatCommandAttribute("gamehostmigration", typeof(BattleHostMigration), AuthAdminLevelType.Developer, AuthAdminLevelType.GmNormal, AuthAdminLevelType.GmSuper)] public class BattleHostMigration : ChatCommandBase { public override async Task invoke(Player player, string token, string[] args) { Log.getLogger().info($"gamehostmigration"); var server_logic = GameServerApp.getServerLogic(); var room_id = player.getCurrentInstanceRoomId(); if (room_id.Equals(string.Empty)) { Log.getLogger().error($"cheat:gamehostmigration.... this cheat only use in instance"); return; } var battle_instance_room = BattleInstanceManager.It.getBattleInstanceRoom(room_id); if (battle_instance_room is null) { Log.getLogger().error($"cheat:gamehostmigration.... battle_instance_room is null room_id : {room_id}"); return; } using var releaser = await battle_instance_room.getAsyncLock(); if (battle_instance_room.m_host_migrator is CommonHostMigrator common_hot_migrator) { common_hot_migrator.HostMigrationSystem.setIgnoreMigrationCondition(true); common_hot_migrator.migrateCheck(true); var super_peer_guid_id = common_hot_migrator.getHostUserGuid(); BattleRoomNotifyHelper.broadcast_GS2C_NTF_P2P_HOST_UPDATE( battle_instance_room.m_instance_room, super_peer_guid_id); common_hot_migrator.HostMigrationSystem.setIgnoreMigrationCondition(false); } else { Log.getLogger() .error( $"cheat:gamehostmigration.... battle_instance_room is not CommonHostMigrator room_id : {room_id}"); } } }