コード例 #1
0
        public void BuyItem(PlayerItemData item)
        {
            item.Unlocked = true;
            playerItemLoader.Save(item);

            UseItem(item);
        }
コード例 #2
0
        public void AddClubSystem(PlayerItemData Item)
        {
            PlayerTransactionData Tran;

            if ((Item == null))
            {
                return;
            }
            Tran = new PlayerTransactionData()
            {
                Types          = 0xCC,
                TypeID         = Item.ItemTypeID,
                Index          = Item.ItemIndex,
                PreviousQuan   = 0,
                NewQuan        = 0,
                UCC            = string.Empty,
                C0_SLOT        = Item.ItemC0Slot,
                C1_SLOT        = Item.ItemC1Slot,
                C2_SLOT        = Item.ItemC2Slot,
                C3_SLOT        = Item.ItemC3Slot,
                C4_SLOT        = Item.ItemC4Slot,
                ClubPoint      = (uint)Item.ItemClubPoint,
                WorkshopCount  = (uint)Item.ItemClubWorkCount,
                CancelledCount = (uint)Item.ItemClubSlotCancelledCount
            };
            this.AddInfo(Tran);
        }
コード例 #3
0
        public void ResetInventory()
        {
            // For items already in the player inventory reset the amount to the initialValue.

            foreach (PlayerItemData playerItem in SpilUnityEditorImplementation.pData.Inventory.items)
            {
                int initialValue = SpilUnityEditorImplementation.gData.items.FirstOrDefault(a => a.id == playerItem.id).initialValue;
                int newDelta     = initialValue - playerItem.amount;

                playerItem.amount = initialValue;
                playerItem.delta  = newDelta + playerItem.delta;
            }

            // Check the items in the game data, if an item is not currently in the inventory but has an initialvalue > 0 then add it.

            foreach (SpilItemData gameDataItem in SpilUnityEditorImplementation.gData.items)
            {
                if (gameDataItem.initialValue > 0 && !SpilUnityEditorImplementation.pData.Inventory.items.Any(a => a.id == gameDataItem.id))
                {
                    PlayerItemData playerItem = new PlayerItemData(gameDataItem);

                    playerItem.amount = gameDataItem.initialValue;
                    playerItem.delta  = gameDataItem.initialValue;

                    SpilUnityEditorImplementation.pData.Inventory.items.Add(playerItem);
                }
            }
        }
コード例 #4
0
        public void Init(PlayerItemData data)
        {
            Item = data;

            UpdateAppearance();

            image.sprite = data.Image.Image;
            image.color  = data.Image.Color;
            image.rectTransform.rotation = Quaternion.Euler(0f, 0f, data.Image.Rotation);
        }
コード例 #5
0
        public PlayerItemData[] Load(PlayerItemConfig[] configs)
        {
            var result = new PlayerItemData[configs.Length];

            for (int i = 0; i < configs.Length; i++)
            {
                result[i] = Load(configs[i]);
            }

            return(result);
        }
コード例 #6
0
 private void UpdateItem(PlayerItemData item)
 {
     foreach (PlayerItemData playerItem in Inventory.items)
     {
         if (playerItem.id != item.id)
         {
             continue;
         }
         playerItem.amount = item.amount;
         playerItem.delta  = item.delta;
     }
 }
コード例 #7
0
        private bool Contains(PlayerItemData[] items, PlayerItemData searched)
        {
            foreach (var item in items)
            {
                if (item.Id.Equals(searched.Id))
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #8
0
        public AddData AddRent(uint TypeID, ushort Day = 7)
        {
            object  PRent;
            AddData Result;

            Result = new AddData()
            {
                Status = false
            };

            if (!(GetItemGroup(TypeID) == 2))
            {
                return(Result);
            }
            var _db = new PangyaEntities();
            var Add = _db.ProcAddRent((int)UID, (int)TypeID, Day).ToList();

            if (Add.Count <= 0)
            {
                return(Result);
            }
            foreach (var data in Add)
            {
                PRent = new PlayerItemData();

                ((PlayerItemData)(PRent)).ItemIndex     = (uint)data.ITEM_INDEX;
                ((PlayerItemData)(PRent)).ItemTypeID    = (uint)data.ITEM_TYPEID;
                ((PlayerItemData)(PRent)).ItemC0        = 0;
                ((PlayerItemData)(PRent)).ItemUCCUnique = string.Empty;
                ((PlayerItemData)(PRent)).CreateNewItem();
                ((PlayerItemData)(PRent)).ItemFlag    = (byte)data.ITEM_FLAG;
                ((PlayerItemData)(PRent)).ItemEndDate = data.ITEM_DATE_END;
                ItemWarehouse.ItemAdd((PlayerItemData)(PRent));

                Result.Status      = true;
                Result.ItemIndex   = ((PlayerItemData)(PRent)).ItemIndex;
                Result.ItemTypeID  = ((PlayerItemData)(PRent)).ItemTypeID;
                Result.ItemOldQty  = 0;
                Result.ItemNewQty  = 1;
                Result.ItemUCCKey  = ((PlayerItemData)(PRent)).ItemUCCUnique;
                Result.ItemFlag    = (byte)((PlayerItemData)(PRent)).ItemFlag;
                Result.ItemEndDate = ((PlayerItemData)(PRent)).ItemEndDate;
            }

            return(Result);
        }
コード例 #9
0
        public void AddItem(Byte ShowType, PlayerItemData Item, UInt32 Add)
        {
            PlayerTransactionData Tran;

            if ((Item == null))
            {
                return;
            }
            Tran = new PlayerTransactionData()
            {
                Types        = ShowType,
                TypeID       = Item.ItemTypeID,
                Index        = Item.ItemIndex,
                PreviousQuan = Item.ItemC0 - Add,
                NewQuan      = Item.ItemC0,
                UCC          = string.Empty
            };
            this.AddInfo(Tran);
        }
コード例 #10
0
 private void HandleBeardChanged(PlayerItemData data)
 {
     SetImage(beardRenderer, data.Image);
 }
コード例 #11
0
        public void OpenGacha(int gachaId, string reason, string reasonDetails, string location)
        {
            PlayerItemData gachaPlayerItem = GetGachaFromInventory(gachaId);
            SpilItemData   gachaItem       = GetGachaFromObjects(gachaId);

            if (gachaPlayerItem == null || gachaItem == null || gachaId <= 0 || reason == null || !gachaPlayerItem.isGacha)
            {
                SpilLogging.Error("Error opening gacha!");
                return;
            }

            if (!gachaPlayerItem.content.All(gachaItem.content.Contains) && gachaPlayerItem.content.Count == gachaItem.content.Count)
            {
                gachaPlayerItem.content = gachaItem.content;
            }

            if (gachaPlayerItem.amount < 1)
            {
                SpilLogging.Error("Not enough gacha boxes in the inventory!");
                return;
            }

            if (gachaPlayerItem.content.Count < 1)
            {
                SpilLogging.Error("Error opening gacha! No content present!");
                return;
            }

            int weightSum = 0;

            foreach (SpilGachaContent gachaContent in gachaPlayerItem.content)
            {
                weightSum = weightSum + gachaContent.weight;
            }

            if (weightSum == 0)
            {
                SpilLogging.Error("Error opening gacha!");
                return;
            }

            int rand = Random.Range(0, weightSum);

            int low  = 0;
            int high = 0;

            for (int i = 0; i < gachaPlayerItem.content.Count; i++)
            {
                SpilGachaContent gachaContent = gachaPlayerItem.content[i];

                if (i != 0)
                {
                    low = high;
                }

                high = low + gachaContent.weight;

                if (rand >= low && rand < high)
                {
                    gachaPlayerItem.amount = gachaPlayerItem.amount - 1;
                    gachaPlayerItem.delta  = gachaPlayerItem.delta - 1;

                    UpdateItem(gachaPlayerItem);

                    switch (gachaContent.type)
                    {
                    case "CURRENCY":
                        WalletOperation("add", gachaContent.id, gachaContent.amount, reason, reasonDetails, location, null);
                        break;

                    case "ITEM":
                        InventoryOperation("add", gachaContent.id, gachaContent.amount, reason, reasonDetails, location, null);
                        break;

                    case "BUNDLE":
                        OpenBundle(gachaContent.id, gachaContent.amount, reason, reasonDetails, location);
                        break;

                    case "GACHA":
                        InventoryOperation("add", gachaContent.id, gachaContent.amount, reason, reasonDetails, location, null);
                        break;

                    case "NONE":
                        UserDataManager.UpdateUserDataVersions();
                        UserDataManager.UpdateUserDataMeta();

                        PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();
                        updatedData.items.Add(gachaPlayerItem);
                        updatedData.reason = reason;

                        SpilUnityImplementationBase.firePlayerDataEmptyGacha();
                        SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData));
                        break;

                    default:
                        SpilLogging.Error("Error opening gacha!");
                        return;
                    }

                    break;
                }
            }
        }
