GameData.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /**
  2. * @description 游戏核心玩法数据
  3. * @author 邹勇
  4. */
  5. export class GameData {
  6. public dataFinish: boolean = false;
  7. public savePropFinish: boolean = false;
  8. public savePropsFinish: boolean = false;
  9. public getPropsFnish: boolean = false;
  10. public configs: any = {};
  11. public gameData: PlayerInfoType;
  12. public props: Map<number, number>;
  13. public pools = [
  14. { url: "game/prefab/tips", num: 20 },
  15. { url: "game/prefab/coin", num: 20 }
  16. ];
  17. /**
  18. * 初始化游戏数据:网络配置信息,用户信息
  19. * @returns
  20. */
  21. public async init() {
  22. this.dataFinish = true;
  23. let data: any = { "versionCode": gData.appData.version };
  24. let response = await mk.http.sendData('getAllConfigInfo', data);
  25. if (response.errcode != 0) {
  26. if(response.errcode == -10003 || response.errcode == -20003){
  27. //清除缓存
  28. gData.loginData.reload();
  29. }
  30. return;
  31. }
  32. this.configs = response.data;
  33. data = {};
  34. response = await mk.http.sendData('getInfoCrypt', data);
  35. if (response.errcode != 0) {
  36. return;
  37. }
  38. this.gameData = response.data;
  39. if (this.props == null) {
  40. this.props = new Map<number, number>();
  41. }
  42. this.initProps(response.data.gameUserData);
  43. gData.moduleData.forEach(element => {
  44. element.init();
  45. });
  46. this.dataFinish = true;
  47. }
  48. /**
  49. * 保存单个数据
  50. */
  51. public async setProp(key: GameProp, value: number) {
  52. let data = {
  53. key: key + '',
  54. value: value + ''
  55. };
  56. await mk.http.sendData('savePlayerProp', data);
  57. // this.props.set(key, value);
  58. // this.savePropFinish = true;
  59. }
  60. /**
  61. * 保存多个数据
  62. */
  63. public async setProps(arr: { key: GameProp, value: number }[]) {
  64. let needProp = {};
  65. for (let i = 0; i < arr.length; i++) {
  66. needProp[arr[i].key + ''] = arr[i].value + "";
  67. }
  68. let data = {
  69. needProp: needProp
  70. };
  71. await mk.http.sendData('saveAllPlayerProp', data);
  72. for (let i = 0; i < arr.length; i++) {
  73. this.props.set(arr[i].key, arr[i].value);
  74. }
  75. this.savePropsFinish = true;
  76. }
  77. /** 获取属性 */
  78. public getProp(key: GameProp): number {
  79. if (this.props == null) {
  80. return 0;
  81. }
  82. let value = this.props.get(key);
  83. return value == null ? 0 : value;
  84. }
  85. /**
  86. * 向服务器请求所有属性后更新
  87. */
  88. public async getAllProps() {
  89. let response = await mk.http.sendData('getAllPlayerProp', {});
  90. if (response.errcode != 0) {
  91. return;
  92. }
  93. this.initProps(response.data);
  94. this.getPropsFnish = true;
  95. }
  96. private initProps(data) {
  97. if (data == null) {
  98. return;
  99. }
  100. for (let key in data) {
  101. this.props.set(parseInt(key), JSON.parse(data[key]));
  102. }
  103. }
  104. /**
  105. * 第二天需要重置的数据
  106. */
  107. public resetProps() {
  108. let arr = [];
  109. arr.push({ key: GameProp.sign_can, value: 1 });
  110. this.setProps(arr);
  111. }
  112. }
  113. /**
  114. * 所有模块的非校验数据
  115. */
  116. export enum GameProp {
  117. /** ------------------ 游戏核心数据 --------------------------- */
  118. /** ------------------ 转盘数据 ------------------------------ */
  119. turnable_leftTimes = 20,
  120. /** ------------------ 存钱罐数据 ----------------------------- */
  121. /** ------------------ 签到数据 ----------------------------- */
  122. /** 上次签到进度 */
  123. sign_last_bar = 120,
  124. /** 当前能否签到 */
  125. sign_can = 121,
  126. /** ------------------ 红包提现 ----------------------------- */
  127. /** 提现进度 */
  128. redBag_cash_bar = 220,
  129. }
  130. /**
  131. * 奖励状态
  132. */
  133. export enum RewardState {
  134. /** 已领取 */
  135. none = 1,
  136. /** 未解锁 */
  137. lock = 2,
  138. /** 可领取 */
  139. unlock = 3
  140. }
  141. /**
  142. * 奖励类型
  143. */
  144. export enum RewardType {
  145. /** 红包币 */
  146. redBag = 1,
  147. /** 毛币 */
  148. rmb = 2,
  149. /** 金猪币 */
  150. pigRmb = 3,
  151. }
  152. /**
  153. * 音频路径
  154. */
  155. export enum AUDIO_TYPE {
  156. bgm = 'bgm', //主界面背景音乐
  157. pigBank = 'pigBank', //打开存钱罐界面播放一次
  158. missionBg = 'missionBg', //关卡玩法背景音乐
  159. rewardClose = 'rewardClose', //红包币领取界面关闭音效
  160. rewardOpen = 'rewardOpen', //红包币领取界面开启音效
  161. reward = 'reward', //红包界面打开音效
  162. receiptNotice = 'receiptNotice', //提现到账界面打开播放一次
  163. button = 'button', //通用按钮点击音效
  164. turnableplay = 'turnableplay', //转盘转动音效
  165. }
  166. type PlayerInfoType = {
  167. /** 自定义不需要校验的数据 */
  168. gameUserData: object,
  169. /** 今日是否有签到 */
  170. isSignInToday: boolean,
  171. /** 存钱罐存款 */
  172. piggyBank: number,
  173. /** 存钱罐能否提现 */
  174. isWithdrawable: boolean,
  175. /** 存钱罐每日提现次数 */
  176. piggyBankCashTimes: number,
  177. /** 累计存钱罐每日提现次数 */
  178. totalPiggyBankCashTimes: number,
  179. /** 提现进度 */
  180. cashIndex: number,
  181. /** 上次登录时间 */
  182. lastTime: number,
  183. /** 登录天数 */
  184. loginDays: number,
  185. newPlayer: Boolean,
  186. /** 红包币数量 */
  187. redMoney: number,
  188. /** 累计签到次数 客户端理解 上次签到天数 */
  189. signInDay: number,
  190. /** 转盘次数 */
  191. turntableTimes: number,
  192. /** 版本号 */
  193. versioncfg: string,
  194. /** 福袋数据 */
  195. userTuCaoInfo: object,
  196. }