浏览代码

修改了钻石兑换种子功能

Sunny 3 年之前
父节点
当前提交
83e2bcab85
共有 2 个文件被更改,包括 1403 次插入1317 次删除
  1. 1383 1313
      assets/Script/public/GameData.js
  2. 20 4
      assets/Script/public/ManageUI.js

+ 1383 - 1313
assets/Script/public/GameData.js

@@ -1,1368 +1,1438 @@
-var reGameStates = require('GameStates');
-var AConfig = require('../Config');
+var reGameStates = require('GameStates')
+var AConfig = require('../Config')
 
-import utils from "../Network/netUtils";
-import GameNet from "../Network/GameNet"
-import gameToast from "../Network/gameToast"
+import utils from '../Network/netUtils'
+import GameNet from '../Network/GameNet'
+import gameToast from '../Network/gameToast'
 
 //全局数据类
 cc.Class({
-    extends: cc.Component,
-    properties: {
-        //记录全部道路的index
-        GameData_highwayIndex: {
-            default: [],
-            type: [cc.Integer],
-            visible: false,
-            serializable: false,
-        },
-
-        //记录建筑物存储的信息
-        GameData_buildings: {
-            default: [],
-            visible: false,
-            serializable: false,
-        },
-        HighWayPrefabs: cc.Prefab,
-        //MyMapNode
-        //建筑物的节点
-        BuildingsParent: {
-            default: null,
-            type: cc.Node,
-        },
-        ManageUI: {
-            default: null,
-            type: cc.Node,
-        },
-
-        GameVersion: {
-            default: -1,
-            type: cc.Integer,
-        },
-
-        //读取数据
-        readData: {
-            default: null,
-            visible: false,
-        },
-
-        /**
-         * 接口
-         * todo cnt和snb 由钱包读取
-         */
-        CNT: {
-            default: 0,
-            visible: false,
-        },
-        SNB: {
-            default: 0,
-            visible: false,
-        },
-        //站内收益
-        CNTDrawBalance: {
-            default: 0,
-            visible: false,
-        },
-
-        //读取的土地文件
-        ConfigLand: {
-            default: null,
-            visible: false
-        },
-
-
-
-        toast: null,
-        scheduleObj: null,
-        toastCallback: null,
-        isStart: true,
-        isInit: false,
-
-        /**
-         * 限制重复触发支付, 正在支付中转态,
-         */
-        isPlayingCnt: false,
-        isPlayingSnb: false,
-
-
-        /**
-         * 处理请求
-         */
-        //现在多次触发
-        isOnAddFruit: false,
-        isOnSaleFruit: false,
-        isOnGrantFruit: false,
-
-        //自动存储数据
-        AutoSaveData: null
-
+  extends: cc.Component,
+  properties: {
+    //记录全部道路的index
+    GameData_highwayIndex: {
+      default: [],
+      type: [cc.Integer],
+      visible: false,
+      serializable: false,
     },
-    onLoad() {
-        //初始化GameData全局变量
-        GlobalD.GameData = this;
-        this.GameConfig();
-    },
-    GameConfig() {
-        this.AddBuildingCost = 5;
-        this.RemoveBuildingCost = 5;
 
-        //
-        this.Dapp = {
-            UserInfo: null
-        }
+    //记录建筑物存储的信息
+    GameData_buildings: {
+      default: [],
+      visible: false,
+      serializable: false,
     },
-    start() {
-        cc.loader.loadRes("prefab/gameToast", function (err, texture) {
-            this.toast = cc.instantiate(texture);
-            this.toast.parent = cc.find("Canvas/UICamera");
-            this.toast.zIndex = 999;
-            this.toast.active = false;
-            this.scheduleObj = this.schedule(() => {
-                this.updateToast();
-            }, 1);
-        }.bind(this));
-
-        this._tiledMap = GlobalD.TiledMap._tiledMap;
-        //调用初始化dapp
-        this.isDebugMode(GlobalD.dapp);
+    HighWayPrefabs: cc.Prefab,
+    //MyMapNode
+    //建筑物的节点
+    BuildingsParent: {
+      default: null,
+      type: cc.Node,
     },
-    /**
-     * 根据 不存在dapp 的话,使用本地测试
-     * @param {*} bInit 
-     */
-    isDebugMode: function (bInit) {
-        if (bInit) {
-            //读取网络数据
-            try {
-                GlobalD.dapp.cntBalance().then((cntBalance) => {
-                    //会延迟返回
-                    // console.log("获取cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
-                    GlobalD.GameData.SetCNT(cntBalance);
-                });
-            } catch (err) {
-                console.error(err) // 初始化失败,运行环境不是钱包环境
-            }
-            //登录时候已经初始化好snb了
-            this.SNB = GlobalD.UserInfo.snb;
-
-            this.readData = userData.readData;
-            // cc.log('playerPullInfo 读取到数据?:', this.readData)
-            this.InitNextworkData();
-            this.InitSceneInfo();
-
-            // 自动存储数据
-            /**
-             * todo 如果退出游戏,触发一次存储。
-             */
-            this.AutoSaveData = function () {
-                this.pushData(true);
-            };
-            this.schedule(this.AutoSaveData, 15);
-        } else {
-            // 清除
-            cc.log("本地数据重新开始,并且不初始化");
-            // this.onClearAllData();
-            this.Init();
-            this.InitSceneInfo();
-            this.AutoSaveData = function () {
-                this.pushData(false);
-            };
-            this.schedule(this.AutoSaveData, 10);
-        }
+    ManageUI: {
+      default: null,
+      type: cc.Node,
     },
 
-    getData: function () {
-        //如果开局没有读取到网络数据,就这里初始化
-        if (userData.readData == null) {
-            cc.log("本地数据:", cc.sys.localStorage.getItem('userdata'));
-            let userdata = cc.sys.localStorage.getItem('userdata');
-            if (userdata) {
-                this.readData = JSON.parse(userdata);
-            }
-            this.Init();
-            this.InitSceneInfo();
-        } else {
-            this.readData = userData.readData;
-            cc.log('读取到数据?:', this.readData)
-            this.Init();
-            this.InitSceneInfo();
-        }
-
-    },
-
-    InitSceneInfo() {
-        //根据顺序生成
-        //初始化时间ui
-        cc.find("GameNode/ManageTimer").getComponent('ManageTimer').Init();
-        //初始化金钱ui,gold,diamond, cnt,snb,
-        cc.find("GameNode/ManageGolden").getComponent('ManageGolden').InitManageGlodenUI();
-        // //初始化地图物件
-        // cc.find("GameNode/ManageMap").getComponent('ManageMap').InitManageMap();
-        GlobalD.TiledMap.onInitSolid();
-
-        //初始化生成房屋 
-        /**
-         * dapp设定: 如果固定土地冲突,删除冲突的建筑和回收仓库
-         */
-        this.ManageUI.getComponent('ManageBuildings').InitBuildings();
-
-        //初始化道路
-        /**
-         * 原本游戏设定是先生产道路,现在为了方便处理等房屋生产后,再处理公路
-         * dapp设定: 如果固定土地冲突,删除对应的公路
-         */
-        this.onSpawnHighway();
-
-        //初始化生成人物
-        /**
-        * dapp设定: 如果固定土地位置冲突,把人物生成位置放置到主路
-        * onSpawnWorkerAIFromStoredData 此函数处理
-        */
-        cc.find('GameNode/ManageWorker').getComponent('ManageWorker').InitWorkerAI();
-
-        let _BFirstLoadGame = this.readData ? this.readData.BFirstLoadGame : 0;
-        //初始化新手教学
-        GlobalD.ManageTask.InitTask(_BFirstLoadGame);
-
-        this.ManageUI.getComponent('ManageUI').Init();
-
-    },
-    InitNextworkData() {
-        // console.log("this.readData", this.readData);
-        this.Golden = this.readData.Golden;
-        this.Diamond = this.readData.Diamond;
-        this.shareGive = this.readData.shareGive;
-        //签到分享给钻石金币
-        this.signInGive = this.readData.signInGive;
-        //每个月 给的 低保
-        this.EveryGive = this.readData.EveryGive;
-        //公共分享
-        this.publicGive = this.readData.publicGive;
-
-        // cc.log('初始化网络数据');
-        //读取日期数据
-        this.GameYear = this.readData.GameYear;
-        this.GameMonth = this.readData.GameMonth;
-        this.GameDay = this.readData.GameDay;
-
-        //读取金币
-        this.Golden = this.readData.Golden;
-        //读取钻石
-        this.Diamond = this.readData.Diamond;
-        // cc.log('this.readData.Diamond', this.readData.Diamond);
-        //读取工人等级
-        this.WorkerLV = this.readData.WorkerLV;
-        //工人数量
-        this.WorkerNum = this.readData.WorkerNum;
-        //工人容量
-        this.WorkerCapacity = this.readData.WorkerCapacity;
-        this.GameDate = this.readData.GameDate;
-        this.LastTimeEveryDayRewardsDate = this.readData.LastTimeEveryDayRewardsDate;
-        this.LastTimeLuckDate = this.readData.LastTimeLuckDate;
-        this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray;//.split('_');
-        this.TerritoryStateArray = this.readData.TerritoryStateArray;//.split('_');
-        //面板状态
-        this.BuildingStateArray = this.readData.BuildingStateArray;//.split('_');
-
-        //解锁设置为 不用解锁
-        // this.BuildingLockStateArray.forEach((value, index, array) => {
-        //     array[index] = 1;
-        // })
-        this.BuildingLockStateArray = this.readData.BuildingLockStateArray;//.split('_');
-        this.BuildingNumArray = this.readData.BuildingNumArray;//.split('_');
-        this.DiamondNumArray = this.readData.DiamondNumArray;//.split('_');
-        this.FoodTradeState = this.readData.FoodTradeState;
-        this.WoodTradeState = this.readData.WoodTradeState;
-        this.MineralTradeState = this.readData.MineralTradeState;
-        //工人工作信息
-        if (this.readData.characterInfoArray) {
-            this.CharacterInfoArray = this.readData.characterInfoArray;
-        } else {
-            this.CharacterInfoArray = [];
-        }
-        //道路数据
-        if (this.readData.highwayIndex)
-            this.GameData_highwayIndex = this.readData.highwayIndex;
-
-        //建筑物数据
-        if (this.readData.buildingsInfo)
-            this.GameData_buildings = this.readData.buildingsInfo;
-
-        this.LotteryTimes = this.readData.LotteryTimes;
-        //任务
-        if (this.readData.TaskIconCountClick)
-            task.TaskIconCountClick = this.readData.TaskIconCountClick;
-    },
-    /**
-     * 初始化
-     */
-    Init: function () {
-        let _BFirstLoadGame = false;//  this.readData ? this.readData.BFirstLoadGame : 0;
-        //date
-        this.GameYear = 0;
-        this.GameMonth = 0;
-        this.GameDay = 0;
-        this.GameDate = '0000/00/01';
-        /**
-         * 新增 CNT 和 SNB
-         */
-        this.CNT = 0;
-        this.SNB = 0;
-        this.Golden = 2000;
-        this.Diamond = 100;
-        this.WorkerLV = 0;
-        this.WorkerNum = 0;
-        this.CharacterInfoArray = [];
-        this.WorkerCapacity = 5;
-        this.TerritoryStateArray = [1, 1, 1, 1, 1, 1, 1, 1];//测试,全开地图
-        /**
-         * 添加建筑往后添加,到时候ManageBuildings 脚本 会初始化根据顺序
-         * BuildingStateArray---相关 GetBuildingStateArray 获取建筑状态
-         * BuildingNumArray  ---相关 GetBuildingNumArray 获取建筑数量
-         * BuildingFrameArray ---相关 ManageUI  添加面板是否解锁之类的相关预制  
-         */
-        this.BuildingStateArray = [
-            1, //公路
-            1,  //路铲
-            1,  //拆迁
-            1,  //农舍
-            1,  //单元楼
-            1,  //别墅
-            1, //农田
-            1,//伐木场
-            1, //矿坑
-            1, //加工厂
-            1,//冷饮摊
-            1,//贩卖机
-            1,//面包房
-            1,//早餐车
-            1, //饮茶店
-            1,//点心店
-            1, //美食店
-            1,//西餐厅
-            1, //花店
-            1, //美发店
-            1,//洋装店
-            1, //珠宝店
-            1, //电影院
-            1,//路灯
-            1, //绿化带
-            1, //花坛
-            1,//喷泉
-            1, //警察局
-            1,//游乐场
-            1,  //蓝色城堡
-            1, //粉色城堡
-            1, //Holy Farmland
-            1 //Holy Farmland seed
-        ];
-        this.BuildingLockStateArray = [
-            1, //公路
-            1,  //路铲
-            1,  //拆迁
-            1,  //农舍
-            0,  //单元楼
-            0,  //别墅
-            1, //农田
-            0,//伐木场
-            0, //矿坑
-            1, //加工厂
-            0,//冷饮摊
-            0,//贩卖机
-            0,//面包房
-            0,//早餐车
-            0, //饮茶店
-            0,//点心店
-            0, //美食店
-            0,//西餐厅
-            0, //花店
-            0, //美发店
-            0,//洋装店
-            0, //珠宝店
-            0, //电影院
-            1,//路灯
-            1, //绿化带
-            1, //花坛
-            0,//喷泉
-            0, //警察局
-            0,//游乐场
-            0,  //蓝色城堡
-            0, //粉色城堡
-            1, //Holy Farmland
-            1, //Holy Farmland seed
-        ];
-        //建筑物数量
-        this.BuildingNumArray = [
-            0, //公路
-            0,  //路铲
-            0,  //拆迁
-            4,  //农舍
-            1,  //单元楼
-            1,  //别墅
-            4, //农田
-            1,//伐木场
-            1, //矿坑
-            2, //加工厂
-            2,//冷饮摊
-            1,//贩卖机
-            1,//面包房
-            1,//早餐车
-            1, //饮茶店
-            1,//点心店
-            1, //美食店
-            1,//西餐厅
-            1, //花店
-            1, //美发店
-            1,//洋装店
-            1, //珠宝店
-            1, //电影院
-            1,//路灯
-            1, //绿化带
-            1, //花坛
-            1,//喷泉
-            1, //警察局
-            1,//游乐场
-            1,  //蓝色城堡
-            1,  //粉色城堡
-            1, //Holy Farmland
-            1, //Holy Farmland seed
-        ];
-
-        this.DiamondNumArray = AConfig.DiamondArray;
-        //todo 钻石消耗默认值
-        this.DiamondNumArray.forEach((value, index, array) => {
-            array[index] = 0;
-        })
-        cc.log('钻石消耗默认值', this.DiamondNumArray);
-        this.EveryDayRewardsArray = [0, 0, 0, 0, 0, 0, 0];
-
-        this.LastTimeEveryDayRewardsDate = '0000/00/00';
-        this.LastTimeLuckDate = '0000/00/00';
-
-        this.FoodTradeState = 1;
-        this.WoodTradeState = 1;
-        this.MineralTradeState = 1;
-        //转盘分享给钻石金币
-        this.shareGive = [200, 5];
-        //签到分享给钻石金币
-        this.signInGive = [200, 5];
-        //每个月 给的 低保
-        this.EveryGive = [500, 10];
-        //公共分享
-        this.publicGive = [200, 50];
-        //每天抽奖次数
-        this.LotteryTimes = 10;
-
-        // 1 === _BFirstLoadGame
-        if (_BFirstLoadGame) {
-            console.log("this.readData", this.readData);
-            // cc.log('初始化网络数据');
-            //读取日期数据
-            this.GameYear = this.readData.GameYear;
-            this.GameMonth = this.readData.GameMonth;
-            this.GameDay = this.readData.GameDay;
-
-            /**
-             * 接口
-             * todo cnt和snb 由钱包读取
-             */
-            this.CNT = 0;
-            this.SNB = 0;
-
-            //读取金币
-            this.Golden = this.readData.Golden;
-            //读取钻石
-            this.Diamond = this.readData.Diamond;
-            // cc.log('this.readData.Diamond', this.readData.Diamond);
-            //读取工人等级
-            this.WorkerLV = this.readData.WorkerLV;
-            //工人数量
-            this.WorkerNum = this.readData.WorkerNum;
-            //工人容量
-            this.WorkerCapacity = this.readData.WorkerCapacity;
-            this.GameDate = this.readData.GameDate;
-            this.LastTimeEveryDayRewardsDate = this.readData.LastTimeEveryDayRewardsDate;
-            this.LastTimeLuckDate = this.readData.LastTimeLuckDate;
-            this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray;//.split('_');
-            this.TerritoryStateArray = this.readData.TerritoryStateArray;//.split('_');
-            //面板状态
-            this.BuildingStateArray = this.readData.BuildingStateArray;//.split('_');
-
-            //解锁设置为 不用解锁
-            this.BuildingLockStateArray.forEach((value, index, array) => {
-                array[index] = 1;
-            })
-            // this.BuildingLockStateArray = this.readData.BuildingLockStateArray.split('_');
-            this.BuildingNumArray = this.readData.BuildingNumArray;//.split('_');
-            this.DiamondNumArray = this.readData.DiamondNumArray;//.split('_');
-            this.FoodTradeState = this.readData.FoodTradeState;
-            this.WoodTradeState = this.readData.WoodTradeState;
-            this.MineralTradeState = this.readData.MineralTradeState;
-
-            //工人工作信息
-            if (this.readData.characterInfoArray)
-                this.CharacterInfoArray = this.readData.characterInfoArray;
-            //道路数据
-            if (this.readData.highwayIndex)
-                this.GameData_highwayIndex = this.readData.highwayIndex;
-
-            //建筑物数据
-            if (this.readData.buildingsInfo)
-                this.GameData_buildings = this.readData.buildingsInfo;
-
-            this.LotteryTimes = this.readData.LotteryTimes;
-            //任务
-            if (this.readData.TaskIconCountClick)
-                task.TaskIconCountClick = this.readData.TaskIconCountClick;
-            //测试5W
-            // this.PlusDiamond(50000);
-        }
+    GameVersion: {
+      default: -1,
+      type: cc.Integer,
     },
 
-    //GET / SET /Plus
-    GetGameDate: function () {
-        return this.GameDate;
-    },
-    SetGameDate: function (num) {
-        this.GameDate = num;
-    },
-    PlusGameDate: function (num) {
-        this.GameDate += num;
-    },
-    GetGolden: function () {
-        return parseInt(this.Golden);
-    },
-    GetGoldenCallBack(_CallBack) {
-        if (_CallBack)
-            _CallBack({ resGolden: parseInt(this.Golden) });
-    },
-    SetGolden: function (Num) {
-        let LastMoney = this.Golden;
-        this.Golden = Num;
-        let CurrentMoney = Num;
-        this.ManageUI.getComponent('ManageUI').GoldenChangeCallBack(this.GetGolden(), LastMoney, CurrentMoney);
-    },
-    PlusGolden: function (Num) {
-        if (this.Golden + Num < 0) {
-            this.SetGolden(0);
-        }
-        else {
-            this.SetGolden(this.Golden + Num);
-        }
-        // task.task50W();
-    },
-    GetDiamond: function () {
-        return parseInt(this.Diamond);
-    },
-    SetDiamond: function (num) {
-        let LastMoney = this.Diamond;
-        this.Diamond = num;
-        let CurrentMoney = num;
-        this.ManageUI.getComponent('ManageUI').DiamondChangeCallBack(this.GetDiamond(), LastMoney, CurrentMoney);
-    },
-    PlusDiamond: function (num) {
-        if (this.Diamond + num < 0) {
-            this.SetDiamond(0);
-        }
-        else {
-            this.SetDiamond(this.Diamond + num);
-        }
+    //读取数据
+    readData: {
+      default: null,
+      visible: false,
     },
 
     /**
-     * 游戏里面的cnt 和神农呗
+     * 接口
+     * todo cnt和snb 由钱包读取
      */
-    GetCNT: function () {
-        return parseFloat(this.CNT);
-    },
-    SetCNT: function (Num) {
-        this.CNT = Num;
-        this.ManageUI.getComponent('ManageUI').CNTChangeCallBack(this.CNT);
+    CNT: {
+      default: 0,
+      visible: false,
     },
-    GetSNB: function () {
-        return parseFloat(this.SNB);
+    SNB: {
+      default: 0,
+      visible: false,
     },
-    SetSNB: function (Num) {
-        this.SNB = Num;
-        this.ManageUI.getComponent('ManageUI').SNBChangeCallBack(this.SNB);
-    },
-
-
-    GetWorkerLV: function () {
-        return parseInt(this.WorkerLV);
-    },
-    SetWorkerLV: function (num) {
-        this.WorkerLV = num;
-    },
-    PlusWorkerLV: function (num) {
-        this.WorkerLV += num;
-    },
-    GetWorkerNum: function () {
-        return parseInt(this.WorkerNum);
-    },
-    SetWorkerNum: function (num) {
-        this.WorkerNum = num;
-    },
-    PlusWorkerNum: function (num) {
-        this.WorkerNum += num;
-    },
-    GetLastTimeEveryDayRewardsDate: function () {
-        return this.LastTimeEveryDayRewardsDate;
-    },
-    //获取转盘 时间
-    GetLastTimeLuckDate: function () {
-        return this.LastTimeLuckDate;
-    },
-    //设置转盘时间
-    SetLastTimeLuckDate: function (DateString) {
-        this.LastTimeLuckDate = DateString;
-    },
-    SetLastTimeEveryDayRewardsDate: function (DateString) {
-        this.LastTimeEveryDayRewardsDate = DateString;
-    },
-
-    //工人信息数组
-    GetWorkerCharacterInfoArray: function () {
-        return this.CharacterInfoArray;
-    },
-    SetWorkerCharacterInfoArray: function (item) {
-        this.CharacterInfoArray = item;
-    },
-
-    /*** */
-    GetWorkerCapacity: function () {
-        return parseInt((this.WorkerCapacity));
-    },
-    SetWorkerCapacity: function (num) {
-        this.WorkerCapacity = num;
-    },
-    PlusWorkerCapacity: function (num) {
-        this.WorkerCapacity += num;
-    },
-    GetTerritoryStateArray: function () {
-        return this.TerritoryStateArray;
-    },
-    SetTerritoryStateArray: function (aTerritoryStateArray) {
-        this.TerritoryStateArray = aTerritoryStateArray;
-    },
-    PlusTerritoryStateArray: function (Item) {
-        this.TerritoryStateArray.push(Item);
-    },
-    GetBuildingStateArray: function () {
-        return this.BuildingStateArray;
-    },
-    SetBuildingStateArray: function (aBuildingStateArray) {
-        this.BuildingStateArray = aBuildingStateArray;
-    },
-    PlusBuildingStateArray: function (Item) {
-        this.BuildingStateArray.push(Item);
-    },
-    GetBuildingLockStateArray: function () {
-        return this.BuildingLockStateArray;
-    },
-    SetBuildingLockStateArray: function (aArray) {
-        this.BuildingLockStateArray = aArray;
-    },
-    PlusBuildingLockStateArray: function (Item) {
-        this.BuildingLockStateArray.push(Item);
+    //站内收益
+    CNTDrawBalance: {
+      default: 0,
+      visible: false,
     },
 
-    GetBuildingNumArray: function () {
-        return this.BuildingNumArray;
-    },
-    SetBuildingNumArray: function (aBuildingNumArray) {
-        this.BuildingNumArray = aBuildingNumArray;
-    },
-    PlusBuildingNumArray: function (Item) {
-        this.BuildingNumArray.push(Item);
+    //读取的土地文件
+    ConfigLand: {
+      default: null,
+      visible: false,
     },
-    //操作钻石数据
-    GetDiamondNumArray: function () {
-        return this.DiamondNumArray;
-    },
-    SetDiamondNumArray: function (aDiamondNumArray) {
-        this.DiamondNumArray = aDiamondNumArray;
-    },
-    GetEveryDayRewardsArray: function () {
-        return this.EveryDayRewardsArray;
-    },
-    SetEveryDayRewardsArray: function (aArray) {
-        this.EveryDayRewardsArray = aArray;
-    },
-    PlusEveryDayRewardsArray: function (Item) {
-        this.EveryDayRewardsArray.push(Item);
-    },
-    GetFoodTradeState: function () {
-        return parseInt((this.FoodTradeState));
-    },
-    SetFoodTradeState: function (num) {
-        this.FoodTradeState = num;
-    },
-    PlusFoodTradeState: function (num) {
-        this.FoodTradeState += num;
-    },
-    GetWoodTradeState: function () {
-        return parseInt((this.WoodTradeState));
-    },
-    SetWoodTradeState: function (num) {
-        this.WoodTradeState = num;
-    },
-    PlusWoodTradeState: function (num) {
-        this.WoodTradeState += num;
-    },
-    GetMineralTradeState: function () {
-        return parseInt((this.MineralTradeState));
-    },
-    SetMineralTradeState: function (num) {
-        this.MineralTradeState = num;
-    },
-    PlusMineralTradeState: function (num) {
-        this.MineralTradeState += num;
-    },
-    GetLotteryTimes: function () {
-        return parseInt((this.LotteryTimes));
-    },
-    SetLotteryTimes: function (num) {
-        this.LotteryTimes = num;
-    },
-    PlusLotteryTimes: function (num) {
-        this.LotteryTimes += num;
-    },
-
 
-    //初始化道路
-    onSpawnHighway() {
-        // 获取InitPoint层
-        let InitPos = this._tiledMap.getLayer('InitPoint');
-        InitPos.enabled = false;
-
-        //创建公路数据
-        if (this.readData && this.readData.allHighwayStylesAndIndex) {
-            //保存到内存中
-            this.GameData_highwayIndex = this.readData.highwayIndex;
-            //先赋值道路的对象数组
-            let _AllHighwayAIndex = Object.assign([], this.readData.allHighwayStylesAndIndex);
-            //获取最后建造公路的层级
-            this.HighwayLayer = this._tiledMap.getLayer('Highway');
-            for (let i = 0; i < _AllHighwayAIndex.length; i++) {
-                let _tiledPos = GlobalD.TiledMap.analyticalIndexData(_AllHighwayAIndex[i].highwayInfoIndex);
-                /**
-                 * 解决固定土地时候,道路 和房子 冲突
-                 * 
-                 */
-                if (GlobalD.game.getManageGameIndexArrayAt(cc.v2(_tiledPos.x, _tiledPos.y))) {
-                    continue;
-                }
-                let highwayTemp = cc.instantiate(this.HighWayPrefabs);
-                highwayTemp.parent = this.HighwayLayer.node;
-                let tiledTile = highwayTemp.addComponent('TiledTile');
-                tiledTile.x = _tiledPos.x;
-                tiledTile.y = _tiledPos.y;
-                //地图设置可行走区域公路设置
-                AStar.setMapSolid(_tiledPos.x, _tiledPos.y, 0);
-                // _buildId ==0 是公路
-                let _buildId = 0;
-                let occupyTemp = cc.v2(_buildId, _AllHighwayAIndex[i].highwayInfoIndex);
-                GlobalD.game.OccupyArray.push(occupyTemp);
-                highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(_AllHighwayAIndex[i].highwayInfoType);
-
-                GlobalD.game.AllHighwayStylesAndIndex.push(_AllHighwayAIndex[i]);
+    toast: null,
+    scheduleObj: null,
+    toastCallback: null,
+    isStart: true,
+    isInit: false,
 
-            }
-            // console.log("end");
-        } else {
-            //如果用户没有存储数据
-            //根据InitPoint 的数据,创建初始化的地图数据 的初始化数据
-
-            this.HighwayLayer = this._tiledMap.getLayer('Highway');
-            for (var i = 0; i < 32; i++) {
-                //去除中间两条路
-                if (i == 16 || i == 17) continue;
-                for (var j = 0; j < 32; j++) {
-                    let tilesPos = cc.v2(i, j);
-
-                    if (InitPos.getTileGIDAt(tilesPos)) {
-
-
-                        let index = GlobalD.TiledMap.getIndex(tilesPos);
-                        this.GameData_highwayIndex.push(index);
-
-                        let highwayTemp = cc.instantiate(this.HighWayPrefabs);
-                        highwayTemp.parent = this.HighwayLayer.node;
-                        let tiledTile = highwayTemp.addComponent('TiledTile');
-                        tiledTile.x = tilesPos.x;
-                        tiledTile.y = tilesPos.y;
-                        // cc.log('onSpawnHighway2');
-                        //地图设置可行走区域公路设置
-                        AStar.setMapSolid(tilesPos.x, tilesPos.y, 0);
-                        // _buildId ==0 是公路
-                        let _buildId = 0;
-                        let occupyTemp = cc.v2(_buildId, index);
-                        GlobalD.game.OccupyArray.push(occupyTemp);
-
-                        let tile = InitPos.getTiledTileAt(tilesPos.x, tilesPos.y, true);
-
-                        let _MoveType = reGameStates.HighwayType.moveX;
-                        // if (tile.gid == 15) {
-                        //     _MoveType = reGameStates.HighwayType.moveX;
-                        // } else 
-                        if (tile.gid == 16) {
-                            _MoveType = reGameStates.HighwayType.moveY;
-                        } else if (tile.gid == 11) {
-                            _MoveType = reGameStates.HighwayType.ZebraCrossingX;
-                        } else if (tile.gid == 12) {
-                            _MoveType = reGameStates.HighwayType.ZebraCrossingY;
-                        }
-                        // return;
-                        //更换公路样式
-                        GlobalD.game.onCreateDifferentRoadStyles({
-                            _buildId: _buildId,
-                            _highwayType: _MoveType,
-                            _roadIndex: index,
-                            _hightwayNode: highwayTemp
-                        });
-                    }
-                }
-            }
-        }
-        //外面的两条路
-        let initRoad = this._tiledMap.getLayer('Road');
-        initRoad.enabled = false;
-        for (var i = 16; i < 18; i++) {
-            for (var j = 0; j < 32; j++) {
-                let tilesPos = cc.v2(i, j);
-                // cc.log('road tilesPos',tilesPos)
-                if (initRoad.getTileGIDAt(tilesPos)) {
-                    let index = GlobalD.TiledMap.getIndex(tilesPos);
-                    this.GameData_highwayIndex.push(index);
-                    let highwayTemp = cc.instantiate(this.HighWayPrefabs);
-                    highwayTemp.parent = this.HighwayLayer.node;
-                    let tiledTile = highwayTemp.addComponent('TiledTile');
-                    tiledTile.x = tilesPos.x;
-                    tiledTile.y = tilesPos.y;
-                    // cc.log('initRoad');
-                    //地图设置可行走区域公路设置
-                    AStar.setMapSolid(tilesPos.x, tilesPos.y, 0);
-                    let _buildId = 0;
-                    let occupyTemp = cc.v2(_buildId, index);
-                    GlobalD.game.OccupyArray.push(occupyTemp);
-                    //更换公路样式
-                    // if (j >= 25 && j <= 27 || j >= 19 && j <= 21 || j >= 9 && j <= 11)
-                    //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.none);
-                    // else
-                    //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveY);
-
-                }
-            }
-        }
-    },
-
-    //清除所有的数据
-    onClearAllData() {
-        this.unschedule(this.AutoSaveData);
-        //任务索引
-        cc.sys.localStorage.removeItem('userdata');
-        //跳回登录场景
-        // cc.director.loadScene('Login');
-    },
-    //保存数据请求
     /**
-     * 
-     * 现在转服务器存储,原本所有相关操作通过服务器计算。
-     * 一、目前涉及到的是 SNT 和 SNB 两个货币相关,和买田地操作 (可以理解为租聘,三种类型)
-     * 
-     * isNetwork:true,上传到网络
-     * 
+     * 限制重复触发支付, 正在支付中转态,
      */
-    pushData: function (isNetwork) {
-        // cc.log(this.EveryDayRewardsArray);
-        // console.log(this.readData.BFirstLoadGame);
-        var datas = {
-            version: this.GameVersion,
-            // 转后台处理
-            BFirstLoadGame: 1,//只要push数据,就证明已经开始第一次游戏了
-
-            /**游戏不修改,默认值 start */
-            shareGive: this.shareGive,
-            //签到分享给钻石金币
-            signInGive: this.signInGive,
-            //每个月 给的 低保
-            EveryGive: this.EveryGive,
-            //公共分享
-            publicGive: this.publicGive,
-            /**游戏不修改,默认值 end */
-
-            //时间
-            GameYear: this.GameYear,
-            GameMonth: this.GameMonth,
-            GameDay: this.GameDay,
-
-            //这里只是单纯的存储起来
-            CNT: this.CNT,
-            SNB: this.SNB,
-
-            Golden: this.Golden,
-            Diamond: this.Diamond,
-            WorkerLV: this.WorkerLV,
-            WorkerNum: this.WorkerNum,
-            WorkerCapacity: this.WorkerCapacity,
-            GameDate: this.GameDate,
-            LastTimeEveryDayRewardsDate: this.LastTimeEveryDayRewardsDate,
-            LastTimeLuckDate: this.LastTimeLuckDate,
-            EveryDayRewardsArray: this.EveryDayRewardsArray,//.join('_'),
-            TerritoryStateArray: this.TerritoryStateArray,//.join('_'),
-            //面板状态
-            BuildingStateArray: this.BuildingStateArray,//.join('_'),
-            BuildingLockStateArray: this.BuildingLockStateArray,//.join('_'),
-
-            /**
-             * SNB和CNT相关,需要后台筛选 田地 和 种子。单独处理
-             */
-            BuildingNumArray: this.BuildingNumArray,//.join('_'),
-            DiamondNumArray: this.DiamondNumArray,//.join('_'),
-            FoodTradeState: this.FoodTradeState,
-            WoodTradeState: this.WoodTradeState,
-            MineralTradeState: this.MineralTradeState,
-
-            LotteryTimes: this.LotteryTimes,
-
-            /**
-             * 这些数据不用服务器初始化
-             */
-            //工人工作信息
-            characterInfoArray: this.CharacterInfoArray,
-            //道路数据
-            highwayIndex: this.GameData_highwayIndex,
-            allHighwayStylesAndIndex: GlobalD.game.AllHighwayStylesAndIndex,
-            //建筑物数据
-            buildingsInfo: this.GameData_buildings,
-            //任务
-            TaskIconCountClick: task.TaskIconCountClick
-        }
-
-        if (isNetwork) {
-            var data = [];
-            // data["openid"] = userData.openId;
-            // data["userdata"] = JSON.stringify(datas);
-            data["playerData"] = JSON.stringify(datas);
-
-            /** 推送信息 */
-            utils.post(utils.api.playerPushInfo, data, (res, playerPushInfoTemp) => {
-                // console.log('playerPushInfoTemp', playerPushInfoTemp);
-            })
-        } else {
-            console.log("存储本地:" + isNetwork);
-            //保存用户数据到本地
-            cc.sys.localStorage.setItem('userdata', JSON.stringify(datas));
-        }
-
-
-    },
+    isPlayingCnt: false,
+    isPlayingSnb: false,
 
     /**
-     * 兑换种子时候,特殊处理数据
-     * 扣除相应的钻石
+     * 处理请求
      */
-    exchangeSeed() {
-        //先暂停存储
-        this.unschedule(this.AutoSaveData);
-
-        utils.post(utils.api.exchangeSeeds, { diamondAmount: 50000, seedId: 8 }, (res, value) => {
-            console.log("兑换种子", value);
-            callback(res, value);
-            //兑换成功后
-            if (0 === value.code) {
-                //更新一次数据
-                let _playerData = JSON.parse(value.data.playerData);
-                //更新本地钻石数据
-                this.SetDiamond(_playerData.Diamond);
-
-            } else {
-                //兑换失败
-            }
-
-
-            //重新开启存储
-            this.schedule(this.AutoSaveData, 15);
+    //现在多次触发
+    isOnAddFruit: false,
+    isOnSaleFruit: false,
+    isOnGrantFruit: false,
+
+    //自动存储数据
+    AutoSaveData: null,
+  },
+  onLoad() {
+    //初始化GameData全局变量
+    GlobalD.GameData = this
+    this.GameConfig()
+  },
+  GameConfig() {
+    this.AddBuildingCost = 5
+    this.RemoveBuildingCost = 5
+
+    //
+    this.Dapp = {
+      UserInfo: null,
+    }
+  },
+  start() {
+    cc.loader.loadRes(
+      'prefab/gameToast',
+      function (err, texture) {
+        this.toast = cc.instantiate(texture)
+        this.toast.parent = cc.find('Canvas/UICamera')
+        this.toast.zIndex = 999
+        this.toast.active = false
+        this.scheduleObj = this.schedule(() => {
+          this.updateToast()
+        }, 1)
+      }.bind(this)
+    )
+
+    this._tiledMap = GlobalD.TiledMap._tiledMap
+    //调用初始化dapp
+    this.isDebugMode(GlobalD.dapp)
+  },
+  /**
+   * 根据 不存在dapp 的话,使用本地测试
+   * @param {*} bInit
+   */
+  isDebugMode: function (bInit) {
+    if (bInit) {
+      //读取网络数据
+      try {
+        GlobalD.dapp.cntBalance().then((cntBalance) => {
+          //会延迟返回
+          // console.log("获取cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
+          GlobalD.GameData.SetCNT(cntBalance)
         })
-    },
+      } catch (err) {
+        console.error(err) // 初始化失败,运行环境不是钱包环境
+      }
+      //登录时候已经初始化好snb了
+      this.SNB = GlobalD.UserInfo.snb
+
+      this.readData = userData.readData
+      // cc.log('playerPullInfo 读取到数据?:', this.readData)
+      this.InitNextworkData()
+      this.InitSceneInfo()
+
+      // 自动存储数据
+      /**
+       * todo 如果退出游戏,触发一次存储。
+       */
+      this.AutoSaveData = function () {
+        this.pushData(true)
+      }
+      this.schedule(this.AutoSaveData, 15)
+    } else {
+      // 清除
+      cc.log('本地数据重新开始,并且不初始化')
+      // this.onClearAllData();
+      this.Init()
+      this.InitSceneInfo()
+      this.AutoSaveData = function () {
+        this.pushData(false)
+      }
+      this.schedule(this.AutoSaveData, 10)
+    }
+  },
+
+  getData: function () {
+    //如果开局没有读取到网络数据,就这里初始化
+    if (userData.readData == null) {
+      cc.log('本地数据:', cc.sys.localStorage.getItem('userdata'))
+      let userdata = cc.sys.localStorage.getItem('userdata')
+      if (userdata) {
+        this.readData = JSON.parse(userdata)
+      }
+      this.Init()
+      this.InitSceneInfo()
+    } else {
+      this.readData = userData.readData
+      cc.log('读取到数据?:', this.readData)
+      this.Init()
+      this.InitSceneInfo()
+    }
+  },
+
+  InitSceneInfo() {
+    //根据顺序生成
+    //初始化时间ui
+    cc.find('GameNode/ManageTimer').getComponent('ManageTimer').Init()
+    //初始化金钱ui,gold,diamond, cnt,snb,
+    cc.find('GameNode/ManageGolden')
+      .getComponent('ManageGolden')
+      .InitManageGlodenUI()
+    // //初始化地图物件
+    // cc.find("GameNode/ManageMap").getComponent('ManageMap').InitManageMap();
+    GlobalD.TiledMap.onInitSolid()
+
+    //初始化生成房屋
     /**
-     * 获取是否租赁过的状态
+     * dapp设定: 如果固定土地冲突,删除冲突的建筑和回收仓库
      */
-    getPlayerExchangeState(callback) {
-        utils.get(utils.api.playerExchangeState, {}, (res, vaule) => {
-            console.log("租赁状态:", value);
-            callback(res, vaule);
-        })
-    },
+    this.ManageUI.getComponent('ManageBuildings').InitBuildings()
 
+    //初始化道路
     /**
-     * 暂时不需要从这里读取
+     * 原本游戏设定是先生产道路,现在为了方便处理等房屋生产后,再处理公路
+     * dapp设定: 如果固定土地冲突,删除对应的公路
      */
-    getLandConfig() {
-        utils.get(utils.api.landConfig, {}, (res, value) => {
-            if (0 === value.code) {
-                this.ConfigLand = value.data;
-            } else {
-                console.warn("未能读取到config土地?");
-            }
-        })
-    },
-    //获取用户全部租赁土地
-    getUserLandList() {
-        utils.get(utils.api.userLandList, {}, (res, vaule) => {
-
-        })
-    },
-    //获取用户已租赁土地的状态
-    getLandState(context) {
-        let { landId, callback } = context;
-        utils.get(utils.api.landState, { landId: landId }, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-    //获取商城种子
-    getMallSeed(callback) {
-        utils.get(utils.api.mallSeed, {}, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-
-    getWarehouseSeedAndFruit(callback) {
-        utils.get(utils.api.getSeedAndFruit, {}, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-    //获取种子状态
-    onGetSeedState(data, callback) {
-        utils.get(utils.api.getSeedState, data, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-
-    //种植种子
-    // data:{landId:1,seedId:1}
-    onPlant(data, callback) {
-        utils.get(utils.api.plant, data, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-
-    //收取果实
-    onAddFruit(data, callback) {
-        if (this.isOnAddFruit) {
-            console.log("收取果实过快!");
-            return;
-        }
-        this.isOnAddFruit = true;
-        utils.post(utils.api.addFruit, data, (res, vaule) => {
-            this.isOnAddFruit = false;
-            callback(res, vaule);
-        })
-    },
-
-    //出售果实
-    onSaleFruit(data, callback) {
-        if (this.isOnSaleFruit) {
-            console.log("出售果实过快!");
-            return;
-        }
-        this.isOnSaleFruit = true;
-        utils.post(utils.api.saleFruit, data, (res, vaule) => {
-            this.isOnSaleFruit = false;
-            callback(res, vaule);
-        })
-    },
-
-    //赠送果实
-    onGrantFruit(data, callback) {
-        if (this.isOnGrantFruit) {
-            console.log("赠送果实过快!");
-            return;
-        }
-        this.isOnGrantFruit = true;
-        utils.post(utils.api.grantFruit, data, (res, vaule) => {
-            this.isOnGrantFruit = false;
-            callback(res, vaule);
-        })
-    },
-
-    //神农呗购买种子
-    onBuySeedsWithSNB(snbAmount, seedId, callback) {
-        utils.post(utils.api.snbBuySeeds, { payAmount: snbAmount, seedId: seedId }, (res, vaule) => {
-            callback(res, vaule);
-        })
-    },
-
-    //获取用户的snb
-    onGetUserSnb(callback) {
-        utils.get(utils.api.userSnbInfo, {}, (res, value) => {
-            GlobalD.GameData.SetSNB(value.data.SNB);
-            if (callback)
-                callback(res, value);
-        })
-    },
+    this.onSpawnHighway()
 
+    //初始化生成人物
     /**
-     * 支付cnt操作
-     * @param {*} amount // 需支付金额
-     * @param {*} payType 支付类型,1购买土地租凭, 2自然灾害防护,3野兽防护
-     * @param {*} itemType 操作物品的id 字符串
+     * dapp设定: 如果固定土地位置冲突,把人物生成位置放置到主路
+     * onSpawnWorkerAIFromStoredData 此函数处理
      */
-    payCNT(cntAmount, payType, itemType, callback) {
-        console.log("购买金额:" + cntAmount + "购买类型PlayType:" + payType + "购买物品的id:" + itemType);
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能payCNT!");
-            return;
-        }
-        //
-        if (this.isPlayingCnt) {
-            console.warn("同时触发支付CNT过快!");
-            return;
-        }
-        if (GlobalD.GameData.GetCNT() < cntAmount) {
-            console.log("cnt 不足,GetCNT:" + GlobalD.GameData.GetCNT() + "消费的cntAmount" + cntAmount);
-            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "CNT不足!", 2, () => {
-                console.log("finish toast! CNT不足!");
-            });
-            return;
-        }
-        this.isPlayingCnt = true;
-        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "支付处理中...", 5, () => {
-            console.log("finish toast!支付处理中...");
-        });
-
-        GlobalD.dapp.payCnt(cntAmount, payType, itemType).then((data) => {
-            const [err, tx] = data;
-            this.isPlayingCnt = false;
-            if (err === null) {
-                // TODO 成功, 支付为链上操作,需要提供回调接口给这边服务端确认交易成功后修改购买订单结果
-                console.log(tx) // 交易hash,唯一标识符
-
-                GlobalD.dapp.cntBalance().then((cntBalance) => {
-                    //会延迟返回
-                    // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
-                    GlobalD.GameData.SetCNT(cntBalance);
-                });
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "支付成功!", 5, () => {
-                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "区块确认中,请耐心等待!", 120);
-                });
-
-
-            } else {
-                console.log(err)
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 2, () => {
-                    console.log("finish toast!");
-                });
-            }
-
-            if (callback) {
-                callback(data);
-            }
-        });
-    },
-
+    cc.find('GameNode/ManageWorker').getComponent('ManageWorker').InitWorkerAI()
+
+    let _BFirstLoadGame = this.readData ? this.readData.BFirstLoadGame : 0
+    //初始化新手教学
+    GlobalD.ManageTask.InitTask(_BFirstLoadGame)
+
+    this.ManageUI.getComponent('ManageUI').Init()
+  },
+  InitNextworkData() {
+    // console.log("this.readData", this.readData);
+    this.Golden = this.readData.Golden
+    this.Diamond = this.readData.Diamond
+    this.shareGive = this.readData.shareGive
+    //签到分享给钻石金币
+    this.signInGive = this.readData.signInGive
+    //每个月 给的 低保
+    this.EveryGive = this.readData.EveryGive
+    //公共分享
+    this.publicGive = this.readData.publicGive
+
+    // cc.log('初始化网络数据');
+    //读取日期数据
+    this.GameYear = this.readData.GameYear
+    this.GameMonth = this.readData.GameMonth
+    this.GameDay = this.readData.GameDay
+
+    //读取金币
+    this.Golden = this.readData.Golden
+    //读取钻石
+    this.Diamond = this.readData.Diamond
+    // cc.log('this.readData.Diamond', this.readData.Diamond);
+    //读取工人等级
+    this.WorkerLV = this.readData.WorkerLV
+    //工人数量
+    this.WorkerNum = this.readData.WorkerNum
+    //工人容量
+    this.WorkerCapacity = this.readData.WorkerCapacity
+    this.GameDate = this.readData.GameDate
+    this.LastTimeEveryDayRewardsDate = this.readData.LastTimeEveryDayRewardsDate
+    this.LastTimeLuckDate = this.readData.LastTimeLuckDate
+    this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray //.split('_');
+    this.TerritoryStateArray = this.readData.TerritoryStateArray //.split('_');
+    //面板状态
+    this.BuildingStateArray = this.readData.BuildingStateArray //.split('_');
+
+    //解锁设置为 不用解锁
+    // this.BuildingLockStateArray.forEach((value, index, array) => {
+    //     array[index] = 1;
+    // })
+    this.BuildingLockStateArray = this.readData.BuildingLockStateArray //.split('_');
+    this.BuildingNumArray = this.readData.BuildingNumArray //.split('_');
+    this.DiamondNumArray = this.readData.DiamondNumArray //.split('_');
+    this.FoodTradeState = this.readData.FoodTradeState
+    this.WoodTradeState = this.readData.WoodTradeState
+    this.MineralTradeState = this.readData.MineralTradeState
+    //工人工作信息
+    if (this.readData.characterInfoArray) {
+      this.CharacterInfoArray = this.readData.characterInfoArray
+    } else {
+      this.CharacterInfoArray = []
+    }
+    //道路数据
+    if (this.readData.highwayIndex)
+      this.GameData_highwayIndex = this.readData.highwayIndex
+
+    //建筑物数据
+    if (this.readData.buildingsInfo)
+      this.GameData_buildings = this.readData.buildingsInfo
+
+    this.LotteryTimes = this.readData.LotteryTimes
+    //任务
+    if (this.readData.TaskIconCountClick)
+      task.TaskIconCountClick = this.readData.TaskIconCountClick
+  },
+  /**
+   * 初始化
+   */
+  Init: function () {
+    let _BFirstLoadGame = false //  this.readData ? this.readData.BFirstLoadGame : 0;
+    //date
+    this.GameYear = 0
+    this.GameMonth = 0
+    this.GameDay = 0
+    this.GameDate = '0000/00/01'
     /**
-     * 神农呗转换CNT ,比例是5:1
-     * @param {*} snbAmount 
-     * @param {*} callback 
-     * @returns 
+     * 新增 CNT 和 SNB
      */
-    onSnbToCnt(snbAmount, callback) {
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能onSnbToCnt!");
-            return;
-        }
-        // GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "暂不支持兑换CNT!", 2, () => {
-        //     console.log("finish toast!");
-        // });
-        // return;
-        if (this.isPlayingSnb) {
-            console.warn("同时触发支付SNB过快!");
-            return;
-        }
-        if (GlobalD.GameData.GetSNB() <= 0) {
-            console.log("神农呗数量GetSNB:", GlobalD.GameData.GetSNB(), "替换snbAmount:", snbAmount);
-            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "神农呗数量不足!", 2, () => {
-                console.log("finish toast!");
-            });
-            return;
+    this.CNT = 0
+    this.SNB = 0
+    this.Golden = 2000
+    this.Diamond = 100
+    this.WorkerLV = 0
+    this.WorkerNum = 0
+    this.CharacterInfoArray = []
+    this.WorkerCapacity = 5
+    this.TerritoryStateArray = [1, 1, 1, 1, 1, 1, 1, 1] //测试,全开地图
+    /**
+     * 添加建筑往后添加,到时候ManageBuildings 脚本 会初始化根据顺序
+     * BuildingStateArray---相关 GetBuildingStateArray 获取建筑状态
+     * BuildingNumArray  ---相关 GetBuildingNumArray 获取建筑数量
+     * BuildingFrameArray ---相关 ManageUI  添加面板是否解锁之类的相关预制
+     */
+    this.BuildingStateArray = [
+      1, //公路
+      1, //路铲
+      1, //拆迁
+      1, //农舍
+      1, //单元楼
+      1, //别墅
+      1, //农田
+      1, //伐木场
+      1, //矿坑
+      1, //加工厂
+      1, //冷饮摊
+      1, //贩卖机
+      1, //面包房
+      1, //早餐车
+      1, //饮茶店
+      1, //点心店
+      1, //美食店
+      1, //西餐厅
+      1, //花店
+      1, //美发店
+      1, //洋装店
+      1, //珠宝店
+      1, //电影院
+      1, //路灯
+      1, //绿化带
+      1, //花坛
+      1, //喷泉
+      1, //警察局
+      1, //游乐场
+      1, //蓝色城堡
+      1, //粉色城堡
+      1, //Holy Farmland
+      1, //Holy Farmland seed
+    ]
+    this.BuildingLockStateArray = [
+      1, //公路
+      1, //路铲
+      1, //拆迁
+      1, //农舍
+      0, //单元楼
+      0, //别墅
+      1, //农田
+      0, //伐木场
+      0, //矿坑
+      1, //加工厂
+      0, //冷饮摊
+      0, //贩卖机
+      0, //面包房
+      0, //早餐车
+      0, //饮茶店
+      0, //点心店
+      0, //美食店
+      0, //西餐厅
+      0, //花店
+      0, //美发店
+      0, //洋装店
+      0, //珠宝店
+      0, //电影院
+      1, //路灯
+      1, //绿化带
+      1, //花坛
+      0, //喷泉
+      0, //警察局
+      0, //游乐场
+      0, //蓝色城堡
+      0, //粉色城堡
+      1, //Holy Farmland
+      1, //Holy Farmland seed
+    ]
+    //建筑物数量
+    this.BuildingNumArray = [
+      0, //公路
+      0, //路铲
+      0, //拆迁
+      4, //农舍
+      1, //单元楼
+      1, //别墅
+      4, //农田
+      1, //伐木场
+      1, //矿坑
+      2, //加工厂
+      2, //冷饮摊
+      1, //贩卖机
+      1, //面包房
+      1, //早餐车
+      1, //饮茶店
+      1, //点心店
+      1, //美食店
+      1, //西餐厅
+      1, //花店
+      1, //美发店
+      1, //洋装店
+      1, //珠宝店
+      1, //电影院
+      1, //路灯
+      1, //绿化带
+      1, //花坛
+      1, //喷泉
+      1, //警察局
+      1, //游乐场
+      1, //蓝色城堡
+      1, //粉色城堡
+      1, //Holy Farmland
+      1, //Holy Farmland seed
+    ]
+
+    this.DiamondNumArray = AConfig.DiamondArray
+    //todo 钻石消耗默认值
+    this.DiamondNumArray.forEach((value, index, array) => {
+      array[index] = 0
+    })
+    cc.log('钻石消耗默认值', this.DiamondNumArray)
+    this.EveryDayRewardsArray = [0, 0, 0, 0, 0, 0, 0]
+
+    this.LastTimeEveryDayRewardsDate = '0000/00/00'
+    this.LastTimeLuckDate = '0000/00/00'
+
+    this.FoodTradeState = 1
+    this.WoodTradeState = 1
+    this.MineralTradeState = 1
+    //转盘分享给钻石金币
+    this.shareGive = [200, 5]
+    //签到分享给钻石金币
+    this.signInGive = [200, 5]
+    //每个月 给的 低保
+    this.EveryGive = [500, 10]
+    //公共分享
+    this.publicGive = [200, 50]
+    //每天抽奖次数
+    this.LotteryTimes = 10
+
+    // 1 === _BFirstLoadGame
+    if (_BFirstLoadGame) {
+      console.log('this.readData', this.readData)
+      // cc.log('初始化网络数据');
+      //读取日期数据
+      this.GameYear = this.readData.GameYear
+      this.GameMonth = this.readData.GameMonth
+      this.GameDay = this.readData.GameDay
+
+      /**
+       * 接口
+       * todo cnt和snb 由钱包读取
+       */
+      this.CNT = 0
+      this.SNB = 0
+
+      //读取金币
+      this.Golden = this.readData.Golden
+      //读取钻石
+      this.Diamond = this.readData.Diamond
+      // cc.log('this.readData.Diamond', this.readData.Diamond);
+      //读取工人等级
+      this.WorkerLV = this.readData.WorkerLV
+      //工人数量
+      this.WorkerNum = this.readData.WorkerNum
+      //工人容量
+      this.WorkerCapacity = this.readData.WorkerCapacity
+      this.GameDate = this.readData.GameDate
+      this.LastTimeEveryDayRewardsDate =
+        this.readData.LastTimeEveryDayRewardsDate
+      this.LastTimeLuckDate = this.readData.LastTimeLuckDate
+      this.EveryDayRewardsArray = this.readData.EveryDayRewardsArray //.split('_');
+      this.TerritoryStateArray = this.readData.TerritoryStateArray //.split('_');
+      //面板状态
+      this.BuildingStateArray = this.readData.BuildingStateArray //.split('_');
+
+      //解锁设置为 不用解锁
+      this.BuildingLockStateArray.forEach((value, index, array) => {
+        array[index] = 1
+      })
+      // this.BuildingLockStateArray = this.readData.BuildingLockStateArray.split('_');
+      this.BuildingNumArray = this.readData.BuildingNumArray //.split('_');
+      this.DiamondNumArray = this.readData.DiamondNumArray //.split('_');
+      this.FoodTradeState = this.readData.FoodTradeState
+      this.WoodTradeState = this.readData.WoodTradeState
+      this.MineralTradeState = this.readData.MineralTradeState
+
+      //工人工作信息
+      if (this.readData.characterInfoArray)
+        this.CharacterInfoArray = this.readData.characterInfoArray
+      //道路数据
+      if (this.readData.highwayIndex)
+        this.GameData_highwayIndex = this.readData.highwayIndex
+
+      //建筑物数据
+      if (this.readData.buildingsInfo)
+        this.GameData_buildings = this.readData.buildingsInfo
+
+      this.LotteryTimes = this.readData.LotteryTimes
+      //任务
+      if (this.readData.TaskIconCountClick)
+        task.TaskIconCountClick = this.readData.TaskIconCountClick
+      //测试5W
+      // this.PlusDiamond(50000);
+
+      //如果用户未租赁过土地且未用钻石兑换过种子,则显示
+      GlobalD.GameData.getPlayerExchangeState((res, vaule) => {
+        //warn 这里需要增加对结果的判断
+        this.ManageUI.getComponent('ManageUI').DiamondGapViewShow()
+      })
+    }
+  },
+
+  //GET / SET /Plus
+  GetGameDate: function () {
+    return this.GameDate
+  },
+  SetGameDate: function (num) {
+    this.GameDate = num
+  },
+  PlusGameDate: function (num) {
+    this.GameDate += num
+  },
+  GetGolden: function () {
+    return parseInt(this.Golden)
+  },
+  GetGoldenCallBack(_CallBack) {
+    if (_CallBack) _CallBack({ resGolden: parseInt(this.Golden) })
+  },
+  SetGolden: function (Num) {
+    let LastMoney = this.Golden
+    this.Golden = Num
+    let CurrentMoney = Num
+    this.ManageUI.getComponent('ManageUI').GoldenChangeCallBack(
+      this.GetGolden(),
+      LastMoney,
+      CurrentMoney
+    )
+  },
+  PlusGolden: function (Num) {
+    if (this.Golden + Num < 0) {
+      this.SetGolden(0)
+    } else {
+      this.SetGolden(this.Golden + Num)
+    }
+    // task.task50W();
+  },
+  GetDiamond: function () {
+    return parseInt(this.Diamond)
+  },
+  SetDiamond: function (num) {
+    let LastMoney = this.Diamond
+    this.Diamond = num
+    let CurrentMoney = num
+    this.ManageUI.getComponent('ManageUI').DiamondChangeCallBack(
+      this.GetDiamond(),
+      LastMoney,
+      CurrentMoney
+    )
+  },
+  PlusDiamond: function (num) {
+    if (this.Diamond + num < 0) {
+      this.SetDiamond(0)
+    } else {
+      this.SetDiamond(this.Diamond + num)
+    }
+  },
+
+  /**
+   * 游戏里面的cnt 和神农呗
+   */
+  GetCNT: function () {
+    return parseFloat(this.CNT)
+  },
+  SetCNT: function (Num) {
+    this.CNT = Num
+    this.ManageUI.getComponent('ManageUI').CNTChangeCallBack(this.CNT)
+  },
+  GetSNB: function () {
+    return parseFloat(this.SNB)
+  },
+  SetSNB: function (Num) {
+    this.SNB = Num
+    this.ManageUI.getComponent('ManageUI').SNBChangeCallBack(this.SNB)
+  },
+
+  GetWorkerLV: function () {
+    return parseInt(this.WorkerLV)
+  },
+  SetWorkerLV: function (num) {
+    this.WorkerLV = num
+  },
+  PlusWorkerLV: function (num) {
+    this.WorkerLV += num
+  },
+  GetWorkerNum: function () {
+    return parseInt(this.WorkerNum)
+  },
+  SetWorkerNum: function (num) {
+    this.WorkerNum = num
+  },
+  PlusWorkerNum: function (num) {
+    this.WorkerNum += num
+  },
+  GetLastTimeEveryDayRewardsDate: function () {
+    return this.LastTimeEveryDayRewardsDate
+  },
+  //获取转盘 时间
+  GetLastTimeLuckDate: function () {
+    return this.LastTimeLuckDate
+  },
+  //设置转盘时间
+  SetLastTimeLuckDate: function (DateString) {
+    this.LastTimeLuckDate = DateString
+  },
+  SetLastTimeEveryDayRewardsDate: function (DateString) {
+    this.LastTimeEveryDayRewardsDate = DateString
+  },
+
+  //工人信息数组
+  GetWorkerCharacterInfoArray: function () {
+    return this.CharacterInfoArray
+  },
+  SetWorkerCharacterInfoArray: function (item) {
+    this.CharacterInfoArray = item
+  },
+
+  /*** */
+  GetWorkerCapacity: function () {
+    return parseInt(this.WorkerCapacity)
+  },
+  SetWorkerCapacity: function (num) {
+    this.WorkerCapacity = num
+  },
+  PlusWorkerCapacity: function (num) {
+    this.WorkerCapacity += num
+  },
+  GetTerritoryStateArray: function () {
+    return this.TerritoryStateArray
+  },
+  SetTerritoryStateArray: function (aTerritoryStateArray) {
+    this.TerritoryStateArray = aTerritoryStateArray
+  },
+  PlusTerritoryStateArray: function (Item) {
+    this.TerritoryStateArray.push(Item)
+  },
+  GetBuildingStateArray: function () {
+    return this.BuildingStateArray
+  },
+  SetBuildingStateArray: function (aBuildingStateArray) {
+    this.BuildingStateArray = aBuildingStateArray
+  },
+  PlusBuildingStateArray: function (Item) {
+    this.BuildingStateArray.push(Item)
+  },
+  GetBuildingLockStateArray: function () {
+    return this.BuildingLockStateArray
+  },
+  SetBuildingLockStateArray: function (aArray) {
+    this.BuildingLockStateArray = aArray
+  },
+  PlusBuildingLockStateArray: function (Item) {
+    this.BuildingLockStateArray.push(Item)
+  },
+
+  GetBuildingNumArray: function () {
+    return this.BuildingNumArray
+  },
+  SetBuildingNumArray: function (aBuildingNumArray) {
+    this.BuildingNumArray = aBuildingNumArray
+  },
+  PlusBuildingNumArray: function (Item) {
+    this.BuildingNumArray.push(Item)
+  },
+  //操作钻石数据
+  GetDiamondNumArray: function () {
+    return this.DiamondNumArray
+  },
+  SetDiamondNumArray: function (aDiamondNumArray) {
+    this.DiamondNumArray = aDiamondNumArray
+  },
+  GetEveryDayRewardsArray: function () {
+    return this.EveryDayRewardsArray
+  },
+  SetEveryDayRewardsArray: function (aArray) {
+    this.EveryDayRewardsArray = aArray
+  },
+  PlusEveryDayRewardsArray: function (Item) {
+    this.EveryDayRewardsArray.push(Item)
+  },
+  GetFoodTradeState: function () {
+    return parseInt(this.FoodTradeState)
+  },
+  SetFoodTradeState: function (num) {
+    this.FoodTradeState = num
+  },
+  PlusFoodTradeState: function (num) {
+    this.FoodTradeState += num
+  },
+  GetWoodTradeState: function () {
+    return parseInt(this.WoodTradeState)
+  },
+  SetWoodTradeState: function (num) {
+    this.WoodTradeState = num
+  },
+  PlusWoodTradeState: function (num) {
+    this.WoodTradeState += num
+  },
+  GetMineralTradeState: function () {
+    return parseInt(this.MineralTradeState)
+  },
+  SetMineralTradeState: function (num) {
+    this.MineralTradeState = num
+  },
+  PlusMineralTradeState: function (num) {
+    this.MineralTradeState += num
+  },
+  GetLotteryTimes: function () {
+    return parseInt(this.LotteryTimes)
+  },
+  SetLotteryTimes: function (num) {
+    this.LotteryTimes = num
+  },
+  PlusLotteryTimes: function (num) {
+    this.LotteryTimes += num
+  },
+
+  //初始化道路
+  onSpawnHighway() {
+    // 获取InitPoint层
+    let InitPos = this._tiledMap.getLayer('InitPoint')
+    InitPos.enabled = false
+
+    //创建公路数据
+    if (this.readData && this.readData.allHighwayStylesAndIndex) {
+      //保存到内存中
+      this.GameData_highwayIndex = this.readData.highwayIndex
+      //先赋值道路的对象数组
+      let _AllHighwayAIndex = Object.assign(
+        [],
+        this.readData.allHighwayStylesAndIndex
+      )
+      //获取最后建造公路的层级
+      this.HighwayLayer = this._tiledMap.getLayer('Highway')
+      for (let i = 0; i < _AllHighwayAIndex.length; i++) {
+        let _tiledPos = GlobalD.TiledMap.analyticalIndexData(
+          _AllHighwayAIndex[i].highwayInfoIndex
+        )
+        /**
+         * 解决固定土地时候,道路 和房子 冲突
+         *
+         */
+        if (
+          GlobalD.game.getManageGameIndexArrayAt(
+            cc.v2(_tiledPos.x, _tiledPos.y)
+          )
+        ) {
+          continue
         }
-
-        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "已发起兑换!", 5, () => {
-            console.log("finish toast!");
-        });
-        this.isPlayingSnb = true;
-        GlobalD.dapp.snbToCnt(snbAmount).then((data) => {
-            //更新日志数据
-            cc.find("GameNode/ManageDapp").getComponent("ManageDapp").onUpdateSnbList();
-            const [err, tx] = data;
-            this.isPlayingSnb = false;
-            if (err === null) {
-                // TODO 成功, 兑换为链上操作,需要提供回调接口给这边服务端确认交易成功后修改扣除SNB数量
-                console.log(tx) // 交易hash,唯一标识符
-                //扣除对应的神农呗,本地修改显示
-                GlobalD.GameData.SetSNB(GlobalD.GameData.GetSNB() - snbAmount);
-
-                GlobalD.dapp.cntBalance().then((cntBalance) => {
-                    //会延迟返回
-                    // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
-                    GlobalD.GameData.SetCNT(cntBalance);
-                });
-
-
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "区块确认中,请耐心等待!", 5, () => {
-                    console.log("finish toast!");
-                });
-
-            } else {
-                console.log(err)
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 2, () => {
-                    console.log("finish toast!");
-                });
-            }
-
-            if (callback) {
-                callback(data);
+        let highwayTemp = cc.instantiate(this.HighWayPrefabs)
+        highwayTemp.parent = this.HighwayLayer.node
+        let tiledTile = highwayTemp.addComponent('TiledTile')
+        tiledTile.x = _tiledPos.x
+        tiledTile.y = _tiledPos.y
+        //地图设置可行走区域公路设置
+        AStar.setMapSolid(_tiledPos.x, _tiledPos.y, 0)
+        // _buildId ==0 是公路
+        let _buildId = 0
+        let occupyTemp = cc.v2(_buildId, _AllHighwayAIndex[i].highwayInfoIndex)
+        GlobalD.game.OccupyArray.push(occupyTemp)
+        highwayTemp
+          .getComponent('HighwayInfo')
+          .onChangeHighwayStyles(_AllHighwayAIndex[i].highwayInfoType)
+
+        GlobalD.game.AllHighwayStylesAndIndex.push(_AllHighwayAIndex[i])
+      }
+      // console.log("end");
+    } else {
+      //如果用户没有存储数据
+      //根据InitPoint 的数据,创建初始化的地图数据 的初始化数据
+
+      this.HighwayLayer = this._tiledMap.getLayer('Highway')
+      for (var i = 0; i < 32; i++) {
+        //去除中间两条路
+        if (i == 16 || i == 17) continue
+        for (var j = 0; j < 32; j++) {
+          let tilesPos = cc.v2(i, j)
+
+          if (InitPos.getTileGIDAt(tilesPos)) {
+            let index = GlobalD.TiledMap.getIndex(tilesPos)
+            this.GameData_highwayIndex.push(index)
+
+            let highwayTemp = cc.instantiate(this.HighWayPrefabs)
+            highwayTemp.parent = this.HighwayLayer.node
+            let tiledTile = highwayTemp.addComponent('TiledTile')
+            tiledTile.x = tilesPos.x
+            tiledTile.y = tilesPos.y
+            // cc.log('onSpawnHighway2');
+            //地图设置可行走区域公路设置
+            AStar.setMapSolid(tilesPos.x, tilesPos.y, 0)
+            // _buildId ==0 是公路
+            let _buildId = 0
+            let occupyTemp = cc.v2(_buildId, index)
+            GlobalD.game.OccupyArray.push(occupyTemp)
+
+            let tile = InitPos.getTiledTileAt(tilesPos.x, tilesPos.y, true)
+
+            let _MoveType = reGameStates.HighwayType.moveX
+            // if (tile.gid == 15) {
+            //     _MoveType = reGameStates.HighwayType.moveX;
+            // } else
+            if (tile.gid == 16) {
+              _MoveType = reGameStates.HighwayType.moveY
+            } else if (tile.gid == 11) {
+              _MoveType = reGameStates.HighwayType.ZebraCrossingX
+            } else if (tile.gid == 12) {
+              _MoveType = reGameStates.HighwayType.ZebraCrossingY
             }
-        });
-    },
-    //站内收益
-    onCntCanWithdrawBalance(callback) {
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能onGetCNTRevenue!");
-            return;
+            // return;
+            //更换公路样式
+            GlobalD.game.onCreateDifferentRoadStyles({
+              _buildId: _buildId,
+              _highwayType: _MoveType,
+              _roadIndex: index,
+              _hightwayNode: highwayTemp,
+            })
+          }
         }
-        GlobalD.dapp.cntCanWithdrawBalance().then((data) => {
-            const { err, res } = data;
-            if (err === null) {
-                console.log(res) //Number 返回数字
-                GlobalD.GameData.CNTDrawBalance = res;
-            }
-            //todo ,记录一个信息
-            if (callback) {
-                callback(data);
-            }
-        });
-    },
-    //站内收益提现
-    onCntWithdraw(amount, callback) {
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能onCntWithdraw!");
-            return;
+      }
+    }
+    //外面的两条路
+    let initRoad = this._tiledMap.getLayer('Road')
+    initRoad.enabled = false
+    for (var i = 16; i < 18; i++) {
+      for (var j = 0; j < 32; j++) {
+        let tilesPos = cc.v2(i, j)
+        // cc.log('road tilesPos',tilesPos)
+        if (initRoad.getTileGIDAt(tilesPos)) {
+          let index = GlobalD.TiledMap.getIndex(tilesPos)
+          this.GameData_highwayIndex.push(index)
+          let highwayTemp = cc.instantiate(this.HighWayPrefabs)
+          highwayTemp.parent = this.HighwayLayer.node
+          let tiledTile = highwayTemp.addComponent('TiledTile')
+          tiledTile.x = tilesPos.x
+          tiledTile.y = tilesPos.y
+          // cc.log('initRoad');
+          //地图设置可行走区域公路设置
+          AStar.setMapSolid(tilesPos.x, tilesPos.y, 0)
+          let _buildId = 0
+          let occupyTemp = cc.v2(_buildId, index)
+          GlobalD.game.OccupyArray.push(occupyTemp)
+          //更换公路样式
+          // if (j >= 25 && j <= 27 || j >= 19 && j <= 21 || j >= 9 && j <= 11)
+          //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.none);
+          // else
+          //     highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveY);
         }
-        GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收益正在提现中", 10, () => {
-            console.log("finish toast!");
-        });
-        GlobalD.dapp.cntWithdraw(amount).then((data) => {
-            const [err, tx] = data;
-            console.log("onCntWithdraw:", data);
-            if (err === null) {
-                console.log(tx) //String|null 交易唯一哈市
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "提现成功!", 1, () => {
-                    console.log("finish toast!");
-                });
-            } else {
-                GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), err, 1, () => {
-                    console.log("finish toast!");
-                });
-            }
-            if (callback) {
-                callback(data);
-            }
-        });
-    },
+      }
+    }
+  },
+
+  //清除所有的数据
+  onClearAllData() {
+    this.unschedule(this.AutoSaveData)
+    //任务索引
+    cc.sys.localStorage.removeItem('userdata')
+    //跳回登录场景
+    // cc.director.loadScene('Login');
+  },
+  //保存数据请求
+  /**
+   *
+   * 现在转服务器存储,原本所有相关操作通过服务器计算。
+   * 一、目前涉及到的是 SNT 和 SNB 两个货币相关,和买田地操作 (可以理解为租聘,三种类型)
+   *
+   * isNetwork:true,上传到网络
+   *
+   */
+  pushData: function (isNetwork) {
+    // cc.log(this.EveryDayRewardsArray);
+    // console.log(this.readData.BFirstLoadGame);
+    var datas = {
+      version: this.GameVersion,
+      // 转后台处理
+      BFirstLoadGame: 1, //只要push数据,就证明已经开始第一次游戏了
+
+      /**游戏不修改,默认值 start */
+      shareGive: this.shareGive,
+      //签到分享给钻石金币
+      signInGive: this.signInGive,
+      //每个月 给的 低保
+      EveryGive: this.EveryGive,
+      //公共分享
+      publicGive: this.publicGive,
+      /**游戏不修改,默认值 end */
+
+      //时间
+      GameYear: this.GameYear,
+      GameMonth: this.GameMonth,
+      GameDay: this.GameDay,
+
+      //这里只是单纯的存储起来
+      CNT: this.CNT,
+      SNB: this.SNB,
+
+      Golden: this.Golden,
+      Diamond: this.Diamond,
+      WorkerLV: this.WorkerLV,
+      WorkerNum: this.WorkerNum,
+      WorkerCapacity: this.WorkerCapacity,
+      GameDate: this.GameDate,
+      LastTimeEveryDayRewardsDate: this.LastTimeEveryDayRewardsDate,
+      LastTimeLuckDate: this.LastTimeLuckDate,
+      EveryDayRewardsArray: this.EveryDayRewardsArray, //.join('_'),
+      TerritoryStateArray: this.TerritoryStateArray, //.join('_'),
+      //面板状态
+      BuildingStateArray: this.BuildingStateArray, //.join('_'),
+      BuildingLockStateArray: this.BuildingLockStateArray, //.join('_'),
+
+      /**
+       * SNB和CNT相关,需要后台筛选 田地 和 种子。单独处理
+       */
+      BuildingNumArray: this.BuildingNumArray, //.join('_'),
+      DiamondNumArray: this.DiamondNumArray, //.join('_'),
+      FoodTradeState: this.FoodTradeState,
+      WoodTradeState: this.WoodTradeState,
+      MineralTradeState: this.MineralTradeState,
+
+      LotteryTimes: this.LotteryTimes,
+
+      /**
+       * 这些数据不用服务器初始化
+       */
+      //工人工作信息
+      characterInfoArray: this.CharacterInfoArray,
+      //道路数据
+      highwayIndex: this.GameData_highwayIndex,
+      allHighwayStylesAndIndex: GlobalD.game.AllHighwayStylesAndIndex,
+      //建筑物数据
+      buildingsInfo: this.GameData_buildings,
+      //任务
+      TaskIconCountClick: task.TaskIconCountClick,
+    }
 
-    //获取账户站内CNT明细(村长和镇长才有)
-    onCntLog(page, limit, callback) {
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能onGetSnbToCntInfo!");
-            return;
+    if (isNetwork) {
+      var data = []
+      // data["openid"] = userData.openId;
+      // data["userdata"] = JSON.stringify(datas);
+      data['playerData'] = JSON.stringify(datas)
+
+      /** 推送信息 */
+      utils.post(utils.api.playerPushInfo, data, (res, playerPushInfoTemp) => {
+        // console.log('playerPushInfoTemp', playerPushInfoTemp);
+      })
+    } else {
+      console.log('存储本地:' + isNetwork)
+      //保存用户数据到本地
+      cc.sys.localStorage.setItem('userdata', JSON.stringify(datas))
+    }
+  },
+
+  /**
+   * 兑换种子时候,特殊处理数据
+   * 扣除相应的钻石
+   */
+  exchangeSeed(callback) {
+    //先暂停存储
+    this.unschedule(this.AutoSaveData)
+
+    utils.post(
+      utils.api.exchangeSeeds,
+      { diamondAmount: 30000, seedId: 8 },
+      (res, value) => {
+        console.log('兑换种子', value)
+        callback(res, value)
+        //兑换成功后
+        if (0 === value.code) {
+          //更新一次数据
+          let _playerData = JSON.parse(value.data.playerData)
+          //更新本地钻石数据
+          this.SetDiamond(_playerData.Diamond)
+          callback(res, vaule)
+        } else {
+          //兑换失败
+          GlobalD.GameData.showToast(cc.find('Canvas/UICamera'), '兑换失败', 2)
         }
-        GlobalD.dapp.cntLog(page, limit).then((data) => {
-            const { err, res } = data;
-            // if (err === null) {
-            //     console.log(res) //
-            // }
-            if (callback) {
-                callback(data);
-            }
-        });
-    },
 
-    //获取 神农呗转 CNT 日志
-    onGetSnbToCntInfo(page, limit, callback) {
-        if (!GlobalD.dapp) {
-            console.warn("GlobalD.dapp未初始化,不能onGetSnbToCntInfo!");
-            return;
+        //重新开启存储
+        this.schedule(this.AutoSaveData, 15)
+      }
+    )
+  },
+  /**
+   * 获取是否租赁过的状态
+   */
+  getPlayerExchangeState(callback) {
+    utils.get(utils.api.playerExchangeState, {}, (res, vaule) => {
+      console.log('租赁状态:', value)
+      callback(res, vaule)
+    })
+  },
+
+  /**
+   * 暂时不需要从这里读取
+   */
+  getLandConfig() {
+    utils.get(utils.api.landConfig, {}, (res, value) => {
+      if (0 === value.code) {
+        this.ConfigLand = value.data
+      } else {
+        console.warn('未能读取到config土地?')
+      }
+    })
+  },
+  //获取用户全部租赁土地
+  getUserLandList() {
+    utils.get(utils.api.userLandList, {}, (res, vaule) => {})
+  },
+  //获取用户已租赁土地的状态
+  getLandState(context) {
+    let { landId, callback } = context
+    utils.get(utils.api.landState, { landId: landId }, (res, vaule) => {
+      callback(res, vaule)
+    })
+  },
+  //获取商城种子
+  getMallSeed(callback) {
+    utils.get(utils.api.mallSeed, {}, (res, vaule) => {
+      callback(res, vaule)
+    })
+  },
+
+  getWarehouseSeedAndFruit(callback) {
+    utils.get(utils.api.getSeedAndFruit, {}, (res, vaule) => {
+      callback(res, vaule)
+    })
+  },
+  //获取种子状态
+  onGetSeedState(data, callback) {
+    utils.get(utils.api.getSeedState, data, (res, vaule) => {
+      callback(res, vaule)
+    })
+  },
+
+  //种植种子
+  // data:{landId:1,seedId:1}
+  onPlant(data, callback) {
+    utils.get(utils.api.plant, data, (res, vaule) => {
+      callback(res, vaule)
+    })
+  },
+
+  //收取果实
+  onAddFruit(data, callback) {
+    if (this.isOnAddFruit) {
+      console.log('收取果实过快!')
+      return
+    }
+    this.isOnAddFruit = true
+    utils.post(utils.api.addFruit, data, (res, vaule) => {
+      this.isOnAddFruit = false
+      callback(res, vaule)
+    })
+  },
+
+  //出售果实
+  onSaleFruit(data, callback) {
+    if (this.isOnSaleFruit) {
+      console.log('出售果实过快!')
+      return
+    }
+    this.isOnSaleFruit = true
+    utils.post(utils.api.saleFruit, data, (res, vaule) => {
+      this.isOnSaleFruit = false
+      callback(res, vaule)
+    })
+  },
+
+  //赠送果实
+  onGrantFruit(data, callback) {
+    if (this.isOnGrantFruit) {
+      console.log('赠送果实过快!')
+      return
+    }
+    this.isOnGrantFruit = true
+    utils.post(utils.api.grantFruit, data, (res, vaule) => {
+      this.isOnGrantFruit = false
+      callback(res, vaule)
+    })
+  },
+
+  //神农呗购买种子
+  onBuySeedsWithSNB(snbAmount, seedId, callback) {
+    utils.post(
+      utils.api.snbBuySeeds,
+      { payAmount: snbAmount, seedId: seedId },
+      (res, vaule) => {
+        callback(res, vaule)
+      }
+    )
+  },
+
+  //获取用户的snb
+  onGetUserSnb(callback) {
+    utils.get(utils.api.userSnbInfo, {}, (res, value) => {
+      GlobalD.GameData.SetSNB(value.data.SNB)
+      if (callback) callback(res, value)
+    })
+  },
+
+  /**
+   * 支付cnt操作
+   * @param {*} amount // 需支付金额
+   * @param {*} payType 支付类型,1购买土地租凭, 2自然灾害防护,3野兽防护
+   * @param {*} itemType 操作物品的id 字符串
+   */
+  payCNT(cntAmount, payType, itemType, callback) {
+    console.log(
+      '购买金额:' +
+        cntAmount +
+        '购买类型PlayType:' +
+        payType +
+        '购买物品的id:' +
+        itemType
+    )
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能payCNT!')
+      return
+    }
+    //
+    if (this.isPlayingCnt) {
+      console.warn('同时触发支付CNT过快!')
+      return
+    }
+    if (GlobalD.GameData.GetCNT() < cntAmount) {
+      console.log(
+        'cnt 不足,GetCNT:' +
+          GlobalD.GameData.GetCNT() +
+          '消费的cntAmount' +
+          cntAmount
+      )
+      GlobalD.GameData.showToast(
+        cc.find('Canvas/UICamera'),
+        'CNT不足!',
+        2,
+        () => {
+          console.log('finish toast! CNT不足!')
         }
-        GlobalD.dapp.swapLog(page, limit).then((data) => {
-            const { err, res } = data;
-            if (err === null) {
-                console.log(res) //
-            }
-            if (callback) {
-                callback(data);
-            }
-        });
-    },
-
-    //获取 snb 流水日志
-    onGetSnbInfoList(page, limit, callback) {
-
-        utils.get(utils.api.snbList, { page: page, limit: limit }, (res, value) => {
-            // console.log("snb操作日志", value);
-            if (0 === value.code) {
-                if (callback)
-                    callback(value.data);
-            } else {
-                let mySnbList = [];
-                if (callback)
-                    callback(mySnbList);
-            }
-
+      )
+      return
+    }
+    this.isPlayingCnt = true
+    GlobalD.GameData.showToast(
+      cc.find('Canvas/UICamera'),
+      '支付处理中...',
+      5,
+      () => {
+        console.log('finish toast!支付处理中...')
+      }
+    )
+
+    GlobalD.dapp.payCnt(cntAmount, payType, itemType).then((data) => {
+      const [err, tx] = data
+      this.isPlayingCnt = false
+      if (err === null) {
+        // TODO 成功, 支付为链上操作,需要提供回调接口给这边服务端确认交易成功后修改购买订单结果
+        console.log(tx) // 交易hash,唯一标识符
+
+        GlobalD.dapp.cntBalance().then((cntBalance) => {
+          //会延迟返回
+          // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
+          GlobalD.GameData.SetCNT(cntBalance)
         })
-    },
-
-
-
-    updateToast() {
-        if (this.toastEndTime <= 0) {
-            this.toast.active = false
-            if (this.isStart) {
-                if (this.toastCallback != null && this.toastCallback != undefined) {
-                    this.toastCallback();
-                    // console.log(this.toastCallback);
-                }
-                this.isStart = false;
-            }
-            // console.log("this.toast.active:" + this.toast.active);
+        GlobalD.GameData.showToast(
+          cc.find('Canvas/UICamera'),
+          '支付成功!',
+          5,
+          () => {
+            GlobalD.GameData.showToast(
+              cc.find('Canvas/UICamera'),
+              '区块确认中,请耐心等待!',
+              120
+            )
+          }
+        )
+      } else {
+        console.log(err)
+        GlobalD.GameData.showToast(cc.find('Canvas/UICamera'), err, 2, () => {
+          console.log('finish toast!')
+        })
+      }
+
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+
+  /**
+   * 神农呗转换CNT ,比例是5:1
+   * @param {*} snbAmount
+   * @param {*} callback
+   * @returns
+   */
+  onSnbToCnt(snbAmount, callback) {
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能onSnbToCnt!')
+      return
+    }
+    // GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "暂不支持兑换CNT!", 2, () => {
+    //     console.log("finish toast!");
+    // });
+    // return;
+    if (this.isPlayingSnb) {
+      console.warn('同时触发支付SNB过快!')
+      return
+    }
+    if (GlobalD.GameData.GetSNB() <= 0) {
+      console.log(
+        '神农呗数量GetSNB:',
+        GlobalD.GameData.GetSNB(),
+        '替换snbAmount:',
+        snbAmount
+      )
+      GlobalD.GameData.showToast(
+        cc.find('Canvas/UICamera'),
+        '神农呗数量不足!',
+        2,
+        () => {
+          console.log('finish toast!')
         }
-        this.toastEndTime--;
-    },
+      )
+      return
+    }
 
-    showToast(parent, content, time, callback) {
-        if (callback) {
-            this.toastCallback = callback;
-        } else {
-            this.toastCallback = null;
-        }
+    GlobalD.GameData.showToast(
+      cc.find('Canvas/UICamera'),
+      '已发起兑换!',
+      5,
+      () => {
+        console.log('finish toast!')
+      }
+    )
+    this.isPlayingSnb = true
+    GlobalD.dapp.snbToCnt(snbAmount).then((data) => {
+      //更新日志数据
+      cc.find('GameNode/ManageDapp')
+        .getComponent('ManageDapp')
+        .onUpdateSnbList()
+      const [err, tx] = data
+      this.isPlayingSnb = false
+      if (err === null) {
+        // TODO 成功, 兑换为链上操作,需要提供回调接口给这边服务端确认交易成功后修改扣除SNB数量
+        console.log(tx) // 交易hash,唯一标识符
+        //扣除对应的神农呗,本地修改显示
+        GlobalD.GameData.SetSNB(GlobalD.GameData.GetSNB() - snbAmount)
+
+        GlobalD.dapp.cntBalance().then((cntBalance) => {
+          //会延迟返回
+          // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
+          GlobalD.GameData.SetCNT(cntBalance)
+        })
 
-        this.isStart = true;
-        if (this.toast) {
-            // console.log(this.toast.active);
-            this.toast.active = true;
-            this.toast.parent = parent;
-            this.toast.zIndex = 999;
-            let DetailLabel = this.toast.getChildByName('DetailLabel');
-            DetailLabel.getComponent(cc.Label).string = content;
-            this.toastEndTime = time;
+        GlobalD.GameData.showToast(
+          cc.find('Canvas/UICamera'),
+          '区块确认中,请耐心等待!',
+          5,
+          () => {
+            console.log('finish toast!')
+          }
+        )
+      } else {
+        console.log(err)
+        GlobalD.GameData.showToast(cc.find('Canvas/UICamera'), err, 2, () => {
+          console.log('finish toast!')
+        })
+      }
+
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+  //站内收益
+  onCntCanWithdrawBalance(callback) {
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能onGetCNTRevenue!')
+      return
+    }
+    GlobalD.dapp.cntCanWithdrawBalance().then((data) => {
+      const { err, res } = data
+      if (err === null) {
+        console.log(res) //Number 返回数字
+        GlobalD.GameData.CNTDrawBalance = res
+      }
+      //todo ,记录一个信息
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+  //站内收益提现
+  onCntWithdraw(amount, callback) {
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能onCntWithdraw!')
+      return
+    }
+    GlobalD.GameData.showToast(
+      cc.find('Canvas/UICamera'),
+      '收益正在提现中',
+      10,
+      () => {
+        console.log('finish toast!')
+      }
+    )
+    GlobalD.dapp.cntWithdraw(amount).then((data) => {
+      const [err, tx] = data
+      console.log('onCntWithdraw:', data)
+      if (err === null) {
+        console.log(tx) //String|null 交易唯一哈市
+        GlobalD.GameData.showToast(
+          cc.find('Canvas/UICamera'),
+          '提现成功!',
+          1,
+          () => {
+            console.log('finish toast!')
+          }
+        )
+      } else {
+        GlobalD.GameData.showToast(cc.find('Canvas/UICamera'), err, 1, () => {
+          console.log('finish toast!')
+        })
+      }
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+
+  //获取账户站内CNT明细(村长和镇长才有)
+  onCntLog(page, limit, callback) {
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能onGetSnbToCntInfo!')
+      return
+    }
+    GlobalD.dapp.cntLog(page, limit).then((data) => {
+      const { err, res } = data
+      // if (err === null) {
+      //     console.log(res) //
+      // }
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+
+  //获取 神农呗转 CNT 日志
+  onGetSnbToCntInfo(page, limit, callback) {
+    if (!GlobalD.dapp) {
+      console.warn('GlobalD.dapp未初始化,不能onGetSnbToCntInfo!')
+      return
+    }
+    GlobalD.dapp.swapLog(page, limit).then((data) => {
+      const { err, res } = data
+      if (err === null) {
+        console.log(res) //
+      }
+      if (callback) {
+        callback(data)
+      }
+    })
+  },
+
+  //获取 snb 流水日志
+  onGetSnbInfoList(page, limit, callback) {
+    utils.get(utils.api.snbList, { page: page, limit: limit }, (res, value) => {
+      // console.log("snb操作日志", value);
+      if (0 === value.code) {
+        if (callback) callback(value.data)
+      } else {
+        let mySnbList = []
+        if (callback) callback(mySnbList)
+      }
+    })
+  },
+
+  updateToast() {
+    if (this.toastEndTime <= 0) {
+      this.toast.active = false
+      if (this.isStart) {
+        if (this.toastCallback != null && this.toastCallback != undefined) {
+          this.toastCallback()
+          // console.log(this.toastCallback);
         }
-    },
-
-    onTestToken() {
-        utils.onTestToken();
+        this.isStart = false
+      }
+      // console.log("this.toast.active:" + this.toast.active);
+    }
+    this.toastEndTime--
+  },
+
+  showToast(parent, content, time, callback) {
+    if (callback) {
+      this.toastCallback = callback
+    } else {
+      this.toastCallback = null
     }
 
+    this.isStart = true
+    if (this.toast) {
+      // console.log(this.toast.active);
+      this.toast.active = true
+      this.toast.parent = parent
+      this.toast.zIndex = 999
+      let DetailLabel = this.toast.getChildByName('DetailLabel')
+      DetailLabel.getComponent(cc.Label).string = content
+      this.toastEndTime = time
+    }
+  },
 
-});
+  onTestToken() {
+    utils.onTestToken()
+  },
+})

+ 20 - 4
assets/Script/public/ManageUI.js

@@ -571,12 +571,28 @@ cc.Class({
 
   //点击钻石兑换
   onButtonEvent_Exchange() {
-    if (GlobalD.GameData.GetDiamond() > 30000) {
-      alert('钻石数量不够,累积到30000个钻石即可免费兑换一包辣椒种子。')
+    //判断钻石数量是否大于等于3万个
+    if (GlobalD.GameData.GetDiamond() < 30000) {
+      GlobalD.GameData.showToast(
+        cc.find('Canvas/UICamera'),
+        '钻石数量不够,累积到30000个钻石即可免费兑换一包辣椒种子。',
+        2
+      )
       return
     }
-    this.onSetTouchStatus(this.DiamondSeedsView, true)
+
+    //调用兑换接口
+    GlobalD.GameData.exchangeSeed((res, value) => {
+      //兑换成功
+      if (0 === value.code) {
+        this.onSetTouchStatus(this.DiamondSeedsView, true)
+      } else {
+        //兑换失败
+        GlobalD.GameData.showToast(cc.find('Canvas/UICamera'), '兑换失败', 2)
+      }
+    })
   },
+
   //点击钻石兑换的确认按钮
   onButtonEvent_DiamondSure() {
     this.onSetTouchStatus(this.DiamondSeedsView, false)
@@ -1105,7 +1121,7 @@ cc.Class({
 
           return
         }
-        this.DiamondNowlabel.string = result + '/20000'
+        this.DiamondNowlabel.string = result + '/30000'
         this.Diamondlabel.getComponent(cc.Label).string = result
         AnimTimes++
       },