Beispiel #1
0
        public Result <bool> ValidateSellItemToVendor(PhotonView identity, byte[] vendorGuidBytes, Guid vendorGuid, byte[] itemGuidBytes, Guid itemGuid, ushort amount, out INetworkVendor <IItemInstance> outVendor, out INetworkItemInstance outItem)
        {
            outVendor = null;
            outItem   = null;
            if (CheckGuidBytes(vendorGuidBytes) == false ||
                CheckGuidBytes(itemGuidBytes) == false)
            {
                return(Failed());
            }

            outItem   = ServerItemRegistry.Get(itemGuid) as INetworkItemInstance;
            outVendor = ServerVendorRegistry.itemVendors.Get(vendorGuid);
            if (outItem == null || outVendor == null)
            {
                return(Failed());
            }

            // Item has to be in a collection to be sellable.
            if (outItem.collectionEntry?.collection == null)
            {
                return(Failed());
            }

            if (outItem.collectionEntry.amount < amount)
            {
                return(Failed());
            }

            return(true);
        }
Beispiel #2
0
        public Result <bool> ValidateBuyItemFromVendor(PhotonView identity, byte[] vendorGuidBytes, Guid vendorGuid, byte[] itemGuidBytes, Guid itemGuid, ushort amount, out INetworkVendor <IItemInstance> outVendor, out INetworkItemInstance outItem)
        {
            outVendor = null;
            outItem   = null;
            if (CheckGuidBytes(vendorGuidBytes) == false ||
                CheckGuidBytes(itemGuidBytes) == false)
            {
                return(Failed());
            }

            outItem   = ServerItemRegistry.Get(itemGuid) as INetworkItemInstance;
            outVendor = ServerVendorRegistry.itemVendors.Get(vendorGuid);
            if (outItem == null || outVendor == null)
            {
                return(Failed());
            }

            var tempItem         = outItem;
            var vendorItemAmount = outVendor.itemCollection.GetAmount(o => o?.ID == tempItem.ID);

            if (vendorItemAmount < amount)
            {
                return(Failed());
            }

            // Check if player has read permission to vendor collection
            if (CheckClientVendorPermission(identity, outVendor, outItem) == false)
            {
                return(Failed());
            }

            return(true);
        }
Beispiel #3
0
        public Result <bool> ValidateSellItemToVendor(NetworkIdentity identity, RequestSellItemToVendorMessage data, out INetworkVendor <IItemInstance> outVendor, out INetworkItemInstance outItem)
        {
            outVendor = null;
            outItem   = null;
            if (CheckGuidBytes(data.vendorGuid.bytes) == false ||
                CheckGuidBytes(data.itemGuid.bytes) == false)
            {
                return(Failed());
            }

            outItem   = ServerItemRegistry.Get(data.itemGuid) as INetworkItemInstance;
            outVendor = ServerVendorRegistry.itemVendors.Get(data.vendorGuid);
            if (outItem == null || outVendor == null)
            {
                return(Failed());
            }

            // Item has to be in a collection to be sellable.
            if (outItem.collectionEntry?.collection == null)
            {
                return(Failed());
            }

            if (outItem.collectionEntry.amount < data.amount)
            {
                return(Failed());
            }

            return(true);
        }
Beispiel #4
0
        public Result <bool> ValidateBuyItemFromVendor(NetworkIdentity identity, RequestBuyItemFromVendorMessage data, out INetworkVendor <IItemInstance> outVendor, out INetworkItemInstance outItem)
        {
            outVendor = null;
            outItem   = null;
            if (CheckGuidBytes(data.vendorGuid.bytes) == false ||
                CheckGuidBytes(data.itemGuid.bytes) == false)
            {
                return(Failed());
            }

            outItem   = ServerItemRegistry.Get(data.itemGuid) as INetworkItemInstance;
            outVendor = ServerVendorRegistry.itemVendors.Get(data.vendorGuid);
            if (outItem == null || outVendor == null)
            {
                return(Failed());
            }

            var tempItem         = outItem;
            var vendorItemAmount = outVendor.itemCollection.GetAmount(o => o?.ID == tempItem.ID);

            if (vendorItemAmount < data.amount)
            {
                return(Failed());
            }

            // Check if player has read permission to vendor collection
            if (CheckClientVendorPermission(identity, outVendor, outItem) == false)
            {
                return(Failed());
            }

            return(true);
        }
        private void OnGUI()
        {
            _source  = (Source)EditorGUILayout.EnumPopup("Source", _source);
            itemGuid = EditorGUILayout.TextField("Item GUID", itemGuid);

            _scrollPosition = GUILayout.BeginScrollView(_scrollPosition, false, true);

            if (string.IsNullOrEmpty(itemGuid))
            {
                if (_source == Source.Server)
                {
                    var items = ServerItemRegistry.GetAll();
                    foreach (var item in items)
                    {
                        DrawItemInfo(item);
                    }
                }
                else if (_source == Source.Client)
                {
                    var items = ItemRegistry.GetAll();
                    foreach (var item in items)
                    {
                        DrawItemInfo(item);
                    }
                }
            }
            else
            {
                System.Guid guid;
                if (System.Guid.TryParse(itemGuid, out guid))
                {
                    if (_source == Source.Server)
                    {
                        var item = ServerItemRegistry.Get(guid);
                        DrawItemInfo(item);
                    }
                    else if (_source == Source.Client)
                    {
                        var col = ItemRegistry.Get(guid);
                        DrawItemInfo(col);
                    }
                }
                else
                {
                    EditorGUILayout.LabelField("guid is not a valid parsable GUID value");
                }
            }

            EditorGUILayout.EndScrollView();
        }
Beispiel #6
0
        private bool CheckItemPermission(PhotonView identity, System.Guid itemGuid, ReadWritePermission minimalPermission, out INetworkItemInstance outItem)
        {
            outItem = ServerItemRegistry.Get(itemGuid) as INetworkItemInstance;
            if (outItem?.collectionEntry?.collection == null)
            {
                return(false);
            }

            if (CheckCollectionPermission(identity, outItem.collectionEntry.collection, minimalPermission) == false)
            {
                return(false);
            }

            return(true);
        }
        public void Server_CleanDanglingItemReferences()
        {
            var all = ServerItemRegistry.GetAll();

            foreach (var item in all)
            {
                var entry = item as ICollectionSlotEntry;
                if (entry != null && entry.collectionEntry != null)
                {
                    if (entry.collectionEntry.amount == 0)
                    {
                        // Item is depleted, yet still exists and has a reference to a collection (itemGuid could be filled by other item now).
                        ServerItemRegistry.UnRegister(item.ID);
                        ItemRegistry.UnRegister(item.ID);
                        logger.Log($"[Server] Cleaned dangling item {item.ID} from item registry", this);
                    }
                }
            }
        }