GameData.js 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231
  1. var reGameStates = require('GameStates');
  2. var AConfig = require('../Config');
  3. import utils from "../Network/netUtils";
  4. // import GameNet from "../Network/GameNet"
  5. // import gameToast from "../Network/gameToast"
  6. //全局数据类
  7. cc.Class({
  8. extends: cc.Component,
  9. properties: {
  10. //记录全部道路的index
  11. GameData_highwayIndex: {
  12. default: [],
  13. type: [cc.Integer],
  14. visible: false,
  15. serializable: false,
  16. },
  17. //记录建筑物存储的信息
  18. GameData_buildings: {
  19. default: [],
  20. visible: false,
  21. serializable: false,
  22. },
  23. HighWayPrefabs: cc.Prefab,
  24. //MyMapNode
  25. //建筑物的节点
  26. BuildingsParent: {
  27. default: null,
  28. type: cc.Node,
  29. },
  30. ManageUI: {
  31. default: null,
  32. type: cc.Node,
  33. },
  34. GameVersion: {
  35. default: -1,
  36. type: cc.Integer,
  37. },
  38. Golden: {
  39. default: 0,
  40. visible: false,
  41. },
  42. Diamond: {
  43. default: 0,
  44. visible: false,
  45. },
  46. /**
  47. * 接口
  48. * todo cnt和snb 由钱包读取
  49. */
  50. CNT: {
  51. default: 0,
  52. visible: false,
  53. },
  54. SNB: {
  55. default: 0,
  56. visible: false,
  57. },
  58. /**
  59. * 土地租赁机会,替换 Golden 显示
  60. */
  61. animalTimes: {
  62. default: 0,
  63. visible: false,
  64. },
  65. /**
  66. * 用户属性
  67. */
  68. //体力
  69. strength: {
  70. default: 0,
  71. visible: false,
  72. },
  73. //幸运值
  74. lucky: {
  75. default: 0,
  76. visible: false,
  77. },
  78. //站内收益
  79. CNTDrawBalance: {
  80. default: 0,
  81. visible: false,
  82. },
  83. //读取的土地文件
  84. ConfigLand: {
  85. default: null,
  86. visible: false
  87. },
  88. /**
  89. * 制作计时器
  90. */
  91. toast: null,
  92. scheduleObj: null,
  93. toastCallback: null,
  94. isStart: true,
  95. isInit: false,
  96. /**
  97. * 限制重复触发支付, 正在支付中转态,
  98. */
  99. isPlayingCnt: false,
  100. isPlayingSnb: false,
  101. isPlayingLucky: false,
  102. /**
  103. * 处理请求
  104. */
  105. //现在多次触发
  106. isOnAddFruit: false,
  107. isOnSaleFruit: false,
  108. isOnGrantFruit: false,
  109. isExchangeSeed: false,
  110. //是否申请
  111. isApplying: false,
  112. //自动存储数据
  113. AutoSaveData: null,
  114. gameToastPrefab: cc.Prefab
  115. },
  116. onLoad() {
  117. //初始化GameData全局变量
  118. GlobalD.GameData = this;
  119. this.AddBuildingCost = 5;
  120. this.RemoveBuildingCost = 5;
  121. this.toast = cc.instantiate(this.gameToastPrefab);
  122. this.toast.parent = cc.find("Canvas/UICamera");
  123. this.toast.zIndex = 999;
  124. this.toast.active = false;
  125. },
  126. start() {
  127. this._tiledMap = GlobalD.TiledMap._tiledMap;
  128. //读取可领取的snb
  129. this.onGetCntToSnb((value) => {
  130. // console.log("当前用户转换的snb", value);
  131. if (value.data != null) {
  132. this.ManageUI.getComponent("ManageUI").onSetVillageReceivesSNBViewInfo(value.data);
  133. }
  134. })
  135. try {
  136. GlobalD.dapp.cntBalance().then((cntBalance) => {
  137. //会延迟返回
  138. // console.log("获取cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
  139. GlobalD.GameData.SetCNT(cntBalance);
  140. });
  141. } catch (err) {
  142. console.error(err) // 初始化失败,运行环境不是钱包环境
  143. }
  144. //登录时候已经初始化好snb了
  145. this.SetSNB(GlobalD.UserInfo.snb + GlobalD.UserInfo.snbPart);
  146. this.SetDiamond(userData.readData.diamond);
  147. //初始化一个租赁币
  148. this.SetAnimalTimes(GlobalD.animalTimes);
  149. //领取ui
  150. this.ManageUI.getComponent("ManageUI").DiamondNowlabel.string = this.GetDiamond() + '/30000'
  151. //设置体力值
  152. this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
  153. //设置幸运值
  154. this.SetLucky(GlobalD.PlayerAttribute.lucky);
  155. //初始化生成房屋
  156. /**
  157. * dapp设定: 如果固定土地冲突,删除冲突的建筑和回收仓库
  158. * 新增:
  159. * 当进入其他用户农场时候,只处理土地显示信息。其他的都隐藏起来,不进行操作
  160. * 更新的数据:1.土地
  161. * 隐藏的数据:1.隐藏游客
  162. * 2.隐藏用户当前建筑
  163. * 3.隐藏当前用户菜单,显示对应农场按钮
  164. */
  165. this.ManageUI.getComponent('ManageBuildings').InitBuildings();
  166. this.ManageUI.getComponent('ManageUI').Init();
  167. },
  168. //GET / SET /Plus
  169. GetGameDate: function () {
  170. return this.GameDate;
  171. },
  172. SetGameDate: function (num) {
  173. this.GameDate = num;
  174. },
  175. PlusGameDate: function (num) {
  176. this.GameDate += num;
  177. },
  178. GetGolden: function () {
  179. return parseInt(this.Golden);
  180. },
  181. GetGoldenCallBack(_CallBack) {
  182. if (_CallBack)
  183. _CallBack({ resGolden: parseInt(this.Golden) });
  184. },
  185. SetGolden: function (Num) {
  186. let LastMoney = this.Golden;
  187. this.Golden = Num;
  188. let CurrentMoney = Num;
  189. this.ManageUI.getComponent('ManageUI').GoldenChangeCallBack(this.GetGolden(), LastMoney, CurrentMoney);
  190. },
  191. PlusGolden: function (Num) {
  192. if (this.Golden + Num < 0) {
  193. this.SetGolden(0);
  194. }
  195. else {
  196. this.SetGolden(this.Golden + Num);
  197. }
  198. // task.task50W();
  199. },
  200. GetDiamond: function () {
  201. return parseInt(this.Diamond);
  202. },
  203. SetDiamond: function (num) {
  204. let LastMoney = this.Diamond;
  205. this.Diamond = num;
  206. let CurrentMoney = num;
  207. this.ManageUI.getComponent("ManageUI").DiamondNowlabel.string = this.Diamond + '/30000'
  208. this.ManageUI.getComponent('ManageUI').DiamondChangeCallBack(this.GetDiamond(), LastMoney, CurrentMoney);
  209. },
  210. PlusDiamond: function (num) {
  211. if (this.Diamond + num < 0) {
  212. this.SetDiamond(0);
  213. }
  214. else {
  215. this.SetDiamond(this.Diamond + num);
  216. }
  217. },
  218. /**
  219. * 游戏里面的cnt 和神农呗
  220. */
  221. GetCNT: function () {
  222. return parseFloat(this.CNT);
  223. },
  224. SetCNT: function (Num) {
  225. this.CNT = Num;
  226. this.ManageUI.getComponent('ManageUI').CNTChangeCallBack(this.CNT);
  227. },
  228. GetSNB: function () {
  229. return parseFloat(this.SNB);
  230. },
  231. SetSNB: function (Num) {
  232. this.SNB = Num;
  233. this.ManageUI.getComponent('ManageUI').SNBChangeCallBack(this.SNB);
  234. },
  235. //租赁次数
  236. GetAnimalTimes: function () {
  237. return parseFloat(this.animalTimes);
  238. },
  239. SetAnimalTimes: function (Num) {
  240. this.animalTimes = Num;
  241. this.ManageUI.getComponent('ManageUI').AnimalTimesChangeCallBack(this.animalTimes);
  242. },
  243. GetStrength: function () {
  244. return parseFloat(this.strength);
  245. },
  246. SetStrength: function (Num) {
  247. this.strength = Num;
  248. this.ManageUI.getComponent('ManageUI').StrengthChangeCallBack(this.strength);
  249. },
  250. GetLucky: function () {
  251. return parseFloat(this.lucky);
  252. },
  253. SetLucky: function (Num) {
  254. this.lucky = Num;
  255. this.ManageUI.getComponent('ManageUI').LuckyChangeCallBack(this.lucky);
  256. },
  257. GetWorkerLV: function () {
  258. return parseInt(this.WorkerLV);
  259. },
  260. SetWorkerLV: function (num) {
  261. this.WorkerLV = num;
  262. },
  263. PlusWorkerLV: function (num) {
  264. this.WorkerLV += num;
  265. },
  266. GetWorkerNum: function () {
  267. return parseInt(this.WorkerNum);
  268. },
  269. SetWorkerNum: function (num) {
  270. this.WorkerNum = num;
  271. },
  272. PlusWorkerNum: function (num) {
  273. this.WorkerNum += num;
  274. },
  275. GetLastTimeEveryDayRewardsDate: function () {
  276. return this.LastTimeEveryDayRewardsDate;
  277. },
  278. //获取转盘 时间
  279. GetLastTimeLuckDate: function () {
  280. return this.LastTimeLuckDate;
  281. },
  282. //设置转盘时间
  283. SetLastTimeLuckDate: function (DateString) {
  284. this.LastTimeLuckDate = DateString;
  285. },
  286. SetLastTimeEveryDayRewardsDate: function (DateString) {
  287. this.LastTimeEveryDayRewardsDate = DateString;
  288. },
  289. //工人信息数组
  290. GetWorkerCharacterInfoArray: function () {
  291. return this.CharacterInfoArray;
  292. },
  293. SetWorkerCharacterInfoArray: function (item) {
  294. this.CharacterInfoArray = item;
  295. },
  296. /*** */
  297. GetWorkerCapacity: function () {
  298. return parseInt((this.WorkerCapacity));
  299. },
  300. SetWorkerCapacity: function (num) {
  301. this.WorkerCapacity = num;
  302. },
  303. PlusWorkerCapacity: function (num) {
  304. this.WorkerCapacity += num;
  305. },
  306. GetTerritoryStateArray: function () {
  307. return this.TerritoryStateArray;
  308. },
  309. SetTerritoryStateArray: function (aTerritoryStateArray) {
  310. this.TerritoryStateArray = aTerritoryStateArray;
  311. },
  312. PlusTerritoryStateArray: function (Item) {
  313. this.TerritoryStateArray.push(Item);
  314. },
  315. GetBuildingStateArray: function () {
  316. return this.BuildingStateArray;
  317. },
  318. SetBuildingStateArray: function (aBuildingStateArray) {
  319. this.BuildingStateArray = aBuildingStateArray;
  320. },
  321. PlusBuildingStateArray: function (Item) {
  322. this.BuildingStateArray.push(Item);
  323. },
  324. GetBuildingLockStateArray: function () {
  325. return this.BuildingLockStateArray;
  326. },
  327. SetBuildingLockStateArray: function (aArray) {
  328. this.BuildingLockStateArray = aArray;
  329. },
  330. PlusBuildingLockStateArray: function (Item) {
  331. this.BuildingLockStateArray.push(Item);
  332. },
  333. GetBuildingNumArray: function () {
  334. return this.BuildingNumArray;
  335. },
  336. SetBuildingNumArray: function (aBuildingNumArray) {
  337. this.BuildingNumArray = aBuildingNumArray;
  338. },
  339. PlusBuildingNumArray: function (Item) {
  340. this.BuildingNumArray.push(Item);
  341. },
  342. //操作钻石数据
  343. GetDiamondNumArray: function () {
  344. return this.DiamondNumArray;
  345. },
  346. SetDiamondNumArray: function (aDiamondNumArray) {
  347. this.DiamondNumArray = aDiamondNumArray;
  348. },
  349. GetEveryDayRewardsArray: function () {
  350. return this.EveryDayRewardsArray;
  351. },
  352. SetEveryDayRewardsArray: function (aArray) {
  353. this.EveryDayRewardsArray = aArray;
  354. },
  355. PlusEveryDayRewardsArray: function (Item) {
  356. this.EveryDayRewardsArray.push(Item);
  357. },
  358. GetFoodTradeState: function () {
  359. return parseInt((this.FoodTradeState));
  360. },
  361. SetFoodTradeState: function (num) {
  362. this.FoodTradeState = num;
  363. },
  364. PlusFoodTradeState: function (num) {
  365. this.FoodTradeState += num;
  366. },
  367. GetWoodTradeState: function () {
  368. return parseInt((this.WoodTradeState));
  369. },
  370. SetWoodTradeState: function (num) {
  371. this.WoodTradeState = num;
  372. },
  373. PlusWoodTradeState: function (num) {
  374. this.WoodTradeState += num;
  375. },
  376. GetMineralTradeState: function () {
  377. return parseInt((this.MineralTradeState));
  378. },
  379. SetMineralTradeState: function (num) {
  380. this.MineralTradeState = num;
  381. },
  382. PlusMineralTradeState: function (num) {
  383. this.MineralTradeState += num;
  384. },
  385. GetLotteryTimes: function () {
  386. return parseInt((this.LotteryTimes));
  387. },
  388. SetLotteryTimes: function (num) {
  389. this.LotteryTimes = num;
  390. },
  391. PlusLotteryTimes: function (num) {
  392. this.LotteryTimes += num;
  393. },
  394. /**
  395. * 兑换种子时候,特殊处理数据
  396. * 扣除相应的钻石
  397. */
  398. exchangeSeed(diamondAmount, callback) {
  399. if (this.isExchangeSeed) {
  400. console.warn("正在兑换中...");
  401. return;
  402. }
  403. this.isExchangeSeed = true;
  404. //先暂停存储
  405. // this.unschedule(this.AutoSaveData);
  406. utils.post(utils.api.exchangeSeeds, { diamondAmount: diamondAmount, seedId: 8 }, (flag, value) => {
  407. console.log("兑换flag", flag);
  408. if (flag) {
  409. console.log("兑换种子", value.code, value.msg);
  410. //兑换成功后
  411. if (0 === value.code) {
  412. //更新一次数据
  413. let _playerData = JSON.parse(value.data.playerData);
  414. console.log("兑换后的钻石:", _playerData.Diamond);
  415. //更新本地钻石数据
  416. this.SetDiamond(_playerData.Diamond);
  417. }
  418. callback(value);
  419. }
  420. this.isExchangeSeed = false;
  421. //重新开启存储
  422. // this.schedule(this.AutoSaveData, 15);
  423. })
  424. },
  425. /**
  426. * 获取是否租赁过的状态
  427. */
  428. getPlayerExchangeState(callback) {
  429. utils.get(utils.api.playerExchangeState, {}, (flag, value) => {
  430. // console.log("租赁状态:", value);
  431. if (flag)
  432. callback(flag, value);
  433. })
  434. },
  435. /**
  436. * 暂时不需要从这里读取
  437. */
  438. getLandConfig() {
  439. utils.get(utils.api.landConfig, {}, (flag, value) => {
  440. if (flag && 0 === value.code) {
  441. this.ConfigLand = value.data;
  442. } else {
  443. console.warn("未能读取到config土地?");
  444. }
  445. })
  446. },
  447. //获取自己全部租赁土地
  448. getSelfUserLandList(callback) {
  449. utils.get(utils.api.userLandList, {}, (flag, value) => {
  450. if (flag && 0 === value.code) {
  451. GlobalD.UserLeaseLand = value.data;
  452. if (callback)
  453. callback();
  454. } else {
  455. console.warn("读取到用户的土地错误?");
  456. }
  457. })
  458. },
  459. //获取用户全部租赁土地
  460. getOtherUserLandList(otherUserId, callback) {
  461. this.showToast(cc.find("Canvas/UICamera"), "载入玩家数据中..", 5);
  462. utils.get(utils.api.userLandAndCanStealList, { otherUserId: otherUserId }, (flag, value) => {
  463. // console.log(otherUserId + ",获取其他用户土地数据:", value);
  464. this.hideToast();
  465. if (flag && 0 === value.code) {
  466. GlobalD.OtherLeaseland = value.data;
  467. //todo 获取数据成功,进入切换流程,设置 false,处理其他用户对应的土地
  468. this.ManageUI.getComponent('ManageBuildings').spawnConfigLand(GlobalD.OtherLeaseland, false);
  469. //收起菜单
  470. GlobalD.game._ManageUIScript.onHideMenu();
  471. //收起底部菜单栏
  472. GlobalD.game._ManageUIScript.onBottomMenuView(false);
  473. //显示进入其他用户场景后菜单操作
  474. GlobalD.game._ManageUIScript.onOtherFarmerView(true);
  475. //关闭当前列表
  476. GlobalD.game._ManageUIScript.onListUserInfo_Close();
  477. this.hideToast();
  478. // this.showToast(cc.find("Canvas/UICamera"), "载入成功..", 1);
  479. this.hideToast();
  480. if (callback)
  481. callback();
  482. } else {
  483. this.showToast(cc.find("Canvas/UICamera"), "获取数据失败..", 1);
  484. console.warn("获取其他用户土地数据错误?");
  485. }
  486. })
  487. },
  488. //获取用户可以偷取的列表
  489. onGetCanStealUserList(page, limit, callback) {
  490. this.showToast(cc.find("Canvas/UICamera"), "刷新列表中..", 10);
  491. utils.get(utils.api.canStealUserList, { page: page, limit: limit }, (flag, value) => {
  492. this.hideToast();
  493. if (flag && 0 === value.code) {
  494. if (callback)
  495. callback(value.data);
  496. } else {
  497. let myList = [];
  498. if (callback)
  499. callback(myList);
  500. }
  501. })
  502. },
  503. // onGetSnbInfoList(page, limit, callback) {
  504. // utils.get(utils.api.snbList, { page: page, limit: limit }, (flag, value) => {
  505. // // console.log("snb操作日志", value);
  506. // if (flag && 0 === value.code) {
  507. // if (callback)
  508. // callback(value.data);
  509. // } else {
  510. // let mySnbList = [];
  511. // if (callback)
  512. // callback(mySnbList);
  513. // }
  514. // })
  515. // },
  516. //狗的相关处理
  517. //获取状态
  518. onGetDogState(data, callback) {
  519. utils.get(utils.api.getEquipmentByType, data, (flag, value) => {
  520. if (flag)
  521. callback(value);
  522. })
  523. },
  524. onGetEquipmentListState(data, callback) {
  525. utils.get(utils.api.getListEquipment, data, (flag, value) => {
  526. if (flag)
  527. callback(value);
  528. })
  529. },
  530. onGetAddDogFood(data, callback) {
  531. utils.post(utils.api.addFood, data, (flag, value) => {
  532. if (flag)
  533. callback(value);
  534. })
  535. },
  536. onSetDogShowState(data, callback) {
  537. utils.post(utils.api.setDogShowState, data, (flag, value) => {
  538. if (flag)
  539. callback(value);
  540. })
  541. },
  542. //获取狗粮商城列表
  543. onGetMallFoodList(callback) {
  544. utils.get(utils.api.getMallFoodList, {}, (flag, value) => {
  545. if (flag)
  546. callback(value);
  547. })
  548. },
  549. //商城装备列表
  550. onGetMallEquipmentList(callback) {
  551. utils.get(utils.api.getMallEquipmentList, {}, (flag, value) => {
  552. if (flag)
  553. callback(value);
  554. })
  555. },
  556. onGetAddEquipment(data, callback) {
  557. utils.post(utils.api.addEquipment, data, (flag, value) => {
  558. console.log(value);
  559. callback(flag, value);
  560. })
  561. },
  562. //获取用户已租赁土地的状态
  563. getLandState(context) {
  564. let { landId, callback } = context;
  565. utils.get(utils.api.landState, { landId: landId }, (flag, value) => {
  566. if (flag)
  567. callback(value);
  568. })
  569. },
  570. //获取商城种子
  571. getMallSeed(callback) {
  572. utils.get(utils.api.mallSeed, {}, (flag, value) => {
  573. if (flag)
  574. callback(value);
  575. })
  576. },
  577. getWarehouseSeedAndFruit(callback) {
  578. utils.get(utils.api.getSeedAndFruit, {}, (flag, value) => {
  579. if (flag)
  580. callback(value);
  581. })
  582. },
  583. //获取种子状态
  584. onGetSeedState(data, callback) {
  585. utils.get(utils.api.getSeedState, data, (flag, value) => {
  586. if (flag)
  587. callback(value);
  588. })
  589. },
  590. //种植种子
  591. // data:{landId:1,seedId:1}
  592. onPlant(data, callback) {
  593. utils.get(utils.api.plant, data, (flag, value) => {
  594. if (flag)
  595. callback(value);
  596. })
  597. },
  598. //收取果实
  599. onAddFruit(data, callback) {
  600. if (this.isOnAddFruit) {
  601. console.log("收取果实过快!");
  602. return;
  603. }
  604. this.isOnAddFruit = true;
  605. utils.post(utils.api.addFruit, data, (flag, value) => {
  606. this.isOnAddFruit = false;
  607. if (flag)
  608. callback(value);
  609. })
  610. },
  611. //一键收取果实,偷取
  612. onStealAllFruit(data, callback) {
  613. if (this.isOnAddFruit) {
  614. console.log("一键收取果实过快!");
  615. return;
  616. }
  617. this.isOnAddFruit = true;
  618. this.showToast(cc.find("Canvas/UICamera"), "收取果实中..", 5);
  619. utils.post(utils.api.stealAllFruit, data, (flag, value) => {
  620. this.isOnAddFruit = false;
  621. this.hideToast();
  622. if (0 === value.code) {
  623. //如果返回一个体力信息,更新对应的新的用户信息。
  624. if (value.data.playerAttribute) {
  625. GlobalD.PlayerAttribute = value.data.playerAttribute;
  626. //这里需要更新体力值
  627. this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
  628. }
  629. }
  630. if (flag)
  631. callback(value);
  632. })
  633. },
  634. //单个收取
  635. onStealFruit(data, callback) {
  636. if (this.isOnAddFruit) {
  637. console.log("偷取果实过快!");
  638. return;
  639. }
  640. this.isOnAddFruit = true;
  641. this.showToast(cc.find("Canvas/UICamera"), "偷取收成中..", 5);
  642. utils.post(utils.api.stealFruit, data, (flag, value) => {
  643. this.isOnAddFruit = false;
  644. this.hideToast();
  645. if (0 === value.code) {
  646. //如果返回一个体力信息,更新对应的新的用户信息。
  647. if (value.data.playerAttribute) {
  648. GlobalD.PlayerAttribute = value.data.playerAttribute;
  649. //这里需要更新体力值
  650. this.SetStrength(GlobalD.PlayerAttribute.currentStrength);
  651. }
  652. }
  653. if (flag)
  654. callback(value);
  655. })
  656. },
  657. //出售果实
  658. onSaleFruit(data, callback) {
  659. if (this.isOnSaleFruit) {
  660. console.log("出售果实过快!");
  661. return;
  662. }
  663. this.isOnSaleFruit = true;
  664. utils.post(utils.api.saleFruit, data, (flag, value) => {
  665. this.isOnSaleFruit = false;
  666. if (flag)
  667. callback(value);
  668. })
  669. },
  670. //赠送果实
  671. onGrantFruit(data, callback) {
  672. if (this.isOnGrantFruit) {
  673. console.log("赠送果实过快!");
  674. return;
  675. }
  676. this.isOnGrantFruit = true;
  677. utils.post(utils.api.grantFruit, data, (flag, value) => {
  678. this.isOnGrantFruit = false;
  679. if (flag)
  680. callback(value);
  681. })
  682. },
  683. //神农呗购买种子
  684. onBuySeedsWithSNB(snbAmount, seedId, callback) {
  685. utils.post(utils.api.snbBuySeeds, { payAmount: snbAmount, seedId: seedId }, (flag, value) => {
  686. //callback里面处理flag判断
  687. callback(flag, value);
  688. })
  689. },
  690. //获取用户的snb
  691. onGetUserSnb(callback) {
  692. utils.get(utils.api.userSnbInfo, {}, (flag, value) => {
  693. if (flag) {
  694. GlobalD.GameData.SetSNB(value.data.SNB + value.data.snbPart);
  695. }
  696. if (flag && callback)
  697. callback(value);
  698. })
  699. },
  700. /**
  701. * 支付cnt操作
  702. * @param {*} amount // 需支付金额
  703. * @param {*} payType 支付类型,1购买土地租凭, 2自然灾害防护,3野兽防护, 4种子
  704. * @param {*} itemType 操作物品的id 字符串
  705. */
  706. payCNT(cntAmount, payType, itemType, callback) {
  707. console.log("购买金额:" + cntAmount + "购买类型PlayType:" + payType + "购买物品的id:" + itemType);
  708. if (!GlobalD.dapp) {
  709. console.warn("GlobalD.dapp未初始化,不能payCNT!");
  710. return;
  711. }
  712. //
  713. if (this.isPlayingCnt) {
  714. console.warn("同时触发支付CNT过快!");
  715. return;
  716. }
  717. if (GlobalD.GameData.GetCNT() < cntAmount) {
  718. console.log("cnt 不足,GetCNT:" + GlobalD.GameData.GetCNT() + "消费的cntAmount" + cntAmount);
  719. this.showToast(cc.find("Canvas/UICamera"), "CNT不足!", 2);
  720. return;
  721. }
  722. this.isPlayingCnt = true;
  723. this.showToast(cc.find("Canvas/UICamera"), "支付处理中...", 60);
  724. GlobalD.dapp.payCnt(cntAmount, payType, itemType).then((data) => {
  725. const [err, tx] = data;
  726. this.isPlayingCnt = false;
  727. if (err === null) {
  728. // TODO 成功, 支付为链上操作,需要提供回调接口给这边服务端确认交易成功后修改购买订单结果
  729. console.log(tx) // 交易hash,唯一标识符
  730. GlobalD.dapp.cntBalance().then((cntBalance) => {
  731. //会延迟返回
  732. // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
  733. GlobalD.GameData.SetCNT(cntBalance);
  734. });
  735. this.showToast(cc.find("Canvas/UICamera"), "支付成功!", 10);
  736. setTimeout(() => {
  737. this.showToast(cc.find("Canvas/UICamera"), "区块确认中,请耐心等待!", 120)
  738. }, 3100)
  739. } else {
  740. console.log(err)
  741. this.showToast(cc.find("Canvas/UICamera"), err, 2);
  742. }
  743. if (callback) {
  744. callback(data);
  745. }
  746. });
  747. },
  748. /**
  749. * 神农呗转换CNT ,比例是5:1
  750. * @param {*} snbAmount
  751. * @param {*} callback
  752. * @returns
  753. */
  754. onSnbToCnt(snbAmount, callback) {
  755. if (!GlobalD.dapp) {
  756. console.warn("GlobalD.dapp未初始化,不能onSnbToCnt!");
  757. return;
  758. }
  759. // GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "暂不支持兑换CNT!", 2, () => {
  760. // console.log("finish toast!");
  761. // });
  762. // return;
  763. if (this.isPlayingSnb) {
  764. console.warn("同时触发支付SNB过快!");
  765. return;
  766. }
  767. if (GlobalD.GameData.GetSNB() <= 0) {
  768. console.log("神农呗数量GetSNB:", GlobalD.GameData.GetSNB(), "替换snbAmount:", snbAmount);
  769. this.showToast(cc.find("Canvas/UICamera"), "神农呗数量不足!", 2);
  770. return;
  771. }
  772. this.showToast(cc.find("Canvas/UICamera"), "区块确认中,请耐心等待!", 10);
  773. this.isPlayingSnb = true;
  774. GlobalD.dapp.snbToCnt(snbAmount).then((data) => {
  775. //更新日志数据
  776. cc.find("GameNode/ManageDapp").getComponent("ManageDapp").onUpdateSnbList();
  777. const [err, tx] = data;
  778. this.isPlayingSnb = false;
  779. if (err === null) {
  780. // TODO 成功, 兑换为链上操作,需要提供回调接口给这边服务端确认交易成功后修改扣除SNB数量
  781. console.log(tx) // 交易hash,唯一标识符
  782. //扣除对应的神农呗,本地修改显示
  783. GlobalD.GameData.SetSNB(GlobalD.GameData.GetSNB() - snbAmount);
  784. GlobalD.dapp.cntBalance().then((cntBalance) => {
  785. //会延迟返回
  786. // console.log("更新cnt:" + cntBalance) // string, 精度18,需要自行处理省略几位小数
  787. GlobalD.GameData.SetCNT(cntBalance);
  788. });
  789. this.showToast(cc.find("Canvas/UICamera"), "区块确认中,请耐心等待!", 2);
  790. } else {
  791. console.log(err)
  792. this.showToast(cc.find("Canvas/UICamera"), err, 2);
  793. }
  794. if (callback) {
  795. callback(data);
  796. }
  797. });
  798. },
  799. //站内收益
  800. onCntCanWithdrawBalance(callback) {
  801. if (!GlobalD.dapp) {
  802. console.warn("GlobalD.dapp未初始化,不能onGetCNTRevenue!");
  803. return;
  804. }
  805. GlobalD.dapp.cntCanWithdrawBalance().then((data) => {
  806. const { err, res } = data;
  807. if (err === null) {
  808. // console.log(res) //Number 返回数字
  809. GlobalD.GameData.CNTDrawBalance = res;
  810. }
  811. //todo ,记录一个信息
  812. if (callback) {
  813. callback(data);
  814. }
  815. });
  816. },
  817. //站内收益提现
  818. onCntWithdraw(amount, callback) {
  819. if (!GlobalD.dapp) {
  820. console.warn("GlobalD.dapp未初始化,不能onCntWithdraw!");
  821. return;
  822. }
  823. this.showToast(cc.find("Canvas/UICamera"), "收益正在提现中", 10);
  824. GlobalD.dapp.cntWithdraw(amount).then((data) => {
  825. const [err, tx] = data;
  826. console.log("onCntWithdraw:", data);
  827. if (err === null) {
  828. console.log(tx) //String|null 交易唯一哈市
  829. this.showToast(cc.find("Canvas/UICamera"), "提现成功!", 1);
  830. } else {
  831. this.showToast(cc.find("Canvas/UICamera"), err, 1);
  832. }
  833. if (callback) {
  834. callback(data);
  835. }
  836. });
  837. },
  838. //获取账户站内CNT明细(村长和镇长才有)
  839. onCntLog(page, limit, callback) {
  840. if (!GlobalD.dapp) {
  841. console.warn("GlobalD.dapp未初始化,不能onGetSnbToCntInfo!");
  842. return;
  843. }
  844. GlobalD.dapp.cntLog(page, limit).then((data) => {
  845. const { err, res } = data;
  846. // if (err === null) {
  847. // console.log(res) //
  848. // }
  849. if (callback) {
  850. callback(data);
  851. }
  852. });
  853. },
  854. //获取 神农呗转 CNT 日志
  855. onGetSnbToCntInfo(page, limit, callback) {
  856. if (!GlobalD.dapp) {
  857. console.warn("GlobalD.dapp未初始化,不能onGetSnbToCntInfo!");
  858. return;
  859. }
  860. GlobalD.dapp.swapLog(page, limit).then((data) => {
  861. const { err, res } = data;
  862. if (err === null) {
  863. console.log(res) //
  864. }
  865. if (callback) {
  866. callback(data);
  867. }
  868. });
  869. },
  870. //获取 snb 流水日志
  871. onGetSnbInfoList(page, limit, callback) {
  872. utils.get(utils.api.snbList, { page: page, limit: limit }, (flag, value) => {
  873. // console.log("snb操作日志", value);
  874. if (flag && 0 === value.code) {
  875. if (callback)
  876. callback(value.data);
  877. } else {
  878. let mySnbList = [];
  879. if (callback)
  880. callback(mySnbList);
  881. }
  882. })
  883. },
  884. //获取snb申请列表
  885. onGetSnbApplyPage(isState, page, limit, callback) {
  886. utils.get(utils.api.getSnbApplyPage, { isState: isState, page: page, limit: limit }, (flag, value) => {
  887. if (flag && 0 === value.code) {
  888. if (callback)
  889. callback(value.data);
  890. } else {
  891. let getSnbApplyPage = [];
  892. if (callback)
  893. callback(getSnbApplyPage);
  894. }
  895. })
  896. },
  897. //提交申请
  898. onPostApplySnbToCnt(applyAmount, callback) {
  899. if (this.isApplying) {
  900. this.showToast(cc.find("Canvas/UICamera"), "正在申请中..", 1);
  901. return;
  902. }
  903. this.isApplying = true;
  904. utils.post(utils.api.applySnbToCnt, { applyAmount: applyAmount }, (flag, value) => {
  905. this.isApplying = false;
  906. if (flag)
  907. callback(value);
  908. })
  909. },
  910. //获取转换的snb
  911. onGetCntToSnb(callback) {
  912. utils.get(utils.api.getCntToSnb, {}, (flag, value) => {
  913. if (flag)
  914. callback(value);
  915. })
  916. },
  917. //领取SNB接口
  918. onReceiveCntToSnb(callback) {
  919. utils.get(utils.api.receiveCntToSnb, {}, (flag, value) => {
  920. if (flag)
  921. callback(value);
  922. })
  923. },
  924. //校验snb凭证
  925. onCheckApplySnbToCnt(certificateId, callback) {
  926. utils.post(utils.api.checkApplySnbToCnt, { certificateId: certificateId }, (flag, value) => {
  927. if (flag)
  928. callback(value);
  929. })
  930. },
  931. //切换不同身份的场景,这里处理
  932. onSwitchAddressBg(_level) {
  933. //设置背景
  934. GlobalD.TiledMap.setMapInfo(_level);
  935. },
  936. /**
  937. * 获取灾难
  938. */
  939. onGetDisasterHistory(callback) {
  940. utils.get(utils.api.disasterHistory, {}, (flag, value) => {
  941. if (flag)
  942. callback(value);
  943. })
  944. },
  945. /**
  946. * 获取灾难防护
  947. * @param {*} callback
  948. */
  949. onGetDisasterProtected(callback) {
  950. utils.get(utils.api.getDisasterProtectedMap, {}, (flag, value) => {
  951. if (flag)
  952. callback(value);
  953. })
  954. },
  955. /**
  956. * 操作工具
  957. */
  958. //获取工具
  959. onGetTools(callback) {
  960. utils.get(utils.api.getTools, {}, (flag, value) => {
  961. // console.log("工具:", flag, value);
  962. if (flag)
  963. callback(value);
  964. })
  965. },
  966. //使用工具
  967. onPostToolToLand(data, callback) {
  968. utils.post(utils.api.postUseLuckyTools, data, (flag, value) => {
  969. // console.log(data, "=使用工具:", flag, value);
  970. if (flag && 0 === value.code && value.flag) {
  971. GlobalD.PlayerAttribute = value.data.playerAttribute;
  972. this.SetLucky(GlobalD.PlayerAttribute.lucky);
  973. this.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
  974. callback(value);
  975. } else {
  976. this.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
  977. }
  978. })
  979. },
  980. //获取土地等级
  981. onGetLevel(callback) {
  982. utils.get(utils.api.getLevel, {}, (flag, value) => {
  983. console.log("获取土地", flag, value);
  984. if (flag)
  985. callback(value);
  986. })
  987. },
  988. //升级土地
  989. onPostLandLevelUp(data, callback) {
  990. utils.post(utils.api.postLandLevelUp, data, (flag, value) => {
  991. // console.log(data, "=升级土地", flag, value);
  992. if (flag && 0 === value.code && value.flag) {
  993. GlobalD.PlayerAttribute = value.data.playerAttribute;
  994. this.SetLucky(GlobalD.PlayerAttribute.lucky);
  995. this.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
  996. callback(value);
  997. } else {
  998. this.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
  999. }
  1000. })
  1001. },
  1002. /**
  1003. * 注意限制检查snb
  1004. * @param {*} data
  1005. * @param {*} callback
  1006. */
  1007. onPostLuckToSnb(data, callback) {
  1008. if (this.isPlayingLucky) return;
  1009. this.isPlayingLucky = true;
  1010. this.showToast(cc.find("Canvas/UICamera"), "兑换SNB中", 2);
  1011. utils.post(utils.api.luckToSnb, data, (flag, value) => {
  1012. this.isPlayingLucky = false;
  1013. // console.log(data, "=兑换snb", flag, value);
  1014. if (flag && 0 === value.code && value.flag) {
  1015. //如果返回一个体力信息,更新对应的新的用户信息。
  1016. //更新日志数据
  1017. cc.find("GameNode/ManageDapp").getComponent("ManageDapp").onUpdateSnbList();
  1018. GlobalD.PlayerAttribute = value.data.playerAttribute;
  1019. this.SetLucky(GlobalD.PlayerAttribute.lucky);
  1020. GlobalD.UserInfo = value.data.userInfo;
  1021. this.SetSNB(GlobalD.UserInfo.snb + GlobalD.UserInfo.snbPart);
  1022. this.showToast(cc.find("Canvas/UICamera"), value.msg, 2);
  1023. callback(value);
  1024. }
  1025. else {
  1026. this.showToast(cc.find("Canvas/UICamera"), value.msg, 2);
  1027. }
  1028. })
  1029. },
  1030. /**
  1031. * 获取可租赁牧场的次数
  1032. */
  1033. onGetAnimalTimes() {
  1034. utils.get(utils.api.getAnimalTimes, {}, (flag, value) => {
  1035. // console.log("getAnimalTimes", flag, value);
  1036. if (flag && 0 === value.code && value.flag) {
  1037. this.SetAnimalTimes(value.data);
  1038. }
  1039. this.showToast(cc.find("Canvas/UICamera"), value.msg, 2);
  1040. })
  1041. },
  1042. onPlayAnimalLand(data, callback) {
  1043. utils.post(utils.api.payAnimalLand, data, (flag, value) => {
  1044. // console.log("payAnimalLand", flag, value);
  1045. if (flag && 0 === value.code && value.flag) {
  1046. this.SetAnimalTimes(value.data.times);
  1047. if (callback)
  1048. callback(value);
  1049. } else {
  1050. this.showToast(cc.find("Canvas/UICamera"), value.msg, 2);
  1051. }
  1052. })
  1053. },
  1054. onMultipleAnimalLand(data, callback) {
  1055. console.log(data);
  1056. utils.post(utils.api.multipleAnimalLand, data, (flag, value) => {
  1057. // console.log("multipleAnimalLand", flag, value);
  1058. if (flag && 0 === value.code && value.flag) {
  1059. callback(value);
  1060. } else {
  1061. this.showToast(cc.find("Canvas/UICamera"), value.msg, 2);
  1062. }
  1063. })
  1064. },
  1065. //喂养动物
  1066. onBuyAnimalFood(data, callback) {
  1067. utils.post(utils.api.buyAnimalFood, data, (flag, value) => {
  1068. // console.log("buyAnimalFood", flag, value);
  1069. if (flag)
  1070. callback(value);
  1071. })
  1072. },
  1073. //积分兑换种子
  1074. onGetPlayerScore(data, callback) {
  1075. utils.post(utils.api.playerScoreExchange, data, (flag, value) => {
  1076. if (flag)
  1077. callback(value);
  1078. })
  1079. },
  1080. //返回十天期的当前种子
  1081. onGetPlayerSeeds(callback) {
  1082. utils.get(utils.api.playerScoreSeeds, {}, (flag, value) => {
  1083. if (flag)
  1084. callback(value);
  1085. })
  1086. },
  1087. //获取一个toast
  1088. getToast() {
  1089. return this.toast;
  1090. },
  1091. hideToast() {
  1092. this.toast.active = false;
  1093. if (this.scheduleObj) {
  1094. this.unschedule(this.scheduleObj);
  1095. this.scheduleObj = null;
  1096. }
  1097. },
  1098. showToast(parent, content, time) {
  1099. if (this.toast) {
  1100. if (this.scheduleObj) {
  1101. this.unschedule(this.scheduleObj);
  1102. this.scheduleObj = null;
  1103. }
  1104. this.scheduleObj = () => {
  1105. this.toast.active = false
  1106. };
  1107. this.scheduleOnce(this.scheduleObj, time);
  1108. this.toast.active = true;
  1109. this.toast.parent = parent;
  1110. this.toast.zIndex = 999;
  1111. let DetailLabel = this.toast.getChildByName('DetailLabel');
  1112. DetailLabel.getComponent(cc.Label).string = content;
  1113. // console.log(content, time)
  1114. } else {
  1115. console.error("Toast 尚未初始化!");
  1116. }
  1117. },
  1118. onTestToken() {
  1119. utils.onTestToken();
  1120. },
  1121. onDestroy() {
  1122. if (this.AutoSaveData) {
  1123. this.unschedule(this.AutoSaveData);
  1124. this.AutoSaveData = null;
  1125. }
  1126. }
  1127. });