コード例 #12
0
        public void BuyBundle(int bundleId, string reason, string reasonDetails, string location, string transactionId)
        {
            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();

            SpilBundleData bundle = GetBundleFromObjects(bundleId);

            if (bundle == null || reason == null)
            {
                SpilLogging.Error("Error adding bundle to player inventory!");
                return;
            }

            Promotion promotion        = Spil.Instance.GetPromotions().GetBundlePromotion(bundleId);
            bool      isPromotionValid = false;

            if (promotion != null)
            {
                isPromotionValid = promotion.IsValid();
            }

            List <SpilBundlePriceData> bundlePrices = new List <SpilBundlePriceData>();

            if (isPromotionValid)
            {
                foreach (PriceOverride priceOverride in promotion.PriceOverride)
                {
                    SpilBundlePriceData bundlePriceData = new SpilBundlePriceData();
                    bundlePriceData.currencyId = priceOverride.Id;
                    bundlePriceData.value      = priceOverride.Amount;

                    bundlePrices.Add(bundlePriceData);
                }
            }
            else
            {
                bundlePrices = bundle.prices;
            }

            foreach (SpilBundlePriceData bundlePrice in bundlePrices)
            {
                PlayerCurrencyData currency = GetCurrencyFromWallet(bundlePrice.currencyId);

                if (currency == null)
                {
                    SpilLogging.Error("Currency does not exist!");
                    return;
                }

                int currentBalance = currency.currentBalance;
                int updatedBalance = currentBalance - bundlePrice.value;

                if (updatedBalance < 0)
                {
                    SpilLogging.Error("Not enough balance for currency!");
                    return;
                }

                int updatedDelta = -bundlePrice.value + currency.delta;

                if (updatedDelta == 0)
                {
                    updatedDelta = -bundlePrice.value;
                }

                currency.delta          = updatedDelta;
                currency.currentBalance = updatedBalance;

                UpdateCurrency(currency);
                updatedData.currencies.Add(currency);
            }

            foreach (SpilBundleItemData bundleItem in bundle.items)
            {
                SpilItemData gameItem = GetItemFromObjects(bundleItem.id);

                if (gameItem == null)
                {
                    SpilLogging.Error("Item does not exist!");
                    return;
                }
                ;
                PlayerItemData item = new PlayerItemData();
                item.id                 = gameItem.id;
                item.name               = gameItem.name;
                item.type               = gameItem.type;
                item.displayName        = gameItem.displayName;
                item.displayDescription = gameItem.displayDescription;
                item.isGacha            = gameItem.isGacha;
                item.content            = gameItem.content;

                PlayerItemData inventoryItem = GetItemFromInventory(bundleItem.id);

                int inventoryItemAmount;

                if (inventoryItem != null)
                {
                    inventoryItemAmount = inventoryItem.amount;

                    inventoryItemAmount = inventoryItemAmount + bundleItem.amount;

                    inventoryItem.delta  = bundleItem.amount;
                    inventoryItem.amount = inventoryItemAmount;

                    UpdateItem(inventoryItem);

                    updatedData.items.Add(inventoryItem);
                }
                else
                {
                    inventoryItemAmount = bundleItem.amount;

                    item.delta  = inventoryItemAmount;
                    item.amount = inventoryItemAmount;

                    Inventory.items.Add(item);

                    updatedData.items.Add(item);
                }
            }

            if (isPromotionValid)
            {
                foreach (ExtraEntity extraEntity in promotion.ExtraEntities)
                {
                    if (extraEntity.Type.Equals("CURRENCY"))
                    {
                        PlayerCurrencyData currency = GetCurrencyFromWallet(extraEntity.Id);

                        if (currency == null)
                        {
                            SpilLogging.Error("Currency does not exist!");
                            return;
                        }

                        currency.currentBalance = currency.currentBalance + extraEntity.Amount;
                        currency.delta          = currency.delta + extraEntity.Amount;

                        UpdateCurrency(currency);

                        PlayerCurrencyData temp = null;

                        foreach (PlayerCurrencyData playerCurrency in updatedData.currencies)
                        {
                            if (playerCurrency.id == extraEntity.Id)
                            {
                                temp = playerCurrency;
                            }
                        }

                        if (temp != null)
                        {
                            updatedData.currencies.Remove(temp);
                        }

                        updatedData.currencies.Add(currency);
                    }
                    else if (extraEntity.Type.Equals("ITEM") || extraEntity.Type.Equals("GACHA"))
                    {
                        SpilItemData gameItem = GetItemFromObjects(extraEntity.Id);

                        if (gameItem == null)
                        {
                            SpilLogging.Error("Item does not exist!");
                            return;
                        }
                        ;
                        PlayerItemData item = new PlayerItemData();
                        item.id                 = gameItem.id;
                        item.name               = gameItem.name;
                        item.type               = gameItem.type;
                        item.displayName        = gameItem.displayName;
                        item.displayDescription = gameItem.displayDescription;
                        item.isGacha            = gameItem.isGacha;
                        item.content            = gameItem.content;

                        PlayerItemData inventoryItem = GetItemFromInventory(extraEntity.Id);

                        int inventoryItemAmount;

                        if (inventoryItem != null)
                        {
                            inventoryItemAmount = inventoryItem.amount;

                            inventoryItemAmount = inventoryItemAmount + extraEntity.Amount;

                            inventoryItem.delta  = extraEntity.Amount;
                            inventoryItem.amount = inventoryItemAmount;

                            UpdateItem(inventoryItem);

                            PlayerItemData temp = null;

                            foreach (PlayerItemData playerItem in updatedData.items)
                            {
                                if (playerItem.id == extraEntity.Id)
                                {
                                    temp = playerItem;
                                }
                            }

                            if (temp != null)
                            {
                                updatedData.items.Remove(temp);
                            }

                            updatedData.items.Add(inventoryItem);
                        }
                        else
                        {
                            inventoryItemAmount = extraEntity.Amount;

                            item.delta  = inventoryItemAmount;
                            item.amount = inventoryItemAmount;

                            Inventory.items.Add(item);

                            updatedData.items.Add(item);
                        }
                    }
                }
            }

            UserDataManager.UpdateUserDataVersions();
            UserDataManager.UpdateUserDataMeta();

            updatedData.reason = reason;

            SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData));

            if (isPromotionValid)
            {
                PromotionsManager.PromotionData.First(a => a.id == promotion.Id).amountPurchased++;

                PromotionsManager.SendBoughtPromotion(promotion.Id);
            }

            SendUpdatePlayerDataEvent(bundle, reason, reasonDetails, location, transactionId);
        }
コード例 #13
0
 private void HandleBodyChanged(PlayerItemData data)
 {
     SetImage(bodyRenderer, data.Image);
 }
コード例 #14
0
ファイル: ClubInfo.cs プロジェクト: innocentpice/Py_Source_US
 public TClubUpgradeTemporary()
 {
     PClub = new PlayerItemData();
 }
コード例 #15
0
 public void Save(PlayerItemData data)
 {
     wrapper.SetBool(data.Id, UnlockedKey, data.Unlocked);
 }
