Las Noches

Bulletin

IDENTIFICATION REQUIRED

Bulletin Transmission

News

ACCESSING LAS NOCHES ARCHIVES...

Las Noches

IDENTIFY YOURSELF BEFORE ENTERING THE BULLETIN.

Restricted Access

EDITOR AUTHENTICATION REQUIRED.

Las Noches

...
CLICK TO CONTINUE

LAS NOCHES // EVENT

LAS FOSCAS NOCHES COSTUME SELECTION

In Las Noches, even amusement serves a purpose. This wheel merely hastens the unveiling of your Halloween attire.

ENTER YOUR COSTUME KEY.
window.LNW=window.LNW||{}; LNW.bindKeys=function(){ const W=LNW; /* CHECK REQUIRED ELEMENTS */ if( !W.keyInput || !W.verifyButton || !W.keyStatus ){ console.error('COSTUME KEY ELEMENTS MISSING'); return; } if(W.verifyButton.dataset.bound==='1')return; W.verifyButton.dataset.bound='1'; /* RESET WHEN KEY CHANGES */ W.keyInput.addEventListener('input',()=>{ W.keyReady=false; W.keyValue=''; W.lastAssigned=false; W.keyStatus.textContent= 'VERIFY YOUR KEY BEFORE SPINNING.'; W.refreshAccess(); }); /* VERIFY KEY */ W.verifyButton.addEventListener('click',async e=>{ e.preventDefault(); if(W.busy)return; if(!W.isEligible()){ W.keyStatus.textContent= 'ARRANCAR IDENTIFICATION REQUIRED.'; return; } const key=W.keyInput.value.trim(); if(key.length<12||key.length>80){ W.keyStatus.textContent= 'KEY MUST CONTAIN 12–80 CHARACTERS.'; return; } W.busy=true; W.keyReady=false; W.keyValue=''; W.refreshAccess(); W.keyStatus.textContent= 'CHECKING KEY...'; try{ const r=await LN.api( 'rpc/check_costume_key', { method:'POST', body:JSON.stringify({ p_key:key, p_arrancar_name:LN.visitorName }) } ); if(r.status==='ready'){ W.keyValue=key; W.keyReady=true; W.lastAssigned=false; W.keyStatus.textContent= 'KEY ACCEPTED. ONE SPIN AVAILABLE.'; W.result.textContent= 'READY TO RECEIVE YOUR COSTUME.'; }else if(r.status==='claimed'){ W.keyReady=false; W.keyValue=''; W.lastAssigned=true; W.keyStatus.textContent= 'THIS KEY HAS ALREADY BEEN USED.'; W.result.textContent= 'PREVIOUS ASSIGNMENT: '+r.costume; }else{ W.keyStatus.textContent= 'INVALID KEY.'; } }catch(error){ console.error('KEY VERIFICATION ERROR:',error); W.keyStatus.textContent= 'VERIFICATION FAILED. CHECK CONNECTION.'; }finally{ W.busy=false; W.refreshAccess(); } }); /* PERMANENT COSTUME ASSIGNMENT */ W.claim=async function(){ if( !W.isEligible()|| !W.keyReady|| W.busy|| W.spinning )return; W.busy=true; W.refreshAccess(); W.result.textContent= 'LOCKING IN YOUR COSTUME...'; try{ const r=await LN.api( 'rpc/claim_costume_key', { method:'POST', body:JSON.stringify({ p_key:W.keyValue, p_arrancar_name:LN.visitorName }) } ); W.keyReady=false; W.keyValue=''; if( r.status==='assigned'&& Array.isArray(r.options) ){ W.busy=false; W.animate(r.index,r.options); return; } if(r.status==='claimed'){ W.lastAssigned=true; W.keyStatus.textContent= 'THIS KEY HAS ALREADY BEEN USED.'; W.result.textContent= 'PREVIOUS ASSIGNMENT: '+r.costume; }else if(r.status==='empty'){ W.result.textContent= 'NO COSTUMES AVAILABLE.'; }else{ W.result.textContent= 'INVALID KEY OR ASSIGNMENT FAILED.'; } }catch(error){ console.error('COSTUME CLAIM ERROR:',error); W.result.textContent= 'CONNECTION ERROR. VERIFY YOUR KEY AGAIN.'; }finally{ W.busy=false; W.refreshAccess(); } }; };