コード例 #1
0
        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);
        }
コード例 #2
0
        // 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);
        }
コード例 #3
0
        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);
                        }
                    }
                }
            }
        }