// === Shortcode [duel_it_fr] : Duel Italie vs France (HTML + JS inline) ===
add_action(‘init’, function(){
add_shortcode(‘duel_it_fr’, function(){
ob_start(); ?>
🇮🇹 Italien
GÉNÉRER
—
🇫🇷 Français
GÉNÉRER
—
| Stat |
🇮🇹 Italien |
🇫🇷 Français |
đź§Ş Simulation
Seed : —
Score : —
Lance un match pour voir les temps forts.
>>19)}return function(){h=Math.imul(h^(h>>>16),2246822507);h=Math.imul(h^(h>>>13),3266489909);return (h^=h>>>16)>>>0}}
function mulberry32(a){return function(){let t=a+=0x6D2B79F5;t=Math.imul(t^(t>>>15),t|1);t^=t+Math.imul(t^(t>>>7),t|61);return ((t^(t>>>14))>>>0)/4294967296}}
const clamp=(n,min,max)=>Math.max(min,Math.min(max,n));const pick=(arr,r)=>arr[Math.floor(r()*arr.length)];const toPct=v=>Math.round(v);
function genStatsForName(name){const seed=xmur3(name)();const rnd=mulberry32(seed);const base={vitesse:clamp(40+rnd()*60+(rnd()-0.5)*12,35,98),technique:clamp(45+rnd()*55+(rnd()-0.5)*14,35,99),endurance:clamp(50+rnd()*45+(rnd()-0.5)*10,40,95),puissance:clamp(40+rnd()*55+(rnd()-0.5)*14,35,96),vision:clamp(45+rnd()*50+(rnd()-0.5)*12,35,97),finition:clamp(40+rnd()*55+(rnd()-0.5)*16,30,99),defense:clamp(40+rnd()*55+(rnd()-0.5)*16,30,98)};const legends=[« Zinedine Zidane », »Michel Platini », »Thierry Henry », »Paolo Maldini », »Franco Baresi », »Roberto Baggio », »Francesco Totti », »Andrea Pirlo », »Gianluigi Buffon »];if(legends.includes(name)){base.technique=clamp(base.technique+8,35,99);base.vision=clamp(base.vision+7,35,99)}const ovr=Math.round(0.18*base.technique+0.16*base.vitesse+0.14*base.endurance+0.14*base.puissance+0.14*base.vision+0.12*base.finition+0.12*base.defense);return {name,seed,…Object.fromEntries(Object.entries(base).map(([k,v])=>[k,toPct(v)])),ovr}}
function statBar(label,value){return ‘
‘}
function boot(){
const root=document.getElementById(‘duel-it-fr’); if(!root) return;
const selIT=document.getElementById(‘select-it’); const selFR=document.getElementById(‘select-fr’);
italians.forEach(n=>{const o=document.createElement(‘option’);o.value=n;o.textContent=n;selIT.appendChild(o)}); french.forEach(n=>{const o=document.createElement(‘option’);o.value=n;o.textContent=n;selFR.appendChild(o)});
const nameIT=document.getElementById(‘name-it’),nameFR=document.getElementById(‘name-fr’);
const statsIT=document.getElementById(‘stats-it’),statsFR=document.getElementById(‘stats-fr’);
const ovrIT=document.getElementById(‘ovr-it’),ovrFR=document.getElementById(‘ovr-fr’);
const tbody=document.getElementById(‘tbody-compare’);
const eventsEl=document.getElementById(‘events’),scoreEl=document.getElementById(‘score’),bilanEl=document.getElementById(‘bilan’),seedEl=document.getElementById(‘seed’);
let P1=null,P2=null;
function renderPlayers(){ if(!P1||!P2) return;
nameIT.textContent=P1.name; nameFR.textContent=P2.name; ovrIT.textContent=’OVR ‘+P1.ovr; ovrFR.textContent=’OVR ‘+P2.ovr;
statsIT.innerHTML=statBar(‘Vitesse’,P1.vitesse)+statBar(‘Technique’,P1.technique)+statBar(‘Endurance’,P1.endurance)+statBar(‘Puissance’,P1.puissance)+statBar(‘Vision’,P1.vision)+statBar(‘Finition’,P1.finition)+statBar(‘DĂ©fense’,P1.defense);
statsFR.innerHTML=statBar(‘Vitesse’,P2.vitesse)+statBar(‘Technique’,P2.technique)+statBar(‘Endurance’,P2.endurance)+statBar(‘Puissance’,P2.puissance)+statBar(‘Vision’,P2.vision)+statBar(‘Finition’,P2.finition)+statBar(‘DĂ©fense’,P2.defense);
const rows=[[‘Vitesse’,P1.vitesse,P2.vitesse],[‘Technique’,P1.technique,P2.technique],[‘Endurance’,P1.endurance,P2.endurance],[‘Puissance’,P1.puissance,P2.puissance],[‘Vision’,P1.vision,P2.vision],[‘Finition’,P1.finition,P2.finition],[‘DĂ©fense’,P1.defense,P2.defense],[‘OVR’,P1.ovr,P2.ovr]];
tbody.innerHTML=rows.map((r,i)=>{const style=’padding:10px 12px;border-bottom:1px solid #e5e7eb;’;const last=i===rows.length-1;return ‘
| ‘+r[0]+’ | ‘+r[1]+’ | ‘+r[2]+’ |
‘}).join( »);
}
function clearMatch(){ eventsEl.innerHTML= »; scoreEl.textContent=’Score : —’; bilanEl.textContent=’Lance un match pour voir les temps forts.’; }
function drawRandom(){ const nowSeed=String(Date.now()); const r=mulberry32(xmur3(nowSeed)()); const nIT=selIT.value||pick(italians,r); const nFR=selFR.value||pick(french,r); P1=genStatsForName(nIT); P2=genStatsForName(nFR); renderPlayers(); clearMatch(); seedEl.textContent=’Seed : ‘+nowSeed; }
function simulate(){ if(!P1||!P2){drawRandom()} const seedBase=P1.seed^P2.seed; const rnd=mulberry32(seedBase);
const w=rnd(); const meteo=w<.25?'pluie fine':w<.5?'sec':w<.75?'venteux':'lourd et orageux'; const meteoMod=w<.25?-2:w<.5?0:w<.75?-1:-3;
const atk1=0.45*P1.technique+0.25*P1.vitesse+0.15*P1.finition+0.15*P1.vision; const def1=0.4*P1.defense+0.3*P1.endurance+0.3*P1.puissance;
const atk2=0.45*P2.technique+0.25*P2.vitesse+0.15*P2.finition+0.15*P2.vision; const def2=0.4*P2.defense+0.3*P2.endurance+0.3*P2.puissance;
let g1=0,g2=0; let minutes=[6,14,23,31,44,52,61,73,81,89]; let lines=['Coup d\\u2019envoi. Conditions : '+meteo+'.'];
minutes.forEach(m=>{ const chance1=(atk1-0.85*def2+(rnd()*20-10)+meteoMod)/100; const chance2=(atk2-0.85*def1+(rnd()*20-10)+meteoMod)/100;
const pOcc1=Math.max(0.05,Math.min(0.6,0.22+chance1)); const pOcc2=Math.max(0.05,Math.min(0.6,0.22+chance2));
const who=rnd();
if(who<0.5 && rnd()
=0.5 && rnd()g2?(‘Victoire italienne de ‘+P1.name+’ âś…’):g2>g1?(‘Victoire française de ‘+P2.name+’ âś…’):(‘Match nul entre ‘+P1.name+’ et ‘+P2.name+’ 🤝’);
document.getElementById(‘bilan’).textContent=verdict; document.getElementById(‘seed’).textContent=’Seed : ‘+seedBase+’ • mĂ©tĂ©o: ‘+meteo;
document.getElementById(‘events’).innerHTML=lines.map(li=>’‘+li+’‘).join( »);
}
document.getElementById(‘btn-random’).addEventListener(‘click’,drawRandom);
document.getElementById(‘btn-sim’).addEventListener(‘click’,simulate);
document.getElementById(‘btn-reset’).addEventListener(‘click’,function(){
selIT.value= »; selFR.value= »; P1=null; P2=null; nameIT.textContent=’—’; nameFR.textContent=’—’;
statsIT.innerHTML= »; statsFR.innerHTML= »; ovrIT.textContent=’GÉNÉRER’; ovrFR.textContent=’GÉNÉRER’;
document.getElementById(‘tbody-compare’).innerHTML= »; document.getElementById(‘events’).innerHTML= »;
document.getElementById(‘score’).textContent=’Score : —’; document.getElementById(‘bilan’).textContent=’Lance un match pour voir les temps forts.’; document.getElementById(‘seed’).textContent=’Seed : —’;
});
// Tirage initial
drawRandom();
}
if(document.readyState===’loading’){document.addEventListener(‘DOMContentLoaded’,boot);} else {boot();}
})();
JS;
wp_add_inline_script(‘duel-it-fr-empty’, $js);
return $html;
});
});