public static uint ConvertToClientOption(DeadMenuOptions option) { uint opt = (uint)option; // Avoid backfill uint count = 0; while (opt != 0) { count++; opt >>= 1; } return count; }
/// <summary> /// Broadcasts Phoenix Feather above dead creature effect in creature's range. /// </summary> /// <param name="client"></param> /// <param name="creature"></param> public static void DeadFeather(MabiCreature creature, DeadMenuOptions options) { var bits = (uint)options; var flags = new List<uint>(); // Break down options bit by bit, and add them to flags if set. for (uint i = 1; bits != 0; ++i, bits >>= 1) { if ((bits & 1) != 0) flags.Add(i); } var packet = new MabiPacket(Op.DeadFeather, creature.Id); packet.PutShort((ushort)flags.Count); foreach (var f in flags) packet.PutInt(f); packet.PutByte(0); WorldManager.Instance.Broadcast(packet, SendTargets.Range, creature); }
/// <summary> /// Text-ifys the options. If more than one flag is set, the order of the /// options returned is abitrary /// </summary> /// <param name="options"></param> /// <returns></returns> public static IEnumerable<string> GetStrings(DeadMenuOptions options) { List<string> ret = new List<string>(); if ((options & DeadMenuOptions.ArenaLobby) != 0) ret.Add("arena_lobby"); if ((options & DeadMenuOptions.ArenaSide) != 0) ret.Add("arena_side"); if ((options & DeadMenuOptions.ArenaWaitingRoom) != 0) ret.Add("arena_waiting"); if ((options & DeadMenuOptions.BarriLobby) != 0) ret.Add("barri_lobby"); if ((options & DeadMenuOptions.NaoStone) != 0) ret.Add("naocoupon"); if ((options & DeadMenuOptions.DungeonEntrance) != 0) ret.Add("dungeon_lobby"); if ((options & DeadMenuOptions.Here) != 0) ret.Add("here"); if ((options & DeadMenuOptions.HereNoPenalty) != 0) ret.Add("trnsfrm_pvp_here"); if ((options & DeadMenuOptions.HerePvP) != 0) ret.Add("showdown_pvp_here"); if ((options & DeadMenuOptions.InCamp) != 0) ret.Add("camp"); if ((options & DeadMenuOptions.StatueOfGoddess) != 0) ret.Add("dungeon_statue"); if ((options & DeadMenuOptions.TirChonaill) != 0) ret.Add("tirchonaill"); if ((options & DeadMenuOptions.Town) != 0) ret.Add("town"); if ((options & DeadMenuOptions.WaitForRescue) != 0) ret.Add("stay"); return ret; }