コード例 #16
0
        public void InventoryOperation(string action, int itemId, int amount, string reason)
        {
            SpilItemData gameItem = GetItemFromObjects(itemId);

            if(gameItem == null || itemId <= 0 || action == null || reason == null){
                Debug.Log("Error updating item to player inventory!");
                return;
            }

            PlayerItemData item = new PlayerItemData();
            item.id = gameItem.id;
            item.name = gameItem.name;
            item.type = gameItem.type;
            item.amount = amount;
            item.delta = amount;

            PlayerItemData inventoryItem = GetItemFromInventory(itemId);

            if(inventoryItem != null){
                int inventoryItemAmount = inventoryItem.amount;

                if(action.Equals("add")){
                    inventoryItemAmount = inventoryItemAmount + amount;
                } else if(action.Equals("subtract")){
                    inventoryItemAmount = inventoryItemAmount - amount;

                    if(inventoryItemAmount < 0){
                        Debug.Log("Could not remove item as amount is too low!");
                        return;
                    }
                }

                inventoryItem.delta = amount;
                inventoryItem.amount = inventoryItemAmount;
                UpdateItem(inventoryItem);
            } else {
                if(action.Equals("add")){
                    Inventory.items.Add(item);
                } else if (action.Equals("subtract")){
                    Debug.Log("Could not remove item as amount is too low!");
                }
            }

            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();
            updatedData.items.Add(item);
            updatedData.reason = reason;

            SpilUnityImplementationBase.firePlayerDataUpdated (JsonHelper.getJSONFromObject (updatedData));

            SendUpdatePlayerDataEvent(item, reason);
        }
コード例 #17
0
        public static void ProcessPlayerDataResponse(ResponseEvent response)
        {
            WalletData    receivedWallet    = null;
            InventoryData receivedInventory = null;

            if (response.data.HasField("wallet"))
            {
                JSONObject walletJSON = response.data.GetField("wallet");

                receivedWallet = new WalletData();

                if (walletJSON.HasField("currencies"))
                {
                    receivedWallet.currencies = new List <PlayerCurrencyData>();

                    JSONObject currenciesJSON = walletJSON.GetField("currencies");

                    for (int i = 0; i < currenciesJSON.Count; i++)
                    {
                        PlayerCurrencyData currency = new PlayerCurrencyData();

                        currency.id             = (int)currenciesJSON.list[i].GetField("id").n;
                        currency.currentBalance = (int)currenciesJSON.list[i].GetField("currentBalance").n;
                        currency.delta          = (int)currenciesJSON.list[i].GetField("delta").n;

                        receivedWallet.currencies.Add(currency);
                    }
                }

                receivedWallet.offset = (long)walletJSON.GetField("offset").n;
                receivedWallet.logic  = walletJSON.GetField("logic").str;
            }

            if (response.data.HasField("inventory"))
            {
                JSONObject inventoryJSON = response.data.GetField("inventory");

                receivedInventory = new InventoryData();

                if (inventoryJSON.HasField("items"))
                {
                    receivedInventory.items = new List <PlayerItemData>();

                    JSONObject itemsJSON = inventoryJSON.GetField("items");

                    for (int i = 0; i < itemsJSON.Count; i++)
                    {
                        PlayerItemData item = new PlayerItemData();

                        item.id     = (int)itemsJSON.list[i].GetField("id").n;
                        item.amount = (int)itemsJSON.list[i].GetField("amount").n;
                        item.delta  = (int)itemsJSON.list[i].GetField("delta").n;

                        receivedInventory.items.Add(item);
                    }
                }

                receivedInventory.offset = (long)inventoryJSON.GetField("offset").n;
                receivedInventory.logic  = inventoryJSON.GetField("logic").str;
            }

            if (response.action.ToLower().Trim().Equals("update"))
            {
                SpilUnityEditorImplementation.pData.CalculatePlayerDataResponse(receivedWallet, receivedInventory, false);
            }
            else if (response.action.ToLower().Trim().Equals("syncerror"))
            {
                UserDataManager.ProcessSyncError();
            }
            else if (response.action.ToLower().Trim().Equals("dropped"))
            {
                UserDataManager.ProcessDroppedResponse("Event dropped!");
            }
            else if (response.action.ToLower().Trim().Equals("lockerror"))
            {
                UserDataManager.ProcessLockError();
            }
        }
