$.echo("> Anchor loaded.");
// Welcome to Anchor.js
// Devlopped by DeVoidCoder, Zekikez & Alde.
// * DECLARING THE VARIABLES *
//var ID_MOVE = $.findPacketId("MOVE");
var ID_PLAYERHIT = $.findPacketId("PLAYERHIT");
var ID_SHOOT = $.findPacketId("SHOOT");
var ID_SHOOT2 = $.findPacketId("SHOOT2");
var ID_UPDATE = $.findPacketId("UPDATE");
var ID_NEW_TICK = $.findPacketId("NEW_TICK");
var ID_CREATE_SUCCESS = $.findPacketId("CREATE_SUCCESS");
var ID_PLAYER_TEXT = $.findPacketId("PLAYERTEXT");
var ID_TEXT = $.findPacketId("TEXT");
var ID_FAILURE = $.findPacketId("FAILURE");
var ID_AOE = $.findPacketId("AOE");
var ID_ESCAPE = $.findPacketId("ESCAPE");
var ID_USE_ITEM = $.findPacketId("USEITEM");
var ID_NOTIFICATION = $.findPacketId("NOTIFICATION");
var ID_MAPINFO = $.findPacketId("MAPINFO");
var STATDATA_MAXHEALTH = 0;
var STATDATA_HEALTH = 1;
var STATDATA_DEFENCEBONUS = 49
var nexusHealthPercentage = 25; // <--- modify this to the health % you want to nexus at
var anchorHealthPercentage = 80; // <--- modify this to the health % you want to tp to the anchor at
var playerObjectId = -1;
var _allowAutoNexus = true; // <--- set to false if you do not want it to auto nexus
var health = -1;
var maxHealth = -1;
var defenceBonus = -1;
var bulletIdDamageMap = {};
var bEscapeToNexusSent = false; // true = don't confirm any more hits
var playerLocation = null;
var SLOTDATA_HEALTHPOT = 69;
var TIMEOUT_OFFSET = 250; // the amount of time before allowing to use the health potion again
var _potHealthPercentage = 40; // <--- modify this to the health % you want to pot at
var _clientTime = 0;
var _potHealthCount = 0;
var _skipHealthPotion = true;
var _timeoutAt = -1;
var _mapName = "Nexus";
// * END OF VARIABLES *
function onServerPacket(event) {
var packet = event.getPacket();
switch (packet.id()) {
case ID_CREATE_SUCCESS: {
player_id = packet.objectId;
break;
}
case ID_MAPINFO: {
_mapName = packet.name;
break;
}
case ID_SHOOT2:
case ID_SHOOT: {
// store projectile damage...
useBestEscape(event)
$.echo("# Trying to find the best escape. Line 76");
break;
}
case ID_UPDATE: {
for (var i = 0; i < packet.newObjs.length; i++) {
var objectData = packet.newObjs[i];
if (objectData.status.objectId == playerObjectId) {
for (var j = 0; j < objectData.status.data.length; j++) {
var statData = objectData.status.data[j];
// update player data...
if (statData.obf0 == STATDATA_MAXHEALTH) {
maxHealth = statData.obf1;
} else if (statData.obf0 == STATDATA_HEALTH) {
health = statData.obf1;
} else if (statData.obf0 == STATDATA_DEFENCEBONUS) {
defenceBonus = statData.obf1;
} else if (statData.obf0 == SLOTDATA_HEALTHPOT) {
_potHealthCount = statData.obf1;
}
}
}
}
break;
}
case ID_NEW_TICK: {
for (var i = 0; i < packet.statuses.length; i++) {
var status = packet.statuses[i];
if (status.objectId == playerObjectId) {
for (var j = 0; j < status.data.length; j++) {
var statData = status.data[j];
// update the player's health
if (statData.obf0 == STATDATA_HEALTH) { //THE PROBLEM IS HERE. IT RETURNS -1! :'(
health = statData.obf1;
} else if (statData.obf0 == STATDATA_DEFENCEBONUS) {
defenceBonus = statData.obf1;
} else if (statData.obf0 == SLOTDATA_HEALTHPOT) {
_potHealthCount = statData.obf1;
$.echo("health pot count: " + _potHealthCount);
}
}
}
}
break;
}
case ID_AOE: {
if (playerLocation != null && playerLocation.distanceTo(packet.pos) <= packet.radius) {
// predict what the damage will be
health -= getDamageEstimate(packet.damage);
if (_mapName != "Nexus" && useBestEscape())
event.cancel();
}
break;
}
}
}
function onClientPacket(event) {
var packet = event.getPacket();
if (packet == "PLAYERTEXT"){
var text = packet.text;
if(text.indexOf('/anchor') >= 0){
var anchor = text.substring(8, text.length());
alert(event,"> Anchor set to : " + anchor)
$.echo("# Anchor set to " + anchor + ".");
}//End of if text = /anchor
}//End of if(packet == idplayertxt)
if (packet == "PLAYERHIT"){
useBestEscape(event)
$.echo("# Trying to find the best escape. Line 176");
}
}//End of function.
//Display messages in red (from and by the client)
function alert(event,text){ //This is used to draw the "# has left"
$.echo("> FAILURE : " + text + health + " : " + maxHealth);
var failurePacket = event.createPacket(ID_FAILURE);
failurePacket.errorId = 99;
failurePacket.errorDescription = text;
event.sendToClient(failurePacket);
}
// Determines best action based on current health percentage
// returns true if an action happens
function useBestEscape(event) {
// if the predicted health percentage is below nexusHealthPercentage...
var curPercentage = 100 * health / maxHealth;
if (curPercentage < nexusHealthPercentage) {
useNexus();
alert(event,"AutoNexus")
//return true;
}
if (curPercentage < anchorHealthPercentage) {
useAnchor();
alert(event,"Anchor")
//return true;
}
else if (!_skipHealthPotion && _potHealthCount > 0 && curPercentage <= _potHealthPercentage) {
useHealthPotion();
alert(event,"Drank HP")
//return true;
}
//return false;
}
// creates ESCAPE packet and sends to server
function useNexus() {
$.echo("Used Nexus at " + health + " HP.");
if (health < 100) {$.echo("That was close!");}
var escapePacket = $.createPacket(ID_ESCAPE);
$.sendToServer(escapePacket);
bEscapeToNexusSent = true; // this prevents any additional packets from being sent
}
function useAnchor() {
var playertextPacket = event.createPacket(ID_PLAYERTEXT);
playertextPacket.text = "/teleport " + anchor;
event.sendToServer(playertextPacket);
alert(event,"Teleported to the anchor at " + health + " HP.")
$.echo("Teleported to the anchor at " + health + " HP.");
if (health < 100) {$.echo("That was close!");}//Messin' around :3
bEscapeToNexusSent = true; // this prevents any additional packets from being sent
}
// creates a USE_ITEM packet with the health potion details
function useHealthPotion() {
_potHealthCount--;
$.echo("Used Health Potion: " + _potHealthCount);
var useitemPacket = $.createPacket(ID_USE_ITEM);
useitemPacket.time = _clientTime + 50; // ? not sure if increment is needed
useitemPacket.slotObject = $.createSlotObject();
useitemPacket.slotObject.objectType = 2594; // health potion type
useitemPacket.slotObject.slotId = 254; // health potion slotid
useitemPacket.slotObject.objectId = playerObjectId; // player id
useitemPacket.itemUsePos = playerLocation; // should randomly offset a bit. (this should be where the cursor is pointing)
useitemPacket.useType = 0;
$.sendToServer(useitemPacket);
// Notify user that a potion was used and show the remaining number of pots
_skipHealthPotion = true;
_timeoutAt = _clientTime + TIMEOUT_OFFSET;
}