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); }
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 }