消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
xiaoxiaofangkuaizhen_emojo/assets/script/game/PlayerRecordReporting.ts

366 lines
12 KiB

import { _decorator, Component, Node, sys } from 'cc';
import { Singleton } from '../../mx/tools/Singleton';
import MTools from '../../mx/tools/MTools';
import { sdkConfig } from '../sdk/sdkConfig';
import { Monster } from '../ui/BattleGame/Monster';
import { MonsterType } from '../manager/MonsterDataManager';
import { IBattleSkill } from '../ui/BattleGame/BattleDataManager';
import { SkillDataManager } from '../manager/SkillDataManager';
const { ccclass, property } = _decorator;
/**
* 玩家记录上报
*/
export class PlayerRecordReporting extends Singleton {
/**测试数据 */
TData: TData = new TData();
/**
* 初始化测试数据
* @param level 关卡数
* @param type 游戏类型(0-普通,1-新玩)
* @param difficulty 难度
* @param version 版本号
* @param power 关卡推荐战力
* @param playerInfo 玩家信息:[攻击力,暴击率,冷却,战力]
* @param weaponInfo 装备的武器信息:[[武器id,武器等级]...]
* @param failCount 失败次数
* @param inicoin 初始银币数
*/
async initTestData(level: number, type: number, difficulty: number, version: string, power: number, playerInfo: number[], weaponInfo: number[][], failCount: number, inicoin: number) {
this.TData.uid = gg.data.doc.uid;
if (gg.sdk.pf) {
this.TData.uid = await ZYSDK.ZYSDK.getUserId() + "";
}
if (sys.isBrowser || this.TData.uid == "")
MTools.getStableName().then(name => {
this.TData.uid = name;
});
this.TData.gid = sdkConfig.config.pointData.gid;
this.TData.level = level;
this.TData.type = type;
this.TData.difficulty = difficulty;
this.TData.version = version;
this.TData.suggestStrength = power;
this.TData.playerStrength = playerInfo[3];
this.TData.playerAttack = playerInfo[0];
this.TData.playerCritRate = playerInfo[1];
this.TData.playerCoolDown = playerInfo[2];
this.TData.playerWeapon = weaponInfo;
this.TData.playNum = failCount;
this.TData.iniCoin = inicoin;
this.TData.content = [];
}
/**每10秒添加一组测试数据
* @param mo [新出怪物数量,怪物总血量,玩家伤害累计值,新增银币数,场上怪物数量,场上怪物剩余血量之和,第几波,银币剩余数量,障碍物使用个数,移除障碍物个数,雷击次数]
* @param pr 出现的武器和技能品质:[[武器id,品质]... ]
* @param ad 广告统计,广告类型(0-银币,1-刷新,2-全要,3-再抽)
* @param ot [障碍物使用个数,雷击次数]
*/
private addRecord(mo: number[], pr: TSkill[], ad: number[], rw: number[][]) {
let data = new TContent();
data.mo = mo;
data.pr = pr;
data.ad = ad;
data.rw = rw;
this.TData.content.push(data);
// console.log("每10秒添加的测试数据", data);
}
/**发送测试数据
* @param result 结局 :0 成功;1 失败;2 重玩;3 退出
* @param time 关卡实际时长(不包含看广告和暂停)
* @param onSuccess 发送成功回调
* @param onFail 发送失败回调
*/
upToServer(result: number, time: number, onSuccess: Function, onFail: Function) {
return;
this.TData.result = result;
this.TData.playTime = Number(time.toFixed(2));
// 测试数据发送概率
if (!gg.sdk.upTestData) return;
// 创建 XMLHttpRequest 对象
const xhr = new XMLHttpRequest();
// 配置请求
//xhr.open('POST', 'https://mmvtest.criver.world/user/submit/record', true); // 自己远程测试
xhr.open('POST', 'https://hkcx.ioe-times.com/api/bfnly/submit/record', true); // 线上版本
//xhr.open('POST', 'http://172.16.50.210:8080/api/bfnly/submit/record', true); // 局域网本地测试
// 设置请求头(如果需要)
xhr.setRequestHeader('Content-Type', 'application/json');
// 定义回调函数
xhr.onload = function () {
if (xhr.status >= 200 && xhr.status < 300) {
// 请求成功
console.log(JSON.parse(xhr.responseText));
//gg.ui.showToast("数据提交成功");
if (onSuccess) onSuccess();
} else {
// 请求失败
console.error('请求失败:', xhr.statusText);
if (onFail) onFail();
}
};
xhr.onerror = function () {
console.error('请求出错');
};
let str = JSON.stringify(this.TData);
//console.log("发送测试数据", str);
// 发送请求
// xhr.send(JSON.stringify({ data: this.timeArray, level: GameManager.Ins.levelDifficulty }));
xhr.send(str);
}
//#region 战斗数据记录相关
/**添加每次刷新技能的数据 */
addSkillRefreshData(type: number, arr: any[], isRefresh: boolean) {
return;
this.CurentSkillArr = arr;
if (type == MonsterType.GoldenBoss) {
for (let i = 0; i < arr.length; i++) {
let d: ITableWeapon2 = arr[i];
this.CurentSkillPushArr.push([d.weaponid, -1, d.quality, isRefresh ? 1 : 0, 0]);
}
} else {
for (let i = 0; i < arr.length; i++) {
if (typeof arr[i] == 'number') {
this.CurentSkillPushArr.push([-1, -1, -1, arr[i], isRefresh ? 1 : 0, 0]);
continue;
}
let d: IBattleSkill = arr[i];
let quality = SkillDataManager.getSkillDataById(d.id).quality;
this.CurentSkillPushArr.push([d.weaponId, d.id, quality, 0, isRefresh ? 1 : 0, 0]);
}
}
}
/**完成技能选择数据 */
finishAddSkillData(selectIndex: number[], refreshCount = 0) {
return
if (refreshCount > 0) {
this.CurentSkillData.va = refreshCount;
}
for (let i = 0; i < selectIndex.length; i++) {
let index = selectIndex[i];
this.CurentSkillPushArr[index][5] = 1;
}
this.CurentSkillData.ca.push(this.CurentSkillPushArr);
}
/**添加一次技能选择数据 */
addSkillData(type: number, boxIdex: number = -1) {
return;
if (boxIdex > 0) {
this.BoxIndex += boxIdex;
boxIdex = this.BoxIndex;
}
let t = gg.game.CurentBattle.BattleTime;
this.CurentSkillData = new TSkill();
this.CurentSkillData.id = boxIdex;
this.CurentSkillData.ty = type;
this.CurentSkillData.ci = Number(t.toFixed(2));
this.WeaponSkillQuality.push(this.CurentSkillData);
this.CurentSkillPushArr = [];
}
/**添加战斗记录数据 */
addRecordData() {
return;
//当前银币数
this.RemainCoinNum = gg.game.CurentBattle.CurentCoinNum;
//场上怪物数量(结算 UI 打开时战斗节点可能已销毁,MonsterSpawner 需做空保护)
let sp = gg.game.CurentBattle.MonsterSpawner;
this.MonsterNum = sp ? sp.getAllMonsterCount() : 0;
//场上怪物剩余血量之和
this.MonsterHpTotal = 0;
if (sp) {
for (let value of sp.getAllMonster()) {
let m = value.getComponent(Monster);
if (m) this.MonsterHpTotal += m.hp;
}
}
this.CurrentWaveNum = gg.game.CurentBattle.CurentWaveNum;
//[新出怪物数量,怪物总血量,玩家伤害累计值,新增银币数,场上怪物数量,场上怪物剩余血量之和,第几波,银币剩余数量,障碍物使用个数,移除障碍物个数,雷击次数]
let mo = [];
mo.push(this.MonsterAppearNum);
mo.push(this.MonsterTotalHp);
mo.push(this.PlayerDamageTotal);
mo.push(this.NewCoinNum);
mo.push(this.MonsterNum);
mo.push(this.MonsterHpTotal);
mo.push(this.CurrentWaveNum);
mo.push(this.RemainCoinNum);
mo.push(this.ObstaclesUseNum);
mo.push(this.RemoveObstaclesNum);
mo.push(this.LightningNum);
let mapData = gg.game.CurentBattle.DamageStatistics.getWeaponDamageMap();
mapData.forEach((value, key) => {
this.DamageStatistics.push([key, value]);
});
let pr = this.WeaponSkillQuality;
let ad = this.AdClickNum;
let rw = this.DamageStatistics;
this.addRecord(mo, pr, ad, rw);
this.clearRecordData();
}
clearRecordData() {
this.MonsterAppearNum = 0;
this.MonsterTotalHp = 0;
this.PlayerDamageTotal = 0;
this.NewCoinNum = 0;
this.MonsterNum = 0;
this.RemainCoinNum = 0;
this.ObstaclesUseNum = 0;
this.RemoveObstaclesNum = 0;
this.LightningNum = 0;
this.WeaponSkillQuality = [];
this.AdClickNum = [];
this.DamageStatistics = [];
}
/**宝箱索引 */
BoxIndex = 0;
/**怪物出现数量 */
MonsterAppearNum = 0;
/**怪物总血量 */
MonsterTotalHp = 0;
/**玩家伤害累计值 */
PlayerDamageTotal = 0;
/**新增银币数 */
NewCoinNum = 0;
/**场上怪物数量 */
MonsterNum = 0;
/**场上怪物剩余血量之和 */
MonsterHpTotal = 0;
/**当前波数 */
CurrentWaveNum = 0;
/**剩余银币数 */
RemainCoinNum = 0;
/**障碍物使用个数 */
ObstaclesUseNum = 0;
/**障碍物移除个数 */
RemoveObstaclesNum = 0;
/**雷击次数 */
LightningNum = 0;
/**出现的武器和技能品质*/
WeaponSkillQuality: TSkill[] = [];
/**广告统计,广告类型(0-银币,1-刷新,2-全要,3-转盘再抽,4-转盘重抽,5-地图提示,6-复活) */
AdClickNum: number[] = [];
/**从开始到此时各武器伤害累计值 [[武器id,伤害累计值]... ] */
DamageStatistics: number[][] = [];
/**当前正在记录的技能数据 */
CurentSkillData: TSkill = null;
/**当前刷新的技能或者武器数组 */
CurentSkillArr: any[] = [];
/**当前刷新的技能处理后的数组 */
CurentSkillPushArr: number[][] = [];
//#endregion
}
/**
* 测试数据
*/
export class TData {
/**测试数据uid */
uid = "";
/**测试数据游戏id */
gid = "";
/**测试数据等级 */
level = 1;
/**关卡类型 */
type = 1;
/**难度 */
difficulty: number = 0;
/**版本号 */
version: string = "";
/**结局 :0 成功;1 失败;2 重玩;3 退出 */
result = 0;
/**关卡推荐战力值 */
suggestStrength: number = 0;
/**玩家战力值 */
playerStrength: number = 0;
/**玩家攻击力 */
playerAttack: number = 0;
/*玩家暴击概率*/
playerCritRate: number = 0
/**玩家攻击冷却 */
playerCoolDown: number = 0;
/**玩家装备的武器 [[武器id,武器等级]... ] */
playerWeapon: number[][] = [];
/**关卡重玩次数 */
playNum = 0;
/**关卡时长 */
playTime = 0;
/**关卡初始银币数 */
iniCoin: number = 0;
/**测试数据内容 (每5秒的数据统计) */
content: TContent[] = [];
}
export class TContent {
/**[新出怪物数量,怪物总血量,玩家伤害累计值,新增银币数,场上怪物数量,场上怪物剩余血量之和,第几波,银币剩余数量,障碍物使用个数,移除障碍物个数,雷击次数] */
mo: number[] = [];
/**技能出现与选择数据 */
pr: TSkill[] = [];
/**广告统计,广告类型(0-银币,1-刷新,2-全要,3-转盘再抽,4-转盘重抽,5-地图提示,6-复活) */
ad: number[] = [];
/**从开始到此时各武器伤害累计值 [[武器id,伤害累计值]... ] */
rw: number[][] = [];
}
export class TSkill {
/**编号:-1无,目前只有宝箱用这个字段存索引 */
id: number = -1;
/**类型:0-宝箱,1-转盘,2-boss */
ty: number = 0;
/**出现时间 */
ci: number = 0;
/**通用参数 */
va: any;
/**技能数据 [[[武器id,技能id,品质,银币,是否刷新,是否选择]... ]...] */
ca: number[][][] = [];
}
/**用户信息 */
export interface IUserInfo {
/**玩家昵称 */
nickName: string;
/**玩家头像 */
avatarUrl: string;
/**性别 */
gender: string;
/**国家 */
country: string;
/**省份 */
province: string;
/**城市 */
city: string;
/**语言 */
language: string;
}