private Flags.ItemTypes GetRandomItem(Client collector) { int position = 0; foreach (Client client in Server.GetClientList().OrderByDescending(c => c.Leprechaun.RainbowProgress)) { if (client == collector) { break; } position++; } float specialProbability = Config.ItemsSpecialItemProbability[position] / 100.0f; float pigRobberyProb = specialProbability * Config.ItemsProbabilityFactorPigRobbery; float invulnerabilityProb = specialProbability - pigRobberyProb; float[] propabilities = new float[(int)Flags.ItemTypes.Count]; float propabilityPerNormalItem = (1.0f - specialProbability) / (propabilities.Length - 3); propabilities[0] = 0; for (int i = 1; i < propabilities.Length - 2; ++i) { propabilities[i] = propabilities[i - 1] + propabilityPerNormalItem; } propabilities[propabilities.Length - 2] = propabilities[propabilities.Length - 3] + invulnerabilityProb; propabilities[propabilities.Length - 1] = 1.0f; float r = (float)random.NextDouble(); Flags.ItemTypes item = 0; for (int i = 1; i < propabilities.Length; ++i) { if (r <= propabilities[i]) { item = (Flags.ItemTypes)i; break; } } return(item); }
public NetworkPacketCollectItem(byte itemId, Flags.ItemTypes itemType) : base(NetworkPacketTypes.CollectItem, itemId, size) { ItemType = itemType; }