ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/html5client/main.js
(Generate patch)

Comparing deliantra/html5client/main.js (file contents):
Revision 1.14 by root, Tue Nov 6 20:46:53 2012 UTC vs.
Revision 1.15 by sf-demisephi, Wed Nov 7 19:54:04 2012 UTC

34 34
35Array.prototype.contains = function (e){ 35Array.prototype.contains = function (e){
36 return this.indexOf(e) >= 0 && this.indexOf(e)<this.length; 36 return this.indexOf(e) >= 0 && this.indexOf(e)<this.length;
37} 37}
38 38
39var canvas = null;
40var canvasID = 'main';
41var ctx = null; 39var ctx = null;
42var stage = null; 40var stage = null;
43var Messages = [];
44var output = null; 41var output = null;
45var commandline = null; 42var commandline = null;
46 43
47var channels = {length: 0,list: []}; 44var channels = {length: 0,list: []};
48 45
49var clickable = []; 46var dx=0;
47var dy=0;
50 48
51var extmap = true;
52var Map = []; 49var Map = null;
53var oldMapName = "";
54var drawInventory = false;
55 50
56messageBox = window.alert; 51messageBox = window.alert;
57 52
58alert = function (s){ 53alert = function (s){
59 writeToScreen(s); 54 writeToScreen(s);
61 56
62var floorItems = []; 57var floorItems = [];
63var myItems = []; 58var myItems = [];
64var mySpells = []; 59var mySpells = [];
65var myStats = []; 60var myStats = [];
66
67
68var skillNames = []; 61var skillNames = [];
69 62
70var skipKeyTest = false; 63var skipKeyTest = false;
71 64
72var keys = { 65var keys = {
96}; 89};
97var expTableFacenum = -1; 90var expTableFacenum = -1;
98 91
99var isRunning = false; 92var isRunning = false;
100var isFiring = false; 93var isFiring = false;
94
101mapsize = {width: 0,height:0}; 95mapsize = {width: 0,height:0};
96
97var currentWindow=null;
98var currentWindowOffset = {x:0,y:0};
99var currentWindowResize = false;
100
101var xMapWindow = null;
102var xFloorWindow = null;
103var xPlayerWindow = null;
104var pattern = null;
105var patternImage = null;
106var isMainCalled = false;
107var xInfoWindow = null;
108var xBarsWindow = null;
109var xCommmandWindow = null;
110var xChatBoxWindow = null;
111
112var wsUri = "ws://testserver.deliantra.net:13327/ws";
113//var wsUri = "ws://localhost:13327/ws";
102 114
103function appendToBody(e){ 115function appendToBody(e){
104 document.getElementsByTagName("body")[0].appendChild(e); 116 document.getElementsByTagName("body")[0].appendChild(e);
105} 117}
106 118
141 skipKeyTest = false; 153 skipKeyTest = false;
142 }) 154 })
143 return div; 155 return div;
144 156
145} 157}
146
147var xMapWindow = null;
148var xFloorWindow = null;
149var xPlayerWindow = null;
150var pattern = null;
151var patternImage = null;
152var isMainCalled = false;
153var xInfoWindow = null;
154var xBarsWindow = null;
155var xCommmandWindow = null;
156var xChatBoxWindow = null;
157
158var wsUri = "ws://testserver.deliantra.net:13327/ws";
159//var wsUri = "ws://localhost:13327/ws";
160
161function createWebSocket(){
162 var websocket = new WebSocket(wsUri);
163 websocket.onopen = function(evt) { onOpen(evt) };
164 websocket.onclose = function(evt) { onClose(evt) };
165 websocket.onmessage = function(evt) { onMessage(evt) };
166 websocket.onerror = function(evt) { onError(evt) };
167 return websocket;
168}
169
170
171 158
172function createLoginWindow(){ 159function createLoginWindow(){
173 var div = createWindow("login",260,180,stage.stageWidth/2-250/2,stage.stageHeight/2-250/2).contents;; 160 var div = createWindow("login",260,180,stage.stageWidth/2-250/2,stage.stageHeight/2-250/2).contents;;
174 var login = document.createElement("input"); 161 var login = document.createElement("input");
175 login.type = "text"; 162 login.type = "text";
325 for (var i = 0;i<255;++i){ 312 for (var i = 0;i<255;++i){
326 keys.states[i]=0; 313 keys.states[i]=0;
327 }; 314 };
328 315
329 if (isMainCalled==true){ 316 if (isMainCalled==true){
330 isMainCalled = true;
331 return; 317 return;
332 } 318 }
319 isMainCalled = true;
333 320
334 window.WebSocket = window.WebSocket || window.MozWebSocket; 321 window.WebSocket = window.WebSocket || window.MozWebSocket;
335 322
336 if (window.WebSocket){ 323 if (window.WebSocket){
337 324
438 425
439 426
440 } 427 }
441}; 428};
442 429
443var currentWindow=null;
444var currentWindowOffset = {x:0,y:0};
445var currentWindowResize = false;
446 430
447function showPlayerTab (e,tn){ 431function showPlayerTab (e,tn){
448 432
449 xPlayerWindow.show(true); 433 xPlayerWindow.show(true);
450 var tabName = tn ? tn : (this.value).split(" ")[0].toLowerCase(); 434 var tabName = tn ? tn : (this.value).split(" ")[0].toLowerCase();
542 var resNames = ['CS_STAT_RES_PHYS','CS_STAT_RES_MAG','CS_STAT_RES_FIRE','CS_STAT_RES_ELEC','CS_STAT_RES_COLD','CS_STAT_RES_CONF','CS_STAT_RES_ACID', 526 var resNames = ['CS_STAT_RES_PHYS','CS_STAT_RES_MAG','CS_STAT_RES_FIRE','CS_STAT_RES_ELEC','CS_STAT_RES_COLD','CS_STAT_RES_CONF','CS_STAT_RES_ACID',
543 'CS_STAT_RES_DRAIN','CS_STAT_RES_GHOSTHIT','CS_STAT_RES_POISON','CS_STAT_RES_SLOW','CS_STAT_RES_PARA','CS_STAT_TURN_UNDEAD','CS_STAT_RES_FEAR', 527 'CS_STAT_RES_DRAIN','CS_STAT_RES_GHOSTHIT','CS_STAT_RES_POISON','CS_STAT_RES_SLOW','CS_STAT_RES_PARA','CS_STAT_TURN_UNDEAD','CS_STAT_RES_FEAR',
544 'CS_STAT_RES_DEPLETE', 'CS_STAT_RES_DEATH', 'CS_STAT_RES_HOLYWORD','CS_STAT_RES_BLIND']; 528 'CS_STAT_RES_DEPLETE', 'CS_STAT_RES_DEATH', 'CS_STAT_RES_HOLYWORD','CS_STAT_RES_BLIND'];
545 529
546 content.appendChild(tableLeft = $_("table")); 530 content.appendChild(tableLeft = $_("table"));
547 tableLeft.style.width="45%"; 531 tableLeft.style.width="40%";
548 tableLeft.style.float = "left"; 532 tableLeft.style.float = "left";
549 content.appendChild(tableRight = $_("table")); 533 content.appendChild(tableRight = $_("table"));
550 tableRight.style.width="45%"; 534 tableRight.style.width="40%";
551 tableRight.style.float = "right"; 535 tableRight.style.float = "right";
552 536
553 for (i=CS_STAT_RESIST_START;i<CS_STAT_RESIST_END;++i){ 537 for (i=CS_STAT_RESIST_START;i<CS_STAT_RESIST_END;++i){
554 var table = i%2==0 ? tableLeft : tableRight; 538 var table = i%2==0 ? tableLeft : tableRight;
555 539
569 553
570 554
571 555
572} 556}
573 557
574/* 558function getItemById(itmid){
559 var itm = findItem(myItems,itmid);
560 if (itm){
561 return itm;
562 }
563 itm = findItem(floorItems,itmid);
564 if (itm){
565 return itm;
566 }
567 for (var s in containers){
568 if (typeof(containers[s]) == typeof({}) ){
569 itm = findItem(containers[s],itmid);
570 if (itm){
571 return itm;
572 }
575 573
576 574 }
577 CS_STAT_SKILLINFO = 140, 575 }
578 CS_NUM_SKILLS = 50, 576}
579 SF_FIREON = 0x01,
580 SF_RUNON = 0x02,
581 NDI_BLACK = 0,
582 NDI_WHITE = 1,
583 NDI_NAVY = 2,
584 NDI_RED = 3,
585 NDI_ORANGE = 4,
586 NDI_BLUE = 5,
587 NDI_DK_ORANGE = 6,
588 NDI_GREEN = 7,
589 NDI_LT_GREEN = 8,
590 NDI_GREY = 9,
591 NDI_BROWN = 10,
592 NDI_GOLD = 11,
593 NDI_TAN = 12,
594 NDI_MAX_COLOR = 12,
595 NDI_COLOR_MASK = 0x1f,
596 NDI_REPLY = 0x20,
597 NDI_NOCRATE = 0x40,
598 NDI_CLEAR = 0x80,
599 a_none = 0,
600 a_readied = 1,
601 a_wielded = 2,
602 a_worn = 3,
603 a_active = 4,
604 a_applied = 5,
605 F_APPLIED = 0x000F,
606 F_LOCATION = 0x00F0,
607 F_UNPAID = 0x0200,
608 F_MAGIC = 0x0400,
609 F_CURSED = 0x0800,
610 F_DAMNED = 0x1000,
611 F_OPEN = 0x2000,
612 F_NOPICK = 0x4000,
613 F_LOCKED = 0x8000,
614 CF_FACE_NONE = 0,
615 CF_FACE_BITMAP = 1,
616 CF_FACE_XPM = 2,
617 CF_FACE_PNG = 3,
618 CF_FACE_CACHE = 0x10,
619 FACE_FLOOR = 0x80,
620 FACE_COLOR_MASK = 0xf,
621 UPD_LOCATION = 0x01,
622 UPD_FLAGS = 0x02,
623 UPD_WEIGHT = 0x04,
624 UPD_FACE = 0x08,
625 UPD_NAME = 0x10,
626 UPD_ANIM = 0x20,
627 UPD_ANIMSPEED = 0x40,
628 UPD_NROF = 0x80,
629 UPD_SP_MANA = 0x01,
630 UPD_SP_GRACE = 0x02,
631 UPD_SP_LEVEL = 0x04,
632 SOUND_NORMAL = 0,
633 SOUND_SPELL = 1,
634
635 PICKUP_NOTHING = 0x00000000,
636
637 PICKUP_DEBUG = 0x10000000,
638 PICKUP_INHIBIT = 0x20000000,
639 PICKUP_STOP = 0x40000000,
640 PICKUP_NEWMODE = 0x80000000,
641
642 PICKUP_RATIO = 0x0000000F,
643
644 PICKUP_FOOD = 0x00000010,
645 PICKUP_DRINK = 0x00000020,
646 PICKUP_VALUABLES = 0x00000040,
647 PICKUP_BOW = 0x00000080,
648
649 PICKUP_ARROW = 0x00000100,
650 PICKUP_HELMET = 0x00000200,
651 PICKUP_SHIELD = 0x00000400,
652 PICKUP_ARMOUR = 0x00000800,
653
654 PICKUP_BOOTS = 0x00001000,
655 PICKUP_GLOVES = 0x00002000,
656 PICKUP_CLOAK = 0x00004000,
657 PICKUP_KEY = 0x00008000,
658
659 PICKUP_MISSILEWEAPON = 0x00010000,
660 PICKUP_ALLWEAPON = 0x00020000,
661 PICKUP_MAGICAL = 0x00040000,
662 PICKUP_POTION = 0x00080000,
663
664 PICKUP_SPELLBOOK = 0x00100000,
665 PICKUP_SKILLSCROLL = 0x00200000,
666 PICKUP_READABLES = 0x00400000,
667 PICKUP_MAGIC_DEVICE = 0x00800000,
668
669 PICKUP_NOT_CURSED = 0x01000000,
670
671 PICKUP_JEWELS = 0x02000000,
672 PICKUP_FLESH = 0x04000000;
673 */
674
675function updateItemsList(){ 577function updateItemsList(){
676 var content = xPlayerWindow.getElementsByClassName("player_widnow_content")[0]; 578 var content = xPlayerWindow.getElementsByClassName("player_widnow_content")[0];
677 579
678 580
679 content.innerHTML = ""; 581 content.innerHTML = "";
812 }; 714 };
813 xwindow.contents = xwindow.getElementsByClassName("content")[0]; 715 xwindow.contents = xwindow.getElementsByClassName("content")[0];
814 xwindow.contents.parent = xwindow; 716 xwindow.contents.parent = xwindow;
815 xwindow.close = function (){document.getElementsByTagName("body")[0].removeChild(xwindow);}; 717 xwindow.close = function (){document.getElementsByTagName("body")[0].removeChild(xwindow);};
816 appendToBody(xwindow); 718 appendToBody(xwindow);
817
818
819 return xwindow; 719 return xwindow;
820} 720}
721
821function onMouseUp (e){ 722function onMouseUp (e){
822 723
823 if (currentWindow!=null){ 724 if (currentWindow!=null){
824 currentWindow = null; 725 currentWindow = null;
825 currentWindowResize = false; 726 currentWindowResize = false;
870 } 771 }
871} 772}
872 773
873function channels_addMessage(channelId,o){ 774function channels_addMessage(channelId,o){
874 var ta = channels_get_chat_box("channel_" + channelId); 775 var ta = channels_get_chat_box("channel_" + channelId);
776 if (ta == null)
777 return;
875 ta.value = ta.value + JSON.stringify(o);; 778 ta.value = ta.value + JSON.stringify(o);;
876 channels[channelId].newMessages = true; 779 channels[channelId].newMessages = true;
877} 780}
878 781
879 782
915 var e = list[i]; 818 var e = list[i];
916 if (e.id != pid)e.style.display = "none";else e.style.display = "block"; 819 if (e.id != pid)e.style.display = "none";else e.style.display = "block";
917 }; 820 };
918} 821}
919 822
823
824/**
825 * SOCKET EVENTS
826 */
920function onOpen(evt) 827function onOpen(evt)
921{ 828{
922 writeToScreen("CONNECTED"); 829 writeToScreen("CONNECTED");
923 doSend('version {"clientver":"0.001","client":"deliantra html5 client","osver":"linux","protver":1}'); 830 doSend('version {"clientver":"0.001","client":"deliantra html5 client","osver":"linux","protver":1}');
924} 831}
925 832
926function onClose(evt) 833function onClose(evt)
927{ 834{
928 writeToScreen("DISCONNECTED"); 835 writeToScreen("DISCONNECTED");
929} 836}
837function onError(evt)
838{
839 writeToScreen("ERROR!");
840}
841
842function onMessage2(data)
843{
844 var patt=/[0-9a-z_]*[^0-9a-z_]/i;
845 var feed = "" + data.match(patt);
846 feed = feed.substr (0,feed.length -1);
847 if (feed=="nul"){
848 if (data=="newmap"){
849 feed="newmap";
850 }else{
851 return;
852 }
853 }
854 if ((window['feed_' + feed])&&(typeof(window['feed_' + feed])=="function")){
855 var retVal = window['feed_' + feed](data,bytes2arr(data),data);
856 if (!retVal){
857 }
858 }else{
859 //unhandled feed
860 }
861}
862
863function onMessage(evt)
864{
865 var data = evt.data;
866
867 if (data instanceof Blob){
868 var r = new FileReader ();
869 r.readAsBinaryString (data);
870 r.onloadend = function(progress) {
871 onMessage2 (r.result);
872 };
873 }else{
874 onMessage2 (data);
875 }
876}
930 877
931var exti = { 878var exti = {
932 nextId : 100, 879 nextId : 100,
933 getNextId : function (){ 880 getNextId : function (){
934 return this.nextId++; 881 return this.nextId++;
935 } 882 }
936}; 883};
937 884
938function getItemById(itmid){
939 var itm = findItem(myItems,itmid);
940 if (itm){
941 return itm;
942 }
943 itm = findItem(floorItems,itmid);
944 if (itm){
945 return itm;
946 }
947 for (var s in containers){
948 if (typeof(containers[s]) == typeof({}) ){
949 itm = findItem(containers[s],itmid);
950 if (itm){
951 return itm;
952 }
953 885
954 } 886/**
955 } 887 * HANDLE FEEDS FROM SERVER
956} 888 */
957
958function feed_upditem (data,dataAsArray){ 889function feed_upditem (data,dataAsArray){
959 var buff=new Buffer(dataAsArray); 890 var buff=new Buffer(dataAsArray);
960 buff.position = "upditem ".length; 891 buff.position = "upditem ".length;
961 var flags = buff.readUint8(); 892 var flags = buff.readUint8();
962 var tag = buff.readUint32(); 893 var tag = buff.readUint32();
1090 } 1021 }
1091 return false; 1022 return false;
1092} 1023}
1093 1024
1094 1025
1095function onKeyDown (keyCode){
1096 switch(keyCode){
1097 case 38:
1098 if (keys.ctrl&&!isRunning){
1099 isRunning = true;
1100 doSend("command run 1");
1101 //doSend("command north")
1102 }
1103 else
1104 if (!isFiring&&keys.shift){
1105 doSend("command fire 1");
1106 isFiring = true;
1107 }else
1108 doSend("command north");
1109 break;
1110 case 40:
1111 if (keys.ctrl&&!isRunning){
1112 isRunning = true;
1113 doSend("command run 5" );
1114 //doSend("command souh")
1115 }
1116 else
1117 if (!isFiring&&keys.shift){
1118 doSend("command fire 5" );
1119 isFiring = true;
1120 }else
1121 doSend("command south");
1122 break;
1123 case 37:
1124 if (keys.ctrl&&!isRunning){
1125 isRunning = true;
1126 doSend("command run 7" );
1127 // doSend("command west")
1128 }
1129 else
1130 if (!isFiring&&keys.shift){
1131 doSend("command fire 7");
1132 isFiring = true;
1133 }else
1134 doSend("command west");
1135 break;
1136 case 39:
1137 if (keys.ctrl&&!isRunning){
1138 isRunning = true;
1139 doSend("command run 3" );
1140 //doSend("command west")
1141 }else
1142 if (!isFiring&&keys.shift){
1143 doSend("command fire 3");
1144 isFiring = true;
1145 }else
1146 doSend("command east");
1147 break;
1148 case 49:
1149 case 9:
1150 xPlayerWindow.show(!xPlayerWindow.visible() );
1151 break;
1152 case 67:
1153 skipKeyTest = true;
1154 xCommmandWindow.show(true);
1155
1156 break;
1157
1158 case 32:
1159 doSend("command apply");
1160 break;
1161 case 188:
1162 doSend("command get");
1163 break;
1164 case 16:
1165 keys.shift = 1;
1166 break;
1167 case 18:
1168 keys.alt = 1;
1169 break;
1170 case 17:
1171 keys.ctrl = 1;
1172 break;
1173 case 113:
1174 showPlayerTab({},"statistics");
1175 break;
1176 case 114:
1177 showPlayerTab({},"skills");
1178 break;
1179
1180 case 115:
1181 showPlayerTab({},"spellbook");
1182 break;
1183
1184 case 116:
1185 showPlayerTab({},"inventory");
1186 break;
1187 default:
1188 //messageBox(keyCode);
1189 break;
1190 }
1191}
1192
1193function onKeyUp(keyCode){
1194 switch(keyCode){
1195 case 38:
1196 if (isRunning&&!keys.ctrl){
1197 doSend("command run_stop");
1198 isRunning = false;
1199 }
1200 if (isFiring&&!keys.shift){
1201 doSend("command fire_stop");
1202 isFiring = false;
1203 }
1204 break;
1205 case 40:
1206 if (isFiring&&!keys.shift){
1207 doSend("command fire_stop");
1208 isFiring = false;
1209 }
1210 if (isRunning&&!keys.ctrl){
1211 doSend("command run_stop");
1212 isRunning = false;
1213 }
1214 break;
1215 case 37:
1216 if (isFiring&&!keys.shift){
1217 doSend("command fire_stop");
1218 isFiring = false;
1219 }
1220 if (isRunning&&!keys.ctrl){
1221 doSend("command run_stop");
1222 isRunning = false;
1223 }
1224 break;
1225 case 39:
1226 if (isFiring&&!keys.shift){
1227 doSend("command fire_stop");
1228 isFiring = false;
1229 }
1230 if (isRunning&&!keys.ctrl){
1231 doSend("command run_stop");
1232 isRunning = false;
1233 }
1234 break;
1235 case 49:
1236 break;
1237 case 16:
1238 keys.shift = 0;
1239 if (isFiring&&!keys.shift){
1240 doSend("command fire_stop");
1241 isFiring= false;
1242 }
1243 break;
1244 case 18:
1245 keys.alt = 0;
1246 break;
1247 case 17:
1248 keys.ctrl = 0;
1249 if (isRunning&&!keys.ctrl){
1250 doSend("command run_stop");
1251 isRunning = false;
1252 }
1253 break;
1254 default:
1255 //messageBox(e.keyCode);
1256 break;
1257 }
1258
1259}
1260function feed_version (data,dataAsArray){ 1026function feed_version (data,dataAsArray){
1261 var smapsize = Math.floor(xMapWindow.width()/64); 1027 var smapsize = Math.floor(xMapWindow.width()/64);
1262 mapsize.width = mapsize.height = parseInt(smapsize); 1028 mapsize.width = mapsize.height = parseInt(smapsize);
1263 smapsize = smapsize +"x" + smapsize; 1029 smapsize = smapsize +"x" + smapsize;
1264 map_clear(); 1030 map_clear();
1305 1071
1306function feed_setup (data,dataAsArray){ 1072function feed_setup (data,dataAsArray){
1307 doSend('exti ["http_faceurl", ' + exti.getNextId() +']'); 1073 doSend('exti ["http_faceurl", ' + exti.getNextId() +']');
1308} 1074}
1309 1075
1310//'',
1311//'requestinfo spell_paths',
1312
1313
1314function face2tile (){
1315
1316}
1317
1318function clear_cell (cell){ 1076function clear_cell (cell){
1319 cell.darkness = 256; 1077 cell.darkness = 256;
1320 cell.flags = 0; 1078 cell.flags = 0;
1321 cell.player =0; 1079 cell.player =0;
1322 cell.tiles = []; 1080 cell.tiles = [];
1323
1324
1325 return cell; 1081 return cell;
1326} 1082}
1327 1083
1328function MapCell(){ 1084function MapCell(){
1329 this.previousCell = null; 1085 this.previousCell = null;
1573 ctx.fillStyle = "#000"; 1329 ctx.fillStyle = "#000";
1574 ctx.fillRect(0,0,canvas.width,canvas.height); 1330 ctx.fillRect(0,0,canvas.width,canvas.height);
1575 1331
1576 for (var i = 0;i<mapsize.height;++i){ 1332 for (var i = 0;i<mapsize.height;++i){
1577 var cell = map_get_cell_ex(0,i); 1333 var cell = map_get_cell_ex(0,i);
1334 var y = i<<6;
1335 var x = 0;
1578 for (var j=0;j<mapsize.width;++j){ 1336 for (var j=0;j<mapsize.width;++j){
1579 var x = j<<6; 1337 x+=64;
1580 var y = i<<6; 1338
1581 var cellx = cell.data; 1339 var cellx = cell.data;
1582 for (var z=0;z<=2;++z){ 1340 for (var z=0;z<=2;++z){
1583 if (!cellx.tiles[z]) 1341 if (!cellx.tiles[z])
1584 continue; 1342 continue;
1585 var img = tilesInfo.getImgByFaceNum(cellx.tiles[z]); 1343 var img = tilesInfo.getImgByFaceNum(cellx.tiles[z]);
1586 if (img){ 1344 if (img){
1587 ctx.drawImage(img,x,y); 1345 ctx.drawImage(img,x,y);
1588 }else{ 1346 }else{
1589 1347 Faces.request(cellx.tiles[z],"map");
1590 } 1348 }
1591 } 1349 }
1592 if ((typeof(cellx.stat_hp) == typeof(1))&&cellx.stat_hp>0){ 1350 if ((typeof(cellx.stat_hp) == typeof(1))&&cellx.stat_hp>0){
1593 ctx.fillStyle = "#f00"; 1351 ctx.fillStyle = "#f00";
1594 ctx.fillRect(x,y,((255-cellx.stat_hp)/255)*64,8); 1352 ctx.fillRect(x,y,((255-cellx.stat_hp)/255)*64,8);
2027 } 1785 }
2028 updateItemsList(); 1786 updateItemsList();
2029 return false; 1787 return false;
2030} 1788}
2031 1789
2032var expTable = [0,1000,3000,7000,15000,31000,63000,98500,145000,210000,290000,400000,530000,695000,895000,1100000,1400000,1750000,2150000,2650000,3200000,3850000,4650000,5500000,6500000,7650000,8800000,10000000,11500000,13500000,15500000,18000000,20500000,23500000,26500000,30000000,34000000,38500000,43000000,48500000,54000000,60500000,67500000,75000000,83000000,91500000,100000000,110000000,120000000,130000000,145000000,160000000,175000000,190000000,210000000,230000000,250000000,275000000,300000000,325000000,350000000,380000000,410000000,445000000,480000000,520000000,560000000,605000000,655000000,705000000,755000000,810000000,870000000,930000000,990000000,1050000000,1100000000,1200000000,1250000000,1350000000,1450000000,1550000000,1650000000,1800000000,1900000000,2000000000,2150000000,2300000000,2450000000,2600000000,2750000000,2900000000,3100000000,3300000000,3500000000,3750000000,4050000000,4350000000,4750000000,5250000000,5850000000,6650000000,7650000000,9000000000,10500000000,13500000000,17000000000,23000000000,32000000000,47000000000,73000000000,120000000000,215000000000,430000000000,935000000000]; 1790var expTable = [];
2033var spellPaths = []; 1791var spellPaths = [];
1792
1793
1794function FaceInfo (){
1795 this.name = "";
1796 this.num = -1;
1797 this.type = 0;
1798 this.isLoaded = false;
1799 this.isLoading = false;
1800 this.isPending = false;
1801 this.isRequested = false;
1802 this.requestedBy = "";
1803 this.resource = null;
1804 this.json = "{}";
1805}
1806
1807FaceInfo.prototype.request = function (rby){
1808 this.isRequested = true;
1809 this.requestedBy = rby;
1810 if ((this.name==""))
1811 return this;
1812
1813 if ((!this.isPending) && (!this.isLoading)){
1814
1815
1816 this.load();
1817 }
1818
1819 return this;
1820};
1821
1822FaceInfo.prototype.setName = function (name){
1823 this.name = name;
1824 return this;
1825};
1826
1827FaceInfo.prototype.setType = function (type){
1828 this.type = parseInt(type);
1829 return this;
1830};
1831
1832FaceInfo.prototype.load = function (){
1833 this.isPending = true;
1834 Faces.load (this);
1835
1836}
1837FaceInfo.prototype.onload = function (){
1838 this.isPending = false;
1839 this.isLoading = false;
1840
1841 Faces.onload(this);
1842}
1843FaceInfo.prototype.loadStart = function (){
1844
1845 this.isPending = false;
1846 this.isLoading = true;
1847 if (this.requestedBy == "map"){//map tile
1848 var img = this.resource = $_("img");
1849 img.faceInfo = this;
1850 img.addEventListener("load",function (){ img.faceInfo.onload(); });
1851 img.src = baseURL+ "" + this.name;
1852
1853 }else{ //json but maybe other types
1854 var req = new XMLHttpRequest();
1855 req.open('GET', baseURL+""+this.name, false);
1856 req.send(null);
1857 if(req.status == 200){
1858 this.json = req.responseText;
1859 this.resource = JSON.parse(this.json);
1860 }
1861 this.onload();
1862 }
1863}
1864
1865var Faces = {
1866 byNum:[],
1867
1868 nDownloads: 0,
1869 pending : [],
1870
1871 add : function (id,name){
1872 var faceInfo = new FaceInfo;
1873 faceInfo.num = id;
1874 this.byNum[id] = faceInfo;
1875 return faceInfo;
1876 },
1877 getByNum : function (id,createIfNotExist){
1878 if (createIfNotExist)
1879 return Faces.byNum[id] ? Faces.byNum[id] : Faces.add(id);
1880 return Faces.byNum[id] ? Faces.byNum[id] : null;
1881 },
1882 request : function (id,by){
1883 return this.getByNum(id,true).request(by);
1884 },
1885
1886 load : function (faceInfo){
1887 if (this.nDownloads<this.MAXDOWNLOADS){
1888 this.nDownloads++
1889 faceInfo.loadStart();
1890 }else{
1891 this.pending.push (faceInfo);
1892 }
1893 },
1894 onload : function (faceInfo){
1895 alert(this.nDownloads);
1896 this.nDownloads--;
1897
1898 if ((this.nDownloads<this.MAXDOWNLOADS) && (this.pending.length>0)){
1899 var faceInfo = this.pending.pop();
1900 faceInfo.load();
1901 }
1902 },
1903
1904 FT_FACE : 0 * 2 + 0, // faces (images)
1905 FT_MUSIC : 1 * 2 + 1, // background music
1906 FT_SOUND : 2 * 2 + 1, // effects
1907 FT_RSRC : 3 * 2 + 0, // generic data files
1908
1909 MAXDOWNLOADS : 5
1910}
1911
2034 1912
2035function feed_fx (data,dataAsArray){ 1913function feed_fx (data,dataAsArray){
2036 1914
2037 var buff = new Buffer(dataAsArray); 1915 var buff = new Buffer(dataAsArray);
2038 buff.position = 3; 1916 buff.position = 3;
2039 var ignore = true; 1917 var out="";
1918 var type = 0;
1919 var nameX = "";
1920 var len;
1921
2040 while (buff.position<buff.length){ 1922 while (buff.position<buff.length){
1923 nameX = "";
2041 var id = buff.unpack_w(); 1924 var id = buff.unpack_w();
1925
1926 if (id == 0){
1927 buff.readUint8();
1928 type = buff.unpack_w();
1929 continue;
1930 }
2042 var len = buff.readUint8(); 1931 len = buff.readUint8();
2043 var nameX = ""; 1932
2044 for (var i = 0;i<len;++i){ 1933 for (var i = 0;i<len;++i){
2045 var c = parseInt(buff.readUint8()); 1934 var c = parseInt(buff.readUint8());
2046 var out=""; 1935 out = "";
2047 out+="0123456789abcdef"[c&0xf]; 1936 out+="0123456789abcdef"[c&0xf];
2048 out= "0123456789abcdef"[c>>4]+out; 1937 out= "0123456789abcdef"[c>>4]+out;
2049 nameX+=out; 1938 nameX+=out;
2050 } 1939 }
2051 var img = $_("img"); 1940 var faceInfo = Faces.getByNum(id,true);
2052 1941
2053 var e; 1942 faceInfo.setType (type).setName (nameX);
2054 if (tilesInfo.getImgByFaceNum(id)){
2055 1943
2056 }else{ 1944 if (faceInfo.isRequested){
2057 if (nameX.length>3){ 1945 faceInfo.load();
2058 if (nameX == "5d7a9b7f65deb9e99ce0dd74560eb0"){
2059 var req = new XMLHttpRequest();
2060 req.open('GET', baseURL+""+nameX, false);
2061 req.send(null);
2062 if(req.status == 200)
2063 skillNames = JSON.parse(req.responseText);
2064 }else if (nameX =="6c65c81502952fd958a6f794a0d34c"){
2065 var req = new XMLHttpRequest();
2066 req.open('GET', baseURL+""+nameX, false);
2067 req.send(null);
2068 if(req.status == 200)
2069 spellPaths = JSON.parse(req.responseText);
2070 }else if (nameX=="f66e1bc0a5662e59be0253a84ee06c"){
2071 var req = new XMLHttpRequest();
2072 req.open('GET', baseURL+""+nameX, false);
2073 req.send(null);
2074 if(req.status == 200)
2075 expTable = JSON.parse(req.responseText);
2076 }else{
2077 tilesInfo.listLoading.push (e={name:nameX,id:id,img:img,src:baseURL+""+nameX});
2078 e.img.parent = e;
2079 e.img.onload = function (){tilesInfo.markAsLoaded(this.parent);}
2080 if (!tilesInfo.isLoading){
2081
2082 tilesInfo.isLoading = true;
2083 e.img.src = e.src;
2084 //alert("loading: " + e.src);
2085 }
2086 }
2087 }else{
2088 //alert ("face num " + id + " has name len :" + len + " !!!!");
2089 //prompt("",dataAsArray);
2090 }
2091 } 1946 }
2092 } 1947 }
2093 1948
2094 return false; 1949 return false;
2095} 1950}
1951
2096 1952
2097 1953
2098function feed_newmap (data,dataAsArray){ 1954function feed_newmap (data,dataAsArray){
2099 //messageBox("newmap"); 1955 //messageBox("newmap");
2100 map_clear(); 1956 map_clear();
2122 1978
2123function feed_anim (data,dataAsArray){ 1979function feed_anim (data,dataAsArray){
2124 return false; 1980 return false;
2125} 1981}
2126 1982
1983function feed_stats (data,dataAsArray){
1984 var buff = new Buffer(dataAsArray);
1985 buff.position = "stats".length + 1;
1986 while (buff.position < buff.length){
1987 var stat = buff.readUint8();
1988 var value;
1989 if (stat_32bit.contains(stat)){
1990 value = buff.readUint32();
1991 }else if (stat == CS_STAT_SPEED||stat==CS_STAT_WEAP_SP){
1992 value = (1/FLOAT_MULTF) * buff.readUint32();
1993 }else if (stat==CS_STAT_RANGE||stat==CS_STAT_TITLE){
1994 var len = buff.readUint8();
1995 value = buff.readString(len);
1996 }else if (stat == CS_STAT_EXP64){
1997 var hi = buff.readUint32();
1998 var lo = buff.readUint32();
1999 value = hi * Math.pow(2,32) + lo;
2000 }else if (stat>=CS_STAT_SKILLINFO && stat < CS_STAT_SKILLINFO + CS_NUM_SKILLS){
2001 var lvl = buff.readUint8();
2002 var hi = buff.readUint32();
2003 var lo = buff.readUint32();
2004 value = [lvl,hi * Math.pow(2,32) + lo];
2005 }else{
2006 value = buff.readUint16();
2007 if (value > 60000){
2008 value -= 65536;
2009 }
2010 }
2011 myStats [stat] = value;
2012 //stats_update (stat);
2013 }
2014
2015 return true;
2016}
2017
2018function feed_player (data,dataAsArray){
2019 var buff = new Buffer(dataAsArray);
2020 buff.position ="player ".length;
2021 //my ($tag, $weight, $face, $name) = unpack "NNN C/a", $data;
2022 player.tag = buff.readUint32();
2023 player.weight = buff.readUint32();
2024 player.face = buff.readUint32();
2025 var len = buff.readUint8();
2026 player.name = buff.readString(len);
2027 return false;
2028}
2029
2030function feed_drawinfo (data,dataAsArray){
2031 return false;
2032}
2033
2034
2035
2036var tilesInfo = {
2037 getImgByFaceNum:function (id){
2038 var fi = Faces.getByNum(id,true);
2039 return fi.resource;
2040 }
2041}
2042
2043
2044function need_facenum (num){
2045
2046}
2047
2048
2049function feed_map_scroll (data,dataAsArray,base64data){
2050
2051 data = data.split(/ /);
2052 data.shift();
2053 dx += parseInt(data.shift());
2054 dy += parseInt(data.shift());
2055
2056
2057}
2058
2059function $_(p){
2060 if (document.getElementById(p)!=null){
2061 return document.getElementById(p);
2062 }else{
2063 var ret = document.createElement(p);
2064 unselectable(ret);
2065 return ret;
2066 }
2067}
2068var tiles = [];
2069
2070
2071function processExtObj (o){
2072 switch (o[0]){
2073 case "channel_info":
2074 channels[o[1].id] = o[1];
2075 channels.list.push (channels[o[1].id]);
2076 channels[o[1].id].index =channels.length;
2077 channels.length+=1;
2078 return true;
2079 default:
2080 return false;
2081 break;
2082 }
2083}
2084
2085
2086function doSend(message)
2087{
2088 writeToScreen("SENT: " + message);
2089 websocket.send(
2090 String.fromCharCode (message.length >> 8)
2091 + String.fromCharCode (message.length & 255)
2092 + message
2093 );
2094}
2095
2096
2097/**
2098 * Key up/down handlers
2099 */
2100
2101function onKeyDown (keyCode){
2102 switch(keyCode){
2103 case 38:
2104 if (keys.ctrl&&!isRunning){
2105 isRunning = true;
2106 doSend("command run 1");
2107 //doSend("command north")
2108 }
2109 else
2110 if (!isFiring&&keys.shift){
2111 doSend("command fire 1");
2112 isFiring = true;
2113 }else
2114 doSend("command north");
2115 break;
2116 case 40:
2117 if (keys.ctrl&&!isRunning){
2118 isRunning = true;
2119 doSend("command run 5" );
2120 //doSend("command souh")
2121 }
2122 else
2123 if (!isFiring&&keys.shift){
2124 doSend("command fire 5" );
2125 isFiring = true;
2126 }else
2127 doSend("command south");
2128 break;
2129 case 37:
2130 if (keys.ctrl&&!isRunning){
2131 isRunning = true;
2132 doSend("command run 7" );
2133 // doSend("command west")
2134 }
2135 else
2136 if (!isFiring&&keys.shift){
2137 doSend("command fire 7");
2138 isFiring = true;
2139 }else
2140 doSend("command west");
2141 break;
2142 case 39:
2143 if (keys.ctrl&&!isRunning){
2144 isRunning = true;
2145 doSend("command run 3" );
2146 //doSend("command west")
2147 }else
2148 if (!isFiring&&keys.shift){
2149 doSend("command fire 3");
2150 isFiring = true;
2151 }else
2152 doSend("command east");
2153 break;
2154 case 49:
2155 case 9:
2156 xPlayerWindow.show(!xPlayerWindow.visible() );
2157 break;
2158 case 67:
2159 skipKeyTest = true;
2160 xCommmandWindow.show(true);
2161
2162 break;
2163
2164 case 32:
2165 doSend("command apply");
2166 break;
2167 case 188:
2168 doSend("command get");
2169 break;
2170 case 16:
2171 keys.shift = 1;
2172 break;
2173 case 18:
2174 keys.alt = 1;
2175 break;
2176 case 17:
2177 keys.ctrl = 1;
2178 break;
2179 case 113:
2180 showPlayerTab({},"statistics");
2181 break;
2182 case 114:
2183 showPlayerTab({},"skills");
2184 break;
2185
2186 case 115:
2187 showPlayerTab({},"spellbook");
2188 break;
2189
2190 case 116:
2191 showPlayerTab({},"inventory");
2192 break;
2193 default:
2194 //messageBox(keyCode);
2195 break;
2196 }
2197}
2198
2199function onKeyUp(keyCode){
2200 switch(keyCode){
2201 case 38:
2202 if (isRunning&&!keys.ctrl){
2203 doSend("command run_stop");
2204 isRunning = false;
2205 }
2206 if (isFiring&&!keys.shift){
2207 doSend("command fire_stop");
2208 isFiring = false;
2209 }
2210 break;
2211 case 40:
2212 if (isFiring&&!keys.shift){
2213 doSend("command fire_stop");
2214 isFiring = false;
2215 }
2216 if (isRunning&&!keys.ctrl){
2217 doSend("command run_stop");
2218 isRunning = false;
2219 }
2220 break;
2221 case 37:
2222 if (isFiring&&!keys.shift){
2223 doSend("command fire_stop");
2224 isFiring = false;
2225 }
2226 if (isRunning&&!keys.ctrl){
2227 doSend("command run_stop");
2228 isRunning = false;
2229 }
2230 break;
2231 case 39:
2232 if (isFiring&&!keys.shift){
2233 doSend("command fire_stop");
2234 isFiring = false;
2235 }
2236 if (isRunning&&!keys.ctrl){
2237 doSend("command run_stop");
2238 isRunning = false;
2239 }
2240 break;
2241 case 49:
2242 break;
2243 case 16:
2244 keys.shift = 0;
2245 if (isFiring&&!keys.shift){
2246 doSend("command fire_stop");
2247 isFiring= false;
2248 }
2249 break;
2250 case 18:
2251 keys.alt = 0;
2252 break;
2253 case 17:
2254 keys.ctrl = 0;
2255 if (isRunning&&!keys.ctrl){
2256 doSend("command run_stop");
2257 isRunning = false;
2258 }
2259 break;
2260 default:
2261 //messageBox(e.keyCode);
2262 break;
2263 }
2264
2265}
2266
2127/* 2267/*
2268 * UTILS
2269 */
2270
2271function decode_base64toArray(s) {
2272 var e={},i,k,v=[],r=[],w=String.fromCharCode;
2273 var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];
2274
2275 for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
2276 for(i=0;i<64;i++){e[v[i]]=i;}
2277
2278 for(i=0;i<s.length;i+=72){
2279 var b=0,c,x,l=0,o=s.substring(i,i+72);
2280 for(x=0;x<o.length;x++){
2281 c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
2282 while(l>=8){r.push((b>>>(l-=8))%256);}
2283 }
2284 }
2285 return r;
2286}
2287
2288function writeToScreen(message)
2289{
2290 var d = new Date();
2291 //Messages.push(new Message(200,(d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() ) + ":" + message));
2292 output.value = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + ":" + message + "\n" + output.value;
2293}
2294
2295function arr2bytes(arr){
2296 var s = "";
2297 for (var i=0;i<arr.length;++i){
2298 s+=String.fromCharCode(arr[i]);
2299 }
2300 return s;
2301}
2302function bytes2arr(s){
2303 var arr = [];
2304 for (var i=0;i<s.length;++i){
2305 arr.push(s.charCodeAt(i));
2306 }
2307 return arr;
2308}
2309
2310function imgFromString (s){
2311 var img = $_('img');
2312 img.src = s;
2313 return img;
2314}
2315
2316/*
2128 CONSTANTS 2317 CONSTANTS
2129 */ 2318 */
2130 2319
2131var TICK = 0.120, 2320var TICK = 0.120,
2132 CS_QUERY_YESNO = 0x1, 2321 CS_QUERY_YESNO = 0x1,
2133 CS_QUERY_SINGLECHAR = 0x2, 2322 CS_QUERY_SINGLECHAR = 0x2,
2285 PICKUP_FLESH = 0x04000000; 2474 PICKUP_FLESH = 0x04000000;
2286 2475
2287var stat_32bit = [CS_STAT_WEIGHT_LIM,CS_STAT_SPELL_ATTUNE,CS_STAT_SPELL_REPEL,CS_STAT_SPELL_DENY,CS_STAT_EXP]; 2476var stat_32bit = [CS_STAT_WEIGHT_LIM,CS_STAT_SPELL_ATTUNE,CS_STAT_SPELL_REPEL,CS_STAT_SPELL_DENY,CS_STAT_EXP];
2288 2477
2289 2478
2290function feed_stats (data,dataAsArray){
2291 var buff = new Buffer(dataAsArray);
2292 buff.position = "stats".length + 1;
2293 while (buff.position < buff.length){
2294 var stat = buff.readUint8();
2295 var value;
2296 if (stat_32bit.contains(stat)){
2297 value = buff.readUint32();
2298 }else if (stat == CS_STAT_SPEED||stat==CS_STAT_WEAP_SP){
2299 value = (1/FLOAT_MULTF) * buff.readUint32();
2300 }else if (stat==CS_STAT_RANGE||stat==CS_STAT_TITLE){
2301 var len = buff.readUint8();
2302 value = buff.readString(len);
2303 }else if (stat == CS_STAT_EXP64){
2304 var hi = buff.readUint32();
2305 var lo = buff.readUint32();
2306 value = hi * Math.pow(2,32) + lo;
2307 }else if (stat>=CS_STAT_SKILLINFO && stat < CS_STAT_SKILLINFO + CS_NUM_SKILLS){
2308 var lvl = buff.readUint8();
2309 var hi = buff.readUint32();
2310 var lo = buff.readUint32();
2311 value = [lvl,hi * Math.pow(2,32) + lo];
2312 }else{
2313 value = buff.readUint16();
2314 if (value > 60000){
2315 value -= 65536;
2316 }
2317 }
2318 myStats [stat] = value;
2319 //stats_update (stat);
2320 }
2321
2322 return true;
2323}
2324
2325function feed_player (data,dataAsArray){
2326 var buff = new Buffer(dataAsArray);
2327 buff.position ="player ".length;
2328 //my ($tag, $weight, $face, $name) = unpack "NNN C/a", $data;
2329 player.tag = buff.readUint32();
2330 player.weight = buff.readUint32();
2331 player.face = buff.readUint32();
2332 var len = buff.readUint8();
2333 player.name = buff.readString(len);
2334 return false;
2335}
2336
2337function feed_drawinfo (data,dataAsArray){
2338 return false;
2339}
2340
2341
2342
2343var tilesInfo = {
2344 listLoading:[],
2345 listLoaded:[],
2346
2347 isLoading: false,
2348 getImgByFaceNum:function (id){
2349 for (var i=0;i<this.listLoaded.length;++i){
2350 if (this.listLoaded[i].id==id){
2351 return this.listLoaded[i].img;
2352 }
2353 }
2354 return null;
2355 },
2356 isImgLoading : function (id){
2357 for (var i=0;i<this.listLoading.length;++i){
2358 if (this.listLoading[i].id==id){
2359 return true;
2360 }
2361 }
2362 return false;
2363 },
2364 markAsLoaded : function (e){
2365 var i;
2366 for (i=0;i<this.listLoading.length;++i){
2367 if (this.listLoading[i].id == e.id){
2368 this.listLoading.splice(i,1);
2369 break;
2370 }
2371 }
2372
2373 this.listLoaded.push (e);
2374 this.isLoading = false;
2375 while ((this.listLoading.length>0)&&(this.isLoading==false)){
2376
2377 var e2 = this.listLoading.pop();
2378 if (e2.src.length > baseURL.length + 1){
2379 this.isLoading = true;
2380 e2.img.src = e2.src;
2381 //alert("loading " + e2.src);
2382 e2.onload = e.onload;
2383 }
2384 }
2385 }
2386}
2387
2388var baseURL = "";
2389DrawLater = {
2390 list : []
2391};
2392
2393
2394function imgFromString (s){
2395 var img = $_('img');
2396 img.src = s;
2397 return img;
2398}
2399
2400function need_facenum (num){
2401 var img;
2402
2403 if (tilesInfo.getImgByFaceNum(num)!=null){
2404 return;
2405 }
2406
2407 /*if ( img = localStorage.getItem("face_" + num)){
2408
2409 tilesInfo.listLoaded.push({num:num,data: {img:imgFromString(img)}});
2410 return;
2411 }*/
2412}
2413var dx = 0;
2414var dy = 0;
2415
2416function feed_map_scroll (data,dataAsArray,base64data){
2417
2418 data = data.split(/ /);
2419 data.shift();
2420 dx += parseInt(data.shift());
2421 dy += parseInt(data.shift());
2422
2423
2424}
2425
2426
2427function feed_ix (data,dataAsArray,base64data){
2428
2429}
2430
2431function arr2bytes(arr){
2432 var s = "";
2433 for (var i=0;i<arr.length;++i){
2434 s+=String.fromCharCode(arr[i]);
2435 }
2436 return s;
2437}
2438function bytes2arr(s){
2439 var arr = [];
2440 for (var i=0;i<s.length;++i){
2441 arr.push(s.charCodeAt(i));
2442 }
2443 return arr;
2444}
2445function $_(p){
2446 if (document.getElementById(p)!=null){
2447 return document.getElementById(p);
2448 }else{
2449 var ret = document.createElement(p);
2450 unselectable(ret);
2451 return ret;
2452 }
2453}
2454var tiles = [];
2455
2456function onMessage2(data)
2457{
2458 var patt=/[0-9a-z_]*[^0-9a-z_]/i;
2459 var feed = "" + data.match(patt);
2460 feed = feed.substr (0,feed.length -1);
2461 if (feed=="nul"){
2462 if (data=="newmap"){
2463 feed="newmap";
2464 }else{
2465 return;
2466 }
2467 }
2468 if ((window['feed_' + feed])&&(typeof(window['feed_' + feed])=="function")){
2469 var retVal = window['feed_' + feed](data,bytes2arr(data),data);
2470 if (!retVal){
2471 //writeToScreen("[" + feed + "] " + data );
2472 //writeToScreen(dataAsArray);
2473 }
2474 }else{
2475 //alert('unhandled "feed_' + feed + '"');
2476 }
2477}
2478
2479function onMessage(evt)
2480{
2481 var data = evt.data;
2482
2483 if (data instanceof Blob){
2484 var r = new FileReader ();
2485 r.readAsBinaryString (data);
2486 r.onloadend = function(progress) {
2487 onMessage2 (r.result);
2488 };
2489 }else{
2490 onMessage2 (data);
2491 }
2492}
2493
2494function decode_base64toArray(s) {
2495 var e={},i,k,v=[],r=[],w=String.fromCharCode;
2496 var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];
2497
2498 for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
2499 for(i=0;i<64;i++){e[v[i]]=i;}
2500
2501 for(i=0;i<s.length;i+=72){
2502 var b=0,c,x,l=0,o=s.substring(i,i+72);
2503 for(x=0;x<o.length;x++){
2504 c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
2505 while(l>=8){r.push((b>>>(l-=8))%256);}
2506 }
2507 }
2508 return r;
2509}
2510
2511
2512
2513function processExtObj (o){
2514 switch (o[0]){
2515 case "channel_info":
2516 channels[o[1].id] = o[1];
2517 channels.list.push (channels[o[1].id]);
2518 channels[o[1].id].index =channels.length;
2519 channels.length+=1;
2520 return true;
2521 default:
2522 return false;
2523 break;
2524 }
2525}
2526
2527function onError(evt)
2528{
2529 writeToScreen("ERROR!");
2530}
2531
2532function doSend(message)
2533{
2534 writeToScreen("SENT: " + message);
2535 websocket.send(
2536 String.fromCharCode (message.length >> 8)
2537 + String.fromCharCode (message.length & 255)
2538 + message
2539 );
2540}
2541
2542function writeToScreen(message)
2543{
2544 var d = new Date();
2545 //Messages.push(new Message(200,(d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() ) + ":" + message));
2546 output.value = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + ":" + message + "\n" + output.value;
2547}
2548
2549function fillFromTemplate(e){
2550 document.getElementById("text").value = e.value;
2551}
2552
2553isMainScriptLoaded = true; 2479isMainScriptLoaded = true;
2554 2480
2555
2556//+ Jonas Raoni Soares Silva
2557//@ http://jsfromhell.com/geral/utf-8 [rev. #1]
2558
2559UTF8 = {
2560 encode: function(s){
2561 for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
2562 s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
2563 );
2564 return s.join("");
2565 },
2566 decode: function(s){
2567 for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
2568 ((a = s[i][c](0)) & 0x80) &&
2569 (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
2570 o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
2571 );
2572 return s.join("");
2573 }
2574};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines