using System.Collections; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Model { /// /// 游戏局内类 /// 客户端需要使用创建此类单例 /// public class Gaming { /// /// 使用的模组实例 /// public GameModule GameModule { get; } /// /// 游戏的参数 /// public GamingEventArgs EventArgs { get; } private Gaming(GameModule module, Room room, List users) { GameModule = module; EventArgs = new(room, users); } /// /// 传入游戏所需的参数,构造一个Gaming实例 /// /// /// /// /// /// public static Gaming StartGame(GameModule module, Room room, List users, params object[] args) { Gaming instance = new(module, room, users); // 新建线程来启动模组的界面 TaskUtility.NewTask(() => { module.StartUI(); }); // 启动模组主线程 module.StartGame(instance, args); return instance; } /// /// 需在RunTimeController的SocketHandler_Gaming方法中调用此方法 /// 客户端也可以参照此方法自行实现 /// 此方法目的是为了触发 的局内事件实现 /// /// 消息类型 /// 接收到的数据 /// 底层会将哈希表中的数据发送给服务器 public Hashtable GamingHandler(GamingType type, Hashtable data) { Hashtable result = []; switch (type) { case GamingType.Connect: Connect(data, result); break; case GamingType.Disconnect: Disconnect(data, result); break; case GamingType.Reconnect: Reconnect(data, result); break; case GamingType.BanCharacter: BanCharacter(data, result); break; case GamingType.PickCharacter: PickCharacter(data, result); break; case GamingType.Random: Random(data, result); break; case GamingType.Round: Round(data, result); break; case GamingType.LevelUp: LevelUp(data, result); break; case GamingType.Move: Move(data, result); break; case GamingType.Attack: Attack(data, result); break; case GamingType.Skill: Skill(data, result); break; case GamingType.Item: Item(data, result); break; case GamingType.Magic: Magic(data, result); break; case GamingType.Buy: Buy(data, result); break; case GamingType.SuperSkill: SuperSkill(data, result); break; case GamingType.Pause: Pause(data, result); break; case GamingType.Unpause: Unpause(data, result); break; case GamingType.Surrender: Surrender(data, result); break; case GamingType.UpdateInfo: UpdateInfo(data, result); break; case GamingType.Punish: Punish(data, result); break; case GamingType.None: default: break; } return result; } private void Connect(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingConnectEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingConnectEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingConnectEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingConnectEvent(this, EventArgs, data, result); } private void Disconnect(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingDisconnectEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingDisconnectEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingDisconnectEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingDisconnectEvent(this, EventArgs, data, result); } private void Reconnect(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingReconnectEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingReconnectEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingReconnectEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingReconnectEvent(this, EventArgs, data, result); } private void BanCharacter(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingBanCharacterEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingBanCharacterEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingBanCharacterEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingBanCharacterEvent(this, EventArgs, data, result); } private void PickCharacter(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingPickCharacterEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingPickCharacterEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingPickCharacterEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingPickCharacterEvent(this, EventArgs, data, result); } private void Random(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingRandomEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingRandomEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingRandomEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingRandomEvent(this, EventArgs, data, result); } private void Round(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingRoundEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingRoundEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingRoundEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingRoundEvent(this, EventArgs, data, result); } private void LevelUp(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingLevelUpEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingLevelUpEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingLevelUpEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingLevelUpEvent(this, EventArgs, data, result); } private void Move(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingMoveEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingMoveEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingMoveEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingMoveEvent(this, EventArgs, data, result); } private void Attack(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingAttackEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingAttackEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingAttackEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingAttackEvent(this, EventArgs, data, result); } private void Skill(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingSkillEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingSkillEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingSkillEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingSkillEvent(this, EventArgs, data, result); } private void Item(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingItemEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingItemEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingItemEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingItemEvent(this, EventArgs, data, result); } private void Magic(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingMagicEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingMagicEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingMagicEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingMagicEvent(this, EventArgs, data, result); } private void Buy(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingBuyEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingBuyEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingBuyEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingBuyEvent(this, EventArgs, data, result); } private void SuperSkill(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingSuperSkillEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingSuperSkillEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingSuperSkillEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingSuperSkillEvent(this, EventArgs, data, result); } private void Pause(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingPauseEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingPauseEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingPauseEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingPauseEvent(this, EventArgs, data, result); } private void Unpause(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingUnpauseEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingUnpauseEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingUnpauseEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingUnpauseEvent(this, EventArgs, data, result); } private void Surrender(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingSurrenderEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingSurrenderEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingSurrenderEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingSurrenderEvent(this, EventArgs, data, result); } private void UpdateInfo(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingUpdateInfoEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingUpdateInfoEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingUpdateInfoEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingUpdateInfoEvent(this, EventArgs, data, result); } private void Punish(Hashtable data, Hashtable result) { GameModule.OnBeforeGamingPunishEvent(this, EventArgs, data, result); if (EventArgs.Cancel) { return; } if (!EventArgs.Cancel) { GameModule.OnSucceedGamingPunishEvent(this, EventArgs, data, result); } else { GameModule.OnFailedGamingPunishEvent(this, EventArgs, data, result); } GameModule.OnAfterGamingPunishEvent(this, EventArgs, data, result); } } }