コード例 #18
0
        public AddData AddItemToDB(AddItem ItemAddData)
        {
            Object TPlayerItemData;
            PlayerTransactionData Tran;
            AddData Result;

            Result = new AddData()
            {
                Status = false
            };
            var _db     = new PangyaEntities();
            var additem = _db.ProcAddItem((int)UID, (int)ItemAddData.ItemIffId, (int)ItemAddData.Quantity, IfCompare <byte>(IffEntry.IsSelfDesign(ItemAddData.ItemIffId), 1, 0), IffEntry.GetItemTimeFlag(ItemAddData.ItemIffId, ItemAddData.Day), (int)ItemAddData.Day).ToList();

            if (additem.Count > 0)
            {
                var dbdata = additem.FirstOrDefault();

                Tran = new PlayerTransactionData()
                {
                    Types = 2, Index = (uint)dbdata.IDX, TypeID = (uint)dbdata.iffTypeId, PreviousQuan = 0, NewQuan = (uint)dbdata.Quantity, UCC = dbdata.UCC_KEY
                };

                ItemTransaction.Add(Tran);
                try
                {
                    switch ((TITEMGROUP)GetPartGroup(ItemAddData.ItemIffId))
                    {
                    case TITEMGROUP.ITEM_TYPE_CHARACTER:
                    {
                        TPlayerItemData = new PlayerCharacterData();

                        ((PlayerCharacterData)(TPlayerItemData)).Index      = (uint)dbdata.IDX;
                        ((PlayerCharacterData)(TPlayerItemData)).TypeID     = (uint)dbdata.iffTypeId;
                        ((PlayerCharacterData)(TPlayerItemData)).HairColour = 0;
                        ((PlayerCharacterData)(TPlayerItemData)).GiftFlag   = 0;
                        ItemCharacter.CharacterAdd((PlayerCharacterData)(TPlayerItemData));

                        CharacterIndex = (uint)dbdata.IDX;
                        Result         = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerCharacterData)(TPlayerItemData)).Index,
                            ItemTypeID  = ((PlayerCharacterData)(TPlayerItemData)).TypeID,
                            ItemOldQty  = 1,
                            ItemNewQty  = 1,
                            ItemUCCKey  = string.Empty,
                            ItemFlag    = 0,
                            ItemEndDate = DateTime.MinValue,
                        };
                    }
                    break;

                    case TITEMGROUP.ITEM_TYPE_AUX:
                    case TITEMGROUP.ITEM_TYPE_PART:
                    case TITEMGROUP.ITEM_TYPE_CLUB:
                    case TITEMGROUP.ITEM_TYPE_BALL:
                    case TITEMGROUP.ITEM_TYPE_USE:
                    {
                        TPlayerItemData = new PlayerItemData();
                        ((PlayerItemData)(TPlayerItemData)).ItemIndex     = (uint)dbdata.IDX;
                        ((PlayerItemData)(TPlayerItemData)).ItemTypeID    = (uint)dbdata.iffTypeId;
                        ((PlayerItemData)(TPlayerItemData)).ItemC0        = (ushort)dbdata.Quantity;
                        ((PlayerItemData)(TPlayerItemData)).ItemUCCUnique = dbdata.UCC_KEY;
                        ((PlayerItemData)(TPlayerItemData)).CreateNewItem();
                        // Add to inventory list
                        ItemWarehouse.ItemAdd((PlayerItemData)(TPlayerItemData));
                        // Set the result data
                        Result = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerItemData)(TPlayerItemData)).ItemIndex,
                            ItemTypeID  = ((PlayerItemData)(TPlayerItemData)).ItemTypeID,
                            ItemOldQty  = 0,
                            ItemNewQty  = ItemAddData.Quantity,
                            ItemUCCKey  = ((PlayerItemData)(TPlayerItemData)).ItemUCCUnique,
                            ItemFlag    = 0,
                            ItemEndDate = null,
                        };
                    }
                    break;

                    case TITEMGROUP.ITEM_TYPE_CADDIE:
                    {
                        TPlayerItemData = new PlayerCaddieData();
                        ((PlayerCaddieData)(TPlayerItemData)).CaddieIdx     = (uint)dbdata.IDX;
                        ((PlayerCaddieData)(TPlayerItemData)).CaddieTypeId  = (uint)dbdata.iffTypeId;
                        ((PlayerCaddieData)(TPlayerItemData)).CaddieDateEnd = (DateTime)dbdata.END_DATE;
                        ((PlayerCaddieData)(TPlayerItemData)).CaddieAutoPay = 0;
                        ((PlayerCaddieData)(TPlayerItemData)).CaddieType    = (byte)dbdata.Flag;
                        // Add caddie to inventory list
                        ItemCaddie.CadieAdd((PlayerCaddieData)(TPlayerItemData));
                        // set the result data
                        Result = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerCaddieData)(TPlayerItemData)).CaddieIdx,
                            ItemTypeID  = ((PlayerCaddieData)(TPlayerItemData)).CaddieTypeId,
                            ItemOldQty  = 0,
                            ItemNewQty  = 1,
                            ItemUCCKey  = string.Empty,
                            ItemFlag    = ((PlayerCaddieData)(TPlayerItemData)).CaddieType,
                            ItemEndDate = null,
                        };
                    }
                    break;

                    case TITEMGROUP.ITEM_TYPE_SKIN:
                    {
                        TPlayerItemData = new PlayerItemData();
                        ((PlayerItemData)(TPlayerItemData)).ItemIndex     = (uint)dbdata.IDX;
                        ((PlayerItemData)(TPlayerItemData)).ItemTypeID    = (uint)dbdata.iffTypeId;
                        ((PlayerItemData)(TPlayerItemData)).ItemC0        = (ushort)ItemAddData.Quantity;
                        ((PlayerItemData)(TPlayerItemData)).ItemUCCUnique = dbdata.UCC_KEY;
                        ((PlayerItemData)(TPlayerItemData)).ItemFlag      = (byte)dbdata.Flag;
                        ((PlayerItemData)(TPlayerItemData)).ItemEndDate   = dbdata.END_DATE;
                        ((PlayerItemData)(TPlayerItemData)).ItemIsValid   = 1;
                        // Add to inventory list
                        ItemWarehouse.ItemAdd((PlayerItemData)(TPlayerItemData));
                        // Set the result data
                        Result = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerItemData)(TPlayerItemData)).ItemIndex,
                            ItemTypeID  = ((PlayerItemData)(TPlayerItemData)).ItemTypeID,
                            ItemOldQty  = 0,
                            ItemNewQty  = ItemAddData.Quantity,
                            ItemUCCKey  = ((PlayerItemData)(TPlayerItemData)).ItemUCCUnique,
                            ItemFlag    = (byte)((PlayerItemData)(TPlayerItemData)).ItemFlag,
                            ItemEndDate = ((PlayerItemData)(TPlayerItemData)).ItemEndDate,
                        };
                    }
                    break;

                    case TITEMGROUP.ITEM_TYPE_CARD:
                    {
                        TPlayerItemData = new PlayerCardData();
                        ((PlayerCardData)(TPlayerItemData)).CardIndex      = (uint)dbdata.IDX;
                        ((PlayerCardData)(TPlayerItemData)).CardTypeID     = (uint)dbdata.iffTypeId;
                        ((PlayerCardData)(TPlayerItemData)).CardQuantity   = ItemAddData.Quantity;
                        ((PlayerCardData)(TPlayerItemData)).CardIsValid    = 1;
                        ((PlayerCardData)(TPlayerItemData)).CardNeedUpdate = false;
                        // ## add to card
                        ItemCard.CardAdd((PlayerCardData)(TPlayerItemData));
                        // set the result data
                        Result = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerCardData)(TPlayerItemData)).CardIndex,
                            ItemTypeID  = ((PlayerCardData)(TPlayerItemData)).CardTypeID,
                            ItemOldQty  = 0,
                            ItemNewQty  = ((PlayerCardData)(TPlayerItemData)).CardQuantity,
                            ItemUCCKey  = string.Empty,
                            ItemFlag    = 0,
                            ItemEndDate = null,
                        };
                    }
                    break;

                    case TITEMGROUP.ITEM_TYPE_MASCOT:
                    {
                        TPlayerItemData = new PlayerMascotData();
                        ((PlayerMascotData)(TPlayerItemData)).MascotIndex      = (uint)dbdata.IDX;
                        ((PlayerMascotData)(TPlayerItemData)).MascotTypeID     = (uint)dbdata.iffTypeId;
                        ((PlayerMascotData)(TPlayerItemData)).MascotMessage    = "Pangya !";
                        ((PlayerMascotData)(TPlayerItemData)).MascotIsValid    = 1;
                        ((PlayerMascotData)(TPlayerItemData)).MascotNeedUpdate = false;
                        ((PlayerMascotData)(TPlayerItemData)).MascotEndDate    = (DateTime)dbdata.END_DATE;

                        ((PlayerMascotData)(TPlayerItemData)).MascotDayToEnd = (ushort)(DaysBetween(dbdata.END_DATE, DateTime.Now));
                        // ## add to card
                        ItemMascot.MascotAdd((PlayerMascotData)(TPlayerItemData));
                        // set the result data
                        Result = new AddData()
                        {
                            Status      = true,
                            ItemIndex   = ((PlayerMascotData)(TPlayerItemData)).MascotIndex,
                            ItemTypeID  = ((PlayerMascotData)(TPlayerItemData)).MascotTypeID,
                            ItemOldQty  = 0,
                            ItemNewQty  = 1,
                            ItemUCCKey  = string.Empty,
                            ItemFlag    = 4,
                            ItemEndDate = DateTime.Now.AddDays(ItemAddData.Day + 1),
                        };
                    }
                    break;
                    }
                }
                catch
                {
                    var player = (GPlayer)MainServer.Program._server.GetPlayerByUID(UID);
                    if (player != null)
                    {
                        player.Close();
                    }
                }
            }
            // ## resulted
            return(Result);
        }
コード例 #19
0
        public void UseItem(PlayerItemData item)
        {
            item.Equipped = true;

            if (Contains(playerLookData.Bodies, item))
            {
                ClearItems(playerLookData.Bodies);
                item.Equipped = true;

                playerLookData.CurrentBodyId = item.Id;
                playerLookLoader.Save(playerLookData);

                if (OnBodyChanged != null)
                {
                    OnBodyChanged(item);
                }
                return;
            }
            if (Contains(playerLookData.Bags, item))
            {
                ClearItems(playerLookData.Bags);
                item.Equipped = true;

                playerLookData.CurrentBagId = item.Id;
                playerLookLoader.Save(playerLookData);

                if (OnBagChanged != null)
                {
                    OnBagChanged(item);
                }
                return;
            }
            if (Contains(playerLookData.Sticks, item))
            {
                ClearItems(playerLookData.Sticks);
                item.Equipped = true;

                playerLookData.CurrentStickId = item.Id;
                playerLookLoader.Save(playerLookData);

                if (OnStickChanged != null)
                {
                    OnStickChanged(item);
                }
                return;
            }
            if (Contains(playerLookData.Glasses, item))
            {
                ClearItems(playerLookData.Glasses);
                item.Equipped = true;

                playerLookData.CurrentGlassesId = item.Id;
                playerLookLoader.Save(playerLookData);

                if (OnGlassesChanged != null)
                {
                    OnGlassesChanged(item);
                }
                return;
            }
            if (Contains(playerLookData.Beards, item))
            {
                ClearItems(playerLookData.Beards);
                item.Equipped = true;

                playerLookData.CurrentBeardId = item.Id;
                playerLookLoader.Save(playerLookData);

                if (OnBeardChanged != null)
                {
                    OnBeardChanged(item);
                }
                return;
            }
        }
