✨ 游玩权限验证 ✨
推演流速设定 (右上角按钮生效):
选择未发行新歌作为加曲:
分成方案 (公司/艺人):
年限 (年):
没有可拍MV的单曲
"; } window.shootMV = function(tid, type){ if(!costEnergy(10)) return; let t = trackPool.find(function(x){return x.id===tid}); if(!t) return; if(t.weeks > 12) return alert("⚠️ 这首歌发行已超过 12 周,错过了拍摄MV宣发的最佳时机,无法再拍MV了!"); let cost = type==1 ? 10000 : 2000; if(ad.m < cost) return alert("资金不足!"); ad.m -= cost; if(type==1) advHour(24); let Smv = Math.floor(Math.random()*50)+50; let loc = type==1 ? (Math.random()*0.4+0.8) : 0; let bonus = (Smv*0.5 + (cost/1000)*0.22 + type*loc*0.28) * ad.Geffect; let decay = Math.pow(0.72, t.mvN || 0); t.mvN = (t.mvN||0) + 1; let finalAdd = Math.floor(bonus * decay * 10000); t.stm += finalAdd; t.stmDly += Math.floor(finalAdd/7); let extraSl = Math.floor(finalAdd/150); t.slTotal += extraSl; t.slWk += extraSl; t.pts = t.slTotal + Math.floor(t.stm/1500) + Math.floor(t.rad/3000); t.stmY += finalAdd; t.stmD += finalAdd; ad.st.h += 5; updAttr(); updatePeakRanks(); renderMVMap(); saveGame(); alert(`🎬 MV拍摄完成!最终带来 ${finalAdd.toLocaleString()} 流媒爆发!`); } window.doTVPromo = function(){ if(!costEnergy(10)) return; let myTrks = trackPool.filter(function(x){return x.isMe && x.type==="track" && x.weeks<=12}); if(!myTrks.length) { alert("⚠️ 没有处于宣发期(发行12周以内)的新歌,电视台拒绝了你的打歌申请!"); return; } advHour(24); let t = myTrks.sort(function(a,b){return b.stm - a.stm})[0]; let extraStm = Math.floor(t.stm * 0.15 * ad.Geffect + 50000); t.stm += extraStm; t.slTotal += Math.floor(extraStm/150); t.pts += Math.floor(extraStm/1500); alert(`📺 打歌成功!近期新歌《${t.n}》流媒激增 ${extraStm.toLocaleString()}!`); updatePeakRanks(); saveGame(); } window.doTour = function(){ let currentMonthAbs = time.y * 12 + time.m; if (ad.lastTourMonth && (currentMonthAbs - ad.lastTourMonth < 6)) { return alert("✈️ 巡演过于频繁!团队和粉丝都需要休息,至少间隔半年才能再次开启全球巡演。"); } if(!costEnergy(30)) return; advTime(7, false); let ctry = escapeHTML($("selTourCountry").value); if(ctry==="custom") ctry = escapeHTML($("inTourCustom").value) || "未知国家"; ad.lastTourMonth = currentMonthAbs; let gainM = Math.floor(ad.st.f * 0.05 + 100000); let gainF = Math.floor(ad.st.f * 0.02 + 5000); ad.m += gainM; ad.st.f += gainF; let msg = `✈️ 在【${ctry}】的巡演圆满结束!\n门票狂赚 $${gainM.toLocaleString()},吸粉 ${gainF.toLocaleString()}!`; let myTrks = trackPool.filter(function(x){return x.isMe && x.type==="track" && x.weeks<=12}); if(myTrks.length){ let t = myTrks.sort(function(a,b){return b.stm - a.stm})[0]; let extraStm = Math.floor(t.stm * 0.25 * ad.Geffect); t.stm += extraStm; t.slTotal += Math.floor(extraStm/150); t.pts += Math.floor(extraStm/1500); msg += `\n🎸 触发【打单效应】!新曲流媒暴增 ${extraStm.toLocaleString()}!`; } updAttr(); updatePeakRanks(); saveGame(); alert(msg); } // ==================== 企划制作 (单曲内核系统) ==================== window.aiGenName = async function(type, targetId){ let btn = event.target; btn.innerText="..."; let r = await api(`随机生成一个带有欧美流行/摇滚质感的${type=="song"?"英文单曲名":"英文专辑名"},只要名字,不要引号和多余解释。`); btn.innerText="AI 取名"; if(r) $(targetId).value = r.trim().replace(/["']/g,""); } window.startWrite = function(){ if(curPj) return alert("有正在进行的企划!"); if(!costEnergy(10)) return; let n = escapeHTML($("inSName").value) || "Demo"; let ff = parseInt($("inFeat")?$("inFeat").value:0) || 0; if(ff>0) n += " (Feat.)"; // 获取歌曲内核 let core = escapeHTML(document.getElementById("inSCore") ? document.getElementById("inSCore").value : ""); curPj = {type: "write", n: n, g: [...selG], c: escapeHTML($("inSCustom").value), core: core, ff: ff}; prog=0; $("txtProg").innerText="0%"; $("barProg").style.width="0%"; $("boxWriteProgress").style.display="block"; $("btnStartWriteProj").style.display="none"; alert(`企划立项:${n}。已扣除10精力。`); saveGame(); } window.writeSongStep = function(){ if(!curPj) return; if(!costEnergy(10)) return; advHour(1); prog += Math.floor(Math.random()*11)+20; if(prog>=100){ prog=100; lib.push({id:"lb_"+Date.now(), n:curPj.n, g:[...curPj.g], c:curPj.c, core:curPj.core, ff: curPj.ff}); alert(`✅ 创作完毕:${curPj.n}`); curPj=null; setTimeout(function(){$("txtProg").innerText="0%"; $("barProg").style.width="0%"; $("boxWriteProgress").style.display="none"; $("btnStartWriteProj").style.display="block";},1000); renderLib(); saveGame(); } else { $("txtProg").innerText=prog+"%"; $("barProg").style.width=prog+"%"; } } function renderLib(){ $("listLib").innerHTML=lib.map(function(x,i){return `${t}
`; if(curImgBase64){h+=`