264 lines
11 KiB
C#
264 lines
11 KiB
C#
using GameServer.Contents.GameMode.Manage;
|
|
using GameServer.Contents.GameMode.Manage.LeaveManage;
|
|
using GameServer.Contents.GameMode.Manage.PlayManage;
|
|
using GameServer.Contents.GameMode.Mode_Battle.Manage;
|
|
using GameServer.Contents.GameMode.Mode_Battle.ModeFreeForAll.Manage;
|
|
using GameServer.Contents.GameMode.Mode_Running.Manage;
|
|
using GameServer.Contents.GameMode.Mode_Running.ModeRace.Manage;
|
|
using Google.Protobuf;
|
|
using Google.Protobuf.WellKnownTypes;
|
|
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
using ServerCommon.BusinessLogDomain;
|
|
using MetaAssets;
|
|
|
|
|
|
|
|
namespace GameServer;
|
|
|
|
|
|
public class GameModeHelper
|
|
{
|
|
public static (Result, IGameModeJoinHandler) getGameModeJoinHandler(InstanceRoom instanceRoom, int gameModeId, string roomId)
|
|
{
|
|
(var genre_type, var mode_type) = getGameModeMeta(gameModeId, roomId);
|
|
var result = new Result();
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new TPSFreeForAllJoinHandler(instanceRoom));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new TPSTeamDeathMatchJoinHandler(instanceRoom));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new RunAdventureJoinHandler(instanceRoom));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new RunRaceJoinHandler(instanceRoom));
|
|
//case GameModeType.DANCE_:
|
|
// return (result, new (instanceRoom));
|
|
default:
|
|
var err_msg = $"invalid gameMode !!! gameModeId : {gameModeId}";
|
|
result.setFail(ServerErrorCode.GameModeJoinHandlerNotExist, err_msg);
|
|
return (result, new TPSFreeForAllJoinHandler(instanceRoom));
|
|
}
|
|
}
|
|
|
|
public static (Result, IGameModeInitHandler) getGameModeInitHandler(InstanceRoom instanceRoom, int gameModeId, string roomId)
|
|
{
|
|
(var genre_type, var mode_type) = getGameModeMeta(gameModeId, roomId);
|
|
var result = new Result();
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new TPSFreeForAllInitHandler(instanceRoom));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new TPSTeamDeathMatchInitHandler(instanceRoom));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new RunAdventureInitHandler(instanceRoom));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new RunRaceInitHandler(instanceRoom));
|
|
default:
|
|
var err_msg = $"getGameModeInitHandler not exist!!!! mode_type : {mode_type}";
|
|
result.setFail(ServerErrorCode.GameModeInitHandlerNotExist, err_msg);
|
|
return (result, new TPSFreeForAllInitHandler(instanceRoom));
|
|
}
|
|
}
|
|
|
|
public static (Result, IGameModeJoinSuccessHandler?) getGameModeJoinSuccessHandler(Player player, InstanceRoom instanceRoom, int gameModeId, string roomId)
|
|
{
|
|
var result = new Result();
|
|
(var genre_type, var mode_type) = getGameModeMeta(gameModeId, roomId);
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new TPSFreeForAllJoinSuccessHandler(player, instanceRoom));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new TPSTeamDeathMatchJoinSuccessHandler(player, instanceRoom));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new RunAdventureJoinSuccessHandler(player, instanceRoom));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new RunRaceJoinSuccessHandler(player, instanceRoom));
|
|
default:
|
|
var err_msg = $"getGameModeInitHandler not exist !!!! mode_type : {mode_type}";
|
|
result.setFail(ServerErrorCode.GameModeJoinSuccessHandlerNotExist, err_msg);
|
|
return (result, null);
|
|
}
|
|
}
|
|
|
|
public static (Result, IGameMode?) createGameMode(InstanceRoom instanceRoom, GameModeType modeType)
|
|
{
|
|
var result = new Result();
|
|
switch (modeType)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new GameModeTPSFreeForAll<GameModeTPSFreeForAllData>(new GameModeTPSFreeForAllData(), instanceRoom));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new GameModeTPSTeamDeathMatch<GameModeTPSTeamDeathMatchData>(new GameModeTPSTeamDeathMatchData(), instanceRoom));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new GameModeRunAdventure<GameModeRunAdventureData>(new GameModeRunAdventureData(), instanceRoom));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new GameModeRunRace<GameModeRunRaceData>(new GameModeRunRaceData(), instanceRoom));
|
|
default:
|
|
var err_msg = $"createGameMode not exist !!!! mode_type : {modeType}";
|
|
result.setFail(ServerErrorCode.GameModeCreateFail, err_msg);
|
|
return (result, null);
|
|
}
|
|
}
|
|
|
|
public static (Result, IGameModeLeaveHandler?) getGameModeLeaveHandler(Player player, string roomId)
|
|
{
|
|
var result = new Result();
|
|
(var genre_type, var mode_type) = getGameModeMeta(1, roomId);
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new TPSFreeForAllLeaveHandler(player, roomId));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new TPSTeamDeathMatchLeaveHandler(player, roomId));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new RunAdventureLeaveHandler(player, roomId));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new RunRaceLeaveHandler(player, roomId));
|
|
default:
|
|
var err_msg = $"getGameModeInitHandler not exist !!!! mode_type : {mode_type}";
|
|
result.setFail(ServerErrorCode.GameModeJoinSuccessHandlerNotExist, err_msg);
|
|
return (result, null);
|
|
}
|
|
}
|
|
|
|
public static (Result, IGameModeDestroyHandler?) getGameModeDestroyHandler(string roomId)
|
|
{
|
|
var result = new Result();
|
|
(var genre_type, var mode_type) = getGameModeMeta(1, roomId);
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
return (result, new TPSFreeForAllDestroyHandler(roomId));
|
|
case GameModeType.TPS_TDM:
|
|
return (result, new TPSTeamDeathMatchDestroyHandler(roomId));
|
|
case GameModeType.RUN_ADV:
|
|
return (result, new RunAdventureDestroyHandler(roomId));
|
|
case GameModeType.RUN_RACE:
|
|
return (result, new RunRaceDestroyHandler(roomId));
|
|
default:
|
|
var err_msg = $"getGameModeInitHandler not exist !!!! mode_type : {mode_type}";
|
|
result.setFail(ServerErrorCode.GameModeJoinSuccessHandlerNotExist, err_msg);
|
|
return (result, null);
|
|
}
|
|
}
|
|
|
|
|
|
public static IHostMigrator createHostMigrator(int gameModeId)
|
|
{
|
|
var result = new Result();
|
|
(var genre_type, var mode_type) = getGameModeMeta(gameModeId, "battle"); //kihoon 임시 마이그레이터 나중에 수정 필요
|
|
switch (mode_type)
|
|
{
|
|
case GameModeType.TPS_FFA:
|
|
//return HostMigrationFactory.createCommonHostMigrator((int) BattlePlayMode.PodCombat, GameServerApp.getServerLogic());
|
|
return new BattleFFAModeHostMigrator();
|
|
default:
|
|
Log.getLogger().error($"createHostMigrator Not implements mode : {mode_type}");
|
|
return new BattleFFAModeHostMigrator();
|
|
}
|
|
}
|
|
|
|
|
|
public static (GameGenreType genreType, GameModeType modeType) getGameModeMeta(int gameModeId, string roomid)
|
|
{
|
|
// kihoon todo : Meta에서 데이터 가져와야 한다.
|
|
// kihoon todo : Meta가 없을경우의 result 처리 필요
|
|
|
|
//kihoon todo : roomid 는 임시 나중에 mode id로 넣어서 처리 해줘야 된다.
|
|
if (roomid.Contains("battle"))
|
|
{
|
|
return (GameGenreType.TPS, GameModeType.TPS_FFA);
|
|
}
|
|
else if (roomid.Contains("1017101"))
|
|
{
|
|
return (GameGenreType.Running, GameModeType.RUN_RACE);
|
|
}
|
|
|
|
return (GameGenreType.TPS, GameModeType.TPS_FFA);
|
|
}
|
|
|
|
public static GameModeBase toGameModeBase(IGameMode gameMode)
|
|
{
|
|
var game_mode_base = gameMode as GameModeBase;
|
|
NullReferenceCheckHelper.throwIfNull(game_mode_base, () => $"game_mode_base is null !!!");
|
|
return game_mode_base;
|
|
}
|
|
|
|
public static async Task<Result> leaveGameInstanceRoom(string userGuid, string roomId)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
var instance_room_storage = new InstanceRoomStorage();
|
|
instance_room_storage.Init(server_logic.getRedisDb(), "");
|
|
|
|
await instance_room_storage.leaveInstanceRoom(userGuid, roomId);
|
|
|
|
var instance_room_id_base = getInstanceRoomIdBaseFromInstanceRoomId(roomId);
|
|
await instance_room_storage.decreaseInstanceRoomScore(instance_room_id_base, roomId);
|
|
|
|
return result;
|
|
}
|
|
|
|
public static string getInstanceRoomIdBaseFromInstanceRoomId(string instanceRoomId)
|
|
{
|
|
var instance_room_Id_element = instanceRoomId.Split(":");
|
|
|
|
if (instance_room_Id_element.Length >= 2)
|
|
{
|
|
return $"{instance_room_Id_element[0]}:{instance_room_Id_element[1]}";
|
|
}
|
|
Log.getLogger().error($"Instance room id weired : {instanceRoomId}");
|
|
return string.Empty;
|
|
}
|
|
|
|
public static IGameObject? getObjectInteractAction(GameModeBase gameModeBase, Anchor anchor)
|
|
{
|
|
var entity_type = gameModeBase.getEntityType();
|
|
|
|
switch (entity_type)
|
|
{
|
|
case EntityType.GameModeTpsfreeForAll:
|
|
//kihoon todo : table id 넘겨서 pickup, combat, weapon, buff, 인지 전달 받아야 된다.
|
|
return getTpsFreeForAllInteractAction(gameModeBase, anchor);
|
|
case EntityType.GameModeTpsteamDeathMatch:
|
|
return getTpsTeamDeathMatchInteractAction(gameModeBase, anchor);
|
|
case EntityType.GameModeRunAdventure:
|
|
return getRunAcventureInteractAction(gameModeBase, anchor);
|
|
case EntityType.GameModeRunRace:
|
|
return getRunRaceInteractAction(gameModeBase, anchor);
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static IGameObject? getRunRaceInteractAction(GameModeBase gameModeBase, Anchor anchor)
|
|
{
|
|
//kihoon todo :현재 savePoint 밖에 없어서 그거 넘긴다.
|
|
return gameModeBase.getEntityAction<RaceGameObjectSavePointInteractAction>();
|
|
}
|
|
|
|
public static IGameObject? getTpsFreeForAllInteractAction(GameModeBase gameModeBase, Anchor anchor)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public static IGameObject? getTpsTeamDeathMatchInteractAction(GameModeBase gameModeBase, Anchor anchor)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public static IGameObject? getRunAcventureInteractAction(GameModeBase gameModeBase, Anchor anchor)
|
|
{
|
|
return null;
|
|
}
|
|
} |