Ejemplo n.º 1
0
        private void _handleSpellTargetGroup(OldPacket pkt)
        {
            if (OnCastSpellTargetGroup == null)
            {
                return;
            }

            short spellID         = pkt.GetShort();
            short fromPlayerID    = pkt.GetShort();
            short fromPlayerTP    = pkt.GetShort();
            short spellHealthGain = pkt.GetShort();

            var spellTargets = new List <GroupSpellTarget>();

            while (pkt.ReadPos != pkt.Length)
            {
                //malformed packet - eoserv puts 5 '255' bytes between party members
                if (pkt.GetBytes(5).Any(x => x != 255))
                {
                    return;
                }

                spellTargets.Add(new GroupSpellTarget(pkt));
            }

            OnCastSpellTargetGroup(spellID, fromPlayerID, fromPlayerTP, spellHealthGain, spellTargets);
        }
Ejemplo n.º 2
0
        private void _handleInitInit(OldPacket pkt)
        {
            InitReply response = (InitReply)pkt.GetByte();

            switch (response)
            {
            case InitReply.INIT_FRIEND_LIST_PLAYERS:
            case InitReply.INIT_PLAYERS:
                if (!m_client.ExpectingPlayerList)
                {
                    break;
                }
                _handlePlayerList(pkt, response == InitReply.INIT_FRIEND_LIST_PLAYERS);
                break;

            case InitReply.INIT_MAP_MUTATION:
            {
                string localDir = response == InitReply.INIT_FILE_MAP || response == InitReply.INIT_MAP_MUTATION ? "maps" : "pub";

                if (response == InitReply.INIT_MAP_MUTATION)
                {
                    m_init_requestedMap = 0;
                }

                if (!Directory.Exists(localDir))
                {
                    Directory.CreateDirectory(localDir);
                }

                string filename;
                if (response == InitReply.INIT_FILE_EIF)
                {
                    filename = "dat001.eif";
                }
                else if (response == InitReply.INIT_FILE_ENF)
                {
                    filename = "dtn001.enf";
                }
                else if (response == InitReply.INIT_FILE_ESF)
                {
                    filename = "dsl001.esf";
                }
                else if (response == InitReply.INIT_FILE_ECF)
                {
                    filename = "dat001.ecf";
                }
                else
                {
                    filename = $"{m_init_requestedMap,5:D5}.emf";
                }

                using (FileStream fs = File.Create(Path.Combine(localDir, filename)))
                {
                    int dataLen = pkt.Length - 3;
                    if (dataLen == 0)
                    {
                        return;     //trigger error by not setting response event
                    }
                    fs.Write(pkt.GetBytes(dataLen), 0, dataLen);
                }

                if (response == InitReply.INIT_MAP_MUTATION && OnMapMutation != null)
                {
                    OnMapMutation();
                }
            }
            break;
            }

            m_client.ExpectingFile       = false;
            m_client.ExpectingPlayerList = false;
            m_init_responseEvent.Set(); //packet was handled
        }