public void NetworkTask(AmbuscadeTaskType task, int parameter = 0) { if (!_ambuscade) { return; } if (!job.Tracking()) { job.TrackBuffs(true); } switch (task) { case AmbuscadeTaskType.GotoMonsterZone: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); DoRoute(_route2); NavigateToZone(_hpMenuItemString, 41); client.Send("DOCK_ROE"); WriteLog($"[REPLY] >> TASK COMPLETED ({task})"); break; } case AmbuscadeTaskType.ReturnHome: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); ReturnHome(); client.Send("DOCK_MHAURA"); WriteLog($"[REPLY] >> TASK COMPLETED ({task})"); break; } case AmbuscadeTaskType.Fight: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); if (fface.Player.Zone == Zone.Maquette_Abdhaljs_Legion) { _hasKeyItem = false; _initialKeyItem = false; _KeyCapped = false; } Fight(parameter, Combat.Mode.None); WriteLog($"[REPLY] >> TASK COMPLETED ({task})"); break; } case AmbuscadeTaskType.CancelEngage: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); Combat.Interrupt(); WriteLog($"[REPLY] >> TASK COMPLETED ({task})"); break; } case AmbuscadeTaskType.ObtainKI: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); ObtainKI(); client.Send("DOCK_KI"); WriteLog($"[REPLY] >> TASK COMPLETED ({task}) (Everyone has a KI!)"); break; } case AmbuscadeTaskType.CappedKI: { WriteLog($"[TASK] >> PERFORMING ({task}) ..."); _KeyCapped = true; if (Combat.InCombat) { WriteLog("[TASK INFO] I'm in Combat, and attempting to stop Combat!"); Combat.Interrupt(); } else { WriteLog("[TASK INFO] I'm not currently in combat! .. Waiting for CappedKI to Complete"); } if (!job.Engages() && Combat.InCombat) { WriteLog("[TASK INFO INNER] Attempting to Interrupt Combat..."); Combat.Interrupt(); } WriteLog($"[REPLY] >> TASK COMPLETED ({task})"); break; } default: throw new ArgumentOutOfRangeException(nameof(task), task, null); } WriteLog("[TASK] >> IDLE. Waiting for a new task..."); _inTask = false; }
/// <summary> /// Data read from the network socket. /// </summary> /// <param name="ci">The ClientInfo the read belongs to.</param> /// <param name="text">The string of data that was read, appended with \r\n.</param> private void ReadData(ClientInfo ci, string text) { text = text.Replace(Environment.NewLine, "|"); string[] packets = text.Split('|'); text = packets[0]; string[] token = text.Split(' '); WriteLog($"[RAW]: {text}"); //using (StreamWriter w = File.AppendText("log.txt")) //{ //w.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss tt") + "]: " + text); //w.WriteLine("---------------------"); //WriteLog("---------------------"); //} //if (token[0] == "AWAIT_STUN") //{ // WriteLog("[STAHP] =========== I AM UP FOR STUN ======="); // _AwaitingStun = true; // job.SetHaltActions(true); //} //if (token[0] == "STOP_AWAIT_STUN") //{ // WriteLog("[STAHP] =========== I /NOT/ UP FOR STUN ======="); // _AwaitingStun = false; // job.SetHaltActions(false); //} if (token[0] == "GAIN_BUFF") { job.MemberGainEffect(token[1], JobRole.Damage, (StatusEffect)Convert.ToInt32(token[2])); } if (token[0] == "LOSE_BUFF") { job.MemberLoseEffect(token[1], JobRole.Damage, (StatusEffect)Convert.ToInt32(token[2])); } if (text != "PING!") { //WriteLog("[DEBUG_S>>] " + text); } // Always reply to ping. if (token[0] == "PING!" || (packets.Length >= 2 && packets[1] == "PING!")) { //WriteLog("[REPLY] >> PONG"); client.Send("PONG"); } if (token[0] == "PROCEED" && _Leader) { _proceed = true; } if (token[0] == "KEY_CAP" && _Leader) { _KeyCapped = true; } if (token[0] == "LIST") { string[] members = token[2].Split(','); foreach (string member in members) { } } if (token[0] == "MEMBER") { if (token[1] == "0") { WriteLog("[PARTY JOIN]: " + token[2]); } if (token[1] == "1") { WriteLog("[PARTY PART]: " + token[2]); } if (token[1] == "2") { WriteLog("[PARTY STOP]: " + token[2]); EndAmbuscade(); } if (token[1] == "3") { WriteLog("[PARTY WAIT]: Waiting for the party leader to Connect..."); } } if (token[0] == "TASK" && !_Leader) { // When the server requests a new task, let's run it on another thread. if (!_inTask) { // task is always an int. AmbuscadeTaskType task = (AmbuscadeTaskType)Convert.ToInt32(token[1]); // parameter is usually a monster ID. int parameter = token.Count() == 3 ? Convert.ToInt32(token[2]) : 0; _task = new Thread(() => NetworkTask(task, parameter)); _task.Start(); } } }