// ==UserScript==
// @name Kogama Console
// @run-at document-start
// @version 0.1 alpha
// @description kogama console
// @author Exnonull
// @match https://www.kogama.com/page/webgl-frame/*
// @match https://kogama.com.br/page/webgl-frame/*
// @match https://friends.kogama.com/page/webgl-frame/*
// @grant none
// @namespace https://greasyfork.org/users/668500
// ==/UserScript==
/*sniffers*/
WS_Original = WebSocket;
WebSocket = function(url, type){
let ws = new WS_Original(url, type);
kcc.ws = ws;
ws._send = ws.send;
ws.send = kcc.injectClient;
kcc.logClient('injected client');
function waitServer(e){
kcc.injectServer(e);
if(!this.editServer){
this.removeEventListener('message', waitServer);
this._msg = this.onmessage;
this.onmessage = kcc.injectServer;
}
kcc.logServer('injected server');
}
ws.addEventListener('message', waitServer);
return ws;
};
/*Utils*/
Uint8Array.prototype.equals=
Array.prototype.equals=function(array){
if(!(array&&this.length==array.length))return false;
for(var i=0,l=this.length;i<l;i++){
if(this[i] instanceof Array&&array[i] instanceof Array){
if(!this[i].equals(array[i]))return false;
}else if(this[i]!=array[i]){return false;}
}
return true;
}
Object.defineProperty(window.Uint8Array.prototype,"equals",{enumerable:false});
Object.defineProperty(window.Array.prototype,"equals",{enumerable:false});
decode=d=>new TextDecoder().decode(d);
encode=d=>new TextEncoder().encode(d);
top.toByte16=toByte16=num=>new Uint8Array(new Uint16Array([num]).buffer).reverse();
top.toNum16Sign=toNum16Sign=nums=>new Int16Array(new Uint8Array(nums).reverse().buffer)[0];
top.toNum16=toNum16=nums=>new Uint16Array(new Uint8Array(nums).reverse().buffer)[0];
top.unsign16=unsign16=num=>new Uint16Array([num])[0];
top.toByte32=toByte32=num=>new Uint8Array(num?new Uint32Array([num]).buffer:[]).reverse();
top.toNum32=toNum32=nums=>new Uint32Array(nums?new Uint8Array(nums).reverse().buffer:0)[0];
getJSON=str=>{
let pos=0,left=0,i=0,arr=[];
while(i++<str.length){
if(str[i]=='{'&&str[i+1]=='"'){
if(!left)pos=i;
left++;
}
if(str[i]=='}'){
if(left>0){
left--;
if(!left)arr.push(str.slice(pos,i+1));
}
}
}
return arr.map(a=>JSON.parse(a));
}
top.format=format=str=>{//ff0011->[255,0,17]
let rez=[];
let n=0;
for(let i=0;i<str.length;i++){
rez.push(str[i]);
if((i+2-n)%3==0){n+=2;rez.push(" ");}
}
rez.pop();
return new Uint8Array(rez.join('').split(' ').map(n=>parseInt(n,16)))
};
/*kogama console*/
{
window.html=top.html=id=>top.document.getElementById(id);
window.make=top.make=tag=>top.document.createElement(tag);
window.kc=top.kc={green:'#43B581',red:'#F04747',blue:'#72A9DA',
cubegun:()=>{
kcc.ws._send(new Uint8Array([
243,2,25,0,2,22,105,...toByte32(kcc.self),70,68,0,0,0,1,115,0,11,99,117,114,114,101,110,116,73,116,101,109,68,0,0,0,4,115,0,4,116,121,112,101,105,0,0,0,11,115,0,9,118,97,114,105,97,110,116,73,100,105,0,0,0,0,115,0,15,117,112,100,97,116,101,73,116,101,109,83,116,97,116,101,105,0,0,0,4,115,0,8,105,116,101,109,68,97,116,97,68,0,0,0,1,115,0,8,109,97,116,101,114,105,97,108,98,20
]));
kcc.ws._msg({data:new Uint8Array([
243,4,29,0,3,22,105,...toByte32(kcc.self),70,68,0,0,0,1,115,0,11,99,117,114,114,101,110,116,73,116,101,109,68,0,0,0,4,115,0,4,116,121,112,101,105,0,0,0,11,115,0,9,118,97,114,105,97,110,116,73,100,105,0,0,0,0,115,0,15,117,112,100,97,116,101,73,116,101,109,83,116,97,116,101,105,0,0,0,4,115,0,8,105,116,101,109,68,97,116,97,68,0,0,0,1,115,0,8,109,97,116,101,114,105,97,108,98,20,254,105,0,0,0,0
]).buffer});
},
action:(actionId,PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,actionId])),
freeze:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,11])),
damadge:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,10])),
heal:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,27])),
big:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,17])),
small:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,16])),
mutant_kill:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,6])),
rail_kill:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,2,27,0,2,22,105,...toByte32(PID),83,68,0,0,0,1,98,0,120,0,0,0,2,1,4])),
invisible:(PID=kcc.self)=>kcc.ws.send(new Uint8Array([243,4,2,0,8,22,105,0,3,...toByte32(PID),70,68,0,0,0,1,115,0,17,115,112,97,119,110,82,111,108,101,77,111,100,101,84,121,112,101,105,0,0,0,4])),
finish:()=>kcc.ws.send(new Uint8Array([243,2,23,0,1,191,105,0,3,0,0])),
log:(msg,clr='#FFF')=>{
if(html('console_log').lastChild&&msg==html('console_log').lastChild.textContent){
let counter=html('console_log').lastChild.children[0];
if(counter){
counter.value=1+Number(counter.value);
}else{
counter=make('input');
counter.style=`height:20px;width:20px;
text-align:center;padding:0px;
background:${kc.green};color:#FFFA;
border:none;border-radius:100%;cursor:default;`;
counter.value=2;
counter.disabled=true;
html('console_log').lastChild.appendChild(counter)
}
return;
}
let scroll=html('console_log').scrollTop/(html('console_log').scrollHeight-html('console_log').offsetHeight);
if(isNaN(scroll)||scroll>0.9)scroll=true;
else scroll=false;
let el=make('div');
el.style='padding:2% 1% 0px 2%;width:100%;color:'+clr+';';
el.textContent=msg;
html('console_log').appendChild(el);
if(scroll)html('console_log').scrollTop=html('console_log').scrollHeight-html('console_log').offsetHeight;
},
command:str=>{
kc.log(str,'#FFF8');
}
};
window.makeCheat=top.makeCheat=(name='unknown',clr='#888',func=()=>{})=>{
let el=make('input');
el.id=name;
el.value=name;
el.className='cheat_element';
el.type='button';
el.style=`color:${clr};background-color:#4f545c;border-radius:10px;border:none;padding:2px;`;
el.addEventListener('click',func);
html('cheat_box').appendChild(el);
};
window.addBB=top.addBB=(name='unknown',id='unknown',box='unknown_box',choosen=0)=>{
let el=make('div');
el.id=box;
el.style=`
position:absolute;
display:${choosen?'block':'none'};
width:75%;height:90%;
top:10%;
right:0px;
`;
html('console').appendChild(el);
el=make('div');
el.id='console_bar_'+id;
el.className='bar_element bar_element_'+(choosen?'on':'off');
el.textContent=name;
el.addEventListener('click',function(e){
if(this!=html('console_bar').cur){
html(box).style.display='block';
html('console').cur.style.display='none';
html('console').cur=html(box);
this.className='bar_element bar_element_on';
html('console_bar').cur.className='bar_element bar_element_off';
html('console_bar').cur=this;
}
});
html('console_bar').appendChild(el);
};
var sheet=top.document.head.appendChild(make('style')).sheet;
sheet.insertRules=rules=>rules.replace(/\}/g,'}^').split('^').map(r=>(r.indexOf('{')+1)&&sheet.insertRule(r));
sheet.insertRules(`
.scroller{overflow-y:auto;}
.scroller::-webkit-scrollbar{
width:10px;
}
.scroller::-webkit-scrollbar-thumb{
background-color:rgba(0,0,0,.4);
-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.5);
box-shadow:inset 0 0 2px rgba(0,0,0,.5);
}
.scroller::-webkit-scrollbar-track{
background-color:rgba(0,0,0,.3);
}
.scroller::-webkit-scrollbar-thumb{
background:#000;
}
.bar_element:hover{
opacity:0.9;
background:#40444bAA;
transition-duration: 0.3s;
}
.bar_element{
color:#FFF;
line-height: 200%;
cursor:pointer;
height:10%;
width:100%;
}
.cheat_element:hover{
color:#FFF !important;
}
.bar_element_off{
opacity:0.5;
background:#0000;
}
.bar_element_on{
opacity:1;
background:#40444b;
}
`);
let el=make('div');
top.document.body.appendChild(el);
el.id='console';
el.style=`
position:fixed;
display:none;
z-index:9999;
background-color:#36393f;
text-align:center;
border-radius:10px;
border:3px #36393F solid;
`;
top.addEventListener('resize',function(){
html('console').style.width=top.outerWidth*0.35+'px';
html('console').style.height=top.outerHeight*0.35+'px';
});
top.dispatchEvent(new Event('resize'));
top.document.addEventListener('mouseup',e=>{
if(html('console').movement){
html('console').movement=false;
e.preventDefault();
e.stopPropagation();
}
})
top.document.addEventListener('mousemove',e=>{
if(html('console').movement){
html('console').style.left=(html('console').startPos.x+e.x-html('console').startPos.mx)+'px';
html('console').style.top=(html('console').startPos.y+e.y-html('console').startPos.my)+'px';
if(html('console').offsetTop<0)html('console').style.top='0px';
e.preventDefault();
e.stopPropagation();
}
});
top.document.addEventListener('contextmenu', e=>{
if(e.target==top.document.querySelector('#profile-extended-toggle>a>i')){
html('console').style.display='block';
e.preventDefault();
}
});
el=make('div');
el.id='console_head';
el.innerHTML='KoGaMa Cheat Console by Exnonull';
el.style=`
width:100%;height:10%;
background-color:#202225;
cursor:default;
border-top-left-radius:10px;
border-top-right-radius:10px;
`;
html('console').appendChild(el);
html('console_head').addEventListener('mousedown',e=>{
html('console').movement=true;
html('console').startPos={x:html('console').offsetLeft,y:html('console').offsetTop,mx:e.x,my:e.y};
e.preventDefault();
e.stopPropagation();
});
el=make('input');
el.id='console_close';
el.type='button';
el.value='X';
el.style=`
position:absolute;
height:10%;width:10%;
right:0px;
background-color:${kc.red};
color:#FFF;line-height:0.5;
border:none;
border-top-right-radius:10px;
`;
html('console_head').appendChild(el);
html('console_close').addEventListener('mousedown',e=>{
if(e.which==1){
pos={x:html('console').offsetLeft,y:html('console').offsetTop};
html('console').style.display='none';
html('console').style.left=pos.x+'px';
html('console').style.top=pos.y+'px';
}
e.preventDefault();
e.stopPropagation();
});
el=make('div');
el.id='console_bar';
el.style=`
position:absolute;
top:10%;left:0px;
width:25%;height:90%;
background-color:#2f3136;
`;
html('console').appendChild(el);
addBB('Console','console','console_box',1);
html('console').appendChild(el);
el=make('input');
el.id='console_input';
el.placeholder='Enter command...';
el.style=`
position:absolute;
width:95%;height:10%;
bottom:2.5%;right:2.5%;
background-color:#4f545c;
border:none;color:#FFF8;
border-radius:15px;
text-align:center;
cursor:text;
`;
html('console_box').appendChild(el);
html('console_input').index=-1;
html('console_input').old=[];
html('console_input').addEventListener('keydown',function(e){
switch(e.keyCode){
case 13:
if(this.value){
kc.command(this.value);
if(this.old[this.old.length-1]!=this.value)this.old.push(this.value);
if(this.old>30)this.old.splice(0,1);
this.was=undefined;
this.index=this.old.length;
this.value='';
}
break;
case 38://up
this.index-=2;
case 40://down
this.index++;
if(this.index>this.old.length-1)this.index=this.old.length;
if(this.index<0)this.index=0;
if(this.index>this.old.length-1){
if(this.was!==undefined)this.value=this.was;
this.was=undefined;
}else{
if(this.was===undefined)this.was=this.value;
this.value=this.old[this.index];
}
break;
}
});
el=make('div');
el.id='console_log';
el.className='scroller';
el.style=`
position:absolute;
text-align:left;
width:100%;height:85%;
word-break:break-all;
`;
html('console_box').appendChild(el);
html('console').cur=html('console_box');
html('console_bar').cur=html('console_bar_console');
addBB('Cheat List','list','cheat_box');
html('cheat_box').className='scroller';
makeCheat('finish',kc.blue,()=>kc.finish());
makeCheat('mutant kill',kc.red,()=>Object.keys(kcc.names).map(n=>kcc.self!=kcc.names[n]&&kc.mutant_kill(kcc.names[n])));
makeCheat('rail kill',kc.red,()=>Object.keys(kcc.names).map(n=>kcc.self!=kcc.names[n]&&kc.rail_kill(kcc.names[n])));
makeCheat('autodamadge',kc.red,()=>{
if(kc.idDamadge){clearInterval(kc.idDamadge);kc.idDamadge=0;}
else kc.idDamadge=setInterval(()=>Object.keys(kcc.names).map(n=>kc.damadge(kcc.names[n])),5e2);
});
makeCheat('autofreeze',kc.green,()=>{
if(kc.idFreeze){clearInterval(kc.idFreeze);kc.idFreeze=0;}
else kc.idFreeze=setInterval(()=>Object.keys(kcc.names).map(n=>kc.freeze(kcc.names[n])),5e2);
});
makeCheat('autoheal',kc.green,()=>{
if(kc.idHeal){clearInterval(kc.idHeal);kc.idHeal=0;}
else kc.idHeal=setInterval(()=>Object.keys(kcc.names).map(n=>kc.heal(kcc.names[n])),2e2);
});
makeCheat('autobig',kc.green,()=>{
if(kc.idBig){clearInterval(kc.idBig);kc.idBig=0;}
else kc.idBig=setInterval(()=>Object.keys(kcc.names).map(n=>kc.big(kcc.names[n])),5e2);
});
makeCheat('autosmall',kc.green,()=>{
if(kc.idSmall){clearInterval(kc.idSmall);kc.idSmall=0;}
else kc.idSmall=setInterval(()=>Object.keys(kcc.names).map(n=>kc.small(kcc.names[n])),5e2);
});
makeCheat('heal',kc.green,()=>kc.heal());
document.addEventListener('keydown',e=>{
switch(e.key){
case '`':
kc.cubegun();
break;
case '-':
kc.small();
break;
case '+':
kc.big();
break;
}
});
makeCheat('big',kc.green,()=>kc.big());
makeCheat('small',kc.green,()=>kc.small());
makeCheat('cubegun',kc.blue,()=>kc.cubegun());
makeCheat('cubenormal',kc.blue,()=>kcc.cubeMode=0);
makeCheat('cubeplane',kc.blue,()=>kcc.cubeMode=1);
makeCheat('cubegiant',kc.blue,()=>kcc.cubeMode=2);
makeCheat('cuberoom',kc.blue,()=>kcc.cubeMode=3);
makeCheat('cubexm',kc.blue,()=>kcc.cubeMode=4);
makeCheat('cubexp',kc.blue,()=>kcc.cubeMode=5);
makeCheat('cubezm',kc.blue,()=>kcc.cubeMode=6);
makeCheat('cubezp',kc.blue,()=>kcc.cubeMode=7);
makeCheat('normal',kc.blue,()=>kcc.cubeId=0);
makeCheat('superbounce',kc.blue,()=>kcc.cubeId=kcc.superbounce);
makeCheat('ice',kc.blue,()=>kcc.cubeId=kcc.ice);
makeCheat('poison',kc.blue,()=>kcc.cubeId=kcc.poison);
makeCheat('magma',kc.blue,()=>kcc.cubeId=kcc.magma);
makeCheat('bounce',kc.blue,()=>kcc.cubeId=kcc.bounce);
makeCheat('blackice',kc.blue,()=>kcc.cubeId=kcc.blackice);
}
/*Kogama Cheat Client*/
window.kcc=top.kcc={
ws:{},
self:0,
pos:[0,0,0],
names:{},
parts:[],
cubeSize:4,
cubeD:1812,
superbounce:1846,
poison:1820,
blackice:1835,
ice:1817,
magma:1818,
bounce:1819,
cubeId:0,
cubeXZ:10,
roomSize:4,
cubeMode:0,
cubeWay:50,
cubeServer:(randomId=kcc.self,x=0,y=0,z=0,material)=>new Uint8Array([243,4,10,0,3,47,105,...toByte32(randomId),49,120,0,0,0,...(material?[9,2]:[7,0]),...toByte16(x),...toByte16(y),...toByte16(z),...(material?toByte16(material):[]),254,105,0,0,0,material?3:1]),
cube:(randomId=kcc.self,x=0,y=0,z=0,material)=>new Uint8Array([243,2,7,0,2,47,105,...toByte32(randomId),49,120,0,0,0,...(material?[9,2]:[7,0]),...toByte16(x),...toByte16(y),...toByte16(z),...(material?toByte16(material):[])]),
logClient:(msg,...items)=>{
console.log.apply(console,['%c'+msg,"background-color:#0808;",...items]);
},
logServer:(msg,...items)=>{
console.log.apply(console,['%c'+msg,"background-color:#F808;",...items]);
},
injectClient:function(data){
data = new Uint8Array(data);
data = kcc.separator(data);
if(data)this._send(data);
},
injectServer:function(e){
let data = new Uint8Array(e.data);
if(this != kcc.ws){
kcc.logServer(`wait injection: [${data.toString()}]`);
return;
}
data = kcc.separator(data);
if(data)this._msg({data:data.buffer});
}
};
/*requests separating*/
kcc.no_sense=data=>{
if(data.length<7)return true;//not action
return false;
/*
if(data.equals([243,4,81,0,0])){//each tick
//kcc.logServer('short_ping');
return true;
}else if(data.equals([243,2,58,0,0])){//1 time
//kcc.logClient('short_ping(1)');
return true;
}else if(data.equals([243,2,102,0,0])){//1 time
//kcc.logClient('short_ping(2)');
return true;
}else if(data.equals([243,2,95,0,0])){//1 time
//kcc.logClient('short_ping(3)');//build->game, once
return true;
}else if(data.equals([243,1,0])){//1 time
kcc.logServer('open connection');
return true;
}
*/
}
kcc.separator=data=>{
if(kcc.no_sense(data))return data;
head = data.slice(0,7);//[243, (client:2|6, server:4|7), actionId(u32), 105]
reqId = head.slice(2,6);
/*
2,6 - client
4,7 - server
*/
source = (head[1]==2||head[1]==6)?"client":"server";
return new Uint8Array([...head, ...kcc[source+"Separator"](toNum32(reqId), data.slice(7))]);
}
kcc.clientSeparator=(reqId,data)=>{
switch(reqId){
case 117441071://[7,0,2,47] 26->19 bytes
let id=toNum32(data.slice(0,4));
let material=toNum16(data.slice(17,19));
let x=toNum16Sign(data.slice(11,13));
let y=toNum16Sign(data.slice(13,15));
let z=toNum16Sign(data.slice(15,17));
//kc.log(`cubegun:{id:${id},x:${x},y:${y},z:${z},material:${material}}`,'#080');
if(kcc.cubeMode){
let arr=[];
if(kcc.cubeMode==1){//plane
for(let i=x-kcc.cubeXZ;i<=x+kcc.cubeXZ;i++)
for(let i2=y-1;i2<=y-1;i2++)
for(let i3=z-kcc.cubeXZ;i3<=z+kcc.cubeXZ;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}else if(kcc.cubeMode==2){//giant
for(let i=x-kcc.cubeSize;i<=x+kcc.cubeSize;i++)
for(let i2=y-kcc.cubeSize;i2<=y+kcc.cubeSize;i2++)
for(let i3=z-kcc.cubeSize;i3<=z+kcc.cubeSize;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}else if(kcc.cubeMode==3){//room
for(let i=x-kcc.roomSize;i<=x+kcc.roomSize;i++)
for(let i2=y-1;i2<=y+kcc.roomSize*2-1;i2++)
for(let i3=z-kcc.roomSize;i3<=z+kcc.roomSize;i3++){
if(i==x-kcc.roomSize||i==x+kcc.roomSize||
i2==y+kcc.roomSize*2-1||i2==y-1||
i3==z-kcc.roomSize||i3==z+kcc.roomSize){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}
}else if(kcc.cubeMode==4){//xm
for(let i=x-kcc.cubeWay;i<=x;i++)
for(let i2=y-1;i2<=y-1;i2++)
for(let i3=z-2;i3<=z+2;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}else if(kcc.cubeMode==5){//xp
for(let i=x;i<=x+kcc.cubeWay;i++)
for(let i2=y-1;i2<=y-1;i2++)
for(let i3=z-2;i3<=z+2;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}else if(kcc.cubeMode==6){//zm
for(let i=x-2;i<=x+2;i++)
for(let i2=y-1;i2<=y-1;i2++)
for(let i3=z-kcc.cubeWay;i3<=z;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}else if(kcc.cubeMode==7){//zp
for(let i=x-2;i<=x+2;i++)
for(let i2=y-1;i2<=y-1;i2++)
for(let i3=z;i3<=z+kcc.cubeWay;i3++){
arr.push({x:unsign16(i),y:unsign16(i2),z:unsign16(i3)});
}
}
arr.map((pos,i)=>{
kcc.ws._msg({data:kcc.cubeServer(id,pos.x,pos.y,pos.z,kcc.cubeId?kcc.cubeId:material).buffer});
kcc.ws._send(kcc.cube(id,pos.x,pos.y,pos.z,kcc.cubeId?kcc.cubeId:material));
});
}
break;
case 33556246://[2,0,7,22], 47->40 bytes
//kc.log('moving','#080');
//let PID=data.slice(0,4);//36 bytes
kcc.pos=data.slice(4);
break;
case 16777473://[1,0,1,1]
//kcc.logClient('ping time');//(11)
break;
case 4278192982://toNum32([255,0,11,86]):
kc.log('login','#080');
break;
case 1040188095://toNum32([62,0,2,191]):
kc.log('[image part]','#080');
break;
case 385876415://toNum32([23,0,1,191]):
kc.log('finish','#080');
break;
case 419430934://toNum32([25,0,2,22]):
//kcc.self=toNum32(data.slice(0,4));
break;
case 654311702://toNum32([39,0,1,22]):
//kcc.logClient('add model to inventory');
break;
case 738198312://toNum32([44,0,3,40]):
//kcc.logClient('push model to the marketplace');
break;
case 218104104://toNum32([13,0,1,40]):
//kcc.logClient('delete model from inventory');
break;
case 452985366://toNum32([27,0,2,22]):
//kcc.logClient('use effect on player');
break;
}
return data;
}
kcc.serverSeparator=(reqId,data)=>{
//server:243,4,10,0,3,47,105,...toByte32(randomId),49,120,0,0,0,9,2,...toNum16(x),...toNum16(y),...toNum16(z),7,material,254,105,0,0,0,3
//client:243,2,7,0,2,47,105, 0,0,5,196,49,120,0,0,0,9,2,255,211,0,4,255,225
// 243,4,10,0,3,47,105,0,0,5,207,49,120,0,0,0,7,0,255,229,0,4,255,213,254,105,0,0,0,1
//243,4,86,0,5,220,105,0,0,41,254,219,98,2,209,105,0,0,0,0,85,105,0,0,0,10,254,105,0,0,0,1
switch(reqId){
case toNum32([10,0,3,47])://case toNum32([86,0,5,220]):
//kc.log('cubegun another');
break;
case toNum32([1,0,0,42]):
//kcc.logServer('ping time');//(20)
break;
case toNum32([255,0,6,89]):
{
top.keks=top.keks?top.keks:[];
let info=getJSON(decode(data))[0];
top.keks.push(info);
//kc.log(`[${info.UserName}]->joining`,'#F80');
kcc.parts.push(info.UserName);
}
break;
case toNum32([104,0,2,245]):
{
top.keks=top.keks?top.keks:[];
let info=getJSON(decode(data))[0];
top.keks.push(info);
let pid=info.SpawnRolesRuntimeData.activeSpawnRole;//.spawnRoleAvatarIds[0];
let name=kcc.parts.pop();
kc.log(`[${name},${pid}]->joined`,'#F80');
kcc.names[name]=pid;
}
break;
case toNum32([102,0,10,245]):case toNum32([61,0,10,245]):
{
kc.log('joined','#F80');
let info=getJSON(decode(data));
top.kek=info;
kcc.self=info[info.length-1].spawnRolesDefaultTypeWoIDMap;
kcc.self=kcc.self?kcc.self.DefaultPlayModeSpawnRole:info[info.length-1].DefaultPlayModeSpawnRole;
info=info.slice(1,info.length-1);
for(let k=0;k<info.length;k+=3){
kcc.names[info[k].UserName]=info[k+2].activeSpawnRole;
}
kc.log(`Player List:${JSON.stringify(kcc.names)}`,'#F80');
}
break;
case toNum32([6,0,11,22]):
{
let id=toNum32(data.slice(0,4))-1;
for(let k in kcc.names)if(kcc.names[k]==id){
kc.log(`[${k},${id}]->left`,'#F80');
delete kcc.names[k];break;
}
}
break;
}
return data;
}