Exemplo n.º 1
0
        internal void DropItem(BaseItem p_item)
        {
            Party party = LegacyLogic.Instance.WorldManager.Party;

            if (party != null && p_item != null)
            {
                PartyInventoryController partyInventoryController = party.Inventory;
                if (!partyInventoryController.CanAddItem(p_item))
                {
                    partyInventoryController = (PartyInventoryController)party.GetOtherInventory(partyInventoryController);
                }
                if (partyInventoryController.CanAddItem(p_item))
                {
                    if (p_item is Equipment)
                    {
                        LegacyLogic.Instance.WorldManager.HintManager.TriggerHint(EHintType.EQUIPMENT);
                    }
                    partyInventoryController.AddItem(p_item);
                    if (p_item is Equipment && !((Equipment)p_item).Identified && !((Equipment)p_item).IsRelic())
                    {
                        LegacyLogic.Instance.CharacterBarkHandler.RandomPartyMemberBark(EBarks.UNIDENTIFIED_ITEM);
                    }
                    if (p_item is Equipment && ((Equipment)p_item).IsRelic())
                    {
                        LegacyLogic.Instance.CharacterBarkHandler.RandomPartyMemberBark(EBarks.RELIC);
                    }
                    if (m_monster != null)
                    {
                        MonsterLootEntryEventArgs monsterLootEntryEventArgs = new MonsterLootEntryEventArgs(m_monster);
                        monsterLootEntryEventArgs.Item = p_item;
                        m_monsterLootEntries.Add(monsterLootEntryEventArgs);
                        LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.PARTY_GET_LOOT, monsterLootEntryEventArgs);
                    }
                    else if (m_quest != null)
                    {
                        QuestLootEntryEventArgs questLootEntryEventArgs = new QuestLootEntryEventArgs(m_quest);
                        questLootEntryEventArgs.Item = p_item;
                        LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.PARTY_GET_LOOT, questLootEntryEventArgs);
                    }
                }
                else if (m_monster != null || m_quest != null)
                {
                    if (!m_inventoryFullBarkTriggered)
                    {
                        m_inventoryFullBarkTriggered = true;
                        LegacyLogic.Instance.CharacterBarkHandler.RandomPartyMemberBark(EBarks.INVENTORY_FULL);
                    }
                    GridSlot slot = LegacyLogic.Instance.MapLoader.Grid.GetSlot(party.Position);
                    List <InteractiveObject> passiveInteractiveObjects = slot.GetPassiveInteractiveObjects(EDirection.CENTER, false, false, false);
                    Container container = null;
                    foreach (InteractiveObject interactiveObject in passiveInteractiveObjects)
                    {
                        Container container2 = interactiveObject as Container;
                        if (container2 != null && container2.ContainerType == EContainerType.LOOT_BAG)
                        {
                            container = container2;
                            break;
                        }
                    }
                    if (container == null)
                    {
                        Int32        nextDynamicSpawnID = LegacyLogic.Instance.WorldManager.GetNextDynamicSpawnID();
                        SpawnCommand spawnCommand       = new SpawnCommand();
                        spawnCommand.Type          = EInteraction.OPEN_CONTAINER;
                        spawnCommand.Precondition  = "NONE";
                        spawnCommand.Timing        = EInteractionTiming.ON_EXECUTE;
                        spawnCommand.RequiredState = EInteractiveObjectState.NONE;
                        spawnCommand.ActivateCount = -1;
                        spawnCommand.TargetSpawnID = nextDynamicSpawnID;
                        container          = new Container(8, nextDynamicSpawnID);
                        container.Location = EDirection.CENTER;
                        container.Position = party.Position;
                        container.Prefab   = "Prefabs/InteractiveObjects/LootContainer/Lootbag/Lootbag";
                        container.Commands.Add(spawnCommand);
                        container.ContainerType = EContainerType.LOOT_BAG;
                        slot.AddInteractiveObject(container);
                        LegacyLogic.Instance.WorldManager.SpawnObject(container, party.Position);
                    }
                    container.Content.AddItem(p_item);
                    if (m_monster != null)
                    {
                        LegacyLogic.Instance.ActionLog.PushEntry(new MonsterLootEntryEventArgs(m_monster));
                    }
                    else if (m_quest != null)
                    {
                        LegacyLogic.Instance.ActionLog.PushEntry(new QuestLootEntryEventArgs(m_quest));
                    }
                }
            }
        }