Code:
// ability.js
var ID_MOVE = $.findPacketId("MOVE");
var ID_USE_ITEM = $.findPacketId("USEITEM");
var ID_UPDATE = $.findPacketId("UPDATE");
var ID_NEW_TICK = $.findPacketId("NEW_TICK");
var ID_NOTIFICATION = $.findPacketId("NOTIFICATION");
var ID_PLAYER_TEXT = $.findPacketId("PLAYERTEXT");
var ID_CREATE_SUCCESS = $.findPacketId("CREATE_SUCCESS");
var ID_PLAYER_SHOOT = $.findPacketId("PLAYER_SHOOT");
var ID_QUEST_OBJECTID = $.findPacketId("QUESTOBJID");
var ID_MAPINFO = $.findPacketId("MAPINFO");
var playerId = -1;
var playerLoc = null;
var toHitIds = {};
var questId = -1;
var questLoc = null;
var movingIds = {};
var ids = [];
var notifyIds = [];
var debug = true;
var ability = true;
var type = -1;
var map = "Nexus";
var player = {
768: "Rouge"
, 775: "Archer"
, 782: "Wizard"
, 784: "Priest"
, 797: "Warrior"
, 798: "Knight"
, 799: "Paladin"
, 800: "Assassin"
, 801: "Necromancer"
, 802: "Hunter"
, 803: "Mystic"
, 804: "Trickster"
, 805: "Sorceror"
, 806: "Ninja"
}
var enemies = {
5952: "Oryx 1"
, 2354: "Oryx 2"
, 3425: "Hermit God"
, 3412: "Sphinx"
, 3417: "Cube God"
, 3414: "Skull Shrine"
, 3422: "Pentaract"
, 3639: "Ghost Ship"
, 3408: "LotLL"
, 3334: "Limon"
, 3472: "Septavius"
, 5894: "Thessal"
, 2357: "Crystal"
, 2369: "C Prisoner"
, 1617: "White Demon"
, 1618: "Sprite God"
, 1620: "Medusa"
, 1621: "Ent God"
, 1622: "Beholder"
, 1623: "Flying Brain"
, 1624: "Slime God"
, 1625: "Ghost God"
, 1752: "Leviathan"
, 3333: "Sprite God in Sprite World"
, 2975: "Dr. Terrible"
, 4428: "Horrific Creature"
, 2330: "Djinn"
, 1309: "Construct"
, 1310: "Construct"
, 1311: "Construct"
, 29517: "Avatar"
, 24223: "Horse"
, 24351: "Troll Matriarch"
, 24327: "Statue bitch"
};
function pet(id) { return (id >= 32518 && id <= 32650); }
function toggleNotify(id) { if (notifyIds[id]) notifyIds[id] = !notifyIds[id]; }
function displayNotification(hoverId, color, text) {
var notificationPacket = $.createPacket(ID_NOTIFICATION);
notificationPacket.objectId = hoverId;
notificationPacket.message = "{\"key\":\"blank\",\"tokens\":{\"data\":\"" + text + "\"}}";
notificationPacket.color = color;
$.sendToClient(notificationPacket);
}
function onClientPacket(event) {
var packet = event.getPacket();
if (packet.id() == ID_PLAYER_TEXT) {
var text = packet.text;
if(text == "/abi") {
event.cancel();
ability = !ability;
if(ability) displayNotification(playerId, 0xFF3333, "Ability Auto-Aim abilities enabled");
else displayNotification(playerId, 0xFF3333, "Ability Auto-Aim abilities disabled");
} else if (text == "/abidebug") {
event.cancel();
debug = !debug;
if(debug) displayNotification(playerId, 0xFF3333, "Ability Auto-Aim debug enabled");
else displayNotification(playerId, 0xFF3333, "Ability Auto-Aim debug disabled");
}
//break;
} else if (ability) {
switch (packet.id()) {
case ID_MOVE: {
playerLoc = packet.newPosition;
break;
}
case ID_USE_ITEM: {
if (map != "Nexus" && map != "Vault") {
var min_dist = -1;
var toHitLoc = null;
if (min_dist == -1 && questLoc) {
var dist = packet.itemUsePos.distanceSquaredTo(questLoc);
if (dist < 100 && (min_dist == -1 || dist < min_dist )) {
toHitLoc = questLoc;
min_dist = dist;
}
if (debug && min_dist != -1) $.echo("Ability Auto-Aim - Found quest boss");
}
if (min_dist == -1) {
var toHitId = -1;
for(var objId in toHitIds) {
var dist = packet.itemUsePos.distanceSquaredTo(toHitIds[objId]);
if (dist < 100 && (min_dist == -1 || dist < min_dist )) {
toHitLoc = toHitIds[objId];
min_dist = dist;
toHitId = objId;
}
}
if (debug && min_dist != -1) $.echo("Ability Auto-Aim - Found enemy: "+enemies[ids[toHitId]]);
}
if (min_dist == -1) {
var toHitId = -1;
for(var objId in movingIds) {
if (!player[ids[objId]]) {
var dist = packet.itemUsePos.distanceSquaredTo(movingIds[objId]);
if (dist < 100 && (min_dist == -1 || dist < min_dist )) {
toHitLoc = movingIds[objId];
min_dist = dist;
toHitId = objId;
}
}
}
if (debug && min_dist != -1) $.echo("Ability Auto-Aim - its moving, shoot it down!! id: "+ids[toHitId]);
}
if (toHitLoc) {
packet.itemUsePos.y = toHitLoc.y + .1; // If the location is exact, all bullets miss.
packet.itemUsePos.x = toHitLoc.x;
} else {
if (debug) $.echo("Ability: Found nothing.");
}
}
break;
}
}
}
}
function onServerPacket(event) {
var packet = event.getPacket();
switch (packet.id()) {
case ID_MAPINFO: {
map = packet.name;
event.echo("Entering "+map);
break;
}
case ID_CREATE_SUCCESS: {
playerId = packet.objectId;
break;
}
case ID_UPDATE: {
for (var i = 0; i < packet.newObjs.length; i++) {
var objectData = packet.newObjs[i];
if (objectData == null) break;
if (objectData.status.objectId == questId) questLoc = objectData.status.pos;
else if (enemies[objectData.objectType]) toHitIds[objectData.status.objectId] = objectData.status.pos;
else if (!player[objectData.status.objectId] && !pet(objectData.status.objectId)) notifyIds[objectData.status.objectId] = true;
ids[objectData.status.objectId] = objectData.objectType;
}
for (var i = 0; i < packet.drops.length; i++) {
if(packet.drops[i] == questId) {
questId = -1;
questLoc = null;
}
if (toHitIds[packet.drops[i]]) delete toHitIds[packet.drops[i]];
if (notifyIds[packet.drops[i]]) delete notifyIds[packet.drops[i]];
if (movingIds[packet.drops[i]]) delete movingIds[packet.drops[i]];
if (ids[packet.drops[i]]) delete ids[packet.drops[i]];
}
break;
}
case ID_NEW_TICK: {
for (var i = 0; i < packet.statuses.length; i++) {
var status = packet.statuses[i];
if (questId == status.objectId) questLoc = status.pos; // Location Updated
else if (toHitIds[status.objectId] != null) toHitIds[status.objectId] = status.pos; // Location Updated
else if (!player[ids[status.objectId]] && !pet(ids[status.objectId])) {
movingIds[status.objectId] = status.pos; // IT MOVES; SHOOT IT! (Location saved)
if (debug && notifyIds[status.objectId]) {
displayNotification(status.objectId, 0xFFFFFF, ids[status.objectId]); //notify id
toggleNotify(status.objectId);
$.scheduleEvent(2, "toggleNotify", status.objectId); // this doesnt work and im to lazy to fix it
}
}
}
break;
}
case ID_QUEST_OBJECTID: {
questId = packet.objectId;
break;
}
}
}
Thanks a lot for the realease it's awsome ! , but i have one problem XD : http://imgur.com/el1gGsg , can u help me please @