Results 1 to 2 of 2
  1. #1
    excitedguy's Avatar
    Join Date
    May 2012
    Gender
    male
    Posts
    197
    Reputation
    28
    Thanks
    2,717

    Exclamation Update Auto HP/Nexus Realm Relay Script

    Can anyone update the following script to remove all damage predicting code? So that the script will only use HP pots and auto nexus based on current health percentage and not based off incoming damage calculation?

    Code:
    // autonexus_pot.js
    
    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_CREATE_SUCCESS = $.findPacketId("CREATE_SUCCESS");
    var ID_NEW_TICK = $.findPacketId("NEW_TICK");
    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 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;
    
    // zekikez - auto health potion
    var SLOTDATA_HEALTHPOT = 69;
    var TIMEOUT_OFFSET = 250; // the amount of time before allowing to use the health potion again
    
    var _potHealthPercentage = 35; // <--- 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";
    
    function onClientPacket(event) {
       if (bEscapeToNexusSent) {
          event.cancel();
          return;
       }
       var packet = event.getPacket();
       if (packet.time)
       {
          _clientTime = packet.time;
          if (_skipHealthPotion && _timeoutAt < _clientTime)
             _skipHealthPotion = false;
       }
       switch (packet.id()) {
          case ID_MOVE: {
             playerLocation = packet.newPosition;
             break;
          }
          case ID_PLAYERHIT: {
             // predict what the damage will be
             health -= getDamageEstimate(bulletIdDamageMap[packet.bulletId]);
             if (_mapName != "Nexus" && useBestEscape())
                   event.cancel();
             break;
          }
       }
    }
    
    function onServerPacket(event) {
       var packet = event.getPacket();
       switch (packet.id()) {
          case ID_MAPINFO: {
             _mapName = packet.name;
             break;
          }   
          case ID_SHOOT2:
          case ID_SHOOT: {
             // store projectile damage...
             bulletIdDamageMap[packet.bulletId] = packet.damage;
             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_CREATE_SUCCESS: {
             // keep the player's objectId
             playerObjectId = packet.objectId;
             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) {
                         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 getDamageEstimate(baseDamage) {
            // not a perfect damage calculation at all, but good enough for govt work
            var damage = baseDamage - defenceBonus;
            if (damage < 0.15 * baseDamage) {
             damage = 0.15 * baseDamage;
            }
            if (isNaN(damage)) {
             // return 100; 
             return 0; // if damage is undefined then just wait for next tick to health update.
            }
            return damage;
    }
    
    
    // Determines best action based on current health percentage
    // returns true if an action happens 
    function useBestEscape() {
       // if the predicted health percentage is below nexusHealthPercentage...
       var curPercentage = 100 * health / maxHealth;
       //$.echo("Current Health: " + health + " / " + maxHealth + " = "  + curPercentage);
       if (_allowAutoNexus && curPercentage <= nexusHealthPercentage) {
          useNexus();
          return true;
       }
       else if (!_skipHealthPotion && _potHealthCount > 0 && curPercentage <= _potHealthPercentage) {
          useHealthPotion();
          return true;
       }
       return false;
    }
    
    // creates ESCAPE packet and sends to server
    function useNexus() {
       $.echo("Used Nexus");
       var escapePacket = $.createPacket(ID_ESCAPE);
       $.sendToServer(escapePacket);
       bEscapeToNexusSent = true; // this prevents any additional packets from being sent
    }
    
    // creates a USE_ITEM packet with the health potion details
    function useHealthPotion() {
       $.echo("Used Health Potion");
       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
       autoNexusPot_Notify("Used Health Potion! Count: " + _potHealthCount - 1);
       _skipHealthPotion = true;
       _timeoutAt = _clientTime + TIMEOUT_OFFSET;
    }
    
    function autoNexusPot_Notify(text) {
       var notificationPacket = $.createPacket(ID_NOTIFICATION);
       notificationPacket.objectId = playerObjectId;
       notificationPacket.message = "{\"key\":\"blank\",\"tokens\":{\"data\":\"" + text + "\"}}";
       notificationPacke*****lor = 0x33FFFF;;
       $.sendToClient(notificationPacket);
    }

  2. #2
    yaseenm's Avatar
    Join Date
    Oct 2018
    Gender
    male
    Posts
    13
    Reputation
    10
    Thanks
    0

    works as intended

    works as intended

Similar Threads

  1. Fame- Realm Relay Script
    By mezamog in forum Realm of the Mad God Discussions
    Replies: 10
    Last Post: 01-01-2014, 01:50 PM
  2. [Solved] Fullscreen realm relay script
    By TH3HDD3N in forum Realm of the Mad God Help & Requests
    Replies: 4
    Last Post: 01-01-2014, 09:50 AM
  3. Connect to Vault [Realm Relay Script]
    By Alde. in forum Realm of the Mad God Tutorials & Source Code
    Replies: 10
    Last Post: 12-27-2013, 12:36 PM
  4. [Solved] Realm Relay Script ; Unrecognised command
    By MrNextGen in forum Realm of the Mad God Help & Requests
    Replies: 10
    Last Post: 12-07-2013, 06:04 PM
  5. [Help Request] Realm Relay Scripts
    By asdf6969 in forum Realm of the Mad God Help & Requests
    Replies: 3
    Last Post: 11-30-2013, 09:55 AM