コード例 #20
0
        public void PlayerTalkItemLocker(GPlayer player, Packet packet)
        {
            PlayerItemData Item;

            var count = packet.ReadByte();  //count item
            var Index = packet.ReadInt32(); //id do item

            var _db    = new PangyaEntities();
            var invent = _db.USP_INVEN_POP((int)player.GetUID, Index).First();

            if (invent.ERROR == null || invent.ERROR != 0)
            {
                player.SendResponse(new byte[] { 0x6f, 0x01, 0x6B, 0x00, 0x00, 0x00 });
                return;
            }
            else
            {
                Item = new PlayerItemData();

                Item.CreateNewItem();

                Item.ItemIndex        = (uint)invent.ITEM_ID;
                Item.ItemTypeID       = (uint)invent.TYPEID;
                Item.ItemC0           = (ushort)invent.C0;
                Item.ItemC1           = (ushort)invent.C1;
                Item.ItemC2           = (ushort)invent.C2;
                Item.ItemC3           = (ushort)invent.C3;
                Item.ItemC4           = (ushort)invent.C4;
                Item.ItemEndDate      = invent.DateEnd;
                Item.ItemFlag         = invent.FLAG;
                Item.ItemUCCUnique    = invent.UCC_UNIQE;
                Item.ItemUCCStatus    = invent.UCC_STATUS;
                Item.ItemUCCName      = invent.UCC_NAME;
                Item.ItemUCCDrawerUID = (uint?)invent.UCC_DRAWER_UID;
                Item.ItemUCCDrawer    = invent.UCC_DRAWER_NICKNAME;
                Item.ItemUCCCopyCount = (ushort?)invent.UCC_COPY_COUNT;
                // Add to inventory
                player.Inventory.ItemWarehouse.Add(Item);

                player.Response.Write(new byte[] { 0xEC, 0x00 });
                player.Response.Write((byte)1);
                player.Response.Write(0);
                player.Response.Write(player.GetPang);
                player.Response.WriteZero(8);
                player.Response.Write(Item.ItemTypeID);
                player.Response.Write(Item.ItemIndex);
                player.Response.Write(player.GetUID);//quantity
                player.Response.WriteZero(27);
                player.Response.WriteStr(Item.ItemUCCUnique, 9);
                player.Response.Write(Item.ItemUCCCopyCount ?? 0);
                player.Response.Write(Item.ItemUCCStatus ?? 0);
                player.Response.WriteZero(54);
                player.Response.WriteStr(Item.ItemUCCName, 16);
                player.Response.WriteZero(25);
                player.Response.WriteStr(Item.ItemUCCDrawer, 16);
                player.Response.WriteZero(6);
                player.Response.Write((byte)3);
                player.Response.Write(player.GetUID);
                player.Response.Write(Item.ItemTypeID);
                player.Response.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF });
                player.Response.Write(1);
                player.Response.WriteZero(6);
                player.Response.Write(1);
                player.Response.WriteZero(0x0E);
                player.Response.Write((byte)2);
                player.Response.WriteStr(Item.ItemUCCName, 16);
                player.Response.WriteZero(25);
                player.Response.WriteStr(Item.ItemUCCUnique, 9);
                player.Response.Write(Item.ItemUCCStatus ?? 0);
                player.Response.Write(Item.ItemUCCCopyCount ?? 0);
                player.Response.WriteStr(Item.ItemUCCDrawer, 16);
                player.Response.WriteZero(0x4E);
                player.Response.Write(0);
                player.Response.Write(0);
                player.SendResponse();


                player.Response.Write(new byte[] { 0x6F, 0x01 });
                player.Response.Write(0);
                player.Response.Write(Index);
                player.Response.Write(0);
                player.Response.Write(Item.ItemIndex);
                player.Response.Write(player.GetUID);//quantity
                player.Response.Write(Item.ItemTypeID);
                player.Response.WriteZero(27);
                player.Response.WriteStr(Item.ItemUCCUnique, 9);
                player.Response.Write(Item.ItemUCCCopyCount ?? 0);
                player.Response.Write(Item.ItemUCCStatus ?? 0);
                player.Response.WriteZero(54);
                player.Response.WriteStr(Item.ItemUCCName, 16);
                player.Response.WriteZero(25);
                player.Response.WriteStr(Item.ItemUCCDrawer, 22);
                player.SendResponse();
            }
        }
コード例 #21
0
        public void ConsumeBundle(int bundleId, string reason)
        {
            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();

            SpilBundleData bundle = GetBundleFromObjects(bundleId);

            if(bundle == null || reason == null){
                Debug.Log("Error adding bundle to player inventory!");
                return;
            }

            SpilShopPromotionData promotion = GetPromotionFromObjects(bundleId);
            bool isPromotionValid = false;

            if(promotion != null){
                isPromotionValid = IsPromotionValid(promotion);
            }

            List<SpilBundlePriceData> bundlePrices;

            if(isPromotionValid){
                bundlePrices = promotion.prices;
            } else {
                bundlePrices = bundle.prices;
            }

            for(int i = 0; i < bundlePrices.Count; i++){
                PlayerCurrencyData currency = GetCurrencyFromWallet(bundlePrices[i].currencyId);

                if(currency == null){
                    Debug.Log("Currency does not exist!");
                    return;
                }

                int currentBalance = currency.currentBalance;
                int updatedBalance = currentBalance - bundlePrices[i].value;

                if(updatedBalance < 0){
                    Debug.Log("Not enough balance for currency!");
                    return;
                }

                int updatedDelta = - bundlePrices[i].value + currency.delta;

                if(updatedDelta == 0){
                    updatedDelta = - bundlePrices[i].value;
                }

                currency.delta = updatedDelta;
                currency.currentBalance = updatedBalance;

                UpdateCurrency(currency);
                updatedData.currencies.Add(currency);
            }

            for(int i = 0; i < bundle.items.Count; i++){
                SpilItemData gameItem = GetItemFromObjects(bundle.items[i].id);

                if(gameItem != null){
                    PlayerItemData item = new PlayerItemData();
                    item.id = gameItem.id;
                    item.name = gameItem.name;
                    item.type = gameItem.type;

                    PlayerItemData inventoryItem = GetItemFromInventory(bundle.items[i].id);

                    int inventoryItemAmount;

                    if(inventoryItem != null){
                        inventoryItemAmount = inventoryItem.amount;

                        int promoAmount = 1;

                        if(isPromotionValid){
                            promoAmount = promotion.amount;
                        }

                        inventoryItemAmount = inventoryItemAmount + bundle.items[i].amount * promoAmount;

                        inventoryItem.delta = bundle.items[i].amount;
                        inventoryItem.amount = inventoryItemAmount;

                        UpdateItem(inventoryItem);

                        updatedData.items.Add(inventoryItem);
                    } else {
                        inventoryItemAmount = bundle.items[i].amount;

                        if(isPromotionValid){
                            inventoryItemAmount = inventoryItemAmount * promotion.amount;
                        }

                        item.delta = inventoryItemAmount;
                        item.amount = inventoryItemAmount;

                        Inventory.items.Add(item);

                        updatedData.items.Add(inventoryItem);
                    }
                }
            }

            updatedData.reason = reason;

            SpilUnityImplementationBase.firePlayerDataUpdated (JsonHelper.getJSONFromObject (updatedData));

            SendUpdatePlayerDataEvent(bundle, reason);
        }
コード例 #22
0
 private void HandleGlassesChanged(PlayerItemData data)
 {
     SetImage(glassesRenderer, data.Image);
 }
コード例 #23
0
        private void SendUpdatePlayerDataEvent(PlayerItemData item, string reason)
        {
            SpilEvent spilEvent = Spil.MonoInstance.gameObject.AddComponent<SpilEvent> ();
            spilEvent.eventName = "updatePlayerData";

            JSONObject walletJSON = new JSONObject();
            walletJSON.AddField("offset", Wallet.offset);

            spilEvent.customData.AddField("wallet", walletJSON);

            JSONObject inventoryJSON = new JSONObject();

            JSONObject itemsJSON = new JSONObject(JsonHelper.getJSONFromObject(Inventory.items));

            inventoryJSON.AddField("items", itemsJSON);
            inventoryJSON.AddField("offset", Inventory.offset);

            spilEvent.customData.AddField("inventory", inventoryJSON);

            spilEvent.customData.AddField("item", new JSONObject(JsonHelper.getJSONFromObject(item)));

            spilEvent.customData.AddField("reason", reason);

            spilEvent.Send();
        }
