消消方块阵换皮表情
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.
 
 
 

693 lines
28 KiB

import { assetManager, Button, color, sys } from 'cc';
import { Label } from 'cc';
import { EventTouch } from 'cc';
import { instantiate } from 'cc';
import { EditBox } from 'cc';
import { _decorator, Component, Node } from 'cc';
import { Prefab } from 'cc';
import { isValid } from 'cc';
import { GBundle, GPath, UIID } from './ConfigRes';
import { UILayer } from '../../mx/module/ui/UIManager';
import { ItemNumType, OtherDataType, StatisticsType } from './GameData';
import { GEvent } from '../../mx/module/event/GEvent';
import { TableNames } from './ConfigTableData';
import { BattleType, ChapterDataManager, ChapterDifficulty } from '../manager/ChapterDataManager';
import { IBattleSkill } from '../ui/BattleGame/BattleDataManager';
import MTools from '../../mx/tools/MTools';
import { LangType } from '../../mx/module/lang/Lang';
import { sdkConfig } from '../sdk/sdkConfig';
const { ccclass, property } = _decorator;
@ccclass('GM')
export class GM extends Component {
static Instance: GM;
static ShowGM = false;
static show() {
this.ShowGM = !this.ShowGM;
if (GM.Instance && isValid(GM.Instance.node)) {
GM.Instance.node.active = this.ShowGM;
return;
}
if (this.ShowGM) {
void this._showAsync();
}
}
private static async _showAsync(): Promise<void> {
if (GM.Instance && isValid(GM.Instance.node)) {
GM.Instance.node.active = this.ShowGM;
return;
}
const res = await gg.res.getNodeAsync(GPath.UIPrefab, 'gm', GBundle.First);
if (!res?.isValid) {
console.warn('[GM] gm prefab 加载失败');
return;
}
if (GM.Instance && isValid(GM.Instance.node)) {
gg.res.putNode(res);
GM.Instance.node.active = this.ShowGM;
return;
}
gg.ui.showNode(res, UILayer.DeBug);
GM.Instance = res.getComponent(GM);
if (GM.Instance) GM.Instance.node.active = this.ShowGM;
}
@property(EditBox)
eb_prama: EditBox;
@property(Node)
ui_quickBtns: Node;
@property(Node)
ui_paramBtns: Node;
@property(Node)
ui_help: Node;
@property(Label)
lb_help: Label;
content: Node;
btnGM: Node;
btnClear: Button;
btnClose: Button;
btnHelp: Button;
protected onLoad(): void {
this.content = this.node.find("content");
this.btnGM = this.node.find("btnGM");
this.btnClear = this.content.find("ui_content/ui_head/btnClear").getComponent(Button);
this.btnClose = this.content.find("ui_content/ui_head/btnClose").getComponent(Button);
this.btnHelp = this.content.find("ui_content/ui_head/btnHelp").getComponent(Button);
}
protected onEnable(): void {
this.btnGM.on(Button.EventType.CLICK, this.onOpenGM, this);
this.btnClear.node.on(Button.EventType.CLICK, this.onClear, this);
this.btnClose.node.on(Button.EventType.CLICK, this.onClose, this);
this.btnHelp.node.on(Button.EventType.CLICK, this.onHelp, this);
this.ui_help.on(Button.EventType.CLICK, this.onHelpUI, this);
this.btnGM.active = false;
this.onOpenGM();
this.initBtnEvents();
this.lb_help.string = this._helpStr;
this.ui_help.active = false;
}
protected onDisable(): void {
this.btnGM.off(Button.EventType.CLICK, this.onOpenGM, this);
this.btnClear.node.off(Button.EventType.CLICK, this.onClear, this);
this.btnClose.node.off(Button.EventType.CLICK, this.onClose, this);
this.btnHelp.node.off(Button.EventType.CLICK, this.onHelp, this);
this.ui_help.off(Button.EventType.CLICK, this.onHelpUI, this);
this.ui_quickBtns.children.map(x => x.off(Node.EventType.TOUCH_END, this.onQuickBtnClick, this));
this.ui_paramBtns.children.map(x => x.off(Node.EventType.TOUCH_END, this.onParamBtnClick, this));
}
initBtnEvents() {
for (let i = 0; i < this.quickBtns.length; i++) {
let btn: Node = null;
if (i < this.ui_quickBtns.children.length)
btn = this.ui_quickBtns.children[i];
else
btn = instantiate(this.ui_quickBtns.children[0]);
btn.active = true;
btn.name = this.quickBtns[i];
btn.setParent(this.ui_quickBtns);
btn.getComponentInChildren(Label).string = this.quickBtns[i];
btn.getComponentInChildren(Label).outlineColor = color().fromHEX(this.colors[i % this.colors.length]);
btn.on(Node.EventType.TOUCH_END, this.onQuickBtnClick, this);
}
for (let i = 0; i < this.paramBtns.length; i++) {
let btn = null;
if (i < this.ui_paramBtns.children.length)
btn = this.ui_paramBtns.children[i];
else
btn = instantiate(this.ui_paramBtns.children[0]);
btn.active = true;
let [name, desc] = this.paramBtns[i].split("|");
btn.name = name;
btn.setParent(this.ui_paramBtns);
btn.getChildByName("lb1").getComponent(Label).string = name;
btn.getChildByName("lb1").getComponent(Label).outlineColor = color().fromHEX(this.colors[i % this.colors.length]);
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + desc;
btn.on(Node.EventType.TOUCH_END, this.onParamBtnClick, this);
}
this.scheduleOnce(() => {
this.refreshparamBtns()
}, 1)
}
refreshparamBtns() {
//
for (let i = 0; i < this.ui_paramBtns.children.length; i++) {
let btn = this.ui_paramBtns.children[i];
if (btn.name == "设置金钱") {
let myMoney = gg.data.getItemNum(ItemNumType.money)
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myMoney;
} else if (btn.name == "设置体力") {
let myEnergy = gg.data.getItemNum(ItemNumType.vigour)
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myEnergy;
} else if (btn.name == "设置钻石") {
let myDiamond = gg.data.getItemNum(ItemNumType.diamond)
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myDiamond;
} else if (btn.name == "设置关卡解锁") {
let maxChapter = gg.data.doc.chapter
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + maxChapter;
} else if (btn.name == "设置玩家局内血量") {
let myHp = gg.game.playerHp
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myHp;
} else if (btn.name == "关卡初始银币") {
let initSilver = gg.game.playerCoinNum
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + initSilver;
} else if (btn.name == "关卡怪物倍数") {
let initMonsterNum = gg.game.monsterNumScale
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + initMonsterNum;
} else if (btn.name == "设置玩家武器") {
let myWeapon = gg.game.playerWeaponIdArray.join("|")
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myWeapon;
} else if (btn.name == "设置玩家技能") {
//技能的id gg.game.playerSkillIdArray
let mySkill = ""
for (let i = 0; i < gg.game.playerSkillIdArray.length; i++) {
mySkill = mySkill + gg.game.playerSkillIdArray[i].id + '|'
}
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + mySkill;
} else if (btn.name == "设置玩家技能组") {
let mySkillGroup = ''
for (let i = 0; i < gg.game.playerSkillGroupIdArray.length; i++) {
let groupList = gg.game.playerSkillGroupIdArray[i]
for (let j = 0; j < groupList.length; j++) {
if (j == groupList.length - 1) {
mySkillGroup = mySkillGroup + groupList[j].id + '|'
} else {
mySkillGroup = mySkillGroup + groupList[j].id + ','
}
}
}
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + mySkillGroup;
} else if (btn.name == "设置玩家武器组") {
let myWeaponGroup = ''
for (let i = 0; i < gg.game.playerWeaponGroupIdArray.length; i++) {
let groupList = gg.game.playerWeaponGroupIdArray[i]
for (let j = 0; j < groupList.length; j++) {
if (j == groupList.length - 1) {
myWeaponGroup = myWeaponGroup + groupList[j].weaponid + '|'
} else {
myWeaponGroup = myWeaponGroup + groupList[j].weaponid + ','
}
}
}
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + myWeaponGroup;
}else if(btn.name == "设置倍速"){
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + gg.game.tetriGameSpeed;
}else if(btn.name == "设置怪物的攻击和血量百分比"){
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + gg.game.monsterAttackPercent*100 + '%';
}else if(btn.name == "设置无重力墙权重值"){
btn.getChildByName("lb2").getComponent(Label).string = "参数:" + gg.game.noGravityWallProbability;
}
}
}
onClear() {
gg.ui.closeAllPanel();
GEvent.Ins.emit(GEvent.GameRestart);
gg.game.reset('GM重置');
}
onOpenGM() {
this.content.active = true;
this.btnGM.active = false;
}
onHelp() {
this.ui_help.active = !this.ui_help.active;
}
onHelpUI() {
this.ui_help.active = false;
}
onClose() {
GM.show();
// this.content.active = false;
// this.btnGM.active = true;
}
isShowFps = true;
colors = ["#21F018", "#05DBF8", "#EF9EFF", "#FFFF00", "#FFE09E", "#E8FF9E", "#47CA14", "#3CDCF1", "#E0FF00", "#20FA80"];
quickBtns = [
"关卡障碍物关闭",
"关卡障碍物开启",
"关卡怪物倍数清除",
"清除血量和障碍物",
'清除副本次数难度全开',
"今日首次登录(每日重置)",
"复制存档",
"设置武器等级",
"设置武器和技能",
'设置方块手指释放处掉落',
'设置关卡不出怪'
];
paramBtns = [
"设置金钱|金币数量",
"设置体力|体力数量",
"设置钻石|钻石数量",
"设置关卡解锁|关卡解锁",
"设置玩家局内血量|血量数量",
"设置玩家等级|玩家等级",
"关卡初始银币|银币数量",
'设置玩家存档|设置玩家存档',
"设置无重力墙权重值|越大越容易出现无重力墙",
"设置倍速|最高3倍",
"设置怪物的攻击和血量百分比|攻击和血量"
];
onQuickBtnClick(event: EventTouch) {
switch (event.target.name) {
case "关闭广告":
gg.sdk.showAd = false;
break;
case "显示广告":
gg.sdk.showAd = true;
break;
case "关卡障碍物关闭":
gg.game.isShowObstacle = false;
break;
case "关卡障碍物开启":
gg.game.isShowObstacle = true;
break;
case "关卡怪物倍数清除":
gg.game.monsterNumScale = 1;
break;
case "玩家技能清除":
gg.game.playerSkillIdArray = [];
break;
case "玩家武器清除":
gg.game.playerWeaponIdArray = [];
break;
case "清除血量和障碍物":
gg.game.playerHp = 0;
gg.game.playerCoinNum = 0;
break;
case "清除玩家技能组和武器组":
gg.game.playerSkillGroupIdArray = [];
gg.game.playerWeaponGroupIdArray = [];
gg.game.setPlayerWeaponGroupIdArray = false;
gg.game.setPlayerSkillGroupIdArray = false;
break;
case "清除副本次数难度全开":
//BoxChallengeCount
gg.data.setStatistics(StatisticsType.BoxChallengeCount, 0)
//抽卡挑战模式
gg.data.setStatistics(StatisticsType.gachaChallengeModeCount, 0)
gg.data.setStatistics(StatisticsType.InfiniteChallengeCount, 0)
//道具挑战次数
gg.data.setStatistics(StatisticsType.PropChallengeCount, 0)
gg.data.setStatistics(StatisticsType.WeaponChallengeCount, 0)
//BoxModelLevel
gg.data.setStatistics(StatisticsType.BoxModelLevel, 5)
gg.data.setStatistics(StatisticsType.InfiniteModelLevel, 5)
gg.data.setStatistics(StatisticsType.PropModelLevel, 5)
gg.data.setStatistics(StatisticsType.WeaponModelLevel, 5)
//抽卡挑战模式
gg.data.setStatistics(StatisticsType.GachaChallengeModeLevel, 5)
//Boss挑战次数
gg.data.setStatistics(StatisticsType.BossChallengeCount, 0)
break;
case "今日首次登录(每日重置)":
gg.data.onFirstLoginToday();
gg.ui.showToast("今日首次登录(每日重置)成功");
GM.show();
break;
case "复制存档":
let data = JSON.stringify(gg.data.doc);
//设置到剪贴板
MTools.CopyTextEvent(data);
gg.ui.showToast("复制存档成功");
GM.show();
break;
case "中文":
gg.lang.Current = LangType.zh;
GM.show();
break;
case "英文":
gg.lang.Current = LangType.en;
GM.show();
break;
case "打开内购":
sdkConfig.isIAPVersion = true;
GM.show();
break;
case "关闭内购":
sdkConfig.isIAPVersion = false;
GM.show();
break;
case "设置武器和技能":
gg.ui.openPanel(UIID.PopGM, { data: 2 });
GM.show();
break;
case "设置武器等级":
gg.ui.openPanel(UIID.PopGM, { data: 1 });
GM.show();
break;
case "设置方块手指释放处掉落":
gg.game.isShowBlockDrop = true;
break;
case "设置关卡不出怪":
gg.game.noMonsterShow = true;
break;
}
this.refreshparamBtns()
}
onParamBtnClick(event: EventTouch) {
switch (event.target.name) {
case "设置道具数量":
let id = Number(this.eb_prama.string.split(' ')[0]);
let num = Number(this.eb_prama.string.split(' ')[1]);
gg.data.setItemNum(id, num);
gg.data.saveToServer();
break;
case "设置金钱":
gg.data.setItemNum(ItemNumType.money, Number(this.eb_prama.string));
gg.data.saveToServer();
break;
case "设置体力":
gg.data.setItemNum(ItemNumType.vigour, Number(this.eb_prama.string));
gg.data.saveToServer();
break;
case "设置钻石":
gg.data.setItemNum(ItemNumType.diamond, Number(this.eb_prama.string));
gg.data.saveToServer();
break;
case "设置关卡解锁":
gg.data.doc.chapter = Number(this.eb_prama.string);
let max = ChapterDataManager.getAllChapterAccount();
if (gg.data.doc.chapter >= max) {
gg.data.doc.chapter = max;
}
for (let i = 0; i < gg.data.doc.chapter - 1; i++) {
let chapterId = i + 1;
for (let j = 0; j < 3; j++) {
let index = j;
gg.data.project.setChapterStatus(chapterId, ChapterDifficulty.Normal, index, 1);
// gg.data.project.setChapterStatus(chapterId, ChapterDifficulty.Hard, index, 1);
// gg.data.project.setChapterStatus(chapterId, ChapterDifficulty.Hell, index, 1);
}
}
gg.data.saveToServer();
break;
case "设置玩家局内血量":
gg.game.playerHp = Number(this.eb_prama.string);
break;
case "关卡初始银币":
gg.game.playerCoinNum = Number(this.eb_prama.string);
break;
case "关卡怪物倍数":
gg.game.monsterNumScale = Number(this.eb_prama.string);
if (gg.game.monsterNumScale <= 0) {
gg.game.monsterNumScale = 1;
} else if (gg.game.monsterNumScale >= 20) {
gg.game.monsterNumScale = 20;
}
console.log(gg.game.monsterNumScale);
break;
case "设置玩家武器":
let array = this.eb_prama.string.split(",");
gg.game.playerWeaponIdArray = array.map((item) => Number(item));
//删除不存在的武器目前武器ID是1到100
let arraynew = []
for (let i = 0; i < gg.game.playerWeaponIdArray.length; i++) {
let id = gg.game.playerWeaponIdArray[i];
if (id >= 1 && id <= 100) {
//去掉重复的
if (arraynew.indexOf(id) == -1) {
arraynew.push(id);
}
}
}
gg.game.playerWeaponIdArray = arraynew;
console.log(gg.game.playerWeaponIdArray);
break;
case "设置玩家技能":
let array2 = this.eb_prama.string.split(",");
gg.game.playerSkillIdArray = array2.map((item) => Number(item));
console.log(gg.game.playerSkillIdArray);
let list = gg.data.table.getTableList<ITableSkill>(TableNames.Skill);
//通过id 获取技能配置
// 生成对象 id: 601, type: 1, limit_num: 1
let objArray = []
for (let i = 0; i < gg.game.playerSkillIdArray.length; i++) {
let id = gg.game.playerSkillIdArray[i];
//找出技能配置,如果没有这个技能就不加入数组,(如果这个技能的武器不存在也不加入数组之后处理)
let skillConfig = list.find((item) => item.id == id);
if (skillConfig) {
//如果objArray已经有这个id的对象,就查看limit_num的值如果是1不加入,否则limit_num数量加1直到配置的数量上限
if (objArray.find((item) => item.id == skillConfig.id)) {
//不添加
} else {
let obj: IBattleSkill = {
weaponId: skillConfig.weapon,
id: skillConfig.id,
type: skillConfig.type,
limit_num: skillConfig.limit_num,
};
objArray.push(obj);
}
}
}
gg.game.playerSkillIdArray = objArray
console.log(gg.game.playerSkillIdArray);
break;
case "设置玩家技能组":
gg.game.setPlayerSkillGroupIdArray = true;
this.setSkillGroup();
break;
case "设置玩家武器组":
gg.game.setPlayerWeaponGroupIdArray = true;
this.setWeaponGroup();
break;
case "设置玩家武器升级":
break;
case "设置玩家等级":
let curData = gg.data.getStringData(OtherDataType.UserLevelupData)
if (curData == '') {
gg.data.setStringData(OtherDataType.UserLevelupData, '0&10&0&0&0&0&0')
curData = '0&10&0&0&0&0&0'
}
let curDataArray = curData.split('&');
let arrayPlayer = this.eb_prama.string
curDataArray[0] = arrayPlayer;
curDataArray[1] = (Number(curDataArray[1]) + Number(arrayPlayer)) + '';
curDataArray[2] = (Number(curDataArray[2]) + Number(arrayPlayer) * 10) + '';
curDataArray[3] = (Number(curDataArray[3]) + Number(arrayPlayer) * 50) + '';
gg.data.setStringData(OtherDataType.UserLevelupData, curDataArray.join('&'))
GEvent.Ins.emit(GEvent.UpdateCombatPower);
break;
case "设置玩家存档":
if (JSON.parse(this.eb_prama.string)) {
gg.data.doc = JSON.parse(this.eb_prama.string);
GM.show();
gg.ui.showToast("设置成功");
gg.data["_IsFirstLogin"] = false;
gg.game.init();
GEvent.Ins.emit(GEvent.UpdateItemNum);
} else {
gg.ui.showToast("存档格式错误");
}
break;
case "设置通关怪物数量":
sdkConfig.isDebugFastWinMonsterNum = Number(this.eb_prama.string);
break;
case "设置无重力墙权重值":
if(this.eb_prama.string == ''){
}else{
gg.game.noGravityWallProbability = Number(this.eb_prama.string);
}
console.log(gg.game.noGravityWallProbability);
break;
case "设置倍速":
if(this.eb_prama.string == ''){
}else{
gg.game.tetriGameSpeed = Number(this.eb_prama.string);
if(gg.game.tetriGameSpeed>=3){
gg.game.tetriGameSpeed = 3;
}else if(gg.game.tetriGameSpeed<=0){
gg.game.tetriGameSpeed = 1;
}
}
console.log(gg.game.tetriGameSpeed);
break;
case "设置怪物的攻击和血量百分比":
if(this.eb_prama.string == '' ){
}else{
gg.game.monsterAttackPercent = Number(this.eb_prama.string)/100;
gg.game.monsterHpPercent = Number(this.eb_prama.string)/100;
if(gg.game.monsterAttackPercent<=0){
gg.game.monsterAttackPercent = 1;
gg.game.monsterHpPercent = 1;
}
}
console.log(gg.game.monsterAttackPercent,gg.game.monsterHpPercent);
break;
}
gg.data.saveLocal();
this.refreshparamBtns()
}
setWeaponGroup() {
let array3 = this.eb_prama.string.split(",");
let array33 = []
let array333 = []
//一维数组改二维数组, 3个一组,不足三个补齐三个
for (let i = 0; i < array3.length; i++) {
if (Number(array3[i]) >= 1 && Number(array3[i]) <= 100) {
array333.push(Number(array3[i]));
if (i % 3 == 2) {
if (array333.length == 3) {
array33.push(array333);
}
array333 = []
}
}
}
let allList = gg.data.project.getWeaponDataList()
let objArray = []
for (let i = 0; i < array33.length; i++) {
let objArray2 = []
let array = array33[i];
for (let j = 0; j < array.length; j++) {
let id = array[j];
let obj = allList.find((item) => item.weaponid == id);
if (obj) {
objArray2.push(obj);
}
}
if (objArray2.length == 3) {
objArray.push(objArray2);
}
}
gg.game.playerWeaponGroupIdArray = objArray;
console.log(gg.game.playerWeaponGroupIdArray);
}
setSkillGroup() {
let array4 = this.eb_prama.string.split(",");
let array44 = []
let array333 = []
//一维数组改二维数组, 3个一组,不足三个补齐三个
for (let i = 0; i < array4.length; i++) {
array333.push(Number(array4[i]));
if (i % 3 == 2) {
array44.push(array333);
array333 = []
}
}
console.log(array44);
let list44 = gg.data.table.getTableList<ITableSkill>(TableNames.Skill);
//把数组id变成对象
// let obj = {};
// obj["id"] = skillConfig.id;
// obj["type"] = skillConfig.type;
// obj["limit_num"] = skillConfig.limit_num;
// objArray.push(obj);
let objArray2 = []
for (let i = 0; i < array44.length; i++) {
let array333 = array44[i];
let objArray = []
for (let j = 0; j < array333.length; j++) {
let id = array333[j];
let skillConfig = list44.find((item) => item.id == id);
if (skillConfig) {
let obj = {};
obj["id"] = skillConfig.id;
obj["type"] = skillConfig.type;
obj["limit_num"] = skillConfig.limit_num;
objArray.push(obj);
}
}
if (objArray.length == 3) {
objArray2.push(objArray);
}
}
gg.game.playerSkillGroupIdArray = objArray2;
console.log(gg.game.playerSkillGroupIdArray);
}
private _helpStr = `GM 工具帮助说明:
一、快速按钮功能
1. 加10万金钱:直接给角色增加10万金钱
2. 下一任务:完成当前任务并关闭GM界面
3. 显示FPS-隐藏FPS:切换FPS显示状态
4. 暂停秒赚:暂停秒赚功能
5. 恢复秒赚:恢复秒赚功能
6. 关闭广告:禁用广告显示
7. 显示广告:启用广告显示
8. 删除仅存本地数据:清空仅存储在本地的数据
二、参数按钮功能及参数格式
1. 设置金钱:输入单个数值,如 "1000" 可设置金钱数量
2. 增加道具:输入格式 "道具ID 数量",如 "1001 5" 表示增加ID为1001的道具5个
3. 跳转指定任务:输入任务ID,如 "5" 可跳转到ID为5的任务
4. 播放剧情:输入剧情ID,如 "3" 可播放ID为3的剧情
5. 激活产业:输入产业ID,如 "2" 可激活ID为2的产业
6. 设置产业等级:输入格式 "产业ID 等级",如 "3 5" 表示设置ID为3的产业等级为5
7. 设置产业星级:输入格式 "产业ID 星级",如 "4 3" 表示设置ID为4的产业星级为3
8. 播放引导剧情:输入引导剧情ID,如 "1" 可播放ID为1的引导剧情
9. 设置宣传关卡:输入格式 "宣传类型 关卡等级",如 "1 2" 表示设置宣传类型1的关卡为2
10. 设置产业关卡:输入格式 "产业类型 关卡等级",如 "2 3" 表示设置产业类型2的关卡为3
使用方法:
1. 在编辑框输入对应参数
2. 点击相应功能按钮执行操作
`;
}