世界 Lv.--
--
+
+ 🪙 0
+ 🥉 0
+ 🥈 0
+ 💎 0
+
EXP -- / --
--%
@@ -2399,8 +2415,11 @@ async function microLoadGame() {
try {
const [c, cr] = await Promise.all([API.char(), API.creatures(), microLoadEquipCatalog()]);
microChar = (c && c.ok !== false) ? c : (c || null);
- if (microChar && !microChar.equip) microChar.equip = { weapon: null, armor: null, accessory: null };
- if (microChar && !microChar.inventory) microChar.inventory = {};
+ if (microChar) {
+ if (!microChar.equip) microChar.equip = { weapon: null, armor: null, accessory: null };
+ if (!microChar.inventory) microChar.inventory = {};
+ ['gold','copper','silver','diamond'].forEach(k => { if (microChar[k] == null) microChar[k] = 0; });
+ }
microCreatureOverlay = {};
if (cr && cr.ok && Array.isArray(cr.creatures)) {
cr.creatures.forEach(x => { if (x.cid) microCreatureOverlay[x.cid] = x; });
@@ -2476,14 +2495,21 @@ function microRenderCharHud() {
updateGoldEditorDisplay();
}
-// 顶部金币编辑器:测试阶段调试角色金币
+// 顶部金币编辑器 + 底部世界经验条货币展示(共用角色货币数据)
function updateGoldEditorDisplay() {
const editor = document.getElementById('goldEditor');
const current = document.getElementById('goldCurrent');
- if (!editor || !current) return;
- if (!microChar) { editor.style.display = 'none'; return; }
- editor.style.display = 'inline-flex';
- current.textContent = Math.floor(microChar.gold || 0);
+ if (editor) editor.style.display = microChar ? 'inline-flex' : 'none';
+ if (current) current.textContent = Math.floor((microChar && microChar.gold) || 0);
+ // 底部世界经验条:金币/铜币/银币/钻石
+ const setWc = (id, val) => {
+ const el = document.getElementById(id);
+ if (el) el.textContent = Math.floor(val || 0);
+ };
+ setWc('wcGold', microChar ? microChar.gold : 0);
+ setWc('wcCopper', microChar ? microChar.copper : 0);
+ setWc('wcSilver', microChar ? microChar.silver : 0);
+ setWc('wcDiamond', microChar ? microChar.diamond : 0);
}
async function changeGoldEditor(delta) {
if (!microChar) { microToast('角色未加载,无法修改金币'); return; }
@@ -2494,7 +2520,10 @@ async function changeGoldEditor(delta) {
try {
const r = await API.saveChar({ gold: next });
if (r && r.ok && r.char) {
- microChar.gold = r.char.gold;
+ microChar.gold = r.char.gold || 0;
+ microChar.copper = r.char.copper || 0;
+ microChar.silver = r.char.silver || 0;
+ microChar.diamond = r.char.diamond || 0;
updateGoldEditorDisplay();
microRenderCharHud();
microToast(`金币已调整为 🪙${microChar.gold}`);
@@ -2536,8 +2565,11 @@ async function emitTaskEvent(event, payload) {
taskData = { chapters: r.chapters, tasks: r.tasks, char: r.char };
if (microChar && r.char) {
microChar.level = r.char.level; microChar.exp = r.char.exp;
- microChar.exp_max = r.char.exp_max; microChar.gold = r.char.gold;
+ microChar.exp_max = r.char.exp_max; microChar.gold = r.char.gold || 0;
+ microChar.copper = r.char.copper || 0; microChar.silver = r.char.silver || 0;
+ microChar.diamond = r.char.diamond || 0;
microRenderCharHud();
+ updateGoldEditorDisplay();
}
const body = document.getElementById('taskPanelBody');
if (body) {
@@ -2564,7 +2596,9 @@ async function fetchTasks() {
if (!microChar) {
microChar = {
name: r.char.name, level: r.char.level, exp: r.char.exp,
- exp_max: r.char.exp_max, gold: r.char.gold,
+ exp_max: r.char.exp_max, gold: r.char.gold || 0,
+ copper: r.char.copper || 0, silver: r.char.silver || 0,
+ diamond: r.char.diamond || 0,
equip: { weapon: null, armor: null, accessory: null },
inventory: {}
};
@@ -2573,7 +2607,10 @@ async function fetchTasks() {
microChar.level = r.char.level;
microChar.exp = r.char.exp;
microChar.exp_max = r.char.exp_max;
- microChar.gold = r.char.gold;
+ microChar.gold = r.char.gold || 0;
+ microChar.copper = r.char.copper || 0;
+ microChar.silver = r.char.silver || 0;
+ microChar.diamond = r.char.diamond || 0;
}
microRenderCharHud();
updateGoldEditorDisplay();
@@ -2668,8 +2705,12 @@ async function claimTask(code, btn) {
microChar.level = r.char.level;
microChar.exp = r.char.exp;
microChar.exp_max = r.char.exp_max;
- microChar.gold = r.char.gold;
+ microChar.gold = r.char.gold || 0;
+ microChar.copper = r.char.copper || 0;
+ microChar.silver = r.char.silver || 0;
+ microChar.diamond = r.char.diamond || 0;
microRenderCharHud();
+ updateGoldEditorDisplay();
}
const gained = [];
if (r.reward_exp) gained.push(`⭐${r.reward_exp} 经验`);
@@ -4610,7 +4651,7 @@ async function onMicroUp(e) {
return;
}
if (microChar) microChar.gold = res.gold;
- microRenderCharHud();
+ microRenderCharHud(); updateGoldEditorDisplay();
}
microRoadPaintBefore = 0;
scheduleBuildSave(); microToast('道路已铺设');
@@ -5307,8 +5348,16 @@ async function microUnitRest(unitId) {
// 保存角色(金币/背包/装备)到 Odoo
async function updateChar() {
if (!microChar) return;
- const r = await API.saveChar({ gold: microChar.gold, inventory: microChar.inventory, equip: microChar.equip });
- if (r && r.ok && r.char) microChar = r.char;
+ const r = await API.saveChar({
+ gold: microChar.gold, copper: microChar.copper, silver: microChar.silver,
+ diamond: microChar.diamond, inventory: microChar.inventory, equip: microChar.equip
+ });
+ if (r && r.ok && r.char) {
+ microChar = r.char;
+ if (!microChar.equip) microChar.equip = { weapon: null, armor: null, accessory: null };
+ if (!microChar.inventory) microChar.inventory = {};
+ ['gold','copper','silver','diamond'].forEach(k => { if (microChar[k] == null) microChar[k] = 0; });
+ }
}
function closeUnitModal() { microOpenUnitId = null; document.getElementById('unitModal').classList.remove('active'); }
@@ -5413,8 +5462,11 @@ async function microBuildingAct(type, action, label) {
}
// 同步角色金币 / 背包
if (res.gold != null) { microChar = microChar || {}; microChar.gold = res.gold; }
+ if (res.copper != null && microChar) microChar.copper = res.copper;
+ if (res.silver != null && microChar) microChar.silver = res.silver;
+ if (res.diamond != null && microChar) microChar.diamond = res.diamond;
if (res.inventory && microChar) microChar.inventory = res.inventory;
- microRenderCharHud();
+ microRenderCharHud(); updateGoldEditorDisplay();
// 发射任务事件:建筑交互 + 资源产出
const _bkey = type + '_' + action;
emitTaskEvent('building_action', { key: _bkey });
@@ -6611,7 +6663,7 @@ async function microCommitPlace() {
return;
}
if (microChar) microChar.gold = res.gold;
- microRenderCharHud();
+ microRenderCharHud(); updateGoldEditorDisplay();
}
microBuildList().push({ i: g.i, j: g.j, type: microBuildSel, rot: microBuildRot, w: it.w || 1, h: it.h || 1, level: 1, exp: 0, hp: (it.statHp || 100) });
emitTaskEvent('build_placed', { code: microBuildSel });
@@ -8277,6 +8329,8 @@ if (typeof fitWorld === 'function') fitWorld();
microChar = {
name: fresh.name, level: fresh.level, exp: fresh.exp,
exp_max: fresh.exp_max || 100, gold: fresh.gold || 0,
+ copper: fresh.copper || 0, silver: fresh.silver || 0,
+ diamond: fresh.diamond || 0,
equip: fresh.equip || { weapon: null, armor: null, accessory: null },
inventory: fresh.inventory || {}
};