| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 | using System.Collections.Generic;using Excel2Json;using Fort23.Core;using Fort23.UTool;using GameLogic.Bag;using Utility;public class ShopManger : Singleton<ShopManger>{    bool isBuy = false;    Dictionary<int, List<ShopItemConfig>> shopDic = new Dictionary<int, List<ShopItemConfig>>();    private Dictionary<string, string> productDic = new Dictionary<string, string>();#if UNITY_ANDROID && YouLoftSDK    public string[] adsIdentifiers = new[]    {        "com.xy001.ads.18",        "com.xy001.gem.6",        "com.xy001.gem.30",        "com.xy001.gem.68",        "com.xy001.gem.128",        "com.xy001.gem.328",        "com.xy001.super1.6"    };#elif UNITY_ANDROID && Google    public string[] adsIdentifiers = new[]    {        "com.taptap.xy001.ads.18",        "com.taptap.xy001.gem.6",        "com.taptap.xy001.gem.30",        "com.taptap.xy001.gem.68",        "com.taptap.xy001.gem.128",        "com.taptap.xy001.gem.328",        "com.taptap.xy001.super1.6"    };#endif    /// <summary>    /// 初始化数据    /// </summary>    public ShopManger()    {        ShopItemConfig[] shopItemConfigs = ConfigComponent.Instance.GetAll<ShopItemConfig>();        foreach (var config in shopItemConfigs)        {            List<ShopItemConfig> shopConfigList = null;            if (!shopDic.ContainsKey(config.shopItemGroup))            {                shopConfigList = new List<ShopItemConfig>();                shopDic.Add(config.shopItemGroup, shopConfigList);            }            else            {                shopConfigList = shopDic[config.shopItemGroup];            }            shopConfigList.Add(config);        }    }    public async CTask CustomInit()    {#if UNITY_ANDROID && !UNITY_EDITOR && YouLoftSDK        string json = await YouLoftSDK.Instance.QuerySkuDetail(adsIdentifiers);        LogTool.Error(json);        // 将 JSON 字符串直接反序列化为 List<Product>        if (json != null && json != "")        {            List<object> data = Json.Deserialize(json) as List<object>;            foreach (var o in data)            {                Dictionary<string, object> deserialize = o as Dictionary<string, object>;                Product product = new Product();                product.productId = (string)deserialize["productId"];                product.type = (string)deserialize["type"];                product.title = (string)deserialize["title"];                product.name = (string)deserialize["name"];                product.description = (string)deserialize["description"];                product.price = (string)deserialize["price"];                product.priceAmountMicros = (long)deserialize["price_amount_micros"];                product.priceCurrencyCode = (string)deserialize["price_currency_code"];                product.skuDetailsToken = (string)deserialize["skuDetailsToken"];                if (!productDic.ContainsKey(product.productId))                    productDic.Add(product.productId, product);            }        }#elif UNITY_ANDROID && Google        GetPrice();#endif        InitShop();    }    public void GetPrice()    {#if UNITY_ANDROID && Google        foreach (var adsIdentifier in adsIdentifiers)        {            if (!productDic.ContainsKey(adsIdentifier))            {                string price = IAPManager.Instance.GetPrice(adsIdentifier);                if (price != "")                    productDic.Add(adsIdentifier, price);            }        }#endif    }    public string GetPrice(string productId)    {        if (productDic.ContainsKey(productId))            return productDic[productId];        return "";    }    public List<AccountFileInfo.ShopData> GetAllShopConfig()    {        GetPrice();        InitShop();        return AccountFileInfo.Instance.playerData.shopDatas;    }    public void InitShop()    {        foreach (var keyValuePair in shopDic)        {            AccountFileInfo.ShopData shopData = GetDbShop(keyValuePair.Key);            if (shopData != null && shopData.refreshTime != -1 &&                PlayerManager.Instance.serverTime > shopData.refreshTime)            {                AccountFileInfo.Instance.playerData.shopDatas.Remove(shopData);                shopData = null;            }            //初始化商店            if (shopData == null)            {                shopData = RefenceShop(keyValuePair.Key);                AccountFileInfo.Instance.playerData.shopDatas.Add(shopData);            }            else            {                checkShopItemUnlock(shopData);            }        }        AccountFileInfo.Instance.playerData.shopDatas.Sort((AccountFileInfo.ShopData a, AccountFileInfo.ShopData b) =>        {            ShopConfig aa = ConfigComponent.Instance.Get<ShopConfig>(a.id);            ShopConfig bb = ConfigComponent.Instance.Get<ShopConfig>(b.id);            return aa.pageSortNum.CompareTo(bb.pageSortNum);        });        AccountFileInfo.Instance.SavePlayerData();    }    public void checkShopItemUnlock(AccountFileInfo.ShopData shopData)    {        List<AccountFileInfo.ShopItem> removeItems = new List<AccountFileInfo.ShopItem>();        foreach (var shopItem in shopData.shopItemList)        {            if (shopItem.endTime != -1 && PlayerManager.Instance.serverTime >= shopItem.endTime)            {                removeItems.Add(shopItem);            }        }        foreach (var removeItem in removeItems)        {            shopData.shopItemList.Remove(removeItem);        }    }    public AccountFileInfo.ShopData RefenceShop(int id)    {        AccountFileInfo.ShopData shopData = new AccountFileInfo.ShopData();        ShopConfig shopConfig = ConfigComponent.Instance.Get<ShopConfig>(id);        shopData.id = id;        if (shopConfig.RefreshType == 0)        {            shopData.refreshTime = -1;        }        else        {            shopData.refreshTime = TimeHelper.GetBaseRefreshTime(PlayerManager.Instance.serverTime);        }        shopDic.TryGetValue(id, out List<ShopItemConfig> shopConfigList);        foreach (var shopItemConfig in shopConfigList)        {            AccountFileInfo.ShopItem shopItem = new AccountFileInfo.ShopItem();            shopItem.id = shopItemConfig.ID;            shopItem.buyCount = 0;            if (shopItemConfig.continueTime > 0)            {                shopItem.endTime = PlayerManager.Instance.serverTime + shopItemConfig.continueTime * 60 * 1000;            }            shopData.shopItemList.Add(shopItem);        }        return shopData;    }    public AccountFileInfo.ShopData GetDbShop(int id)    {        foreach (var playerDataShopData in AccountFileInfo.Instance.playerData.shopDatas)        {            if (playerDataShopData.id == id)            {                return playerDataShopData;            }        }        return null;    }    public AccountFileInfo.ShopItem GetShopItem(int id)    {        foreach (var shopData in AccountFileInfo.Instance.playerData.shopDatas)        {            foreach (var shopItem in shopData.shopItemList)            {                if (shopItem.id == id)                {                    return shopItem;                }            }        }        return null;    }    public async CTask<List<ItemInfo>> BuyItem(int shopItemId, int count)    {        if (isBuy)        {            return null;        }        isBuy = true;        ShopItemConfig shopItemConfig = ConfigComponent.Instance.Get<ShopItemConfig>(shopItemId);        // ShopItemConfig shopItemConfig = ConfigComponent.Instance.Get<ShopItemConfig>(shopConfig.shopItemID);        AccountFileInfo.ShopData shopData = GetDbShop(shopItemConfig.shopItemGroup);        AccountFileInfo.ShopItem shopItem = null;        foreach (var s in shopData.shopItemList)        {            if (s.id == shopItemId)            {                shopItem = s;                break;            }        }        if (shopData == null || shopItem == null                             || (shopData.refreshTime != -1 && PlayerManager.Instance.serverTime > shopData.refreshTime)                             || (shopItem.endTime != -1 && PlayerManager.Instance.serverTime > shopItem.endTime)                             || (shopItemConfig.buyCount != -1 && shopItem.buyCount >= shopItemConfig.buyCount)           )        {            isBuy = false;            return null;        }        bool isOk = false;        //免费        if (shopItemConfig.costItemId == 0)        {            isOk = true;        }        //人名币购买        else if (shopItemConfig.costItemId == 9999)        {#if UNITY_ANDROID && !UNITY_EDITOR            // var dic = new Dictionary<string, string>();            // dic.Add("ShopItemId",shopItemConfig.ID.ToString());            // YouLoftSDK.Instance.CustomEvent("OnclickBuyItem",dic);            // isOk = await YouLoftSDK.Instance.Buy(shopItemConfig.giftID);              isOk = true;#elif UNITY_EDITOR            isOk = true;#endif        }        //看广告        else if (shopItemConfig.costItemId == 1007)        {            isOk = true;#if UNITY_ANDROID && !UNITY_EDITOR&& Taptap            if (TakuSDKManager.Instance.IsReady())            {                isOk = await TakuSDKManager.Instance.ShowAutoAd();            }            else            {                isOk = false;            }#endif            var dic = new Dictionary<string, string>();            dic.Add("buyItem", shopItemConfig.ID.ToString());            if (isOk)            {                dic = new Dictionary<string, string>();                dic.Add("buyItem", shopItemConfig.ID.ToString());            }        }        else        {            if (PlayerManager.Instance.BagController.DeductItem(shopItemConfig.costItemId,                    shopItemConfig.price * count))            {                isOk = true;            }        }        if (isOk)        {            List<ItemInfo> itemList = new List<ItemInfo>();            shopItem.buyCount += count;            for (var i = 0; i < shopItemConfig.itemId.Length; i++)            {                ItemInfo itemInfo = new ItemInfo(shopItemConfig.itemId[i], shopItemConfig.itemCount[i] * count);                itemList.Add(itemInfo);            }            PlayerManager.Instance.BagController.AddItem(itemList);            //更新商店数据            AccountFileInfo.Instance.SavePlayerData();            isBuy = false;            if (shopItemConfig.costItemId == 1031)            {                var dic = new Dictionary<string, string>();                dic.Add("ShopItemId", shopItemConfig.ID.ToString());            }            return itemList;        }        else        {            isBuy = false;            return null;        }    }}
 |