function PacketError() { this.packetId = "AA"; this.len = -1; this.handleData = function(text) { lasterror = true; alert("An error occurred: \n" + text); } } var selectedCharacter = -1; function PacketLoginOk() { this.packetId = "AC"; this.len = -1; this.handleData = function(text) { Log("Login OK!"); var main = document.getElementById("main"); clearChildren(document.getElementById("windowcontainer")); var chars = new Array(); while(text != "") { var charnum = parseInt(text.substr(0,1)); var len = parseInt(text.substr(1,2)); var nick = text.substr(3,len); looks = ( { "gender" : text.substr(len+3,1), "base" : parseInt(text.substr(len+3+1,4)), "hairs" : parseInt(text.substr(len+3+5,4)), "shirt" : parseInt(text.substr(len+3+9,4)), "pants" : parseInt(text.substr(len+3+13,4)), "boots" : parseInt(text.substr(len+3+17,4)), "eyes" : parseInt(text.substr(len+3+21,4)), "headgear" : parseInt(text.substr(len+3+25,4)), "weapon" : parseInt(text.substr(len+3+29,4)) }); text = text.substr(3+len+33); chars[chars.length] = [ charnum, nick, looks ]; } var div = newDiv(); var characterDiv = newDiv("characterList", ({ "overflow" : "hidden", "border" : "1px outset white", "height" : "100px", "width" : "450px", "marginLeft" : "25px", "marginTop" : "5px"})); var selected = 0; for(i = 0; i < chars.length; i++) { var charDiv = newDiv("char_" + i, ({ "background" : "url('images/chars/char/charskew.php" + "?gender="+chars[i][2]["gender"] + "&base="+chars[i][2]["base"] + "&hairs="+chars[i][2]["hairs"] + "&shirt="+chars[i][2]["shirt"] + "&pants="+chars[i][2]["pants"] + "&boots="+chars[i][2]["boots"] + "&eyes="+chars[i][2]["eyes"] + "&headgear="+chars[i][2]["headgear"] + "&weapon="+chars[i][2]["weapon"] + "')", "height" : "100px", "width" : "60px", "backgroundPosition" : -60*i + "px 0px", "position" : "relative", "left" : 60*i+"px", "top" : -100*i+"px" }) ); charDiv.onclick = new Function("handleCharSelectClick(this)"); charDiv.setAttribute("charnum", chars[i][0]); charDiv.setAttribute("charname", chars[i][1]); characterDiv.appendChild(charDiv); } div.appendChild(characterDiv); div.appendChild(newDiv("charName", ({ "border" : "1px outset white", "height" : "14px", "width" : "450px", "marginLeft" : "25px", "fontFamily" : "Tahoma", "fontSize" : "12px" }))); div.appendChild(newDiv(null, ({ "border" : "1px outset white", "height" : "14px", "width" : "450px", "marginLeft" : "25px", "fontFamily" : "Tahoma", "fontSize" : "12px" })).appendChild(document.createTextNode("Map: -")).parentNode); div.appendChild(newDiv(null, ({ "border" : "1px outset white", "height" : "14px", "width" : "450px", "marginLeft" : "25px", "fontFamily" : "Tahoma", "fontSize" : "12px" })).appendChild(document.createTextNode("Level: -")).parentNode); div.appendChild(newDiv(null, ({ "border" : "1px outset white", "height" : "14px", "width" : "450px", "marginLeft" : "25px", "fontFamily" : "Tahoma", "fontSize" : "12px" })).appendChild(document.createTextNode("Experience: -")).parentNode); div.appendChild(newDiv(null, ({ "border" : "1px outset white", "height" : "14px", "width" : "450px", "marginLeft" : "25px", "fontFamily" : "Tahoma", "fontSize" : "12px" })).appendChild(document.createTextNode("Flinn: -")).parentNode); div.appendChild(newElement("input", null, ({ "type" : "image", "src" : "images/buttons/create.gif", "onclick" : createCharCreateWindow }), ({ "marginLeft" : "25px" }) )); div.appendChild(newElement("input", null, ({ "type" : "image", "src" : "images/buttons/select.gif", "onclick" : pickChar}), ({ "marginLeft" : "364px" }) )); var size = getWindowSize(); var px = (size.width / 2 - 250) + "px"; var py = (size.height / 2 - 137) + "px"; var charSelectWindow = newWindow("CharWindow", 500, 275, "window_quests_old.gif", div); document.getElementById("windowcontainer").appendChild(charSelectWindow); charSelectWindow.style.left = px; charSelectWindow.style.top = py; handleCharSelectClick(document.getElementById("char_0")); } } function handleCharSelectClick(src) { clearChildren(document.getElementById("charName")); document.getElementById("charName").appendChild(document.createTextNode("Name: " + src.getAttribute("charname"))); id = parseInt(src.getAttribute("id").substr(5)); divs = document.getElementById("characterList").childNodes; selectedCharacter = id; if(navigator.userAgent.indexOf("Firefox") != -1) var comp = 450; else var comp = 400; for(i = 0; i < divs.length; i++) { divs[i].style.backgroundPosition = -3*60 - 60 * parseInt(i-id) + "px 0px" divs[i].style.left = (200 + 60*i - 60*id) + "px"; if(parseInt(divs[i].style.left) < 0 || parseInt(divs[i].style.left) > comp) divs[i].style.visibility = 'hidden'; else divs[i].style.visibility = 'visible'; divs[i].style.border = ''; } }function PacketPing() { this.packetId = "AD"; this.len = 10; this.handleData = function(text) { time = parseInt(text); var span = newElement("font",null,({"color":"red"})); span.appendChild(document.createTextNode("Ping: " + (gettimer() - time) + "ms")); addChat("", new Array(span)); } } function PacketChat() { this.packetId = "AE"; this.len = -1; this.handleData = function(text) { addChat(unescape(text.substr(4)), null, parseInt(text.substr(0,4))); } } var mySessionId = null; var myLooks; var currentMap = null; var LoadImagesLeft = 0; var LoadTotalImages = 0; var LoadingTable = null; var LoadingTable2 = null; var mySpawnX, mySpawnY; var loaded = false; var myAlive = true; function PacketYouSpawn() { this.packetId = "AF"; this.len = 63; // .4.3.3.4.14 this.handleData = function(text) { youspawnhandler(text); } } function youspawnhandler(text, checker) { clearTimeout(ordertimeout); selectedType = ""; selectedSessionId = 0; myAlive = true; loaded = false; mySessionId = parseInt(text.substr(0,4)); var x = parseInt(text.substr(4,3)); var y = parseInt(text.substr(7,3)); var mapW = parseInt(text.substr(43,3)); var mapH = parseInt(text.substr(46,3)); myLooks = ( { "gender" : text.substr(10,1), "base" : parseInt(text.substr(11,4)), "hairs" : parseInt(text.substr(15,4)), "shirt" : parseInt(text.substr(19,4)), "pants" : parseInt(text.substr(23,4)), "boots" : parseInt(text.substr(27,4)), "eyes" : parseInt(text.substr(31,4)), "headgear" : parseInt(text.substr(35,4)), "weapon" : parseInt(text.substr(39,4)) }); currentMap = text.substr(49).rtrim(); Log('spawned at (' + x + ',' + y + ') on map ' + currentMap + '('+mapW+','+mapH+') with sessionid ' + mySessionId); for(timer in pathTimers) { if(pathTimers[timer] != null) { Log("Clearing timer... " + pathTimers[timer]); clearTimeout(pathTimers[timer]); count++; } } var count = 0; for(timer in npcPathTimers) { if(npcPathTimers[timer] != null) { Log("Clearing NPCtimer... " + npcPathTimers[timer]); clearTimeout(npcPathTimers[timer]); count++; } } pathTimers = new Array(); npcPathTimers = new Array(); if(count > 0 && checker == null) { setTimeout("youspawnhandler('" + text + "', true)", 500); return; } pathNodes = new Array(); npcPathNodes = new Array(); npcPathTimers = new Array(); pathTimers = new Array(); var main = document.getElementById("main"); clearChildren(main, "chat"); mapcontainer = newDiv("mapcontainer"); main.appendChild(mapcontainer); var chat = document.getElementById("chat"); if(!chat) { chat = newDiv("chat", ({"background" : "#430403", "height" : "133px", "width" : "100%", "position" : "absolute", "bottom" : "0px", "left" : "0px" })); main.appendChild(chat); var chatBack = newDiv(null, ( { "height" : "131px", "width" : "778px", "bottom" : "0px", "right" : "0px", "position" : "absolute", "overflow" : "auto", "border" : "1px solid black", "fontFamily" : "'Courier New'", "background" : "url('images/chatbox.png')", 'zIndex' : '1' } )); chatBack.appendChild(newDiv("chatbox", ({ "height" : "104px", "width" : "770px" , "marginTop" : "2px", "marginLeft" : "8px", "overflow" : "auto"}))); chat.appendChild(chatBack); chat.appendChild(newElement("img", null, ({ "src" : "images/logo.png" }), ({"position" : "absolute", "bottom" : "0px", "left" : "0px", 'zIndex' : '0' }))); var btn = newElement("img", null, ({ "src" : "images/buttons/status-open.gif" }), ({"position" : "absolute", "bottom" : "55px", "left" : "4px", 'zIndex' : '1' })); btn.onclick = function() { toggleWindow("StatusWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/inventory-open.gif" }), ({"position" : "absolute", "bottom" : "81px", "left" : "4px", 'zIndex' : '1' })); btn.onclick = function() { toggleWindow("InventoryWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/equip-open.gif" }), ({"position" : "absolute", "bottom" : "107px", "left" : "4px", 'zIndex' : '1' })); btn.onclick = function() { toggleWindow("EquipWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/skills-open.gif" }), ({"position" : "absolute", "bottom" : "55px", "left" : "51px", 'zIndex' : '1'})); btn.onclick = function() { toggleWindow("SkillsWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/quests-open.gif" }), ({"position" : "absolute", "bottom" : "81px", "left" : "51px", 'zIndex' : '1' })); btn.onclick = function() { toggleWindow("QuestWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/hotkeys-open.gif" }), ({"position" : "absolute", "bottom" : "107px", "left" : "51px", 'zIndex' : '1'})); btn.onclick = function() { toggleWindow("StatusWindow"); } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/logout.gif" }), ({"position" : "absolute", "bottom" : "55px", "left" : "98px", 'zIndex' : '1'})); btn.onclick = function() { if(confirm("Are you sure you want to logout?")) { location.reload(true); } } chat.appendChild(btn); var btn = newElement("img", null, ({ "src" : "images/buttons/options.gif" }), ({"position" : "absolute", "bottom" : "81px", "left" : "98px", 'zIndex' : '1' })); btn.onclick = function() { alert("Not implemented yet") } chat.appendChild(btn); /* var btn = newElement("img", null, ({ "src" : "images/buttons/hotkeys-open.gif" }), ({"position" : "absolute", "bottom" : "107px", "left" : "98px", 'zIndex' : '1'})); btn.onclick = function() { toggleWindow("StatusWindow"); } chat.appendChild(btn);*/ var chatbox = newElement("input", "chatfield"); chatbox.onfocus = function() { chatFocussed = true; } chatbox.onblur = function() { chatFocussed = false; } chatbox.style.width = "724px"; chatbox.style.height ="18px"; chatbox.style.position = 'absolute'; chatbox.style.bottom = '0px'; chatbox.style.right = '44px'; chatbox.style.background = 'transparent'; chatbox.style.border = '0'; chatbox.removeAttribute("readonly"); chatbox.removeAttribute("disabled"); chatbox.onkeydown = chatKeyDown; chatbox.style.zIndex = 2; chat.appendChild(chatbox); } if(!document.getElementById("StatusWindow")) { var cells = new Array(); cells[0] = new Array(); cells[0][0] = [null, ({"width" : "20px"}) ]; cells[0][1] = [null, null ]; cells[0][2] = [null, null ]; cells[0][3] = [null, ({"width" : "20px"}) ]; cells[1] = new Array(); cells[1][0] = [null, null]; cells[1][1] = [document.createTextNode("Level"), null]; cells[1][2] = [document.createTextNode("-"), null, ({"id": "statLE"})]; cells[1][3] = [null, null]; cells[2] = new Array(); cells[2][0] = [null, null]; cells[2][1] = [document.createTextNode("HP/MaxHP"), null]; cells[2][2] = [document.createTextNode("-/-"), null, ({"id": "statHP"})]; cells[2][3] = [null, null]; cells[3] = new Array(); cells[3][0] = [null, null]; cells[3][1] = [document.createTextNode("SP/MaxSP"), null]; cells[3][2] = [document.createTextNode("-/-"), null, ({"id": "statMP"})]; cells[3][3] = [null, null]; cells[4] = new Array(); cells[4][0] = [null, null]; cells[4][1] = [document.createTextNode("Exp/Needed"), null]; cells[4][2] = [document.createTextNode("-/-"), null, ({"id": "statEX"})]; cells[4][3] = [null, null]; cells[5] = new Array(); cells[5][0] = [null, null]; cells[5][1] = [document.createTextNode("Flinn"), null]; cells[5][2] = [document.createTextNode("-"), null, ({"id": "statMO"})]; cells[5][3] = [null, null]; cells[6] = new Array(); cells[6][0] = [null, null]; cells[6][1] = [document.createTextNode("Str"), ({ "cursor" : "help" }), ({ "title" : "Strength: Increases attack damage, adds a little maxHP" })]; cells[6][2] = [document.createTextNode("-"), null, ({"id": "statST"})]; cells[6][3] = [null, null]; cells[7] = new Array(); cells[7][0] = [null, null]; cells[7][1] = [document.createTextNode("Agi"), ({ "cursor" : "help" }), ({ "title" : "Agility: Increases Rate of dodge, speeds up attack a little" })]; cells[7][2] = [document.createTextNode("-"), null, ({"id": "statAG"})]; cells[7][3] = [null, null]; cells[8] = new Array(); cells[8][0] = [null, null]; cells[8][1] = [document.createTextNode("Con"), ({ "cursor" : "help" }), ({ "title" : "Concentration: Increases overall damage range" })]; cells[8][2] = [document.createTextNode("-"), null, ({"id": "statCO"})]; cells[8][3] = [null, null]; cells[9] = new Array(); cells[9][0] = [null, null]; cells[9][1] = [document.createTextNode("Sou"), ({ "cursor" : "help" }), ({ "title" : "Soul: Increases Magic Skill damage, increases overall Magic Skill damage range" })]; cells[9][2] = [document.createTextNode("-"), null, ({"id": "statSO"})]; cells[9][3] = [null, null]; cells[10] = new Array(); cells[10][0] = [null, null]; cells[10][1] = [document.createTextNode("Spi"), ({ "cursor" : "help" }), ({ "title" : "Spirit: Decreases skill cast time, adds a littl maxMP" })]; cells[10][2] = [document.createTextNode("-"), null, ({"id": "statSP"})]; cells[10][3] = [null, null]; cells[11] = new Array(); cells[11][0] = [null, null]; cells[11][1] = [document.createTextNode("Cus1"), ({ "cursor" : "help" }), ({ "title" : "Custom stat, still a mystery ;)" })]; cells[11][2] = [document.createTextNode("-"), null, ({"id": "statC1"})]; cells[11][3] = [null, null]; cells[12] = new Array(); cells[12][0] = [null, null]; cells[12][1] = [document.createTextNode("Cus2"), ({ "cursor" : "help" }), ({ "title" : "Custom stat, still a mystery ;)" })]; cells[12][2] = [document.createTextNode("-"), null, ({"id": "statC2"})]; cells[12][3] = [null, null]; cells[13] = new Array(); cells[13][0] = [null, null]; cells[13][1] = [document.createTextNode("Cus3"), ({ "cursor" : "help" }), ({ "title" : "Custom stat, still a mystery ;)" })]; cells[13][2] = [document.createTextNode("-"), null, ({"id": "statC3"})]; cells[13][3] = [null, null]; /* cells[14] = new Array(); cells[14][0] = [null, null]; cells[14][1] = [document.createTextNode("Skillpoints"), null]; cells[14][2] = [document.createTextNode("-"), null, ({"id": "statSK"})]; cells[14][3] = [null, null];*/ var table = newTable("statsTable", cells); table.style.width = '185px'; table.style.height = '228px'; table.style.fontSize = "12px"; table.style.fontFace = "Arial"; document.getElementById("windowcontainer").appendChild(newWindow("StatusWindow", 200, 275, "statuswindow.gif", table)); toggleWindow("StatusWindow"); } if(!document.getElementById("InventoryWindow")) { var cells = new Array(); cells[0] = new Array(); cells[0][0] = [ newElement("input", "inventoryFilterBox", ({"type" : "text"}), ( {"width" : "135px", "margin" : "0px", "float" : "left", "height" : "20px"} ) ), null ]; cells[0][0][0].onfocus = function() { inventoryFocussed = true; }; cells[0][0][0].onblur = function() { inventoryFocussed = false; }; cells[0][0][0].onkeyup = function() { inventoryFilter(); } ; cells[0][1] = [ newElement("img", "inventoryDisplayType", ({"src" : "images/inventory_type_tile.png"}), ({"width" : "20px", "height" : "20px"})), null]; cells[0][1][0].onclick = function() { inventoryDisplayTypeToggle(); } ; var tempTable = newTable(null, cells); tempTable.style.height = "20px"; var cells = new Array(); cells[0] = new Array(); cells[0][0] = [ null, ({ "width" : "12px"})]; cells[0][1] = [ tempTable, ({ "height" : "20px", "width" : "161px"})]; cells[0][2] = [ null, ({ "width" : "12px"})]; cells[1] = new Array(); cells[1][0] = [ null, ({ "width" : "12px"})]; cells[1][1] = [ newDiv("inventory", ({"height" : "165px", "width" : "161px", "overflow" : "auto", "fontFamily" : "Arial", "fontSize" : "10px" })), ({ "width" : "161px"})]; cells[1][2] = [ null, ({ "width" : "12px"})]; cells[1][1][0].appendChild(document.createTextNode("Loading...")); var table = newTable("inventoryTable", cells); table.style.width = '185px'; table.style.height = '190px'; table.style.marginTop = '30px'; tempTable.style.height = "20px"; var inventoryWindow = newWindow("InventoryWindow", 200, 250, "window_inventory.png", table); inventoryWindow.getElementsByTagName("div")[1].style.overflow = 'hidden'; inventoryWindow.style.display = 'none'; inventoryWindow.style.top = "275px"; document.getElementById("windowcontainer").appendChild(inventoryWindow); } if(!document.getElementById("SkillsWindow")) { var d = newDiv("skillsContainer"); var skillsWindow = newWindow("SkillsWindow", 200, 295, "window_skills.gif", d); skillsWindow.style.display = 'none'; skillsWindow.style.top = "275px"; d.parentNode.appendChild(document.createTextNode("Skillpoints: ")); var s = newElement("span", "statSK"); s.appendChild(document.createTextNode("-")); d.parentNode.appendChild(s); document.getElementById("windowcontainer").appendChild(skillsWindow); } if(!document.getElementById("EquipWindow")) { var equipWindowStuff = newDiv(); equipHead = newDiv("equipHead", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "34px", "top" : "26px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipHead.onclick = function() { startEquip(0); }; equipWindowStuff.appendChild(equipHead); equipBody = newDiv("equipBody", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "200px", "top" : "14px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipBody.onclick = function() { startEquip(1); }; equipWindowStuff.appendChild(equipBody); equipLArm = newDiv("equipLArm", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "34px", "top" : "15px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipLArm.onclick = function() { startEquip(2); }; equipWindowStuff.appendChild(equipLArm); equipRArm = newDiv("equipRArm", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "200px", "top" : "5px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipRArm.onclick = function() { startEquip(3); }; equipWindowStuff.appendChild(equipRArm); equipLegs = newDiv("equipLegs", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "34px", "top" : "4px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipLegs.onclick = function() { startEquip(4); }; equipWindowStuff.appendChild(equipLegs); equipAcc1 = newDiv("equipAcc1", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "200px", "top" : "-10px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipAcc1.onclick = function() { startEquip(5); }; equipWindowStuff.appendChild(equipAcc1); equipFeet = newDiv("equipFeet", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "34px", "top" : "-7px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipFeet.onclick = function() { startEquip(6); }; equipWindowStuff.appendChild(equipFeet); equipAcc2 = newDiv("equipAcc2", ({"border" : "1px solid black", "width" : "24px", "height" : "24px", "position" : "relative", "left" : "200px", "top" : "-19px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipAcc2.onclick = function() { startEquip(7); }; equipWindowStuff.appendChild(equipAcc2); preview = newDiv(null, ({"border" : "1px solid black", "width" : "48px", "height" : "64px", "position" : "relative", "left" : "277px", "top" : "-169px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipWindowStuff.appendChild(preview); fury = newDiv(null, ({"border" : "1px solid black", "width" : "48px", "height" : "48px", "position" : "relative", "left" : "277px", "top" : "-134px", "cursor" : "pointer", "background" : "#DDDCDC" })); equipWindowStuff.appendChild(fury); //equipWindowStuff.onclick = new Function("", "alert('hello world');"); var equipWindow = newWindow("EquipWindow", 375, 255, "window_equip.gif", equipWindowStuff, 200) equipWindow.getElementsByTagName("div")[1].style.overflow = 'hidden'; equipWindow.style.left = "200px"; equipWindow.style.display = 'none'; document.getElementById("windowcontainer").appendChild(equipWindow); } if(!document.getElementById("QuestWindow")) { var div = newDiv(); var treeView = newDiv(null, ({ "width" : "200px", "height" : "258px", "background" : "white", "border" : "1px solid black", "fontFamily" : "Tahoma", "fontSize" : "12px", 'lineHeight' : '0', 'overflow' : 'auto' })); treeView.appendChild(newElement('img', null, ({ "src" : "images/tree/quests.png" }))); treeView.appendChild(document.createTextNode("Quests")); treeView.appendChild(newDiv("tree",({ "whiteSpace" : "nowrap" }))); treeView.className = 'floatleft'; div.appendChild(treeView); questDesc = newDiv("QuestDesc", ({ "border" : "1px inset #CCCCCC", "height" : "248px", "width" : "280px", "overflow" : "auto", "fontFamily" : "Tahoma", "fontSize" : "12px", "padding" : "5px" }) ); questDesc.className = 'floatleft'; div.appendChild(questDesc); var wnd = newWindow("QuestWindow", 500, 288, "window_quests.gif", div, 198); wnd.getElementsByTagName("div")[1].style.overflow = 'hidden'; wnd.style.left = "200px"; wnd.style.display = 'none'; document.getElementById("windowcontainer").appendChild(wnd); } quests = new Array(); clearChildren(document.getElementById("tree")); if(!document.getElementById("statoverview")) { var overview = newDiv("statoverview", ({ "position" : "absolute", "top" : "0px", "left" : "0px", "height" : "100px", "width" : "160px", "background" : "url('images/top_stat.png')", "overflow" : "hidden", "zIndex" : "1000" }) ); var btn = newDiv("statLE2", ({ "width" : "30px", "height" : "100px", "fontSize" : "14px", "fontFamily" : "Trebuchet MS", "paddingTop" : "50px", "color" : "white", "textAlign" : "center" }) ); btn.className = "floatleft"; btn.onclick = new Function("this.parentNode.style.width = (this.parentNode.style.width == '160px' ? '30px' : '160px')"); overview.appendChild(btn); var namediv = newDiv("nameDiv", ({ "color" : "white", "fontFamily" : "Trebuchet MS", "fontSize" : "10px", "marginLeft" : "66px", "marginTop" : "1px" }) ); overview.appendChild(namediv); namediv.appendChild(document.createTextNode(myCharName)); var titlediv = newDiv("titleDiv", ({ "color" : "white", "fontFamily" : "Trebuchet MS", "fontSize" : "10px", "marginLeft" : "66px", "marginTop" : "-1px" }) ); overview.appendChild(titlediv); titlediv.appendChild(document.createTextNode("Newbie")); overview.appendChild(newDiv("hpbar", ({ "background" : "#FFAAAA", "height" : "9px", "width" : "0px", "marginTop" : "3px", "marginLeft" : "43px" }) )); overview.appendChild(newDiv("mpbar", ({ "background" : "#FFAAAA", "height" : "9px", "width" : "0px", "marginTop" : "3px", "marginLeft" : "43px" }) )); overview.appendChild(newDiv("expbar", ({ "background" : "#FFAAAA", "height" : "9px", "width" : "0px", "marginTop" : "3px", "marginLeft" : "43px" }) )); overview.appendChild(newDiv("statMO2", ({ "marginTop" : "2px", "marginLeft" : "75px", "fontFamily" : "Trebuchet MS", "fontSize" : "10px", "color" : "black" }) )); document.getElementById("windowcontainer").appendChild(overview); } fixpositions(); LoadTotalImages = -1; LoadImagesLeft = 0; var cells = new Array(); for(i = 0; i < mapH/16; i++) { cells[i] = new Array(); for(ii = 0; ii < mapW/16; ii++) { LoadImagesLeft++; cells[i][ii] = [newElement("img", null, ( { "onload" : ImageLoaded, "src" : "maps/"+currentMap+"/tile" + (i*16) + "," + (ii*16) + ".png"})), ({"width" : "512px"})]; } } LoadingTable = newTable("maintable", cells); LoadingTable.style.height = (mapH*32)+'px'; LoadingTable.style.width = (mapW*32)+'px'; LoadingTable.style.marginBottom = '-'+(mapH*32)+'px'; LoadingTable.onclick = handleMapClick; LoadingTable.onmousedown = function() { return false; } LoadingTable.onmouseup = function() { return false; } /* var cells = new Array(); for(i = 0; i < 4; i++) { cells[i] = new Array(); for(ii = 0; ii < 4; ii++) { LoadImagesLeft++; cells[i][ii] = [newElement("img", null, ( { "onload" : ImageLoaded, "src" : "maps/"+currentMap+"/top" + (i*16) + "," + (ii*16) + ".gif"} ) ), ({"width" : "512px"}), ({ "zIndex" : "10000"})]; // cells[i][ii][0].onload = ImageLoaded; } } LoadingTable2 = newTable("toptable", cells); LoadingTable2.style.height = '2048px'; LoadingTable2.style.width = '2048px'; LoadingTable2.style.position = "relative"; LoadingTable2.style.marginBottom = '-2048px'; LoadingTable2.onclick = handleMapClick; LoadingTable2.onmousedown = function() { return false; } LoadingTable2.onmouseup = function() { return false; } LoadingTable2.onmousemove = handleMouseMove; */ mySpawnX = x; mySpawnY = y; var size = getWindowSize(); var left = size.width/2 - 100; var top = size.height/2 - 10; loadDiv = newDiv("loaddiv", ({"position" : "absolute", "width" : "200px", "height" : "150px", "background" : "url('images/loading_empty.png')", "top" : top+"px", "left" : left+"px", "zIndex" : "10000" })); loadDiv.appendChild(newDiv("percentdiv", ({"width" : "0%", "height" : "150px", "background" : "url('images/loading_bar.png')"}))); // alert(loadDiv.innerHTML); document.getElementById("main").appendChild(loadDiv); if(LoadImagesLeft == 0 && !loaded) { loaded = true; Log("Done Loading2"); xmls.SendPacket("AL", false,""); document.getElementById("main").removeChild(document.getElementById("loaddiv")); mapcontainer.appendChild(LoadingTable); // mapcontainer.appendChild(LoadingTable2); spawnChar(myCharName, mySessionId, mySpawnX, mySpawnY, myLooks,0); var a = parseInt(document.getElementById("char"+mySessionId).style.top) - parseInt(mapcontainer.style.height) / 2; if(a > parseInt(LoadingTable.style.height) - parseInt(mapcontainer.style.height)) a = parseInt(LoadingTable.style.height) - parseInt(mapcontainer.style.height); var b = parseInt(document.getElementById("char"+mySessionId).style.left) - parseInt(mapcontainer.style.width) / 2; if(b > parseInt(LoadingTable.style.width) - parseInt(mapcontainer.style.width)) b = parseInt(LoadingTable.style.width) - parseInt(mapcontainer.style.width); document.getElementById("mapcontainer").scrollTop = a; document.getElementById("mapcontainer").scrollLeft= b; mapcontainer.style.background = "url('maps/"+currentMap+"/back.gif')"; LoadingTable = null; LoadingTable2 = null; ordermap(); } LoadTotalImages = LoadImagesLeft; Log("Loading..."); } //} function ImageLoaded() { if(loaded) return; LoadImagesLeft--; // Log("Loaded part..."); if(document.getElementById("percentdiv")) document.getElementById("percentdiv").style.width = ((LoadTotalImages-LoadImagesLeft) / LoadTotalImages * 100) + "%"; if(LoadImagesLeft <= 0 && LoadTotalImages != -1) { loaded = true; Log("Done Loading"); xmls.SendPacket("AL", false,""); document.getElementById("main").removeChild(document.getElementById("loaddiv")); mapcontainer.appendChild(LoadingTable); // mapcontainer.appendChild(LoadingTable2); spawnChar(myCharName, mySessionId, mySpawnX, mySpawnY, myLooks,0); var a = parseInt(document.getElementById("char"+mySessionId).style.top) - parseInt(mapcontainer.style.height) / 2; if(a > parseInt(LoadingTable.style.height) - parseInt(mapcontainer.style.height)) a = parseInt(LoadingTable.style.height) - parseInt(mapcontainer.style.height); var b = parseInt(document.getElementById("char"+mySessionId).style.left) - parseInt(mapcontainer.style.width) / 2; if(b > parseInt(LoadingTable.style.width) - parseInt(mapcontainer.style.width)) b = parseInt(LoadingTable.style.width) - parseInt(mapcontainer.style.width); document.getElementById("mapcontainer").scrollTop = a; document.getElementById("mapcontainer").scrollLeft= b; document.getElementById("mapcontainer").style.background = "url('maps/"+currentMap+"/back.gif')"; LoadingTable = null; LoadingTable2 = null; ordermap(); } };var npcs = new Array(); function PacketOtherSpawn() { this.packetId = "AH"; this.len = 68; // .4.3.3.1.4 this.handleData = function(text) { var sessionId = parseInt(text.substr(0,4)); var x = parseInt(text.substr(4,3)); var y = parseInt(text.substr(7,3)); var charType = parseInt(text.substr(10,1)); var clickOnce = false; if(charType == 9) { charType = 1; clickOnce = true; } var looks; if(charType != 0) looks = parseInt(text.substr(11,4)); else { looks = ( { "gender" : text.substr(11,1), "base" : parseInt(text.substr(12,4)), "hairs" : parseInt(text.substr(16,4)), "shirt" : parseInt(text.substr(20,4)), "pants" : parseInt(text.substr(24,4)), "boots" : parseInt(text.substr(28,4)), "eyes" : parseInt(text.substr(32,4)), "headgear" : parseInt(text.substr(36,4)), "weapon" : parseInt(text.substr(40,4)) }); } var nick = text.substr(44).rtrim(); //Log("Spawning " + nick + " of type " + charType + ", id=" + sessionId); if(sessionId == mySessionId) { Log("You are getting a spawn packet for yourself!"); return; } spawnChar(nick, sessionId, x, y, looks, charType, clickOnce); } } function PacketOtherUnSpawn() { this.packetId = "AI"; this.len = 4; // .4 this.handleData = function(text) { var sessionId = parseInt(text.substr(0,4)); if(sessionId == mySessionId) return; charContainer = document.getElementById("char" + sessionId); if(charContainer) document.getElementById("mapcontainer").removeChild(charContainer); if(pathNodes[sessionId]) pathNodes[sessionId] = new Array(); if(pathTimers[sessionId]) { clearTimeout(pathTimers[sessionId]); pathTimers[sessionId] = null; } } } function PacketWalkPath() { this.packetId = "AK"; this.len = -1; this.handleData = function(text) { var sessionId = parseInt(text.substr(0,4)); var type = parseInt(text.substr(4,1)); var walkSpeed = parseInt(text.substr(5,4)); text = text.substr(9); //Log("Char " + sessionId + " of type " + type + " is walking at " + walkSpeed + " speed"); if(type == 0) { if(!document.getElementById("char" + sessionId)) return; if(pathTimers[sessionId] != null) clearTimeout(pathTimers[sessionId]); pathNodes[sessionId] = new Array(); i = 0; while(text != "") { pathNodes[sessionId][i] = ( { "x" : parseInt(text.substr(0,3)), "y" : parseInt(text.substr(3,3)) } ); text = text.substr(6); i++; } if(pathNodes[sessionId].length > 0) { walkSpeeds[sessionId] = walkSpeed; pathTimers[sessionId] = setTimeout("walkpath(" + sessionId + ", "+gettimer()+")", 0); } } else { if(!document.getElementById("mob" + sessionId)) return; if(npcPathTimers[sessionId] != null) clearTimeout(npcPathTimers[sessionId]); npcPathNodes[sessionId] = new Array(); i = 0; while(text != "") { npcPathNodes[sessionId][i] = ( { "x" : parseInt(text.substr(0,3)), "y" : parseInt(text.substr(3,3)) } ); text = text.substr(6); i++; } if(npcPathNodes[sessionId].length > 0) { npcWalkSpeeds[sessionId] = walkSpeed; npcPathTimers[sessionId] = setTimeout("npcWalkpath(" + sessionId + ", "+gettimer()+"," + type + ")", 0); } } } } function PacketNpcDialog() { this.packetId = "AN"; this.len = -1; this.handleData = function(text) { var httpobj = getHTTPObject(); httpobj.onreadystatechange = function() { if (httpobj.readyState == 4) { var npcDiv = newDiv(null, ({ "overflow" : "auto", "marginLeft" : "15px", "marginRight" : "15px", "marginBottom" : "50px", "marginTop" : "50px" // "height" : "255px", // "width" : "220px", // "fontFamily" : "Arial", // "fontSize" : "12px" })); npcDiv.className = "npcdialog"; npcDiv.innerHTML = httpobj.responseText; var size = getWindowSize(); var wnd = newWindow("NpcDialogWindow", 254, 343, "window_npc.gif", npcDiv); wnd.style.left = (size.width / 2 - 150) + "px"; wnd.style.top = (size.height / 2 - 200) + "px"; document.getElementById("windowcontainer").appendChild(wnd); } } httpobj.open("GET", "npc/" + text , true); httpobj.send(null); // addChat(unescape(text), null, -1); } } function PacketInventory () { this.packetId = "AP"; this.len = -1; this.handleData = function(text) { inventory = new Array(); while(text != "") { var sessionId = parseInt(text.substr(0,3)); var amount = parseInt(text.substr(3,3)); var itemId = parseInt(text.substr(6,4)); inventory[inventory.length] = ( { "sessionId" : sessionId, "amount" : amount, "itemId" : itemId } ); text = text.substr(10); } inventoryFilter(); } } function PacketInventoryAdd () { this.packetId = "AQ"; this.len = 10; this.handleData = function(text) { var sessionId = parseInt(text.substr(0,3)); var amount = parseInt(text.substr(3,3)); var itemId = parseInt(text.substr(6,4)); inventory[inventory.length] = ( { "sessionId" : sessionId, "amount" : amount, "itemId" : itemId } ); inventoryFilter(); } } function PacketInventoryChange () { this.packetId = "AS"; this.len = 6; this.handleData = function(text) { var sessionId = parseInt(text.substr(0,3)); var amount = parseInt(text.substr(3,3)); for(i = 0; i < inventory.length; i++) { if(inventory[i].sessionId == sessionId) { inventory[i].amount = amount; break; } } inventoryFilter(); } } var myStats = new Array(); function PacketStatusChange () { this.packetId = "AT"; this.len = 10; this.handleData = function(text) { var value = parseInt(text.substr(2)); var stat = text.substr(0,2); myStats[stat] = value; if(document.getElementById("stat" + stat + "2")) { clearChildren(document.getElementById("stat" + stat + "2")); document.getElementById("stat" + stat + "2").appendChild(document.createTextNode(value)); } if(stat == "MH" || stat == "HP") { clearChildren(document.getElementById("statHP")); document.getElementById("statHP").appendChild(document.createTextNode(myStats["HP"] + "/" + myStats["MH"])); if(myStats["MH"] != null && myStats["HP"] != null) { document.getElementById("hpbar").style.width = (84 * myStats["HP"] / myStats["MH"]) + "px"; document.getElementById("hpbar").style.background = "#" + fixrgb(255,68,68, 107,210,84, myStats["HP"] / myStats["MH"]); } } else if(stat == "MM" || stat == "MP") { clearChildren(document.getElementById("statMP")); document.getElementById("statMP").appendChild(document.createTextNode(myStats["MP"] + "/" + myStats["MM"])); if(myStats["MP"] != null && myStats["MM"] != null) { document.getElementById("mpbar").style.width = (84 * myStats["MP"] / myStats["MM"]) + "px"; document.getElementById("mpbar").style.background = "#" + fixrgb(255,68,68, 68,191,255, myStats["MP"] / myStats["MM"]); } } else if(stat == "ME" || stat == "EX") { clearChildren(document.getElementById("statEX")); document.getElementById("statEX").appendChild(document.createTextNode(myStats["EX"] + "/" + myStats["ME"])); if(myStats["EX"] != null && myStats["ME"]) { document.getElementById("expbar").style.width = (84 * myStats["EX"] / myStats["ME"]) + "px"; document.getElementById("expbar").style.background = "#" + fixrgb(255,68,68, 244,234,78, myStats["EX"] / myStats["ME"]); } } else if(!document.getElementById("stat" + stat)) { Log("Warning: stat '" + stat + "' not found"); } else { clearChildren(document.getElementById("stat" + stat)); document.getElementById("stat" + stat).appendChild(document.createTextNode(value)); } } } function fixrgb(r1,g1,b1, r2,g2,b2, i) { var r = r1 + i * (r2 - r1); var g = g1 + i * (g2 - g1); var b = b1 + i * (b2 - b1); return dechex(r) + dechex(g) + dechex(b); }function PacketInventoryDel () { this.packetId = "AR"; this.len = 3; this.handleData = function(text) { var sessionId = parseInt(text.substr(0,3)); for(i = 0; i < inventory.length; i++) { if(inventory[i].sessionId == sessionId) { inventory.splice(i,1); break; } } inventoryFilter(); } } function PacketAttack() { this.packetId = "AV"; this.len = 14; this.handleData = function(text) { var srcType = parseInt(text.substr(0,1)); var srcId = parseInt(text.substr(1,4)); var dstType = parseInt(text.substr(5,1)); var dstId = parseInt(text.substr(6,4)); var dmg = parseInt(text.substr(10,4)); if(srcType == 0 && srcId == mySessionId && !myAlive) return; if(srcType == 0) { clearTimeout(charAnimations[srcId]); charAnimations[srcId]= setTimeout("attackAnimation("+srcType+","+srcId+","+dstType+","+dstId+")",0); } else { clearTimeout(npcAnimations[srcId]); npcAnimations[srcId]= setTimeout("attackAnimation("+srcType+","+srcId+","+dstType+","+dstId+")",0); } var newid = "dmg_" + Math.random(); var div = newDiv(newid, ( { "height" : "30px", "width" : "100px", "position" : "relative", "zIndex" : "10000", "marginBottom" : "-30px" } ) ); div.onclick = new Function("e", "handleMapClick(e)"); var header = newElement("h1", null, ({ "className" : "split", "title" : dmg == 0 ? "Miss" : dmg })); header.appendChild(newElement("span")); header.getElementsByTagName("span")[0].appendChild(document.createTextNode(dmg == 0 ? "Miss" : dmg)); div.appendChild(header); if(dstType == 0) { if(!document.getElementById("char" + dstId)) return; div.style.top = (parseInt(document.getElementById("char" + dstId).style.top)-4) + "px"; div.style.left = (parseInt(document.getElementById("char" + dstId).style.left)+60) + "px"; } else { if(!document.getElementById("mob" + dstId)) return; div.style.top = (parseInt(document.getElementById("mob" + dstId).style.top)-4) + "px"; div.style.left = (parseInt(document.getElementById("mob" + dstId).style.left)+60) + "px"; } document.getElementById("mapcontainer").appendChild(div); setTimeout("animateDamage('" + newid + "', " + gettimer() + ")", 20); } } function respawn() { document.getElementById("windowcontainer").removeChild(document.getElementById("RespawnWindow")); xmls.SendPacket("BS",false,""); } function PacketDie() { this.packetId = "AW"; this.len = 5; this.handleData = function(text) { var type = parseInt(text.substr(0,1)); var id = parseInt(text.substr(1,4)); var charDiv = null; if(type == 0) { charDiv = document.getElementById("char" + id); charDiv.getElementsByTagName("div")[0].style.backgroundPosition = "0px " + (-8 * charDiv.getAttribute("imageheight")) + "px"; clearTimeout(charAnimations[id]); myAlive = false; if(id == mySessionId) { var contents = newDiv(null, ({ "fontFamily" : "Tahoma", "fontSize" : "11px" }) ); contents.appendChild(document.createTextNode("You have died. Click respawn to return to your savepoint. You got a 3% experience penalty and a 5% gold cut")); contents.appendChild(document.createElement("br")); contents.appendChild(document.createElement("br")); contents.appendChild(newElement("input", null, ({ "type" : "image", "src" : "images/buttons/respawn.gif", "onclick" : respawn }))); var size = getWindowSize(); var px = (size.width / 2 - 100) + "px"; var py = (size.height / 2 - 60) + "px"; var wnd = newWindow("RespawnWindow", 200, 120, "window_login.gif", contents); wnd.style.left = px; wnd.style.top = py; document.getElementById("windowcontainer").appendChild(wnd); } if(pathTimers[id]) clearTimeout(pathTimers[id]); pathNodes[id] = new Array(); return; } else if(type == 1) charDiv = document.getElementById("npc" + id); else if(type == 2) charDiv = document.getElementById("mob" + id); if(!charDiv) { Log("Could not find die-div "); return; } if(((type == 0 && selectedType == "pc") || (type > 0 && selectedType == "npc")) && id == selectedSessionId) { selectedSessionId = 0; selectedType = 0; } if(npcPathTimers[id]) clearTimeout(npcPathTimers[id]); npcPathNodes[id] = new Array(); if(type == 2) { deathAnimation("mob" + id,0); } else charDiv.parentNode.removeChild(charDiv); } } function deathAnimation(id,frame) { var charDiv = document.getElementById(id) if(frame == 8) { charDiv.parentNode.removeChild(charDiv); return; } charDiv.getElementsByTagName("div")[0].style.backgroundPosition = "-" + (parseInt(charDiv.getAttribute("imagewidth"))*frame) + "px -" + (parseInt(charDiv.getAttribute("imageheight"))*8) + "px"; setTimeout("deathAnimation('" + id + "', " + (frame+1) + ")", 100); } function PacketEquipAvailable () { this.packetId = "AZ"; this.len = -1; this.handleData = function(text) { locationid = parseInt(text.substr(0,1)); text = text.substr(1); var ul = newElement("ul",null, null, ({ "listStyleType" : "none", "padding" : "0px", "fontFamily" : "Arial", "fontSize" : "11px", "margin" : "0px" })); var link = newElement("a",null, ({ "href" : "javascript:sendEquip(" + locationid + " , 0)" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(document.createTextNode("Unequip")); ul.appendChild(newElement("li").appendChild(link).parentNode); while(text != "") { var itemId = parseInt(text.substr(0,4)); var sessionId = parseInt(text.substr(4,3)); text = text.substr(7); var link = newElement("a",null, ({ "href" : "javascript:sendEquip(" + locationid + ", " + sessionId + ")" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(newElement("img", null, ({"src" : "images/items/icon.php?id=" + itemId}))); link.appendChild(document.createTextNode(itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue)); //link.appendChild(newElement("img", null, ({"src" : "images/items/itemname.php?id=" + itemId, "title" : itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue}))); ul.appendChild(newElement("li").appendChild(link).parentNode); } var link = newElement("a",null, ({ "href" : "javascript:closeEquipList()" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(document.createTextNode("Cancel")); // link.appendChild(newElement("img", null, ({"src" : "images/font.php?txt=Cancel", "title" : "Cancel"}))); ul.appendChild(newElement("li").appendChild(link).parentNode); var size = getWindowSize(); var wnd = newWindow("EquipListWindow", 200, 275, "window_equiplist.gif", ul); wnd.style.left = (size.width / 2 - 100) + "px"; wnd.style.top = (size.height / 2 - 137) + "px"; document.getElementById("windowcontainer").appendChild(wnd); } } function PacketEquip () { this.packetId = "BA"; this.len = 5; this.handleData = function(text) { var equipLoc = parseInt(text.substr(0,1)); var itemId = parseInt(text.substr(1)); // itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue var equipPanel = ""; if(equipLoc == 0) equipPanel = "equipHead"; else if (equipLoc == 1) equipPanel = "equipBody"; else if (equipLoc == 2) equipPanel = "equipLArm"; else if (equipLoc == 3) equipPanel = "equipRArm"; else if (equipLoc == 4) equipPanel = "equipLegs"; else if (equipLoc == 5) equipPanel = "equipAcc1"; else if (equipLoc == 6) equipPanel = "equipFeet"; else if (equipLoc == 7) equipPanel = "equipAcc2"; else alert("Wrong equip spot"); equipPanel = document.getElementById(equipPanel); if(itemId == 0) equipPanel.style.background = "#DDDCDC"; else equipPanel.style.background = "url('images/items/icon.php?id=" + itemId + "')"; } } function PacketSetLook () { this.packetId = "BB"; this.len = 37; this.handleData = function(text) { var id = parseInt(text.substr(0,4)); var looks = ( { "gender" : text.substr(4,1), "base" : parseInt(text.substr(5,4)), "hairs" : parseInt(text.substr(9,4)), "shirt" : parseInt(text.substr(13,4)), "pants" : parseInt(text.substr(17,4)), "boots" : parseInt(text.substr(21,4)), "eyes" : parseInt(text.substr(25,4)), "headgear" : parseInt(text.substr(29,4)), "weapon" : parseInt(text.substr(33,4)) }); url = "images/chars/char/char.php?a=1"; for(x in looks) url += "&" + x + "=" + looks[x]; document.getElementById("char" + id).getElementsByTagName("div")[0].style.background = "url('" + url + "')"; } } function PacketStop() { this.packetId = "AX"; this.len = 11; this.handleData = function(text) { var sessionId = parseInt(text.substr(0,4)); var type = parseInt(text.substr(4,1)); var posX = parseInt(text.substr(5,3)); var posY = parseInt(text.substr(8,3)); if(type == 0) { // if(pathTimers[sessionId]) // clearTimeout(pathTimers[sessionId]); // pathNodes[sessionId] = new Array(); } else { for(i = 0; i < npcPathNodes[sessionId]; i++) { if(npcPathNodes[sessionId][i].x == posX && npcPathNodes[sessionId][i].y == posY) { npcPathNodes[sessionId] = npcPathNodes[sessionId].splice(0, i-1); return; } } if(npcPathTimers[sessionId]) clearTimeout(npcPathTimers[sessionId]); npcPathTimers.splice(sessionId,1); npcPathNodes[sessionId] = new Array(); var myChar; if(type == 1) myChar = document.getElementById("npc" + sessionId); else myChar = document.getElementById("mob" + sessionId); myChar.style.left = (32*posX-parseInt(myChar.getAttribute("imageoffset"))+8) + "px"; myChar.style.top = (32*posY-18-(parseInt(myChar.getAttribute("imageheight"))-50)) + "px"; } } } function PacketSkillList () { this.packetId = "BH"; this.len = -1; this.handleData = function(text) { skills = new Array(); while(text != "") { var skillId = parseInt(text.substr(0,3)); var maxLevel = parseInt(text.substr(3,2)); var curLevel = parseInt(text.substr(5,2)); var lvlup = parseInt(text.substr(7,1)); skills[skills.length] = new newSkill(skillId, maxLevel, curLevel, lvlup); text = text.substr(8); } skillsFilter(); } } function PacketSkillAvailable () { this.packetId = "BI"; this.len = 8; this.handleData = function(text) { var skillId = parseInt(text.substr(0,3)); var maxLevel = parseInt(text.substr(3,2)); var curLevel = parseInt(text.substr(5,2)); var lvlup = parseInt(text.substr(7,1)); for(i = 0; i < skills.length; i++) { if(skills[i].id == skillId) { skills[i] = new newSkill(skillId, maxLevel, curLevel, lvlup); skillsFilter(); return; } } skills[skills.length] = new newSkill(skillId, maxLevel, curLevel, lvlup); skillsFilter(); } } function PacketSkillUsed () { this.packetId = "BG"; this.len = 13; this.handleData = function(text) { skillId = parseInt(text.substr(0,3)); delay = parseInt(text.substr(3,5)); charType = parseInt(text.substr(8,1)); charId = parseInt(text.substr(9,4)); newid = "skillBar" + charType + "_" + charId; if(document.getElementById(newid)) { // clearTimeout(chatCloudTimeout[sessionId]); // document.getElementById("mapcontainer").removeChild(document.getElementById(newid)); Log("This character is already casting..."); } var div = newDiv(newid, ( { "border" : "1px solid black", "background" : "red", "height" : "8px", "width" : "50px", "position" : "relative", "zIndex" : "10000", "marginBottom" : "-8px" } ) ); var progressDiv = newDiv(null, ({ "background" : "green", "height" : "8px", "width" : "0px" })); div.appendChild(progressDiv); if(charType == 0) { div.style.top = (parseInt(document.getElementById("char" + charId).style.top)-4) + "px"; div.style.left = (parseInt(document.getElementById("char" + charId).style.left) - 15+55) + "px"; } else { div.style.top = (parseInt(document.getElementById("npc" + charId).style.top)-4) + "px"; div.style.left = (parseInt(document.getElementById("npc" + charId).style.left) - 15+55) + "px"; } document.getElementById("mapcontainer").appendChild(div); setTimeout("animateSkillBar('" + newid + "', " + delay + ", " + gettimer() + ")", 100); } } function PacketEffect() { this.packetId = "BJ"; this.len = 8; this.handleData = function(text) { charType = parseInt(text.substr(0,1)); charId = parseInt(text.substr(1,4)); effect = parseInt(text.substr(5,3)); var randval = Math.random(); newid = "effect_" + randval; var img = document.createElement("img"); img.id = newid; img.style.position = "relative"; img.style.width = effectdb.getElementsByTagName("effect" + effect)[0].getAttribute("width") + "px"; img.style.height = effectdb.getElementsByTagName("effect" + effect)[0].getAttribute("height") + "px"; img.style.marginBottom = "-" + effectdb.getElementsByTagName("effect" + effect)[0].getAttribute("height") + "px"; img.style.zIndex = "10000"; img.src = "images/effects/"+effect+".gif?" + randval; img.style.display = 'block'; if(charType == 0) el = document.getElementById("char" + charId); else el = document.getElementById("mob" + charId) img.style.top = (parseInt(el.style.top) + (el.getAttribute("imageheight")/2) - parseInt(effectdb.getElementsByTagName("effect" + effect)[0].getAttribute("height"))/2) + "px"; img.style.left = (parseInt(el.style.left) - 32 + parseInt(el.firstChild.style.marginLeft) + el.getAttribute("imagewidth")/2 - parseInt(effectdb.getElementsByTagName("effect" + effect)[0].getAttribute("width"))/2) + "px"; img.onclick = new Function("e", "handleMapClick(e)"); document.getElementById("mapcontainer").appendChild(img); img.onload = new Function("","setTimeout('document.getElementById(\"" + newid + "\").parentNode.removeChild(document.getElementById(\"" + newid + "\"))', 5000);"); } } function PacketShop () { this.packetId = "BK"; this.len = -1; this.handleData = function(text) { var div = document.createElement("div"); var cells = new Array(); cells[0] = new Array(); cells[0][0] = [null, null]; cells[0][1] = [document.createTextNode("Cost"), null]; cells[0][2] = [document.createTextNode("Amount"), null]; cells[0][3] = [document.createTextNode("Total"), null]; while(text != "") { var itemId = parseInt(text.substr(0,4)); var cost = parseInt(text.substr(4,7)); text = text.substr(11); var link = newElement("a",null, ({ "href" : "javascript:buyItem(" + itemId + ")" }), ({"color" : "black", "textDecoration" : "none", "float" : "left" }) ); link.appendChild(newElement("img", null, ({"src" : "images/items/icon.php?id=" + itemId}))); link.appendChild(document.createTextNode(itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue)); //link.appendChild(newElement("img", null, ({"src" : "images/items/itemname.php?id=" + itemId, "title" : itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue}))); var i = cells.length; cells[i] = new Array(); cells[i][0] = [ link, null ]; cells[i][1] = [ document.createTextNode(cost + " Flinn"), null, ({ "id" : "itemBuyCost_" + itemId }) ]; cells[i][2] = [ newElement("input", "itemBuyAmount_" + itemId, ({ "size" : "5", "value" : "0", "maxLength" : "5" })), null ]; cells[i][2][0].onkeyup = new Function("","changeShopItem(this)"); cells[i][3] = [ document.createTextNode("0"), null, ({ "id" : "itemBuyCostTotal_" + itemId }) ]; } var div2 = newDiv(null, ({ "height" : "218px", "overflow" : "auto" })); div.appendChild(div2); var table = newTable(null, cells); table.width = "100%"; div2.appendChild(table); var bottomdiv = newDiv(null, ({ "height" : "30px" })); var dd = newDiv(null, ({ "textAlign" : "right", "width" : "185px" })); dd.className = "floatright"; var d = newDiv("totalAmount", ({ "fontFace" : "arial", "fontSize" : "12px", "textAlign" : "right"}) ); d.appendChild(document.createTextNode("Total: 0 Flinn")); dd.appendChild(d); var d = newDiv(null, ({ "fontFace" : "arial", "fontSize" : "12px", "textAlign" : "right"})); d.appendChild(document.createTextNode("You have: " + document.getElementById("statMO").firstChild.nodeValue + " Flinn")); dd.appendChild(d); bottomdiv.appendChild(dd); var link = newElement("a",null, ({ "href" : "javascript:npcShopClose()" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(newElement("img", null, ({"src" : "images/buttons/close.gif", "title" : "Cancel"}))); bottomdiv.appendChild(link); var link = newElement("a",null, ({ "href" : "javascript:npcShopBuy()" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(newElement("img", null, ({"src" : "images/buttons/buy.gif", "title" : "Cancel"}))); bottomdiv.appendChild(link); div.appendChild(bottomdiv); var size = getWindowSize(); var wnd = newWindow("ShopWindow", 300, 275, "window_shopbuy.gif", div); wnd.style.left = (size.width / 2 - 100) + "px"; wnd.style.top = (size.height / 2 - 137) + "px"; document.getElementById("windowcontainer").appendChild(wnd); } } function PacketShopSell () { this.packetId = "BM"; this.len = -1; this.handleData = function(text) { var div = document.createElement("div"); var cells = new Array(); cells[0] = new Array(); cells[0][0] = [null, null]; cells[0][1] = [document.createTextNode("Flinn"), null]; cells[0][2] = [document.createTextNode(""), null]; cells[0][3] = [document.createTextNode(""), null]; cells[0][4] = [document.createTextNode("Max"), null]; cells[0][5] = [document.createTextNode("Total"), null]; while(text != "") { var itemId = parseInt(text.substr(0,4)); var sessionId = parseInt(text.substr(4,3)); var amount = parseInt(text.substr(7,3)); var cost = parseInt(text.substr(10,7)); text = text.substr(17); var link = newElement("a",null, ({ "href" : "javascript:sellItem(" + itemId + ")" }), ({"color" : "black", "textDecoration" : "none", "float" : "left" }) ); link.appendChild(newElement("img", null, ({"src" : "images/items/icon.php?id=" + itemId}))); link.appendChild(document.createTextNode(itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue)); //link.appendChild(newElement("img", null, ({"src" : "images/items/itemname.php?id=" + itemId, "title" : itemdb.getElementsByTagName("item" + itemId)[0].firstChild.nodeValue}))); var i = cells.length; cells[i] = new Array(); cells[i][0] = [ link, null ]; cells[i][1] = [ document.createTextNode(cost + " Flinn"), null, ({ "id" : "itemSellCost_" + sessionId }) ]; cells[i][2] = [ document.createTextNode(amount), null, ({ "id" : "itemSellTotalAmount_" + sessionId }) ]; cells[i][3] = [ newElement("input", "itemSellAmount_" + sessionId, ({ "size" : "3", "value" : "0", "maxLength" : "3" })), null ]; cells[i][3][0].onkeyup = new Function("","changeShopItemSell(this)"); cells[i][3][0].onchange = new Function("","changeShopItemSell(this)"); cells[i][4] = [ newElement("img", null, ({ "src" : "images/buttons/max.gif" })), null ]; cells[i][4][0].onclick = new Function("","setSellMax(" + sessionId + ", " + amount + ");"); cells[i][5] = [ document.createTextNode("0"), null, ({ "id" : "itemSellCostTotal_" + sessionId }) ]; } var div2 = newDiv(null, ({ "height" : "218px", "overflow" : "auto" })); div.appendChild(div2); var table = newTable(null, cells); table.width = "100%"; div2.appendChild(table); var bottomdiv = newDiv(null, ({ "height" : "30px" })); var dd = newDiv(null, ({ "display" : "inline-block", "textAlign" : "right", "width" : "185px" })); dd.className = "floatright"; var d = newDiv("totalAmount", ({ "fontFace" : "arial", "fontSize" : "12px"}) ); d.appendChild(document.createTextNode("Total: 0 Flinn")); dd.appendChild(d); bottomdiv.appendChild(dd); var link = newElement("a",null, ({ "href" : "javascript:npcShopClose()" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(newElement("img", null, ({"src" : "images/buttons/close.gif", "title" : "Cancel"}))); bottomdiv.appendChild(link); var link = newElement("a",null, ({ "href" : "javascript:npcShopSell()" }), ({"color" : "black", "textDecoration" : "none"}) ); link.appendChild(newElement("img", null, ({"src" : "images/buttons/sell.gif", "title" : "Cancel"}))); bottomdiv.appendChild(link); div.appendChild(bottomdiv); var size = getWindowSize(); var wnd = newWindow("ShopWindow", 300, 275, "window_shopbuy.gif", div); wnd.style.left = (size.width / 2 - 100) + "px"; wnd.style.top = (size.height / 2 - 137) + "px"; document.getElementById("windowcontainer").appendChild(wnd); } } function PacketFloorItemDrop() { this.packetId = "BO"; this.len = 6; // x,y this.handleData = function(text) { var x = parseInt(text.substr(0,3)); var y = parseInt(text.substr(3,3)); var itemDiv = newDiv("flooritem" + x + "," + y, ({ "height" : "32px", "width" : "32px", "marginBottom" : "-32px", "background" : "url('images/bag.png')", "position" : "relative", "left" : 32*x + "px", "top" : 32*y+ "px"}) ); itemDiv.onclick = new Function("pickupItem(this)"); addToMap(itemDiv); } } function PacketFloorItemGone() { this.packetId = "BQ"; this.len = 6; // x,y this.handleData = function(text) { var x = parseInt(text.substr(0,3)); var y = parseInt(text.substr(3,3)); i = document.getElementById("flooritem" + x + "," + y); if(i) i.parentNode.removeChild(i); else Log("Item at " + x + "," + y + " not found"); } } function PacketQuestChange() { this.packetId = "BR"; this.len = 9; this.handleData = function(text) { var questId = parseInt(text.substr(0,4)); var progress = parseInt(text.substr(4,4)); var done = parseInt(text.substr(8,1)); var quest = questdb.getElementsByTagName("quest" + questId)[0].firstChild.nodeValue // quests[questId] = var cat = quest.substr(0, quest.indexOf("/")); var catDiv = document.getElementById("treeNode_" + cat); if(catDiv) { divs = catDiv.getElementsByTagName("div"); for(i = 0; i < divs.length; i++) { if(divs[i].getAttribute("questid") == questId) { if(done == 1) { removeTreeNode(cat,quest.substr(quest.indexOf("/")+1)); } else { divs[i].setAttribute("progress", progress); divs[i].onclick(); // divs[i].childNodes[2].click(); } return; } } } var node = addTreeNode(cat, quest.substr(quest.indexOf("/")+1)); node.setAttribute("questid", questId); node.setAttribute("progress", progress); } } function PacketSimpleNpc() { this.packetId = "BU"; this.len = -1; this.handleData = function(text) { var len = parseInt(text.substr(0,2)); var background = text.substr(2,len); var file = text.substr(2+len); var httpobj = getHTTPObject(); httpobj.onreadystatechange = function() { if (httpobj.readyState == 4) { var npcDiv = newDiv(null, ({ "textAlign" : "center", "verticalAlign" : "middle", "fontFamily" : "Arial", "marginTop" : "auto", "marginBottom" : "auto", "fontSize" : "30px", "color" : "#662000" })); npcDiv.className = "simplenpcdialog"; npcDiv.innerHTML = httpobj.responseText; var size = getWindowSize(); var wnd = newWindow("NpcDialogWindow", 440, 280, background, npcDiv); wnd.style.left = (size.width / 2 - 220) + "px"; wnd.style.top = (size.height / 2 - 140) + "px"; document.getElementById("windowcontainer").appendChild(wnd); wnd.onclick = function() { npcDialogClose(0); }; } } httpobj.open("GET", "npc/" + file , true); httpobj.send(null); // addChat(unescape(text), null, -1); } } function PacketBroadcast() { this.packetId = "BV"; this.len = -1; this.handleData = function(text) { var currentTime = new Date(); var broadcast = newDiv(null, ({ "height" : "100px", "width" : "200px", "position" : "absolute", "top" : "0px", "right" : "0px", "border" : "1px solid black", "background" : "#FFFF9B", "color" : "black", "fontSize" : "14px", "cursor" : "pointer", "zIndex" : 9999999 })); broadcast.appendChild(document.createTextNode("[Broadcast]")); broadcast.appendChild(document.createElement("br")); broadcast.appendChild(document.createTextNode(text)); broadcast.onclick = new Function("this.parentNode.removeChild(this)"); document.getElementById("main").appendChild(broadcast); text = "[" + leftPad(currentTime.getHours(),2,"0") + ":" + leftPad(currentTime.getMinutes(),2,"0") + ":" + leftPad(currentTime.getSeconds(),2,"0") + "] [broadcast] " + text; var s = newElement("span", null, null, ({ "color" : "red" })); s.appendChild(document.createTextNode(unescape(text))); addChat(null, [s]); } } function PacketPM() { this.packetId = "BW"; this.len = -1; this.handleData = function(text) { var l = parseInt(text.substr(0,4)); var nick = text.substr(4,l); var data = text.substr(4+l); if(document.getElementById("PmWindow" + nick)) { var wnd = document.getElementById("PmWindow"+nick); wnd.childNodes[1].firstChild.firstChild.appendChild(document.createTextNode(unescape(data))); wnd.childNodes[1].firstChild.firstChild.appendChild(document.createElement("br")); wnd.childNodes[1].firstChild.firstChild.scrollTop = wnd.childNodes[1].firstChild.firstChild.scrollHeight; } else { var div = newDiv(); var ta = newDiv(null, ({ "height" : "155px", "width" : "290px", "overflow" : "auto" })); div.appendChild(ta); var inp = newElement("input", null, null, ({ "width" : "290px" }) ); inp.onfocus = function() { chatFocussed = true; }; inp.onblur = function() { chatFocussed = false; }; inp.onkeyup = new Function("e", "pmkeydown(e, this)"); div.appendChild(inp); var size = getWindowSize(); var px = (size.width / 2 - 150) + "px"; var py = (size.height / 2 - 100) + "px"; var titlestuff = newDiv(); var floater = newElement("img",null, ({ "src" : "images/closepm.gif" }) , ({ "cursor" : "pointer" }) ); // floater.className = "floatleft"; floater.onclick = new Function("document.getElementById('windowcontainer').removeChild(this.parentNode.parentNode.parentNode);"); titlestuff.appendChild(floater); titlestuff.appendChild(document.createTextNode(" PM with " + nick)); var charSelectWindow = newWindow("PmWindow" + nick, 300, 200, "window_pm.gif", div,175,titlestuff); document.getElementById("windowcontainer").appendChild(charSelectWindow); charSelectWindow.style.left = px; charSelectWindow.style.top = py; div.parentNode.style.overflow = 'hidden'; if(data != "") { div.firstChild.appendChild(document.createTextNode(data)); div.firstChild.appendChild(document.createElement("br")); div.firstChild.scrollTop = div.firstChild.scrollHeight; } else inp.focus(); } } } function pmkeydown(e, src) { if(!e) e = event; if(e.keyCode == 13 && src.value != "") { src.parentNode.firstChild.appendChild(document.createTextNode(" : " + src.value)); src.parentNode.firstChild.appendChild(document.createElement("br")); src.parentNode.firstChild.scrollTop = src.parentNode.firstChild.scrollHeight; var nick = src.parentNode.parentNode.parentNode.id.substr(8); xmls.SendPacket("BW",true,leftPad(nick.length,4) + nick + escape(src.value).replace(/%20/g," ")); src.value = ""; } }function PacketKeepAlive() { this.packetId = "BX"; this.len = 0; this.handleData = function(text) { xmls.SendPacket("BX", false, ""); } } var packetTable = new Array(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var networkBuffer = ""; var parsing = false; var handleTimer = null; function handleData(data) { if(showPackets) Log("Packet(" + data + ")"); if(data == "") return; if(parsing && networkBuffer != "") { // alert("Already parsing!!!!!"); Log("Already parsing!!!!!"); networkBuffer += data; // setTimeout("handleData()", 500); return; } // parsing = true; networkBuffer += data; if(handleTimer == null) handleTimer = setTimeout(realHandleData, 10); //realHandleData(); } function realHandleData() { handleTimer = null; parsing = true; while(networkBuffer.length >= 2) { packetId = networkBuffer.substr(0,2); var found = false; for(i = 0; i < packetTable.length; i++) { if(packetTable[i].packetId == packetId) { found = true; var len = packetTable[i].len; var start = 2; if(len == -1) { len = parseInt(networkBuffer.substr(2,4)); start = 6; } if(networkBuffer.length >= start+len) { lasterror = false; var buf = networkBuffer.substr(start, len); networkBuffer = networkBuffer.substr(start+len); // setTimeout("packetTable["+i+"].handleData('"+ buf.replace(/'/g,"\\'") + "');",0); packetTable[i].handleData(buf); } else { Log("not enough data in buffer... Expected " + (start+len) + ", got " + networkBuffer.length); parsing = false; return; } break; } } if(!found) { Log("Invalid packet in buffer, clearing |" + networkBuffer + "|"); networkBuffer = ""; return; } } parsing = false; if(networkBuffer.length != 0) handleTimer = setTimeout(realHandleData,100); } function initializeTable() { packetTable[0] = new PacketChat(); packetTable[1] = new PacketLoginOk(); packetTable[2] = new PacketPing(); packetTable[3] = new PacketError(); packetTable[4] = new PacketYouSpawn(); packetTable[5] = new PacketOtherSpawn(); packetTable[6] = new PacketOtherUnSpawn(); packetTable[7] = new PacketWalkPath(); packetTable[8] = new PacketNpcDialog(); packetTable[9] = new PacketInventory(); packetTable[10] = new PacketInventoryChange(); packetTable[11] = new PacketInventoryAdd(); packetTable[12] = new PacketStatusChange(); packetTable[13] = new PacketInventoryDel(); packetTable[14] = new PacketAttack(); packetTable[15] = new PacketDie(); packetTable[16] = new PacketEquipAvailable(); packetTable[17] = new PacketEquip(); packetTable[18] = new PacketSetLook(); packetTable[19] = new PacketStop(); packetTable[20] = new PacketSkillList(); packetTable[28] = new PacketSkillAvailable(); packetTable[21] = new PacketSkillUsed(); packetTable[22] = new PacketEffect(); packetTable[23] = new PacketShop(); packetTable[24] = new PacketShopSell(); packetTable[25] = new PacketFloorItemDrop(); packetTable[26] = new PacketFloorItemGone(); packetTable[27] = new PacketQuestChange(); packetTable[28] = new PacketSimpleNpc(); packetTable[29] = new PacketBroadcast(); packetTable[30] = new PacketPM(); packetTable[31] = new PacketKeepAlive(); }