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

1 week ago
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();
1 week ago
}
}
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;
}
1 week ago
@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. 1010
2. GM界面
3. FPS-FPSFPS显示状态
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" 12
10. "产业类型 关卡等级" "2 3" 23
使
1.
2.
`;
}