: start it once the body exists (in it threw "appendChild of null" and never resolved)
window.cgInit = new Promise((resolve) => {
const go = async () => {
let ok = false;
try { await window.CrazyGames.SDK.init(); window.CrazyGames.SDK.game.loadingStart(); ok = true; }
catch (e) { console.log('cg init', e); }
window.cgOk = ok; window.cgDone = true; resolve(ok);
};
if (document.body) go(); else document.addEventListener('DOMContentLoaded', go);
});
window.cgCall = (n) => window.cgInit.then((ok) => { try { if (ok) window.CrazyGames.SDK.game[n](); } catch (e) {} });
window.cgAd = () => {
window.cgAdBusy = true;
const done = () => { window.cgAdBusy = false; };
const t = setTimeout(done, 3000); // SDK не ответил — не держим игрока
window.cgInit.then((ok) => {
clearTimeout(t);
if (!ok) return done();
try { window.CrazyGames.SDK.ad.requestAd('midgame', { adStarted: () => {}, adFinished: done, adError: done }); }
catch (e) { done(); }
});
};
window.cgRewardState = 0; // 0 idle, 1 showing, 2 rewarded, 3 failed / skipped
window.cgReward = () => {
window.cgRewardState = 1;
const t = setTimeout(() => { if (window.cgRewardState === 1) window.cgRewardState = 3; }, 45000);
const fin = (s) => { clearTimeout(t); if (window.cgRewardState === 1) window.cgRewardState = s; };
Promise.race([window.cgInit, new Promise((r) => setTimeout(() => r(false), 6000))]).then((ok) => {
if (!ok) return fin(3);
try { window.CrazyGames.SDK.ad.requestAd('rewarded', { adStarted: () => {}, adFinished: () => fin(2), adError: () => fin(3) }); }
catch (e) { fin(3); }
});
};