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); } }