コード例 #24
0
        public void PlayerAfterUploaded(GPlayer player, Packet packet)
        {
            var            db = new PangyaEntities();
            byte           Option;
            byte           Cases;
            uint           TypeId;
            uint           UCC_IDX;
            string         UCC_UNIQUE;
            string         UCC_NAME;
            PlayerItemData Item     = null;
            TSaveUCC       UCC_SAVE = new TSaveUCC();

            Option = packet.ReadByte();
            switch (Option)
            {
            // Save Permanently
            case 0:
            {
                TypeId     = packet.ReadUInt32();
                UCC_UNIQUE = packet.ReadPStr();        //key?
                UCC_NAME   = packet.ReadPStr();

                Item = player.Inventory.ItemWarehouse.GetUCC(TypeId, UCC_UNIQUE);

                if (Item == null)
                {
                    Item = player.Inventory.ItemWarehouse.GetUCC(TypeId, UCC_UNIQUE);
                    return;
                }
                if (!(Item == null))
                {
                    Item.ItemUCCStatus    = 1;
                    Item.ItemUCCName      = UCC_NAME;
                    Item.ItemUCCDrawerUID = (uint)player.GetUID;
                    Item.ItemNeedUpdate   = false;
                    UCC_SAVE.UID          = (uint)player.GetUID;
                    UCC_SAVE.UCCIndex     = Item.ItemIndex;
                    UCC_SAVE.UCCName      = UCC_NAME;
                    UCC_SAVE.UCCStatus    = (byte)Item.ItemUCCStatus;
                    UCC_SAVE.UccDrawerUID = (uint)player.GetUID;
                    // SAVE TO DATABASE
                    SaveUCC(UCC_SAVE);
                }
                player.Response.Write(new byte[] { 0x2E, 0x01, 0x00, 0x01 });
                player.Response.WriteUInt32(Item.ItemIndex);
                player.Response.WriteUInt32(Item.ItemTypeID);
                player.Response.WritePStr(Item.ItemUCCUnique);
                player.Response.WritePStr(UCC_NAME);
                player.SendResponse();
                break;
            }

            // UCC INFO
            case 1:
            {
                UCC_IDX = packet.ReadUInt32();
                Cases   = packet.ReadByte();


                if ((UCC_IDX == 0))
                {
                    player.SendResponse(new byte[] { 0x2E, 0x01, 0x04 });
                    return;
                }
                try
                {
                    var data = db.ProcGetUCCData((int)UCC_IDX).ToList();
                    if (data.Count <= 0)
                    {
                        return;
                    }

                    player.Response.Write(new byte[] { 0x2E, 0x01, 0x01 });
                    foreach (var Query in data)
                    {
                        player.Response.WriteInt32(Query.TYPEID);
                        player.Response.WritePStr(Query.UCC_UNIQE);
                        player.Response.WriteByte(1);
                        player.Response.WriteInt32(Query.item_id);
                        player.Response.WriteInt32(Query.TYPEID);
                        player.Response.WriteZero(0xF);
                        player.Response.WriteByte(1);
                        player.Response.WriteZero(0x10);
                        player.Response.WriteByte(2);
                        player.Response.WriteStr(Query.UCC_NAME, 0x10);
                        player.Response.WriteZero(0x19);
                        player.Response.WriteStr(Query.UCC_UNIQE, 0x9);
                        player.Response.WriteByte((byte)Query.UCC_STATUS);
                        player.Response.WriteUInt16((ushort)Query.UCC_COPY_COUNT);
                        player.Response.WriteStr(Query.Nickname, 0x10);
                        player.Response.WriteZero(0x56);
                    }
                    player.SendResponse();
                }
                finally
                {
                    db = null;
                }
                break;
            }

            // COPY UCC
            case 2:
            {
                TypeId     = packet.ReadUInt32();
                UCC_UNIQUE = packet.ReadPStr();
                packet.Skip(2);
                UCC_IDX = packet.ReadUInt32();


                // IDX TO COPY
                Item = player.Inventory.ItemWarehouse.GetUCC(TypeId, UCC_UNIQUE, true);
                if (Item == null)
                {
                    return;
                }
                db = new PangyaEntities();
                try
                {
                    //ProcSaveUCCCopy
                    var Query = db.ProcSaveUCCCopy((int)player.GetUID, (int)TypeId, UCC_UNIQUE, (int)UCC_IDX).First();

                    if (Query.Code == 0)
                    {
                        return;
                    }
                    player.Response.Write(new byte[] { 0x2E, 0x01, 0x02 });
                    player.Response.WriteUInt32(TypeId);
                    player.Response.WritePStr(UCC_UNIQUE);
                    player.Response.Write(new byte[] { 0x01, 0x00 });         // UNKNOWN YET
                    player.Response.WriteUInt32(UCC_IDX);
                    player.Response.WriteInt32(Query.ITEM_ID);
                    player.Response.WriteInt32(Query.TYPEID);
                    player.Response.WritePStr(Query.UCC_UNIQE);
                    player.Response.Write((ushort)Query.UCC_COPY_COUNT);
                    player.Response.Write((byte)1);
                    player.SendResponse();
                }
                finally
                {
                    db = null;
                }
                break;
            }

            // SAVE TEMPARARILY
            case 3:
            {
                TypeId     = packet.ReadUInt32();
                UCC_UNIQUE = packet.ReadPStr();

                player.Response.Write(new byte[] { 0x2E, 0x01 });
                player.Response.Write(Option);
                player.Response.WriteUInt32(TypeId);
                player.Response.WritePStr(UCC_UNIQUE);
                Item = player.Inventory.ItemWarehouse.GetUCC(TypeId, UCC_UNIQUE);
                if (Item == null)
                {
                    player.Response.Write((byte)0);
                }
                if (!(Item == null))
                {
                    Item.ItemUCCStatus  = 2;
                    Item.ItemNeedUpdate = true;
                    player.Response.Write((byte)1);
                }
                player.SendResponse();
                break;
            }
            }
        }
コード例 #25
0
 private void HandleStickChanged(PlayerItemData data)
 {
     SetImage(stickRenderer, data.Image);
 }
コード例 #26
0
ファイル: ClubInfo.cs プロジェクト: innocentpice/Py_Source_US
 // TClubUpgradeTemporary
 public void Clear()
 {
     PClub       = null;
     UpgradeType = -1;
 }
コード例 #27
0
 private void HandleBagChanged(PlayerItemData data)
 {
     SetImage(bagRenderer, data.Image);
 }
コード例 #28
0
        public void ProcessPlayerDataResponse(ResponseEvent response)
        {
            WalletData receivedWallet = null;
            InventoryData receivedInventory = null;

            if (response.data.HasField ("wallet")) {

                JSONObject walletJSON = response.data.GetField ("wallet");

                receivedWallet = new WalletData ();

                if (walletJSON.HasField ("currencies")) {
                    receivedWallet.currencies = new List<PlayerCurrencyData> ();

                    JSONObject currenciesJSON = walletJSON.GetField ("currencies");

                    for (int i = 0; i < currenciesJSON.Count; i++) {
                        PlayerCurrencyData currency = new PlayerCurrencyData ();

                        currency.id = (int)currenciesJSON.list [i].GetField ("id").n;
                        currency.currentBalance = (int)currenciesJSON.list [i].GetField ("currentBalance").n;
                        currency.delta = (int)currenciesJSON.list [i].GetField ("delta").n;

                        receivedWallet.currencies.Add (currency);
                    }
                }

                receivedWallet.offset = (int)walletJSON.GetField ("offset").n;
                receivedWallet.logic = walletJSON.GetField ("logic").str;

            }

            if (response.data.HasField ("inventory")) {

                JSONObject inventoryJSON = response.data.GetField ("inventory");

                receivedInventory = new InventoryData ();

                if (inventoryJSON.HasField ("items")) {
                    receivedInventory.items = new List<PlayerItemData> ();

                    JSONObject itemsJSON = inventoryJSON.GetField ("items");

                    for (int i = 0; i < itemsJSON.Count; i++) {
                        PlayerItemData item = new PlayerItemData ();

                        item.id = (int)itemsJSON.list [i].GetField ("id").n;
                        item.amount = (int)itemsJSON.list [i].GetField ("amount").n;
                        item.delta = (int)itemsJSON.list [i].GetField ("delta").n;

                        receivedInventory.items.Add (item);
                    }
                }

                receivedInventory.offset = (int)inventoryJSON.GetField ("offset").n;
                receivedInventory.logic = inventoryJSON.GetField ("logic").str;

            }

            CalculatePlayerDataResponse (receivedWallet, receivedInventory);
        }
