Exemplo n.º 1
0
        public BarterHUD_Proxy(BarterHUD barterHUD)
        {
            _instance = barterHUD;

            mLeftInventory       = new InstanceFieldAccessor <BarterHUD, Inventory>(_instance, nameof(mLeftInventory));
            mRightInventory      = new InstanceFieldAccessor <BarterHUD, Inventory>(_instance, nameof(mRightInventory));
            mLeftTradeInventory  = new InstanceFieldAccessor <BarterHUD, Inventory>(_instance, nameof(mLeftTradeInventory));
            mRightTradeInventory = new InstanceFieldAccessor <BarterHUD, Inventory>(_instance, nameof(mRightTradeInventory));

            _getSellDiscount    = InstanceMethodAccessor.GetDelegate <DGetSellDiscount>("GetSellDiscount");
            _calcSellCost       = InstanceMethodAccessor.GetDelegate <DCalcSellCost>("CalcSellCost");
            _calcBuyCost        = InstanceMethodAccessor.GetDelegate <DCalcBuyCost>("CalcBuyCost");
            _calcCostItem       = InstanceMethodAccessor.GetDelegate <DCalcCostItem>("CalcCostItem");
            _dropItemToBackpack = InstanceMethodAccessor.GetDelegate <DDropItemToBackpack>("DropItemToBackpack");
        }
Exemplo n.º 2
0
        public String MakeStringCTH(ITargetable target)
        {
            DMakeStringCTH call = s_makeStringCTH ?? (s_makeStringCTH = InstanceMethodAccessor.GetDelegate <DMakeStringCTH>("MakeStringCTH"));

            return(call(_instance, target));
        }
        public static void PlayerHUD_ShowPocket_Prefix(PlayerHUD __instance, CharacterComponent characterComponent, Inventory pocket, Boolean steal, String fraction, ref PocketHUD.PocketEnded notify)
        {
            if (notify == null)
            {
                return;
            }

            if (pocket.Count == 0)
            {
                return;
            }

            List <CharacterComponent> characters = new List <CharacterComponent>();

            foreach (Delegate del in notify.GetInvocationList())
            {
                PocketHUD.PocketEnded invocation = (PocketHUD.PocketEnded)del;
                if (!(invocation.Target is CharacterComponent cc))
                {
                    return;
                }

                if (!cc.IsDead())
                {
                    return;
                }

                characters.Add(cc);
            }

            if (characters.Count == 0)
            {
                return;
            }

            PathCell cell = characters.First().GetCell();

            DMergeItem mergeItem = InstanceMethodAccessor.GetDelegate <DMergeItem>("MergeItem");

            Boolean fromCannibal = characterComponent.Character.CharProto.Stats.HasPerk(CharacterStats.Perk.Cannibal);

            foreach (BehaviorComponent behaviorComponent in Game.World.Behaviors)
            {
                if (!(behaviorComponent is CharacterComponent cc))
                {
                    continue;
                }

                if (!cc.IsDead())
                {
                    continue;
                }

                PathCell otherCell = cc.GetCell();
                var      dx        = otherCell.X - cell.X;
                var      dy        = otherCell.Y - cell.Y;
                var      distance  = Math.Sqrt(dx * dx + dy * dy);
                if (distance > 20)
                {
                    continue;
                }

                if (characters.Contains(cc))
                {
                    continue;
                }

                notify = (PocketHUD.PocketEnded)Delegate.Combine(new PocketHUD.PocketEnded(cc.CkeckSlostsOnClose), notify);
                cc.OnDeadLoot(fromCannibal);

                mergeItem(characterComponent, pocket, cc.Character);
            }
        }