IDENTIFICATION REQUIRED
News
ACCESSING LAS NOCHES ARCHIVES...
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.
one costume per line or separated by commas.
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(); } }; };