コード例 #29
0
        public void CalculatePlayerDataResponse(WalletData receivedWallet, InventoryData receivedInventory, bool fromInit)
        {
            bool updated = false;
            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();

            if (receivedWallet != null)
            {
                foreach (PlayerCurrencyData playerCurrency in Wallet.currencies)
                {
                    playerCurrency.delta = 0;
                }

                if (Wallet.offset < receivedWallet.offset && receivedWallet.currencies.Count > 0)
                {
                    foreach (PlayerCurrencyData playerCurrency in receivedWallet.currencies)
                    {
                        if (receivedWallet.logic.Equals("CLIENT"))
                        {
                            PlayerCurrencyData currency =
                                Wallet.currencies.FirstOrDefault(a => a.id == playerCurrency.id);

                            if (currency == null)
                            {
                                continue;
                            }
                            if (Wallet.offset == 0 && receivedWallet.offset != 0)
                            {
                                currency.currentBalance = playerCurrency.currentBalance;
                            }
                            else
                            {
                                if (playerCurrency.delta != 0)
                                {
                                    int updatedBalance =
                                        currency.currentBalance + playerCurrency.delta;

                                    if (updatedBalance < 0)
                                    {
                                        updatedBalance = 0;
                                    }

                                    currency.currentBalance = updatedBalance;
                                }
                            }

                            updated = true;
                            updatedData.currencies.Add(currency);
                        }
                        else if (receivedWallet.logic.Equals("SERVER"))
                        {
                        }
                    }
                }

                Wallet.offset = receivedWallet.offset;
                Wallet.logic  = receivedWallet.logic;
            }

            if (receivedInventory != null)
            {
                foreach (PlayerItemData playerItem in Inventory.items)
                {
                    playerItem.delta = 0;
                }

                if (Inventory.offset < receivedInventory.offset && receivedInventory.items.Count > 0)
                {
                    List <PlayerItemData> itemsToBeAdded = new List <PlayerItemData>();

                    foreach (PlayerItemData playerItem in receivedInventory.items)
                    {
                        if (receivedInventory.logic.Equals("CLIENT"))
                        {
                            PlayerItemData item = Inventory.items.FirstOrDefault(a => a.id == playerItem.id);
                            if (item != null && playerItem.delta != 0)
                            {
                                item.amount = item.amount + playerItem.delta;
                            }
                            else
                            {
                                itemsToBeAdded.Add(playerItem);
                            }

                            updated = true;
                        }
                        else if (receivedInventory.logic.Equals("SERVER"))
                        {
                        }

                        updatedData.items.Add(playerItem);
                    }

                    foreach (PlayerItemData itemToAdd in itemsToBeAdded)
                    {
                        SpilItemData item = GetItemFromObjects(itemToAdd.id);

                        if (item != null && itemToAdd.amount > 0)
                        {
                            PlayerItemData playerItem = new PlayerItemData();
                            playerItem.id     = item.id;
                            playerItem.name   = item.name;
                            playerItem.type   = item.type;
                            playerItem.amount = itemToAdd.amount;
                            playerItem.value  = itemToAdd.value;
                            playerItem.delta  = 0;

                            playerItem.displayName        = item.displayName;
                            playerItem.displayDescription = item.displayDescription;
                            playerItem.isGacha            = item.isGacha;
                            playerItem.content            = item.content;

                            Inventory.items.Add(playerItem);

                            updated = true;
                        }
                    }
                }

                Inventory.offset = receivedInventory.offset;
                Inventory.logic  = receivedInventory.logic;
            }

            if (updated)
            {
                UserDataManager.UpdateUserDataVersions();
                updatedData.reason = PlayerDataUpdateReasons.ServerUpdate;

                SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData));
            }

            if (!fromInit)
            {
                SpilUnityImplementationBase.fireUserDataAvailable();
            }
        }
コード例 #30
0
        private void CalculatePlayerDataResponse(WalletData receivedWallet, InventoryData receivedInventory)
        {
            bool updated = false;
            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData ();

            if (receivedWallet != null) {

                for (int i = 0; i < Wallet.currencies.Count; i++) {
                    Wallet.currencies[i].delta = 0;
                }

                if (Wallet.offset < receivedWallet.offset && receivedWallet.currencies.Count > 0) {

                    for (int i = 0; i < receivedWallet.currencies.Count; i++) {
                        for (int j = 0; j < Wallet.currencies.Count; j++) {
                            if (receivedWallet.logic.Equals ("CLIENT")) {
                                if (Wallet.currencies [j].id == receivedWallet.currencies [i].id && receivedWallet.currencies [i].delta != 0) {
                                    int updatedBalance = 0;

                                    if (Wallet.offset == 0 && receivedWallet.offset != 0) {
                                        updatedBalance = receivedWallet.currencies [i].currentBalance;
                                    } else {
                                        updatedBalance = Wallet.currencies [j].currentBalance + receivedWallet.currencies [i].delta;

                                        if (updatedBalance < 0) {
                                            updatedBalance = 0;
                                        }
                                    }

                                    Wallet.currencies [j].currentBalance = updatedBalance;

                                    updated = true;
                                    updatedData.currencies.Add (Wallet.currencies [j]);
                                }
                            } else if (receivedWallet.logic.Equals ("SERVER")) {

                            }
                        }
                    }

                }

                Wallet.offset = receivedWallet.offset;
                Wallet.logic = receivedWallet.logic;

            }

            if (receivedInventory != null) {
                for (int i = 0; i < Inventory.items.Count; i++) {
                    Inventory.items[i].delta = 0;
                }

                if(Inventory.offset < receivedInventory.offset && receivedInventory.items.Count > 0){
                    List<PlayerItemData> itemsToBeAdded = new List<PlayerItemData>();

                    for(int i = 0; i < receivedInventory.items.Count; i++){
                        for(int j = 0; j < Inventory.items.Count; j++){
                            if(receivedInventory.logic.Equals("CLIENT")){
                                if(Inventory.items[j].id == receivedInventory.items[i].id && receivedInventory.items[i].delta != 0){
                                    int updatedAmount = Inventory.items[j].amount + receivedInventory.items[i].delta;

                                    Inventory.items[j].amount = updatedAmount;
                                } else {
                                    itemsToBeAdded.Add(receivedInventory.items[i]);
                                }

                                updated = true;
                            } else if(receivedInventory.logic.Equals("SERVER")){

                            }
                        }

                        updatedData.items.Add(receivedInventory.items[i]);
                    }

                    for(int i = 0; i < itemsToBeAdded.Count; i++){
                        SpilItemData item = GetItemFromObjects(itemsToBeAdded[i].id);

                        if(item != null && itemsToBeAdded[i].amount > 0){
                            PlayerItemData playerItem = new PlayerItemData();
                            playerItem.id = item.id;
                            playerItem.name = item.name;
                            playerItem.type = item.type;
                            playerItem.amount = itemsToBeAdded[i].amount;
                            playerItem.value = itemsToBeAdded[i].value;
                            playerItem.delta = 0;

                            Inventory.items.Add(playerItem);

                            updated = true;
                        }
                    }
                }

                Inventory.offset = receivedInventory.offset;
                Inventory.logic = receivedInventory.logic;

            }

            if (updated) {
                updatedData.reason = PlayerDataUpdateReasons.ServerUpdate;

                SpilUnityImplementationBase.firePlayerDataUpdated (JsonHelper.getJSONFromObject (updatedData));
            }
        }
