GameData.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. import { Log } from "../core/utils/Log";
  2. import { Data } from "./Data";
  3. /**
  4. * 游戏数据
  5. */
  6. export class GameData extends Data {
  7. public openRecommend = false;
  8. // /**当天邀请次数 */
  9. // public now_invite_num = 0;
  10. // /**当天播放视频次数 */
  11. // public now_play_video_num = 0;
  12. /**当前购买神将等级 */
  13. public buyLv: number;
  14. /**当前购买神将价格 */
  15. public buyPrice: number;
  16. /**离线时间 */
  17. public differTime: number = 0;
  18. /**离线奖励 */
  19. public totalOutput: number = 0;
  20. /**当前拥有神将 */
  21. public generals: String;
  22. /**当前拥有未显示神将 */
  23. private _myGenerals: Array<number> = [];
  24. /**
  25. * 飞行宝箱剩余的次数
  26. */
  27. public flyBoxTimes: number = 0;
  28. /**
  29. * 飞行宝箱领取间隔
  30. */
  31. public flyBoxIntervalTime = 1000 * 60 * 2;
  32. /**本地缓存神将数据 */
  33. private _myLocalData: { id: number, myLocalGenerals: Array<{ index: number, generalLv: number }> };
  34. /**切磋剩余免费次数 */
  35. public battleRemainder: number;
  36. /**切磋剩余增加次数 */
  37. public RemainderAddTimes: number;
  38. /**切磋观看视频增加的次数 */
  39. public RemainderHadAddTimes: number;
  40. /**转盘剩余抽奖次数*/
  41. public drawTimes = 0;
  42. /**高级抽奖剩余观看视频次数*/
  43. public videoTimes = 0;
  44. /**神石提现等级*/
  45. public diamondWithdrawGrade = 0;
  46. /**等级红包已领取等级*/
  47. public lvRedPacket = 0;
  48. /**
  49. *我的好友数据
  50. */
  51. public myFriendDatas: Array<{ id: number, lv: number, nickName: string, avator: string }> = [];
  52. /**
  53. *我的仇人数据
  54. */
  55. public myAvengeDatas: Array<{ attackUserID: number, attackUserLv: number, attackUserName: string, attackUserAvator: string, createTime: number }> = [];
  56. /**
  57. * 红包数据
  58. * */
  59. public myRedPacketDatas: Array<{ id: number, type: number, lv: number, enemyID: number, enemyName: string, enemyAvator: string, enemyLv: number, canOpenTime: number, createTime: number }> = [];
  60. /**神台数据 */
  61. public myFissionData: {
  62. g1Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>,
  63. g2Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>,
  64. g3Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>,
  65. g4Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>,
  66. g5Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>,
  67. parentUin: number, parentAvatar: string, parentNickname: string
  68. };
  69. /**是否更新贡献提现记录 */
  70. public hasNewwithdrawalLog = true;
  71. /**贡献提现记录 */
  72. public withdrawalLogs = [];
  73. /**被攻击信息 */
  74. public beAttackDatas: Array<{ attackUserID: number, attackUserName: string, beAttackLossType: number, beAttackLossNum: string }>;
  75. /**被攻击数据发生改变 */
  76. // public hasBeAttackUpdate: boolean = false;
  77. /**切磋数据发生改变 */
  78. public hasBattleListUpdate: boolean = false;
  79. /**复仇数据发生改变 */
  80. public hasAvengeListUpdate: boolean = false;
  81. /**好友挑战数据改变 */
  82. public hasBattleLogUpdate: boolean = false;
  83. /**红包数据发生改变 */
  84. public hasNewRedPacketUpdate: boolean = false;
  85. /**1级好友数据发生改变显示用 */
  86. public hasG1BembersUpdate: boolean = false;
  87. /**2级好友数据发生改变 */
  88. public hasG2BembersUpdate: boolean = false;
  89. /**3级好友数据发生改变 */
  90. public hasG3BembersUpdate: boolean = false;
  91. /**4贡献数据发生改变 */
  92. public hasG4BembersUpdate: boolean = false;
  93. /**5级好友数据发生改变 */
  94. public hasG5BembersUpdate: boolean = false;
  95. /**取消出售神将 */
  96. public cancleSellGeneral: boolean = false;
  97. /**出售神将确认 */
  98. public hasSellGeneral: boolean = false;
  99. /**出售神将信息 */
  100. public sellGeneralData: { lv: number, index: number };
  101. /**是否添加神将*/
  102. public isAddRole: boolean = false;
  103. /**战斗结束 */
  104. public hasBattleOver: boolean = false;
  105. /**战斗结束刷新切磋数据 */
  106. public hasBattleOverRefresh: boolean = false;
  107. /**是否请求过好友数据和复仇数据 */
  108. public hasRequestFriendData = false;
  109. /**是否播放加金币音效 */
  110. public playAddMoneySound = true;
  111. /**是否在播放金币飞行特效**/
  112. public isPlayMoneyAnim = false;
  113. /**分红数据 */
  114. public gameBonus: { bonusTotalUserNum: number, bonusUserNum: number, bonus: number, logs: { name: string, time: string }[] };
  115. /**是否播放奖励角色出场动画*/
  116. public isPlayPrizeRoleAnim = false;
  117. /**是否在播放金币动画控制消息同步*/
  118. public isPlayAddMoneyAnim = false;
  119. /**是否在播放神石动画控制消息同步*/
  120. public isPlayAddDiamondAnim = false;
  121. /**是否在购买神将*/
  122. public isBuying = false;
  123. /**是否移动神将*/
  124. public isMoveing = false;
  125. /**是否正在观看视频*/
  126. public isPlayVideo = false;
  127. /**是否要同步数据 */
  128. public needSyncMoney = false;
  129. public getMyLocalData(id: number): { id: number, myLocalGenerals: Array<{ index: number, generalLv: number }> } {
  130. if (!this._myLocalData) {
  131. this._myLocalData = JSON.parse(localStorage.getItem("myLocalData"));
  132. if (!this._myLocalData) {// 如果本地没有缓存数据
  133. this.initLocalData(id);
  134. }
  135. else {
  136. if (this._myLocalData.id != id) {//如果是不同账号
  137. this.initLocalData(id);
  138. } else {
  139. if (!this.initGenerals.length) {
  140. this._myLocalData.myLocalGenerals = [];
  141. this.saveLocalData();
  142. } else {
  143. if (this._myLocalData.myLocalGenerals.length != this.initGenerals.length) {
  144. this.initLocalData(id);
  145. } else {
  146. if (this.checkGenerals(this._myLocalData.myLocalGenerals.concat(), this.initGenerals.concat())) {
  147. this.initLocalData(id);
  148. }
  149. }
  150. }
  151. }
  152. }
  153. }
  154. return this._myLocalData;
  155. }
  156. /** 检测服务器和本地神将等级是否一致 */
  157. private checkGenerals(client_generals, server_generals) {
  158. for (let i = 0; i < client_generals.length; i++) {
  159. let hasIndex = server_generals.indexOf(client_generals[i].generalLv);
  160. if (hasIndex != -1) {
  161. server_generals.splice(hasIndex, 1)
  162. }
  163. }
  164. return server_generals.length;
  165. }
  166. private initLocalData(id: number) {
  167. this._myLocalData = { id: 0, myLocalGenerals: [] }
  168. this._myLocalData.id = id;
  169. for (let i = 0; i < this.initGenerals.length; i++) {
  170. this._myLocalData.myLocalGenerals.push({ index: i > 11 ? -1 : i, generalLv: this.initGenerals[i] });
  171. }
  172. this.saveLocalData();
  173. }
  174. /**增加本地神将 */
  175. public addMyLocalGenral(index: number, lv: number) {
  176. for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) {
  177. if (index != -1 && this._myLocalData.myLocalGenerals[i].index == index && this._myLocalData.myLocalGenerals[i].generalLv == lv) {
  178. Log.warn(index + "有值");
  179. return;
  180. }
  181. }
  182. this._myLocalData.myLocalGenerals.push({ index: index, generalLv: lv });
  183. this.saveLocalData();
  184. }
  185. public deleteMyLocalGenral(index: number, lv: number) {
  186. for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) {
  187. if (this._myLocalData.myLocalGenerals[i].index == index && this._myLocalData.myLocalGenerals[i].generalLv == lv) {
  188. this._myLocalData.myLocalGenerals.splice(i, 1);
  189. return;
  190. }
  191. }
  192. Log.warn("没有找到本地对应的神将");
  193. }
  194. public updateLocalGeneral(oldIndex: number, newIndex: number) {
  195. let oldGen;
  196. let newGen;
  197. for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) {
  198. if (this._myLocalData.myLocalGenerals[i].index == oldIndex) {
  199. oldGen = this._myLocalData.myLocalGenerals[i];
  200. }
  201. if (this._myLocalData.myLocalGenerals[i].index == newIndex) {
  202. newGen = this._myLocalData.myLocalGenerals[i];
  203. }
  204. }
  205. if (oldGen) {
  206. oldGen.index = newIndex;
  207. }
  208. if (newGen) {
  209. newGen.index = oldIndex;
  210. }
  211. this.saveLocalData();
  212. }
  213. public saveLocalData() {
  214. localStorage.setItem("myLocalData", JSON.stringify(this._myLocalData));
  215. }
  216. /**初始化服务器拥有神将 */
  217. private get initGenerals(): Array<number> {
  218. if (!this._myGenerals.length) {
  219. let str = this.generals.substring(1, this.generals.length - 1);
  220. if (!str) {
  221. this._myGenerals = [];
  222. } else {
  223. let arr = str.split(",");
  224. for (let i = 0; i < arr.length; i++) {
  225. this._myGenerals.push(Number(arr[i]));
  226. }
  227. }
  228. }
  229. return this._myGenerals;
  230. }
  231. /**更新本地裂变部分贡献值 */
  232. public updateMyFessiongDatas(data: any, isAdd: boolean = true) {
  233. for (let k = 0; k < data.length; k++) {
  234. let newData = data[k];
  235. let isFind = false;
  236. for (let i = 1; i < 6; i++) {
  237. let members = this.myFissionData[`g${i}Members`];
  238. for (let j = 0; j < members.length; j++) {
  239. if (members[j].userID == newData.userID) {
  240. this[`hasG${i}BembersUpdate`] = true;
  241. isFind = true;
  242. if (isAdd) {
  243. members[j].revenueAmount += newData.addRevenueAmount;
  244. members[j].totalRevenueAmount += newData.addRevenueAmount;//新增贡献
  245. } else {
  246. members[j].revenueAmount = 0;
  247. }
  248. break;
  249. }
  250. }
  251. if (isFind) {
  252. break;
  253. }
  254. }
  255. }
  256. }
  257. /**一键领取贡献更新本地贡献数据 */
  258. public clearRevenue() {
  259. for (let i = 1; i < 6; i++) {
  260. let members = this.myFissionData[`g${i}Members`];
  261. for (let j = 0; j < members.length; j++) {
  262. if (members[j].revenueAmount) {
  263. this[`hasG${i}BembersUpdate`] = true;
  264. members[j].revenueAmount = 0;
  265. }
  266. }
  267. }
  268. }
  269. /**判断当前是否可领取贡献 红点用*/
  270. public getAllRevenueAmount() {
  271. if (this.myFissionData) {
  272. for (let i = 1; i < 6; i++) {
  273. let members = this.myFissionData[`g${i}Members`];
  274. for (let j = 0; j < members.length; j++) {
  275. if (members[j].revenueAmount > 0) {
  276. return true;
  277. }
  278. }
  279. }
  280. }
  281. return false;
  282. }
  283. }