Esempio n. 1
0
        private void Start()
        {
            PUN2Vendor <IItemInstance> _vendor = null;

            if (PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                collection = PUN2CollectionUtility.CreateServerVendorItemCollection(Math.Max(this._itemDefs.Length, this._slotCount), _vendorCollectionName, _vendorCollectionGuid.guid, this.photonView);
                foreach (var itemDef in _itemDefs)
                {
                    if (itemDef == null)
                    {
                        continue;
                    }

                    var inst = ItemFactory.CreateInstance(itemDef, Guid.NewGuid());
                    var prod = new VendorProduct <IItemInstance>(inst, itemDef.buyPrice, itemDef.sellPrice);
                    collection.Add(prod);
                }

                _vendor = new PUN2Vendor <IItemInstance>(_vendorGuid.guid, _vendorCollectionName, _vendorCollectionGuid.guid, _config, this.photonView, collection, new InfiniteCurrencyCollection()); // TODO: Make currency customizable

                //if (PhotonNetwork.LocalPlayer.IsMasterClient)
                ServerVendorRegistry.itemVendors.Register(_vendorGuid.guid, _vendor);
            }

            // Create on new vendor here for "client" purposes. This way, changing one vendor ('client' or 'server') doesn't affect the other.
            _vendor = new PUN2Vendor <IItemInstance>(_vendorGuid.guid, _vendorCollectionName, _vendorCollectionGuid.guid, _config, this.photonView, collection, new InfiniteCurrencyCollection()); // TODO: Make currency customizable
            VendorRegistry.itemVendors.Register(_vendorGuid.guid, _vendor);
        }
Esempio n. 2
0
        public PUN2ServerEquipmentCollection <IEquippableItemInstance> Server_AddEquipmentCollectionToServer(string collectionName, Guid collectionGuid, UnitySerializedEquipmentCollectionSlot[] slots)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return(null);
            }

            logger.Log($"[Server][ViewId: {this.photonView.ViewID}] {nameof(Server_AddEquipmentCollectionToServer)}(collectionName: {collectionName}, collectionGuid: {collectionGuid}, slots: {slots.Length}, owner: {this.photonView.ViewID})", this);

            var col = collectionFinder.GetServerCollection(collectionGuid) as PUN2ServerEquipmentCollection <IEquippableItemInstance>;

            if (col == null)
            {
                var equippableCharacter = GetComponent <IEquippableCharacter <IEquippableItemInstance> >();

                EquipmentCollectionSlot <IEquippableItemInstance>[] parsedSlots = new EquipmentCollectionSlot <IEquippableItemInstance> [slots.Length];
                for (int i = 0; i < slots.Length; ++i)
                {
                    parsedSlots[i] = new EquipmentCollectionSlot <IEquippableItemInstance>();
                    parsedSlots[i].equipmentTypes = slots[i].equipmentTypes.Select(g => g.ID).Select(g => _equipmentTypeDatabase.Get(new Identifier(g)).result).Cast <UnityEquipmentType>().ToArray();
                }

                col = PUN2CollectionUtility.CreateServerEquipmentCollection(collectionName, collectionGuid, this.photonView, parsedSlots, equippableCharacter);
            }

            return(col);
        }
Esempio n. 3
0
        public void TargetRpc_AddEquipmentCollection(PhotonView owner, string collectionName, Guid collectionGuid, EquipmentCollectionSlot <IEquippableItemInstance>[] slots)
        {
            var collection = PUN2ActionsBridge.collectionFinder.GetClientCollection(collectionGuid);

            if (collection == null)
            {
                var equippableCharacter = bridge.GetComponent <IEquippableCharacter <IEquippableItemInstance> >();
                var restoreItemsToGroup = bridge.GetComponent <IInventoryCollectionOwner>().itemCollectionGroup;
                /*collection = */ PUN2CollectionUtility.CreateClientEquipmentCollection(collectionName, collectionGuid, owner, bridge, slots, equippableCharacter);
            }
        }
Esempio n. 4
0
        public PUN2ClientCollection <IVendorProduct <IItemInstance> > TargetRpc_AddVendorItemCollection(PhotonView owner, string collectionName, Guid collectionGuid, ushort slotCount)
        {
            logger.LogVerbose($"[Client] Server requested to add vendor item collection '{collectionName}' with Guid '{collectionGuid}' and slot count {slotCount}. ViewID: {bridge.photonView.ViewID}", bridge);

            var collection = PUN2ActionsBridge.collectionFinder.GetClientCollection(collectionGuid) as PUN2ClientCollection <IVendorProduct <IItemInstance> >;

            if (collection == null)
            {
                collection = PUN2CollectionUtility.CreateClientVendorItemCollection(slotCount, collectionName, collectionGuid, owner, bridge);
            }

            return(collection);
        }
Esempio n. 5
0
        public PUN2ServerCollection <IItemInstance> Server_AddCollectionToServer(string collectionName, Guid collectionGuid, int slotCount)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return(null);
            }

            logger.Log($"[Server][ViewId: {this.photonView.ViewID}] {nameof(Server_AddCollectionToServer)}(collectionGuid: {collectionName}, collectionGuid: {collectionGuid}, slotCount: {slotCount})", this);

            // NOTE: The collection might already exist server side on the target objects (for example, a trigger)

            var col = collectionFinder.GetServerCollection(collectionGuid) as PUN2ServerCollection <IItemInstance>;

            if (col == null)
            {
                col = PUN2CollectionUtility.CreateServerItemCollection(slotCount, collectionName, collectionGuid, this.photonView /*data.owner*/);
            }

            return(col);
        }