public void HandleConfirmTrade(Character confirmer)
        {
            if (!acceptedInvite || confirmer.dwId == dwFirstLockerId)
            {
                return; // PE
            }
            if (IsOwner(confirmer))
            {
                Partner.SendPacket(PartnerLockPacket());
            }
            else
            {
                Parent.SendPacket(PartnerLockPacket());
            }

            if (dwFirstLockerId > 0)
            {
                if (InventoryManipulator.HasSpace(Parent, tempInvPartner) && InventoryManipulator.HasSpace(Parent, tempInvOwner))
                {
                    CurrentStatus = MR_LeaveResult.TradeDone;
                }
                else
                {
                    CurrentStatus = MR_LeaveResult.TradeFail;
                }
                Destroy();
            }
            else
            {
                dwFirstLockerId = confirmer.dwId;
            }
        }
        private TempInventory tempInvOwner, tempInvPartner; // assigned when request is accepted

        // ----------------------------------------------------- constructor / destructor

        public CTradingRoom(Character owner)
            : base(owner, MR_Type.TradingRoom)
        {
            nCurUsers         = 1;
            nMaxUsers         = 2;
            owner.CurMiniRoom = this;
            expiration        = DateTime.Now.AddMinutes(30);
            CurrentStatus     = MR_LeaveResult.UserRequest;
        }
Exemple #3
0
        public COutPacket PlayerExitPacket(int dwCharId, MR_LeaveResult nReason)
        {
            var p = new COutPacket(SendOps.LP_MiniRoom);

            p.Encode1((byte)(dwCharId == OwnerID ? MR_Action.ESP_WithdrawAllResult : MR_Action.MRP_Leave));
            p.Encode1(GetVisitorIndex(dwCharId));
            p.Encode1((byte)nReason);
            return(p);
        }
Exemple #4
0
        private void VisitorKickAll(MR_LeaveResult nReason)
        {
            foreach (var item in aCurVisitors)
            {
                var pChar = MasterManager.CharacterPool.Get(item);

                if (pChar is object)
                {
                    HandlePlayerExit(pChar, nReason);
                }
            }
        }
        /// <summary>
        /// This is called when a player leaves the room
        /// </summary>
        /// <param name="c"></param>
        /// <param name="nReason"></param>
        public override void HandlePlayerExit(Character c, MR_LeaveResult nReason)
        {
            if (c.dwId != Parent.dwId && c.dwId != Partner?.dwId)
            {
                return; // PE
            }
            if (acceptedInvite)
            {
                CurrentStatus = MR_LeaveResult.Closed;
            }

            Destroy();
        }
Exemple #6
0
        public override void HandlePlayerExit(Character c, MR_LeaveResult nReason = MR_LeaveResult.UserRequest)
        {
            c.CurMiniRoom = null;

            if (aCurVisitors.Contains(c.dwId))
            {
                c.SendMessage("Index Exit: " + GetVisitorIndex(c.dwId));

                aCurVisitors[GetVisitorIndex(c.dwId)] = 0;
                c.SendPacket(PlayerExitPacket(c.dwId, nReason));

                if (OwnerID == c.dwId)
                {
                    aCurVisitors[0] = 0; // hax
                    nCurUsers       = 0;
                    ShopOpen        = true;
                }
                else
                {
                    nCurUsers = (byte)Math.Max(0, nCurUsers - 1);
                }
            }
        }
Exemple #7
0
 public virtual void HandlePlayerExit(Character c, MR_LeaveResult nResult)
 {
     nCurUsers -= 1;
     c.CurMiniRoom = null;
 }
Exemple #8
0
 public override void HandlePlayerExit(Character c, MR_LeaveResult nReason)
 {
     throw new NotImplementedException();
 }