Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        /// <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();
                }
            }
        }