public static void Prefix(LootableOnDeath __instance, ref bool __0) { if (!ShouldGenLoot(__instance, ref __0)) { return; } ItemContainer container = __instance.Character.Inventory.Pouch; LootUtils.TryGenerateLoot(container, __instance.Character, DiabloItemExtension.ItemSource.MobDrop); }
// this needs to be checked after updates. Any slight error and loot will either INFINITELY drop, or NEVER. private static bool ShouldGenLoot(LootableOnDeath __instance, ref bool __0) { bool loadedead = __0; bool wasalive = Fields.INSTANCE.LootableOnDeath_WasAlive.GetValue(__instance); if ((!PhotonNetwork.isNonMasterClientInRoom && !__instance.Character.Alive) || (PhotonNetwork.isNonMasterClientInRoom && __instance.Character.IsDead && wasalive)) { if (!loadedead && !PhotonNetwork.isNonMasterClientInRoom) { Log.Debug("Generating mob loot"); return(true); } } Log.Debug("Can't gen mob loot"); return(false); }
public static void Prefix(LootableOnDeath __instance, bool _loadedDead) { if (_loadedDead || !__instance.enabled || PhotonNetwork.isNonMasterClientInRoom || !SL_DropTableAddition.s_registeredDropTableSources.Any()) { return; } var m_character = At.GetField(__instance, "m_character") as Character; if (!m_character) { return; } bool wasAlive = (bool)At.GetField(__instance, "m_wasAlive"); if (!m_character.Alive || (m_character.IsDead && wasAlive)) { var drops = (Dropable[])At.GetField(__instance, "m_lootDroppers"); if (drops == null || !drops.Any()) { return; } foreach (var dropable in drops) { foreach (var dropAddition in SL_DropTableAddition.s_registeredDropTableSources) { if (dropAddition.IsTargeting(dropable.name)) { dropAddition.GenerateItems(m_character.Inventory.Pouch.transform); } } } } }