master
humingxing 1 day ago
parent bd0e273b17
commit 0c86d5d0c3
  1. 2
      assets/bundles/first/config/Const.json
  2. 2
      assets/res/battleGameWeapon/spine/武器/长枪/枪类武器+专属技能.json
  3. 170
      assets/script/game/GM.ts
  4. 43
      assets/script/manager/RankDataManager.ts
  5. 4
      settings/v2/packages/information.json

@ -19,7 +19,7 @@
}, },
{ {
"id": 4, "id": 4,
"desc": "战斗初始刷新消耗", "desc": "战斗刷新消耗",
"para": 50, "para": 50,
"para1": "" "para1": ""
}, },

File diff suppressed because one or more lines are too long

@ -18,6 +18,7 @@ import { BattleRuntime } from '../battle/runtime/BattleRuntime';
import { DailyShopDataManager } from '../manager/DailyShopDataManager'; import { DailyShopDataManager } from '../manager/DailyShopDataManager';
import { HeadIconManager } from '../manager/HeadIconManager'; import { HeadIconManager } from '../manager/HeadIconManager';
import { DailyShopKind } from '../manager/DailyShopTypes'; import { DailyShopKind } from '../manager/DailyShopTypes';
import { BattleBuffCarryStore } from '../manager/battleBuff/BattleBuffCarryStore';
import { EmolumentDataManager } from '../manager/EmolumentDataManager'; import { EmolumentDataManager } from '../manager/EmolumentDataManager';
import { RankBoardManager } from '../manager/RankBoardManager'; import { RankBoardManager } from '../manager/RankBoardManager';
import { RankDataManager } from '../manager/RankDataManager'; import { RankDataManager } from '../manager/RankDataManager';
@ -153,11 +154,21 @@ export class GM extends Component {
lb2.string = `参数:${gg.data.getItemNum(ItemNumType.diamond)}`; lb2.string = `参数:${gg.data.getItemNum(ItemNumType.diamond)}`;
break; break;
case '设置关卡解锁': case '设置关卡解锁':
lb2.string = `参数:${gg.data.doc.rankId}`; lb2.string = `参数:${RankDataManager.getPlayerRankId()}`;
break; break;
case '设置星数': case '设置星数':
lb2.string = `参数:${RankDataManager.getPlayerRankStars()}`; lb2.string = `参数:${RankDataManager.getPlayerRankStars()}`;
break; break;
case '设置段位和星级': {
const rid = RankDataManager.getPlayerRankId();
const intra = RankDataManager.getIntraTierStars();
const row = RankDataManager.getRankConfig(rid);
const name = row?.name?.trim() ?? '';
lb2.string = name
? `参数:${rid} ${intra}(${name})`
: `参数:${rid} ${intra}`;
break;
}
case '设置玩家局内血量': { case '设置玩家局内血量': {
const runtime = gg.battle.match; const runtime = gg.battle.match;
const inBattleHp = runtime instanceof BattleRuntime ? runtime.WallMaxHp : 0; const inBattleHp = runtime instanceof BattleRuntime ? runtime.WallMaxHp : 0;
@ -195,20 +206,11 @@ export class GM extends Component {
lb2.string = this._formatFixedLevelParam(id); lb2.string = this._formatFixedLevelParam(id);
break; break;
} }
case '设置主动BUFF': {
const slotId = DailyShopDataManager.getActiveSlotIds()[0] ?? 0;
const parsed = slotId > 0 ? DailyShopDataManager.getParsed(slotId) : null;
lb2.string = parsed
? `参数:${parsed.id}(${parsed.name})`
: (slotId > 0 ? `参数:${slotId}` : '参数:空');
break;
}
case '设置被动BUFF': { case '设置被动BUFF': {
const slotId = DailyShopDataManager.getPassiveSlotIds()[0] ?? 0; const first = BattleBuffCarryStore.getPassives(0)[0];
const parsed = slotId > 0 ? DailyShopDataManager.getParsed(slotId) : null; lb2.string = first
lb2.string = parsed ? `参数:${first.id}(${first.name})`
? `参数:${parsed.id}(${parsed.name})` : '参数:空';
: (slotId > 0 ? `参数:${slotId}` : '参数:空');
break; break;
} }
} }
@ -242,30 +244,15 @@ export class GM extends Component {
colors = ["#21F018", "#05DBF8", "#EF9EFF", "#FFFF00", "#FFE09E", "#E8FF9E", "#47CA14", "#3CDCF1", "#E0FF00", "#20FA80"]; colors = ["#21F018", "#05DBF8", "#EF9EFF", "#FFFF00", "#FFE09E", "#E8FF9E", "#47CA14", "#3CDCF1", "#E0FF00", "#20FA80"];
quickBtns = [ quickBtns = [
'清除副本次数难度全开',
'今日首次登录(每日重置)', '今日首次登录(每日重置)',
'复制存档', '复制存档',
'一键获取所有武器',
'一键添加所有宝石', '一键添加所有宝石',
'设置武器等级',
'设置武器和技能',
'清除指定背包文字',
'快速胜利1怪', '快速胜利1怪',
'关闭快速胜利', '关闭快速胜利',
'关闭广告', '关闭广告',
'显示广告', '显示广告',
'重置每日商店or抽奖',
'重置每日商店BUFF',
'打开每日商店无限次数',
'关闭每日商店无限次数',
'清除AI主动BUFF',
'清除AI被动BUFF',
'清除固定地图', '清除固定地图',
'测试七十二变→妙手神偷',
'关闭七十二变固定',
'设置排行星级&胜场', '设置排行星级&胜场',
'打开内购',
'关闭内购',
'开启己方营地不掉血', '开启己方营地不掉血',
'关闭己方营地不掉血', '关闭己方营地不掉血',
'开启敌方营地不掉血', '开启敌方营地不掉血',
@ -273,22 +260,15 @@ export class GM extends Component {
]; ];
paramBtns = [ paramBtns = [
'设置道具数量|道具ID 数量(空格分隔)', '设置道具数量|道具ID 数量(空格分隔)',
'设置武器数量|武器ID 数量(空格分隔)',
'设置主动BUFF|主动buffID(只设置第一个)',
'设置被动BUFF|被动buffID(只设置第一个)',
'设置金钱|金币数量', '设置金钱|金币数量',
'设置体力|体力数量', '设置体力|体力数量',
'设置钻石|钻石数量', '设置钻石|钻石数量',
'设置关卡解锁|段位id',
'设置星数|总星数(最低1)',
'设置玩家局内血量|城墙血量(下局生效,局内同步)',
'设置玩家等级|主角等级',
'设置玩家存档|JSON存档字符串',
'设置通关怪物数量|击杀N怪后通关,0关闭',
'指定背包文字|weapon2Id或名称,逗号分隔',
'设置AI主动BUFF|Battlebuff.id,逗号分隔(下局生效)',
'设置AI被动BUFF|Battlebuff.id,逗号分隔(下局生效)',
'固定地图|Level.id(关卡表),0关闭', '固定地图|Level.id(关卡表),0关闭',
'设置被动BUFF|被动buffID(只设置第一个)',
'设置AI被动BUFF|Battlebuff.id,逗号分隔(下局生效)',
'设置段位和星级|段位id 星级(1~5)',
'设置通关怪物数量|击杀N怪后通关,0关闭',
'设置玩家存档|JSON存档字符串',
]; ];
onQuickBtnClick(event: EventTouch) { onQuickBtnClick(event: EventTouch) {
@ -419,27 +399,6 @@ export class GM extends Component {
gg.ui.showToast('已恢复地图随机'); gg.ui.showToast('已恢复地图随机');
GM.show(); GM.show();
break; break;
case '测试七十二变→妙手神偷': {
gg.game.gmRandomActiveFixBuffId = 16;
const result = DailyShopDataManager.gmSetFirstCarrySlot(DailyShopKind.Active, '20');
if (result.wrongKind) {
gg.ui.showToast('七十二变(id=20) 非主动 buff,请检查配表');
break;
}
if (!result.ok) {
gg.ui.showToast('写入七十二变失败,请检查 Battlebuff 表');
break;
}
gg.data.saveToServer();
gg.ui.showToast('已开启:七十二变 CD 结束固定→妙手神偷(id=16)');
GM.show();
break;
}
case '关闭七十二变固定':
gg.game.gmRandomActiveFixBuffId = null;
gg.ui.showToast('已关闭七十二变固定 roll,恢复随机');
GM.show();
break;
case '设置排行星级&胜场': case '设置排行星级&胜场':
this._gmSetRankStarsAndDailyWins(); this._gmSetRankStarsAndDailyWins();
GM.show(); GM.show();
@ -494,40 +453,19 @@ export class GM extends Component {
gg.ui.showToast(`武器 ${equipId} 已设为 ${gg.equip.getHaveEquipCount(equipId)}`); gg.ui.showToast(`武器 ${equipId} 已设为 ${gg.equip.getHaveEquipCount(equipId)}`);
break; break;
} }
case '设置主动BUFF': {
const result = DailyShopDataManager.gmSetFirstCarrySlot(DailyShopKind.Active, this.eb_prama.string);
if (result.wrongKind) {
gg.ui.showToast('该 id 为被动 buff,不能写入主动第1槽');
break;
}
if (!result.ok) {
gg.ui.showToast('请填主动 Battlebuff.id(type=1) 或名称');
break;
}
needSaveServer = true;
if (result.parsed) {
gg.ui.showToast(`主动第1槽 → ${result.parsed.id}(${result.parsed.name})`);
} else {
gg.ui.showToast('已清空主动第1槽');
}
break;
}
case '设置被动BUFF': { case '设置被动BUFF': {
const result = DailyShopDataManager.gmSetFirstCarrySlot(DailyShopKind.Passive, this.eb_prama.string); const raw = this.eb_prama.string.trim();
if (result.wrongKind) { if (raw === '' || raw === '0') {
gg.ui.showToast('该 id 为主动 buff,不能写入被动第1槽'); gg.ui.showToast('请填被动 Battlebuff.id');
break; break;
} }
const result = DailyShopDataManager.gmSetFirstCarrySlot(DailyShopKind.Passive, raw);
if (!result.ok) { if (!result.ok) {
gg.ui.showToast('请填被动 Battlebuff.id(type=2) 或名称'); gg.ui.showToast(result.message ?? '写入失败');
break; break;
} }
needSaveServer = true; needSaveServer = true;
if (result.parsed) { gg.ui.showToast(`被动 buff 已写入 ${Math.floor(Number(raw) || 0)}`);
gg.ui.showToast(`被动第1槽 → ${result.parsed.id}(${result.parsed.name})`);
} else {
gg.ui.showToast('已清空被动第1槽');
}
break; break;
} }
case '设置金钱': { case '设置金钱': {
@ -557,9 +495,16 @@ export class GM extends Component {
gg.ui.showToast('请输入有效段位 id'); gg.ui.showToast('请输入有效段位 id');
break; break;
} }
gg.data.doc.rankId = rankId; const total = RankDataManager.applyGmRankAndStar(rankId, 1);
if (!(total > 0)) {
gg.ui.showToast('段位 id 无效');
break;
}
HeadIconManager.onRankStarsChanged();
needSaveServer = true; needSaveServer = true;
gg.ui.showToast(`段位已设为 ${gg.data.doc.rankId}`); void RankBoardManager.syncSelfScore();
GEvent.Ins.emit(GEvent.UpdateRankStars);
gg.ui.showToast(`段位已设为 ${rankId}(总星 ${total})`);
break; break;
} }
case '设置星数': { case '设置星数': {
@ -569,6 +514,8 @@ export class GM extends Component {
break; break;
} }
gg.data.doc.rankStars = stars; gg.data.doc.rankStars = stars;
const tier = RankDataManager.resolveTierByStars(stars);
if (tier?.id) gg.data.doc.rankId = tier.id;
HeadIconManager.onRankStarsChanged(); HeadIconManager.onRankStarsChanged();
needSaveServer = true; needSaveServer = true;
void RankBoardManager.syncSelfScore(); void RankBoardManager.syncSelfScore();
@ -576,6 +523,39 @@ export class GM extends Component {
gg.ui.showToast(`星数已设为 ${gg.data.doc.rankStars}`); gg.ui.showToast(`星数已设为 ${gg.data.doc.rankStars}`);
break; break;
} }
case '设置段位和星级': {
const parts = this.eb_prama.string.trim().split(/\s+/);
const rankId = Math.floor(Number(parts[0]));
const intra = Math.floor(Number(parts[1]));
if (!Number.isFinite(rankId) || !Number.isFinite(intra) || parts.length < 2) {
gg.ui.showToast('格式:段位id 星级(1~5)');
break;
}
const total = RankDataManager.applyGmRankAndStar(rankId, intra);
if (!(total > 0)) {
const row = RankDataManager.getRankConfig(rankId);
if (!row?.level || row.level.length < 2) {
gg.ui.showToast('段位 id 无效');
} else {
const min = Math.floor(Number(row.level[0]) || 1);
const max = Math.floor(Number(row.level[1]) || 0);
const span = max === -1 ? 5 : Math.max(1, max - min + 1);
gg.ui.showToast(`星级须为 1~${span}`);
}
break;
}
HeadIconManager.onRankStarsChanged();
needSaveServer = true;
void RankBoardManager.syncSelfScore();
GEvent.Ins.emit(GEvent.UpdateRankStars);
const name = RankDataManager.getRankConfig(rankId)?.name?.trim() ?? '';
gg.ui.showToast(
name
? `段位 ${rankId}(${name}) 星级 ${intra}(总星 ${total})`
: `段位 ${rankId} 星级 ${intra}(总星 ${total})`,
);
break;
}
case '设置玩家局内血量': { case '设置玩家局内血量': {
const hp = this._readParamInt(); const hp = this._readParamInt();
if (hp === null || hp <= 0) { if (hp === null || hp <= 0) {
@ -781,11 +761,11 @@ export class GM extends Component {
【参数按钮】(先在输入框填参数再点按钮) 【参数按钮】(先在输入框填参数再点按钮)
· 设置道具数量:道具ID 数量(空格分隔) · 设置道具数量:道具ID 数量(空格分隔)
· 设置武器数量:武器ID 数量(空格分隔,写入成品库存) · 设置武器数量:武器ID 数量(空格分隔,写入成品库存)
· 设置主动BUFF:Battlebuff.id(type=1),只写携带第1槽(有则替换;0/空=清空) · 设置被动BUFF:Battlebuff.id,写入本局 CarryStore 被动列表
· 设置被动BUFF:Battlebuff.id(type=2),只写携带第1槽(有则替换;0/空=清空)
· 设置金钱 / 体力 / 钻石:单个数字 · 设置金钱 / 体力 / 钻石:单个数字
· 设置关卡解锁:章节 id · 设置关卡解锁:段位 id(落到该段最低星,同步总星)
· 设置星数:总星数(>=1) · 设置星数:总星数(>=1),并反推段位
· 设置段位和星级:段位id 星级(空格分隔,星级 1~5)
· 设置玩家局内血量:城墙最大血量 · 设置玩家局内血量:城墙最大血量
· 设置玩家等级:主角总等级 · 设置玩家等级:主角总等级
· 设置玩家存档:粘贴 JSON 存档 · 设置玩家存档:粘贴 JSON 存档

@ -457,6 +457,49 @@ export class RankDataManager {
return true; return true;
} }
/**
* 段位 id + 段内星级 → 总星数(不写档)。
* @param rankId Rank.id
* @param intraStar 段内星级(从 1 起;末档无上限时按 1~5)
* @returns 总星;非法返回 0
*/
static resolveTotalStarsByRankAndIntra(rankId: number, intraStar: number): number {
const id = Math.floor(Number(rankId) || 0);
const star = Math.floor(Number(intraStar) || 0);
const row = this.getRankConfig(id);
if (!row?.level || row.level.length < 2) {
console.warn('[RankDataManager] 段位 id 无效', rankId);
return 0;
}
const min = Math.floor(Number(row.level[0]) || 1);
const max = Math.floor(Number(row.level[1]) || 0);
const span = max === -1 ? 5 : Math.max(1, max - min + 1);
if (!(star >= 1 && star <= span)) {
console.warn('[RankDataManager] 段内星级越界', rankId, intraStar, 'span=', span);
return 0;
}
const total = min + star - 1;
if (max !== -1 && total > max) {
console.warn('[RankDataManager] 总星超出段位上限', rankId, total, max);
return 0;
}
return Math.max(1, total);
}
/**
* GM:按段位 id + 段内星级写入存档总星,并同步 doc.rankId(不发事件,由调用方刷新 UI)。
* @param rankId Rank.id
* @param intraStar 段内星级(从 1 起)
* @returns 写入后的总星;失败返回 0
*/
static applyGmRankAndStar(rankId: number, intraStar: number): number {
const total = this.resolveTotalStarsByRankAndIntra(rankId, intraStar);
if (!(total > 0)) return 0;
gg.data.doc.rankStars = total;
gg.data.doc.rankId = Math.floor(Number(rankId) || 0);
return total;
}
/** /**
* Rank.reward 金币数量(格式 `道具id|数量`,如 `1|14`)。 * Rank.reward 金币数量(格式 `道具id|数量`,如 `1|14`)。
* @param stars 总星数 * @param stars 总星数

@ -7,7 +7,7 @@
"enable": true, "enable": true,
"customSplash": { "customSplash": {
"complete": true, "complete": true,
"form": "https://creator-api.cocos.com/api/form/show?sid=ec6b43bddfc8957bdecb688b13a99021" "form": "https://creator-api.cocos.com/api/form/show?sid=ee5002d3a748aae1e43db5c9cbeb0f5f"
} }
}, },
"removeSplash": { "removeSplash": {
@ -16,7 +16,7 @@
"enable": true, "enable": true,
"removeSplash": { "removeSplash": {
"complete": true, "complete": true,
"form": "https://creator-api.cocos.com/api/form/show?sid=ec6b43bddfc8957bdecb688b13a99021" "form": "https://creator-api.cocos.com/api/form/show?sid=ee5002d3a748aae1e43db5c9cbeb0f5f"
} }
} }
} }

Loading…
Cancel
Save