void ReadLootInfo(string LootID) { SqlCommand sqcmd = new SqlCommand(); sqcmd.CommandType = CommandType.StoredProcedure; sqcmd.CommandText = "WO_LootGetData"; sqcmd.Parameters.AddWithValue("@in_LootID", LootID); if (!CallWOApi(sqcmd)) { return; } // get item category reader.Read(); category_ = getInt("Category"); // get content reader.NextResult(); while (reader.Read()) { LootEntry le = new LootEntry(); le.Chance = Convert.ToDouble(reader["Chance"]); le.ItemID = Convert.ToInt32(reader["ItemID"]); le.ExpDaysMin = Convert.ToInt32(reader["ExpDaysMin"]); le.ExpDaysMax = Convert.ToInt32(reader["ExpDaysMax"]); le.GDMin = Convert.ToInt32(reader["GDMin"]); le.GDMax = Convert.ToInt32(reader["GDMax"]); le.GDIfHave = Convert.ToInt32(reader["GDIfHave"]); loots_.Add(le); } if (loots_.Count == 0) { throw new ApiExitException("loot box is empty"); } // renormalize double Sum = 0.0; foreach (LootEntry le in loots_) { Sum += le.Chance; } foreach (LootEntry le in loots_) { le.Chance /= Sum; } // bring to [0..1] Sum = loots_[0].Chance; for (int i = 1; i < loots_.Count; i++) { double Chance = loots_[i].Chance; loots_[i].Chance += Sum; Sum += Chance; } }
public static List <ItemDefinition> GenerateLoot(List <LootDefinition> battleLoot, RaidInfo raid) { List <ItemDefinition> lootItems = new List <ItemDefinition>(); for (int i = 0; i < battleLoot.Count; i++) { for (int j = 0; j < battleLoot[i].Count; j++) { LootEntry entry = GetLootEntry(battleLoot[i].Code, raid); switch (entry.Type) { case LootType.Item: LootEntryItem itemEntry = entry as LootEntryItem; ItemDefinition data = new ItemDefinition(); data.Type = itemEntry.ItemType; data.Id = itemEntry.ItemId; data.Amount = itemEntry.ItemAmount; lootItems.Add(data); break; case LootType.Journal: LootEntryJournal journalEntry = entry as LootEntryJournal; ItemDefinition dataJournal = new ItemDefinition(); dataJournal.Type = "journal_page"; if (journalEntry.SpecificId.HasValue) { dataJournal.Id = journalEntry.SpecificId.Value.ToString(); } else { dataJournal.Id = RandomSolver.Next(journalEntry.MinIndex, journalEntry.MaxIndex + 1).ToString(); } dataJournal.Amount = 1; lootItems.Add(dataJournal); break; case LootType.Trinket: LootEntryTrinket trinketEntry = entry as LootEntryTrinket; var trinketList = DarkestDungeonManager.Data.Items["trinket"].Values.ToList(). FindAll(trinket => ((Trinket)trinket).RarityId == trinketEntry.Rarity); Trinket trinketItem = (Trinket)trinketList[RandomSolver.Next(trinketList.Count)]; ItemDefinition trinketDef = new ItemDefinition(); trinketDef.Type = trinketItem.Type; trinketDef.Id = trinketItem.Id; trinketDef.Amount = trinketDef.Amount; lootItems.Add(trinketDef); break; case LootType.Nothing: break; } } } return(lootItems); }
private static LootEntry GetLootEntry(string tableId, RaidInfo raid) { LootTable lootTable = LootDatabase.LootTables[tableId.ToUpper()]. Find(table => ((table.Difficulty == raid.Quest.Difficulty) || (table.Difficulty == 0)) && ((table.Dungeon == raid.Dungeon.Name) || (table.Dungeon == ""))); LootEntry lootEntry = RandomSolver.ChooseBySingleRandom(lootTable.Entries); return(lootEntry.Type != LootType.Table ? lootEntry : GetLootEntry(((LootEntryTable)lootEntry).TableId, raid)); }
public static LootEntry FindLooter(Mobile from) { for (int i = 0; i < m_Table.Count; i++) { if (from == m_Table[i].Looter) { return(m_Table[i]); } } var entry = new LootEntry(from); m_Table.Add(entry); return(entry); }
void OnLootEntity(BasePlayer looter, BaseEntity entity) { if (looter == null || entity == null || !IsValidType(entity)) { return; } var time = GrabCurrentTime(); var date = DateTime.Now.ToString("d/M HH:mm:ss"); var lootEntry = new LootEntry { FirstLoot = date, LastInit = time, LastLoot = date, Name = looter.displayName }; if (entity is BasePlayer) { var looted = entity.ToPlayer(); if (!playerCache.ContainsKey(looted.userID)) { playerCache.Add(looted.userID, new PlayerData(time, looter)); } else { playerCache[looted.userID].lastInit = time; playerCache[looted.userID].AddLoot(looter, time, date); } } else { if (entity?.net?.ID == null) { return; } var boxId = entity.net.ID; if (!boxCache.ContainsKey(boxId)) { boxCache.Add(boxId, new BoxData(time, looter, entity.transform.position)); } else { boxCache[boxId].lastInit = time; boxCache[boxId].AddLoot(looter, time, date); } } }
public static void RegisterFastloot(Mobile from, TimeSpan lootTime) { if (from == null || !(from is PlayerMobile)) { return; } LootEntry entry = FindLooter(from); entry.Count++; if (lootTime < entry.Fastest) { entry.Fastest = lootTime; } }
public void AddEntry(BasePlayer player, string date) { LootEntry lastEntry = null; try { lastEntry = looters.Single(x => x.userId == player.UserIDString); } catch { } if (lastEntry != null) { looters.Remove(lastEntry); lastEntry.lastLoot = date; } else { if (looters.Count == ins.configData.RecordsPerContainer) { looters.Remove(looters.ElementAt(0)); } lastEntry = new LootEntry(player, date); } looters.Add(lastEntry); }