Ejemplo n.º 1
0
        public void PerformTrade()
        {
            ActorPC target = (ActorPC)C.map.GetActor(I.TradeTarget);

            if (!Config.Instance.AllowGMTrade && (C.Char.GMLevel > 2 || target.GMLevel > 2))
            {
                C.SendMessage("Saga", "GMs are not allowed to trade");
                return;
            }
            else
            {
                //Swap the items and money
                if (target == null)
                {
                    return;
                }
                if (C.TradeMoney > 0)
                {
                    if (I.zeny >= C.TradeMoney)
                    {
                        target.zeny += (uint)C.TradeMoney;
                        I.zeny      -= (uint)C.TradeMoney;
                        if (C.Char.GMLevel > 2 || target.GMLevel > 2)
                        {
                            Logger.gmlogger.WriteLog(C.Char.name + "->" + target.name + " | " + C.TradeMoney + "(zeny)");
                        }
                    }
                    else
                    {
                        C.SendTradeResult(TradeResults.NOT_ENOUGH_MONEY);
                        return;
                    }
                }

                foreach (Item SwapItem in C.TradeItems.Keys)
                {
                    SwapItem.stack = C.TradeItems[SwapItem];
                    C.map.AddItemToActor(target, SwapItem, ITEM_UPDATE_REASON.OTHER);
                    C.map.RemoveItemFromActorPC(I, SwapItem.id, SwapItem.stack, ITEM_UPDATE_REASON.OTHER);
                    if (C.Char.GMLevel > 2 || target.GMLevel > 2)
                    {
                        Logger.gmlogger.WriteLog(C.Char.name + "->" + target.name + " | " + SwapItem.id);
                    }
                }

                if (target.TradeStatus == TradeStatus.TRADE_CONFIRM)
                {
                    target.e.PerformTrade();
                }

                C.SendTradeResult(TradeResults.SUCCESS);
                C.ResetTradeItems(1);
                C.ResetTradeStatus(1);
            }
        }