UserM.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. import EV, { EV_TYPE } from "../mgr/EV";
  2. import BigNumber from "../utils/BigNumber";
  3. import Utils from "../utils/Utils";
  4. import { WalletManager } from "../web3/WalletManager";
  5. import { GoodsId } from "./GoodsId";
  6. import WsM from "./WsM";
  7. import { EventTarget } from "cc";
  8. export class GoodInfo {
  9. id: number;
  10. count: number;
  11. }
  12. export class SeasonInfo {
  13. id: number;
  14. startTimeAt: number;
  15. endTimeAt: number;
  16. gamePassNum: number;
  17. }
  18. export class GameTaskInfo {
  19. taskId: number;
  20. taskType: number;
  21. desc: string;
  22. spinCount: number;
  23. progress: string;
  24. onceSpin: number;
  25. xp: number;
  26. }
  27. export class GiftItemInfo {
  28. giftId: number; // 礼包id
  29. giftMsg: string; // 礼包描述
  30. rewardMsg: string; // 礼包奖励
  31. canClaim: number; // 可以领取数量
  32. haveBeenClaimed: number; // 已经领取数量
  33. }
  34. export class GameInfo {
  35. gameId: number;
  36. myRewardPog: number;
  37. remainPog: number;
  38. seasonPog: number;
  39. taskList: GameTaskInfo[];
  40. giftList: any[];
  41. currentSpin: number;
  42. gameUser: any;
  43. }
  44. export class AnnouncementInfo {
  45. chatLink: string;
  46. noticeLink: string;
  47. message: string;
  48. }
  49. export class UserInfo {
  50. userId: string; // 用户id
  51. userName: string; // 用户名
  52. walletAddress: string; // 用户钱包
  53. systemWalletAddress: string; // 系统钱包
  54. season: SeasonInfo;
  55. currentTime: number; // 当前时间
  56. goodList: GoodInfo[];
  57. gameList: GameInfo[];
  58. familyId: string;
  59. announcement: AnnouncementInfo;
  60. }
  61. export class BindWalletResult {
  62. walletAddress: string;
  63. systemWalletAddress: string;
  64. }
  65. export class BadgeInfo {
  66. id: number; // 徽章id
  67. type: number; // 徽章类型
  68. num: number; // 数量
  69. addition: number; // 加成
  70. }
  71. export class MyBadgeInfo {
  72. badgeList: BadgeInfo[];
  73. }
  74. export default class UserM {
  75. async getPvzLinked(): Promise<boolean> {
  76. let game = this.data?.gameList?.find((item) => item.gameId == 1);
  77. if (game != null && game.gameUser != null && game.gameUser.userId != null && game.gameUser.userId.length > 0) {
  78. return true;
  79. }
  80. return false;
  81. }
  82. async alterName(userName: string) {
  83. let result = await WsM.ins.syncRequest(20004, { userName: userName });
  84. if (result) {
  85. await this.refreshInfo();
  86. }
  87. return result;
  88. }
  89. async isLinkPvz(): Promise<boolean> {
  90. let game = this.data?.gameList?.find((item) => item.gameId == 1);
  91. if (
  92. game != null &&
  93. game.gameUser != null &&
  94. game.gameUser.userId != null &&
  95. game.gameUser.userId.length > 0
  96. ) {
  97. return true;
  98. }
  99. return false;
  100. }
  101. getFamilyId(): string {
  102. let a = this.data?.familyId;
  103. if (a == null || a.length == 0) {
  104. return null;
  105. }
  106. return a;
  107. }
  108. isLogin(): boolean {
  109. return this.data != null && this.data.userId.length > 0;
  110. }
  111. isBindWallet(): boolean {
  112. return (
  113. this.data?.walletAddress != null && this.data?.walletAddress.length > 0
  114. );
  115. }
  116. async getBadgeList() {
  117. let result = await WsM.ins.syncRequest(20002, {});
  118. return result;
  119. }
  120. getGamePassCount() {
  121. return this.data?.season?.gamePassNum ?? 0;
  122. }
  123. addGoods(id: number, count: number) {
  124. let good = this.data.goodList.find((item) => item.id == id);
  125. if (good) {
  126. good.count += count;
  127. } else {
  128. this.data.goodList.push({ id: id, count: count });
  129. }
  130. this.refreshGoods(this.data.goodList);
  131. }
  132. subtractGoods(id: number, count: number) {
  133. let good = this.data.goodList.find((item) => item.id == id);
  134. if (good) {
  135. good.count -= count;
  136. if (good.count < 0) {
  137. good.count = 0;
  138. }
  139. }
  140. this.refreshGoods(this.data.goodList);
  141. }
  142. getGradeAddValue(): number {
  143. return 30;
  144. }
  145. // getGradeName() {
  146. // return "BRONZE";
  147. // }
  148. getGrade(): number {
  149. return 1;
  150. }
  151. getDisPlayGoods(): GoodInfo[] {
  152. let DisplayIds = [
  153. GoodsId.FAMILY_BOX,
  154. GoodsId.FREE_ITEM_BOX,
  155. GoodsId.ITEM_BOX,
  156. GoodsId.FREE_POG_BOX,
  157. GoodsId.POG_BOX,
  158. GoodsId.GAME_PASS,
  159. GoodsId.GAME_PASS_SHARD,
  160. GoodsId.POG_CRITICAL_CARD,
  161. ];
  162. //不改變目標庫,換方式實現
  163. let list = [];
  164. for (let i = 0; i < this.data.goodList.length; i++) {
  165. let item = this.data.goodList[i];
  166. if (DisplayIds.indexOf(item.id) != -1) {
  167. if (item.count > 0) {
  168. list.push(item);
  169. }
  170. }
  171. }
  172. // 排序, 按照 DisplayIds的顺序倒序
  173. list = list.sort((a, b) => {
  174. return DisplayIds.indexOf(a.id) - DisplayIds.indexOf(b.id);
  175. });
  176. return list;
  177. }
  178. getEsTogDisplay(): string {
  179. return Utils.formatNumber(this.getGoodsCount(GoodsId.ES_TOG), 1);
  180. }
  181. getTogDisplay(): string {
  182. return Utils.formatNumber(this.getGoodsCount(GoodsId.TOG), 1);
  183. }
  184. getPogDisplay(): string {
  185. return Utils.formatNumber(this.getGoodsCount(GoodsId.POG), 2);
  186. }
  187. refreshGoods(goodList: GoodInfo[]) {
  188. this.data.goodList = goodList;
  189. EV.ins.emit(EV_TYPE.USER_GOOD_REFRESH, this.data.goodList);
  190. }
  191. getGoodsCount(id: number): number {
  192. return this.data.goodList.find((item) => item.id == id)?.count ?? 0;
  193. }
  194. getSeasonEndTimeText(): string {
  195. return "SEASON#1 " + Utils.formateDateRemaining(this.data.season.endTimeAt);
  196. // return "SEASON#1";
  197. }
  198. getUserName(): string {
  199. return this.data ? this.data.userName : "UnLogin";
  200. }
  201. private static _ins: UserM;
  202. public static get ins(): UserM {
  203. return (UserM._ins ??= new UserM());
  204. }
  205. public data: UserInfo;
  206. public async userInfo(): Promise<UserInfo> {
  207. if (this.data != null) {
  208. return this.data;
  209. }
  210. let result = await this.refreshInfo();
  211. return result;
  212. }
  213. async refreshInfo() {
  214. let result = await WsM.ins.syncRequest(20001, {});
  215. if (result == null) {
  216. return this.data;
  217. }
  218. console.log("userInfo", result);
  219. Utils.setServerTime(result.currentTime);
  220. this.data = result;
  221. EV.ins.emit(EV_TYPE.USER_GOOD_REFRESH, this.data.goodList);
  222. return result;
  223. }
  224. refreshData() {
  225. this.data = null;
  226. this.userInfo();
  227. }
  228. public systemWalletAddress: string = "";
  229. async bindWallet(address: string): Promise<BindWalletResult> {
  230. return new Promise((resolve, reject) => {
  231. WsM.ins
  232. .syncRequest(23002, { wallet: address })
  233. .then((result) => {
  234. if (result) {
  235. this.systemWalletAddress = result.systemWalletAddress;
  236. resolve(result);
  237. } else {
  238. WalletManager.ins.disconnect();
  239. }
  240. })
  241. .catch((err) => {
  242. WalletManager.ins.disconnect();
  243. reject(err);
  244. });
  245. });
  246. }
  247. }