コード例 #31
0
        public void InventoryOperation(string action, int itemId, int amount, string reason, string reasonDetails, string location, string transactionId)
        {
            SpilItemData gameItem = GetItemFromObjects(itemId);

            if (gameItem == null || itemId <= 0 || action == null || reason == null)
            {
                SpilLogging.Error("Error updating item to player inventory!");
                return;
            }

            PlayerItemData item = new PlayerItemData();

            item.id                 = gameItem.id;
            item.name               = gameItem.name;
            item.type               = gameItem.type;
            item.displayName        = gameItem.displayName;
            item.displayDescription = gameItem.displayDescription;
            item.isGacha            = gameItem.isGacha;
            item.content            = gameItem.content;
            item.amount             = amount;
            item.delta              = amount;

            PlayerItemData inventoryItem = GetItemFromInventory(itemId);

            if (inventoryItem != null)
            {
                int inventoryItemAmount = inventoryItem.amount;

                if (action.Equals("add"))
                {
                    inventoryItemAmount = inventoryItemAmount + amount;
                }
                else if (action.Equals("subtract"))
                {
                    inventoryItemAmount = inventoryItemAmount - amount;

                    if (inventoryItemAmount < 0)
                    {
                        SpilLogging.Error("Could not remove item as amount is too low!");
                        return;
                    }
                }

                inventoryItem.delta  = amount;
                inventoryItem.amount = inventoryItemAmount;
                UpdateItem(inventoryItem);
            }
            else
            {
                if (action.Equals("add"))
                {
                    Inventory.items.Add(item);
                }
                else if (action.Equals("subtract"))
                {
                    SpilLogging.Error("Could not remove item as amount is too low!");
                }
            }

            UserDataManager.UpdateUserDataVersions();
            UserDataManager.UpdateUserDataMeta();

            PlayerDataUpdatedData updatedData = new PlayerDataUpdatedData();

            updatedData.items.Add(item);
            updatedData.reason = reason;

            SpilUnityImplementationBase.firePlayerDataUpdated(JsonHelper.getJSONFromObject(updatedData));

            SendUpdatePlayerDataEvent(null, reason, reasonDetails, location, transactionId);
        }
コード例 #32
0
 private void UpdateItem(PlayerItemData item)
 {
     for (int i = 0; i < Inventory.items.Count; i++) {
         if (Inventory.items[i].id == item.id) {
             Inventory.items[i].amount = item.amount;
             Inventory.items[i].delta = item.delta;
         }
     }
 }
コード例 #33
0
        public static void ProcessUserDataResponse(ResponseEvent responseEvent)
        {
            WalletData             receivedWallet    = null;
            InventoryData          receivedInventory = null;
            string                 gameStateData     = null;
            List <UserDataVersion> userDataVersions  = null;
            UserDataMeta           userDataMeta      = null;
            bool externalChange = false;

            if (responseEvent.data.HasField("playerData"))
            {
                JSONObject playerDataJSON = responseEvent.data.GetField("playerData");
                if (playerDataJSON.HasField("wallet"))
                {
                    JSONObject walletJSON = playerDataJSON.GetField("wallet");

                    receivedWallet = new WalletData();

                    if (walletJSON.HasField("currencies"))
                    {
                        receivedWallet.currencies = new List <PlayerCurrencyData>();

                        JSONObject currenciesJSON = walletJSON.GetField("currencies");

                        for (int i = 0; i < currenciesJSON.Count; i++)
                        {
                            PlayerCurrencyData currency = new PlayerCurrencyData();

                            currency.id             = (int)currenciesJSON.list[i].GetField("id").n;
                            currency.currentBalance = (int)currenciesJSON.list[i].GetField("currentBalance").n;
                            currency.delta          = (int)currenciesJSON.list[i].GetField("delta").n;

                            receivedWallet.currencies.Add(currency);
                        }
                    }

                    receivedWallet.offset = (long)walletJSON.GetField("offset").n;
                    receivedWallet.logic  = walletJSON.GetField("logic").str;
                }

                if (playerDataJSON.HasField("inventory"))
                {
                    JSONObject inventoryJSON = playerDataJSON.GetField("inventory");

                    receivedInventory = new InventoryData();

                    if (inventoryJSON.HasField("items"))
                    {
                        receivedInventory.items = new List <PlayerItemData>();

                        JSONObject itemsJSON = inventoryJSON.GetField("items");

                        for (int i = 0; i < itemsJSON.Count; i++)
                        {
                            PlayerItemData item = new PlayerItemData();

                            item.id     = (int)itemsJSON.list[i].GetField("id").n;
                            item.amount = (int)itemsJSON.list[i].GetField("amount").n;
                            item.delta  = (int)itemsJSON.list[i].GetField("delta").n;

                            receivedInventory.items.Add(item);
                        }
                    }

                    receivedInventory.offset = (long)inventoryJSON.GetField("offset").n;
                    receivedInventory.logic  = inventoryJSON.GetField("logic").str;
                }
            }

            if (responseEvent.data.HasField("gameState"))
            {
                gameStateData = responseEvent.data.GetField("gameState").Print();
            }

            if (responseEvent.data.HasField("externalChange"))
            {
                externalChange = responseEvent.data.GetField("externalChange").b;
            }

            if (responseEvent.data.HasField("deviceVersions"))
            {
                JSONObject deviceVersionsJSON = responseEvent.data.GetField("deviceVersions");
                userDataVersions = new List <UserDataVersion>();

                if (deviceVersionsJSON.Count > 0)
                {
                    for (int i = 0; i < deviceVersionsJSON.Count; i++)
                    {
                        UserDataVersion userDataVersion = new UserDataVersion();
                        userDataVersion.deviceId = deviceVersionsJSON.keys[i];
                        userDataVersion.version  = (int)deviceVersionsJSON.list[i].i;

                        userDataVersions.Add(userDataVersion);
                    }
                }
            }

            if (responseEvent.data.HasField("metaData"))
            {
                JSONObject metaDataJSON = responseEvent.data.GetField("metaData");

                userDataMeta = new UserDataMeta();

                if (metaDataJSON.HasField("serverTime"))
                {
                    userDataMeta.serverTime = metaDataJSON.GetField("serverTime").i;
                }

                if (metaDataJSON.HasField("clientTime"))
                {
                    userDataMeta.clientTime = metaDataJSON.GetField("clientTime").i;
                }

                if (metaDataJSON.HasField("timezoneOffset"))
                {
                    userDataMeta.timezoneOffset = (int)metaDataJSON.GetField("timezoneOffset").i;
                }

                if (metaDataJSON.HasField("deviceModel"))
                {
                    userDataMeta.deviceModel = metaDataJSON.GetField("deviceModel").str;
                }

                if (metaDataJSON.HasField("appVersion"))
                {
                    userDataMeta.appVersion = metaDataJSON.GetField("appVersion").str;
                }
            }

            if (responseEvent.action.ToLower().Trim().Equals("request"))
            {
                UserDataManager.ProcessRequestUserData(receivedWallet, receivedInventory, externalChange, gameStateData, userDataVersions, userDataMeta);
            }
            else if (responseEvent.action.ToLower().Trim().Equals("mergeconflict"))
            {
                UserDataManager.ProcessMergeConflict(receivedWallet, receivedInventory, gameStateData, userDataVersions, userDataMeta);
            }
            else if (responseEvent.action.ToLower().Trim().Equals("merge"))
            {
                UserDataManager.ProcessMergeUserData(userDataVersions);
            }
            else if (responseEvent.action.ToLower().Trim().Equals("lockerror"))
            {
                UserDataManager.ProcessLockError();
            }
            else if (responseEvent.action.ToLower().Trim().Equals("syncerror"))
            {
                UserDataManager.ProcessSyncError();
            }
        }