/// <inheritdoc/> public override async Task <IFtpResponse> Process(FtpCommand command, CancellationToken cancellationToken) { var fsFeature = Connection.Features.Get <IFileSystemFeature>(); var path = command.Argument; if (path == ".") { // NOOP } else if (path == "..") { // CDUP if (fsFeature.CurrentDirectory.IsRoot) { return(new FtpResponse(550, T("Not a valid directory."))); } fsFeature.Path.Pop(); } else { var tempPath = fsFeature.Path.Clone(); var newTargetDir = await fsFeature.FileSystem.GetDirectoryAsync(tempPath, path, cancellationToken).ConfigureAwait(false); if (newTargetDir == null) { return(new FtpResponse(550, T("Not a valid directory."))); } fsFeature.Path = tempPath; } return(new FtpResponseTextBlock(250, ServerMessages.GetDirectoryChangedMessage(fsFeature.Path))); }
public void LoadMonster(string file) { if (File.Exists(file + ".xml")) { Logger.Information(ServerMessages.GetMessage(Messages.MonsterMng_Loading), file + ".xml"); var xml = ResourceLoader.XmlLoader <XmlMonsterInfo>(file + ".xml"); _monsterInfo = xml.Monsters.ToDictionary(x => x.Monster); } else if (File.Exists(file + ".txt")) { Logger.Information(ServerMessages.GetMessage(Messages.MonsterMng_Loading), file + ".txt"); var loader = new LoadWZTXT <XmlMonsterInfo>(); var xml = loader.Load(file + ".txt"); foreach (var monst in xml.Monsters) { if (monst.Spell >= (Spell)100 && monst.Spell < (Spell)200) { monst.Spell -= 100; monst.AttackRange += 2; } _monsterInfo.Add(monst.Monster, monst); } //xml.Monsters = _monsterInfo.Select(x => x.Value).ToArray(); ResourceLoader.XmlSaver(file + ".xml", xml); } var bags = ResourceCache.Instance.GetItemBags(); foreach (var mob in _monsterInfo.Values) { mob.Bag = bags.FirstOrDefault(x => x.Monster == mob.Monster); } Logger.Information(ServerMessages.GetMessage(Messages.MonsterMng_Types), _monsterInfo.Count); }
public void TestShutdownString() { Assert.AreEqual(NetPeerStatus.Running, Peer.Status); Assert.IsNotNull(Connection); TestHelper.WaitForConnection(Connection); TestHelper.WaitFor(() => Server.ConnectionsCount != 0); Peer.Shutdown("bye"); TestHelper.WaitFor(() => Server.ConnectionsCount == 0); TestHelper.HasMessage( PeerMessages, NetIncomingMessageType.DebugMessage, message => string.Equals( "Shutdown requested (reason)", message.ReadString(), StringComparison.Ordinal ) ); var messageShutdownReason = ServerMessages.Last( message => NetIncomingMessageType.StatusChanged == message.MessageType ); Assert.IsNotNull(messageShutdownReason); var status = (NetConnectionStatus)messageShutdownReason.ReadByte(); Assert.AreEqual(NetConnectionStatus.Disconnected, status); Assert.AreEqual("bye", messageShutdownReason.ReadString()); }
public GlobalEvents AddEvent(string name, GlobalEvent ev) { Logger.Information(ServerMessages.GetMessage(Messages.GE_AddEvent), name, ev.Active, ev.Rate); _events.Add(name, ev); ev.Name = name; return(this); }
public Item GetItem(ushort mobLevel, Maps map) { foreach (var ev in _events) { var ret = ev.Value.GetItem(mobLevel, map); if (ret == null) { continue; } Logger.Information(ServerMessages.GetMessage(Messages.GE_GetItem), ev.Key, map, ret); return(ret); } foreach (var ev in Program.EventManager.GetEvents()) { var ret = ev.GetItem(mobLevel, map); if (ret == null) { continue; } Logger.Information(ServerMessages.GetMessage(Messages.GE_GetItem), ev.GetType(), map, ret); return(ret); } return(null); }
public void SendShortMessage(int receiverID, ServerMessages messageID) { List <byte> message = new List <byte>(); message.AddRange(BitConverter.GetBytes((int)messageID)); playerList[receiverID].clientSocket.SendMessage(message.ToArray()); }
public override void Update() { switch (CurrentState) { case EventState.Closed: break; case EventState.Open: if (((int)TimeLeft.TotalSeconds) % 60 == 0 && TimeLeft.TotalSeconds >= 60) { Program.NoEventMapAnoucement(ServerMessages.GetMessage(Messages.BC_Open, (int)Math.Ceiling(TimeLeft.TotalMinutes))).Wait(); } break; case EventState.Playing: break; } foreach (var bridge in _bridges) { bridge.Update(); } base.Update(); }
public override void Update() { switch (CurrentState) { case EventState.Closed: break; case EventState.Open: if (((int)TimeLeft.TotalSeconds) % 60 == 0 && TimeLeft.TotalSeconds >= 60) { Program.NoEventMapAnoucement(ServerMessages.GetMessage(Messages.BC_Open, (int)Math.Ceiling(TimeLeft.TotalMinutes))).Wait(); Program.NoEventMapSendAsync(new SEventNotificationS16Kor { Active = 1, EventID = EventIcon.BloodCastle }); } break; case EventState.Playing: break; } foreach (var bridge in _bridges) { bridge.Update(); } base.Update(); }
public static void DelGroup(int group) { _logger.Information(ServerMessages.GetMessage(Messages.IA_DeleteGroup, group) /*"Removing group {0}"*/); foreach (var mob in _instance._IAGroups[group]) { MonstersMng.Instance.DeleteMonster(mob.monster); } }
private void StartSiege() { var seconds = (int)Time.TotalSeconds; var notify = (seconds % 180) == 0; seconds = (int)TimeLeft.TotalSeconds; if (notify) { TimeLeftSend(); } if (seconds % 1800 == 0) { _ = Program.GlobalAnoucement(ServerMessages.GetMessage(Messages.CS_Notify)); } if (seconds < 180 && (seconds % 60) == 0) { TimeLeftSend(); } if ((seconds % 3) == 0) { MinimapUpdate(); } if (main.Switch1 != null) { var sw = main.Switch1.Window as Monster; if (sw.Position.Substract(main.Switch1.Character.Position).LengthSquared() > 3) { main.Switch1 = null; NotifyCrownState(1); } } if (main.Switch2 != null) { var sw = main.Switch2.Window as Monster; if (sw.Position.Substract(main.Switch2.Character.Position).LengthSquared() > 3) { main.Switch2 = null; NotifyCrownState(1); } } NotifySwitchInfo(sw1, main.Switch1); NotifySwitchInfo(sw2, main.Switch2); if (main.Switch1 != null && main.Switch2 != null) { if (main.Switch1.Character.Guild.Union[0] == main.Switch2.Character.Guild.Union[0]) { NotifyCrownState(0); } else { NotifyCrownState(1); } } }
public override void Update() { switch (CurrentState) { case EventState.Closed: if (TimeLeft.TotalMinutes <= 16 && ((int)TimeLeft.TotalMinutes) % 5 == 0 && _nextMessage < DateTimeOffset.Now) { _nextMessage = DateTimeOffset.Now.AddMinutes(4); Program.NoEventMapAnoucement(ServerMessages.GetMessage(Messages.DS_Closed, (int)TimeLeft.TotalMinutes)) .Wait(); } if ((int)TimeLeft.TotalSeconds == 30) { Program.server.Clients .Where(x => x.Player.Status == LoginStatus.Playing) .SendAsync(new SDevilSquareSet(DevilSquareState.Close)) .Wait(); } break; case EventState.Open: if ((int)TimeLeft.TotalSeconds == 30) { Program.server.Clients .Where(x => x.Player.Status == LoginStatus.Playing) .SendAsync(new SDevilSquareSet(DevilSquareState.Open)) .Wait(); } break; case EventState.Playing: if (DateTimeOffset.Now >= _nextSpawn) { _nextSpawn = DateTimeOffset.Now.Add(_playingTime / 7); _nextSpawnNumber++; foreach (var ds in _devilSquares) { ds.SpawList(_nextSpawnNumber); } } if ((int)TimeLeft.TotalSeconds == 30) { Resources.ResourceCache.Instance.GetMaps() .Where(x => x.Key == Maps.DevilSquare || x.Key == Maps.DevilSquare2) .SelectMany(y => y.Value.Players) .Select(z => z.Player.Session) .SendAsync(new SDevilSquareSet(DevilSquareState.Playing)) .Wait(); } break; } foreach (var ds in _devilSquares) { ds.Update(); } base.Update(); }
public ActionResult Edit(Edit editModel) { //ServerMessages.SetMessage(TempData, "This is message"); //return CloseDialogAndRedirect(Url.Action<UserDetailController>(a => a.Index())); ServerMessages.SetError(TempData, "This is error"); return(Editor(new Edit())); }
/// <summary> /// Writes the type of message being sent to the client--all messages are prefixed with a message type. /// </summary> private void WriteServerMessageType(ServerMessages message) { try { writer.Write(Convert.ToByte(message)); } catch (IOException ex) { Console.WriteLine(ex.Message); Close(); } }
public virtual void Update() { if (!_nextState.Equals(CurrentState) && _nextStateIn < DateTimeOffset.Now) { var protectedState = _nextState; _logger.Information(ServerMessages.GetMessage(Messages.Server_EventStateChange), CurrentState, _nextState); OnTransition(_nextState); CurrentState = protectedState; } }
public static int InitGroup(int group, EventHandler die = null) { _logger.Information(ServerMessages.GetMessage(Messages.IA_CreateGroup, group) /*"Loading group {0}"*/); Monster Leader = null; foreach (var mob in _instance._IAGroups[group]) { Point point = new Point(); var mapInfo = ResourceCache.Instance.GetMaps()[mob.MapNumber]; switch (mob.CreateType) { case 0: point = new Point(mob.StartX, mob.StartY); break; case 1: for (var y = mob.StartY - 5; y <= (mob.StartY + 5) && point.X == 0; y++) { for (var x = mob.StartX - 5; x <= (mob.StartX + 5) && point.X == 0; x++) { if (mapInfo.GetAttributes(x, y).Length == 0) { point = new Point(mob.StartX, mob.StartY); } } } break; default: continue; } if (point.X == 0) { continue; } mob.monster = new Monster(mob.Class, ObjectType.Monster, mob.MapNumber, point, mob.StartDir == -1 ? (byte)Program.RandomProvider(7) : (byte)mob.StartDir) { Index = MonstersMng.Instance.GetNewIndex() }; //mob.monster.Active = false; mob.monster.Die += die; if (mob.Rank == 0) { Leader = mob.monster; } else if (Leader != null) { mob.monster.Leader = Leader; } MonstersMng.Instance.Monsters.Add(mob.monster); } return(_instance._IAGroups[group].Count); }
private void Notify() { var seconds = (int)Time.TotalSeconds; var notify = (seconds % 1800) == 0; if (!notify) { return; } _ = Program.GlobalAnoucement(ServerMessages.GetMessage(MU.Resources.Messages.CS_Notify)); }
private void DieMonster(object sender, EventArgs e) { var mob = sender as Monster; mob.Active = false; if (mob.Info.Monster == 361) { _manager.SendAll(new SNotice(NoticeType.Gold, ServerMessages.GetMessage(Messages.Kanturu_Successfull, mob.Killer.Character.Name))); _manager.FailState = false; Trigger(KanturuBattleOfNightmareState.End); } }
private void ReadySiege() { var seconds = (int)Time.TotalSeconds; var notify = (seconds % 1800) == 0; seconds = (int)TimeLeft.TotalSeconds; var lastNotify = seconds <= 300 && (seconds % 60) == 0; if (notify) { _ = Program.GlobalAnoucement(ServerMessages.GetMessage(Messages.CS_Notify)); } if (lastNotify) { _ = Program.GlobalAnoucement(ServerMessages.GetMessage(Messages.CS_LastNotify, seconds / 60)); } }
public override void OnTransition(EventState NextState) { switch (NextState) { case EventState.Closed: Trigger(EventState.Open, _closedTime); break; case EventState.Open: Trigger(EventState.Playing, _openTime); break; case EventState.Playing: Program.NoEventMapAnoucement(ServerMessages.GetMessage(Messages.BC_Closed)).Wait(); Trigger(EventState.Closed, _playingTime); break; } }
public override void OnTransition(KanturuStandByState NextState) { switch (NextState) { case KanturuStandByState.Start: Trigger(KanturuStandByState.Notify, TimeSpan.FromSeconds(60)); //1140 break; case KanturuStandByState.Notify: Trigger(KanturuStandByState.End, TimeSpan.FromSeconds(60)); /*"[Refinery Tower] Can enter in 1 minute"*/ Program.MapAnoucement(Maps.Kantru2, ServerMessages.GetMessage(Messages.Kanturu_CoreGateOpens, (int)TimeLeft.TotalMinutes)).Wait(); break; case KanturuStandByState.End: _manager.Trigger(EventState.Playing); Trigger(KanturuStandByState.None); break; } }
public override int GetHashCode() { int hash = 1; if (UncompressedSize != 0UL) { hash ^= UncompressedSize.GetHashCode(); } if (ServerMessages != 0) { hash ^= ServerMessages.GetHashCode(); } if (ClientMessages != 0) { hash ^= ClientMessages.GetHashCode(); } if (Payload.Length != 0) { hash ^= Payload.GetHashCode(); } return(hash); }
public override void OnTransition(EventState NextState) { switch (NextState) { case EventState.Closed: Trigger(EventState.Open, _closedTime); break; case EventState.Open: Trigger(EventState.Playing, _openTime); break; case EventState.Playing: Program.NoEventMapAnoucement(ServerMessages.GetMessage(Messages.BC_Closed)).Wait(); Trigger(EventState.Closed, _playingTime); break; } Program.NoEventMapSendAsync(new SEventNotificationS16Kor { Active = (byte)(NextState == EventState.Open ? 1 : 0), EventID = EventIcon.BloodCastle }); }
private static async void WorkerCS() { do { try { Program.client = new CSClient(Instance._csIp, Instance._handlers, Instance._factories, Program.ServerCode, Program.server, Instance._show, Instance._token, Program.Name); while (!Program.client.Closed) { await Task.Delay(1000); } Log.Error("Connection with CS lost"); } catch (Exception) { Log.Error(ServerMessages.GetMessage(Messages.Server_CSServer_Error)); } await Task.Delay(30000); } while (true); }
public void TestShutdownMessageWithDebugString() { Assert.AreEqual(NetPeerStatus.Running, Peer.Status); Assert.IsNotNull(Connection); TestHelper.WaitForConnection(Connection); TestHelper.WaitFor(() => Server.ConnectionsCount != 0); var testString = $"{nameof(TestShutdownMessage)}_{new CryptoRandom().NextUInt64()}"; var outgoingMessage = Peer.CreateMessage(); outgoingMessage.Write(testString); Peer.Shutdown(outgoingMessage, "debugMessage"); TestHelper.WaitFor(() => Server.ConnectionsCount == 0); TestHelper.HasMessage( PeerMessages, NetIncomingMessageType.DebugMessage, message => string.Equals( "Shutdown requested (debugMessage)", message.ReadString(), StringComparison.Ordinal ) ); var messageShutdownReason = ServerMessages.Last( message => NetIncomingMessageType.StatusChanged == message.MessageType ); Assert.IsNotNull(messageShutdownReason); var status = (NetConnectionStatus)messageShutdownReason.ReadByte(); Assert.AreEqual(NetConnectionStatus.Disconnected, status); Assert.AreEqual(testString, messageShutdownReason.ReadString()); }
/// <summary> /// Writes the type of message being sent to the client--all messages are prefixed with a message type. /// </summary> private void WriteServerMessageType(ServerMessages message) { try { writer.Write(Convert.ToByte(message)); } catch (IOException ex) { Console.WriteLine(ex.Message); Close(); } }
public MinecraftServerControls() { _serverMessages = new ServerMessages(); _players = new List <Player>(); }
static void ReadMessage(ServerMessages id, PacketReader stream) { if (id != ServerMessages.VobPosDirMessage && id != ServerMessages.NPCPosAngMessage) { Logger.Log(id); } switch (id) { #region RakNet case ServerMessages.RakNet_ConnectionRequestAccepted: isConnected = true; // we are connected isConnecting = false; connectionAttempts = 0; // reset attempt counter Client.ScriptObject.OnConnection(); // let the scripts know too Messages.WriteConnection(); // send mac & drive hash break; case ServerMessages.RakNet_ConnectionAttemptFailed: isConnected = false; isConnecting = false; break; case ServerMessages.RakNet_AlreadyConnected: Logger.LogWarning("Already Connected!"); break; case ServerMessages.RakNet_ConnectionBanned: Logger.LogError("Client banned!"); break; case ServerMessages.RakNet_InvalidPassword: Logger.LogError("Wrong password"); break; case ServerMessages.RakNet_IncompatibleProtocolVersion: Logger.LogError("ID_INCOMPATIBLE_PROTOCOL_VERSION"); break; case ServerMessages.RakNet_NoFreeIncomingConnections: Logger.LogError("ID_NO_FREE_INCOMING_CONNECTIONS"); break; case ServerMessages.RakNet_DisconnectionNotification: case ServerMessages.RakNet_ConnectionLost: isConnected = false; isConnecting = false; isDisconnected = true; Logger.Log("Disconnected from server."); Client.ScriptObject.OnDisconnection(-1); break; #endregion /* * USER MESSAGES */ // receiving dynamic instances case ServerMessages.DynamicsMessage: Messages.ReadDynamics(stream); break; // load a gothic world case ServerMessages.LoadWorldMessage: World.Messages.ReadLoadWorld(stream); break; case ServerMessages.WorldLeaveMessage: World.Messages.ReadLeaveWorldMessage(stream); break; // client becomes a spectator case ServerMessages.SpectatorMessage: Client.ReadSpectatorMessage(stream); break; case ServerMessages.PlayerControlMessage: Client.ReadPlayerControlMessage(stream); break; // World Messages case ServerMessages.WorldJoinMessage: World.Messages.ReadJoinWorld(stream); break; case ServerMessages.WorldCellMessage: World.Messages.ReadCellMessage(stream); break; case ServerMessages.WorldBarrierMessage: WorldObjects.WorldGlobals.BarrierController.Messages.ReadBarrier(stream); break; case ServerMessages.WorldWeatherMessage: WorldObjects.WorldGlobals.WeatherController.Messages.ReadWeather(stream); break; case ServerMessages.WorldWeatherTypeMessage: WorldObjects.WorldGlobals.WeatherController.Messages.ReadWeatherType(stream); break; case ServerMessages.WorldTimeMessage: WorldObjects.WorldGlobals.WorldClock.Messages.ReadTime(stream); break; case ServerMessages.WorldTimeStartMessage: WorldObjects.WorldGlobals.WorldClock.Messages.ReadTimeStart(stream, true); break; case ServerMessages.WorldTimeStopMessage: WorldObjects.WorldGlobals.WorldClock.Messages.ReadTimeStart(stream, false); break; // Vob Messages case ServerMessages.VobSpawnMessage: World.Messages.ReadVobSpawn(stream); break; case ServerMessages.VobDespawnMessage: World.Messages.ReadVobDespawnMessage(stream); break; case ServerMessages.VobPosDirMessage: BaseVob.Messages.ReadPosDirMessage(stream); break; case ServerMessages.VobThrowMessage: Vob.Messages.ReadThrow(stream); break; case ServerMessages.ScriptMessage: Client.ScriptObject.ReadScriptMessage(stream); break; // ScriptVobMessages case ServerMessages.ScriptVobMessage: Messages.ReadScriptVob(stream); break; // NPC Messages case ServerMessages.NPCPosAngMessage: NPC.Messages.ReadPosAngMessage(stream); break; case ServerMessages.NPCEquipAddMessage: NPC.Messages.ReadEquipMessage(stream); break; case ServerMessages.NPCEquipRemoveMessage: NPC.Messages.ReadUnequipMessage(stream); break; case ServerMessages.NPCEquipSwitchMessage: NPC.Messages.ReadEquipSwitchMessage(stream); break; case ServerMessages.NPCFightModeSetMessage: NPC.Messages.ReadFightMode(stream, true); break; case ServerMessages.NPCFightModeUnsetMessage: NPC.Messages.ReadFightMode(stream, false); break; case ServerMessages.NPCHealthMessage: NPC.Messages.ReadHealth(stream); break; // Player Messages case ServerMessages.PlayerInvAddItemMessage: WorldObjects.ItemContainers.NPCInventory.Messages.ReadAddItem(stream); break; case ServerMessages.PlayerInvRemoveItemMessage: WorldObjects.ItemContainers.NPCInventory.Messages.ReadRemoveItem(stream); break; case ServerMessages.PlayerItemAmountChangedMessage: WorldObjects.Item.Messages.ReadItemAmountChangedMessage(stream); break; // Model Messages case ServerMessages.ModelAniUncontrolledMessage: Model.Messages.ReadAniStartUncontrolled(stream); break; case ServerMessages.ModelAniStartMessage: Model.Messages.ReadAniStart(stream); break; case ServerMessages.ModelAniStartFPSMessage: Model.Messages.ReadAniStartFPS(stream); break; case ServerMessages.ModelAniStopMessage: Model.Messages.ReadAniStop(stream, false); break; case ServerMessages.ModelAniFadeMessage: Model.Messages.ReadAniStop(stream, true); break; case ServerMessages.ModelOverlayAddMessage: Model.Messages.ReadOverlay(stream, true); break; case ServerMessages.ModelOverlayRemoveMessage: Model.Messages.ReadOverlay(stream, false); break; case ServerMessages.ModelInstanceCreateMessage: // TODO: whatever has to be done break; // vob guiding case ServerMessages.GuideAddCmdMessage: GuidedVob.Messages.ReadGuideAddCmdMessage(stream); break; case ServerMessages.GuideAddMessage: GuidedVob.Messages.ReadGuideAddMessage(stream); break; case ServerMessages.GuideRemoveCmdMessage: GuidedVob.Messages.ReadGuideRemoveCmdMessage(stream); break; case ServerMessages.GuideRemoveMessage: GuidedVob.Messages.ReadGuideRemoveMessage(stream); break; case ServerMessages.GuideSetCmdMessage: GuidedVob.Messages.ReadGuideSetCmdMessage(stream); break; case ServerMessages.VobInstanceCreateMessage: // TODO: whatever has to be done break; default: Enum undefinedID; if (Enum.IsDefined(typeof(ServerMessages), id)) { undefinedID = id; } else { undefinedID = (DefaultMessageIDTypes)id; } Logger.LogWarning("Received message with invalid NetworkID! " + undefinedID); break; } }
public void SendMessage(ServerMessages.SendMessage message) { stream.WriteStartDocument(false); xmlSerSend.Serialize(stream, message); }
internal static PacketWriter SetupStream(ServerMessages ID) { pktWriter.Reset(); pktWriter.Write((byte)ID); return(pktWriter); }
public Packet(ServerMessages operationCode) : this((byte)operationCode) { }
public override void OnTransition(KanturuBattleOfNightmareState NextState) { _manager.SendAll(new SKanturuStateChange { State = _manager._state, btDetailState = (byte)NextState }); switch (NextState) { case KanturuBattleOfNightmareState.None: break; case KanturuBattleOfNightmareState.Idle: _manager.WarpAllTo(134); Trigger(KanturuBattleOfNightmareState.Notify, TimeSpan.FromSeconds(5)); break; case KanturuBattleOfNightmareState.Notify: Trigger(KanturuBattleOfNightmareState.Start, TimeSpan.FromSeconds(10)); _manager.SendAll(new SNotice(NoticeType.Gold, ServerMessages.GetMessage(Messages.Kanturu_NightmareNotify))); break; case KanturuBattleOfNightmareState.Start: { _manager.LoadScene(2); MonsterIA.InitGroup(23, DieMonster); var mob = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 361); _nightmare = new PatternManager(mob, Program.XMLConfiguration.Files.NightmarePatterns); _nightmare.UseSkill += _nightmare_UseSkill; _manager.FailState = true; Trigger(KanturuBattleOfNightmareState.End, TimeSpan.FromSeconds(1200)); _manager.SendAll(new SKanturuBattleTime { BattleTime = (int)TimeLeft.TotalSeconds }); } break; case KanturuBattleOfNightmareState.End: _nightmare = null; MonsterIA.DelGroup(23); _logger.Information("Battle result:{0}", _manager.FailState?"Fail":"Win"); _manager.SendAll(new SKanturuBattleResult { Result = (byte)(_manager.FailState ? 0 : 1) }); Trigger(KanturuBattleOfNightmareState.EndCycle, TimeSpan.FromSeconds(5)); break; case KanturuBattleOfNightmareState.EndCycle: if (_manager.FailState) { _manager.Clear(); } else { _manager._towerOfRefinement.Initialize(); _manager.Trigger(EventState.Closed); } Trigger(KanturuBattleOfNightmareState.None); break; } }
public override void OnTransition(KanturuBattleOfMayaState NextState) { _manager.SendAll(new SKanturuStateChange { State = _manager._state, btDetailState = (byte)NextState }); if (NextState == KanturuBattleOfMayaState.EndCycle1 || NextState == KanturuBattleOfMayaState.EndCycle2 || NextState == KanturuBattleOfMayaState.EndCycle3) { var str = ServerMessages.GetMessage(Messages.Kanturu_NextBattle); Program.MapAnoucement(Maps.Kantru1, str).Wait(); Program.MapAnoucement(Maps.Kantru2, str).Wait(); Program.MapAnoucement(Maps.Kantru3, str).Wait(); } switch (NextState) { // Battle Stage 1 case KanturuBattleOfMayaState.StandBy1: Trigger(KanturuBattleOfMayaState.Notify1, TimeSpan.FromSeconds(120)); break; case KanturuBattleOfMayaState.Notify1: if (!_manager.CanRun()) { _manager.FailState = true; Trigger(KanturuBattleOfMayaState.End); return; } Trigger(KanturuBattleOfMayaState.Start1, TimeSpan.FromSeconds(15)); break; case KanturuBattleOfMayaState.Start1: _manager.LoadScene(0); Trigger(KanturuBattleOfMayaState.End1, TimeSpan.FromSeconds(900)); _manager.SendAll(new SKanturuBattleTime { BattleTime = (int)TimeLeft.TotalMilliseconds }); break; case KanturuBattleOfMayaState.Maya1: { _LeftHand = false; _RightHand = false; _manager.LoadScene(3); MonsterIA.InitGroup(20, DieMonster); var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363 || x.Info.Monster == 362); _hand1 = new PatternManager(h1, Program.XMLConfiguration.Files.MayaLeftHandPatterns); _hand1.UseSkill += _hand_UseSkill; } break; case KanturuBattleOfMayaState.End1: _hand1.UseSkill -= _hand_UseSkill; _hand1 = null; MonsterIA.DelGroup(20); if (_manager.MonsterCount() > 1 || !_LeftHand) { _manager.FailState = true; Trigger(KanturuBattleOfMayaState.End); return; } Trigger(KanturuBattleOfMayaState.EndCycle1, TimeSpan.FromSeconds(5)); break; case KanturuBattleOfMayaState.EndCycle1: { Trigger(KanturuBattleOfMayaState.StandBy2, TimeSpan.FromSeconds(3)); } break; // Battle Stage 2 case KanturuBattleOfMayaState.StandBy2: Trigger(KanturuBattleOfMayaState.Start2, TimeSpan.FromSeconds(60)); break; case KanturuBattleOfMayaState.Start2: _manager.LoadScene(0); Trigger(KanturuBattleOfMayaState.End2, TimeSpan.FromSeconds(900)); _manager.SendAll(new SKanturuBattleTime { BattleTime = (int)TimeLeft.TotalMilliseconds }); break; case KanturuBattleOfMayaState.Maya2: { _LeftHand = false; _RightHand = false; MonsterIA.InitGroup(21, DieMonster); _manager.LoadScene(4); var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363 || x.Info.Monster == 362); _hand2 = new PatternManager(h1, Program.XMLConfiguration.Files.MayaRightHandPatterns); _hand2.UseSkill += _hand_UseSkill; } break; case KanturuBattleOfMayaState.End2: _hand2.UseSkill -= _hand_UseSkill; _hand2 = null; MonsterIA.DelGroup(21); if (_manager.MonsterCount() > 1 || !_RightHand) { _manager.FailState = true; Trigger(KanturuBattleOfMayaState.End); return; } Trigger(KanturuBattleOfMayaState.EndCycle2, TimeSpan.FromSeconds(5)); break; case KanturuBattleOfMayaState.EndCycle2: Trigger(KanturuBattleOfMayaState.StandBy3, TimeSpan.FromSeconds(3)); break; // Battle Stage 3 case KanturuBattleOfMayaState.StandBy3: Trigger(KanturuBattleOfMayaState.Start3, TimeSpan.FromSeconds(60)); break; case KanturuBattleOfMayaState.Start3: _manager.LoadScene(1); Trigger(KanturuBattleOfMayaState.End3, TimeSpan.FromSeconds(900)); _manager.SendAll(new SKanturuBattleTime { BattleTime = (int)TimeLeft.TotalMilliseconds }); break; case KanturuBattleOfMayaState.Maya3: { _LeftHand = false; _RightHand = false; MonsterIA.InitGroup(22, DieMonster); _manager.LoadScene(5); var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 362); var h2 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363); _hand1 = new PatternManager(h1, Program.XMLConfiguration.Files.MayaLeftHandPatterns); _hand2 = new PatternManager(h2, Program.XMLConfiguration.Files.MayaRightHandPatterns); _hand1.UseSkill += _hand_UseSkill; _hand2.UseSkill += _hand_UseSkill; } break; case KanturuBattleOfMayaState.End3: _hand1.UseSkill -= _hand_UseSkill; _hand2.UseSkill -= _hand_UseSkill; _hand1 = null; _hand2 = null; MonsterIA.DelGroup(22); if (_manager.MonsterCount() > 1 || !_LeftHand || !_RightHand) { _manager.FailState = true; Trigger(KanturuBattleOfMayaState.End); return; } Trigger(KanturuBattleOfMayaState.EndCycle3, TimeSpan.FromSeconds(5)); break; case KanturuBattleOfMayaState.EndCycle3: Trigger(KanturuBattleOfMayaState.End, TimeSpan.FromSeconds(3)); break; case KanturuBattleOfMayaState.End: Trigger(KanturuBattleOfMayaState.EndCycle, TimeSpan.FromSeconds(3)); if (_manager.FailState) { _manager.SendAll(new SNotice(NoticeType.Gold, ServerMessages.GetMessage(Messages.Kanturu_Fail))); } break; case KanturuBattleOfMayaState.EndCycle: if (!_manager.FailState) { _manager._battleOfNightmare.Initialize(); } else { _manager.Trigger(EventState.Open); } Trigger(KanturuBattleOfMayaState.None); break; } }