Page 1 of 2 12 LastLast
Results 1 to 15 of 16
  1. #1
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy

    Changin the Autonexus

    Hi, I would like to change the autonexus code to be like this (pseudo code)
    Code:
    if (life < 30%)
     if (priest % mana ok)
        hit space 
     else if (potion in inventory)
        use it
     else
       autonexus
    But, know only the mana position, not the current class position, the inventory position, and the health potion code.. (and even I don't know how to say press space, or use potion!)

    Ok, I really don't know a lot, but I don't want the code ready!!! only some hint
    (such as the if and else in actionscript or assembler!)

    Thanks!

    ---------- Post added at 05:17 PM ---------- Previous post was at 05:13 PM ----------

    oh... I though I was in the help section, damn! sorry!

    ---------- Post added at 05:26 PM ---------- Previous post was at 05:17 PM ----------

    Searching I found these:

    Code:
    in  _-0CP\Options.class.asasm (16 hits)
    	Line 2289:       pushstring          "Use Inventory Slot 1"
    	Line 2290:       pushstring          "Use item in inventory slot 1"
    	Line 2300:       pushstring          "Use Inventory Slot 2"
    	Line 2301:       pushstring          "Use item in inventory slot 1"
    	Line 2308:       pushstring          "Use Inventory Slot 3"
    	Line 2309:       pushstring          "Use item in inventory slot 1"
    	Line 2316:       pushstring          "Use Inventory Slot 4"
    	Line 2317:       pushstring          "Use item in inventory slot 1"
    	Line 2325:       pushstring          "Use Inventory Slot 5"
    	Line 2326:       pushstring          "Use item in inventory slot 1"
    	Line 2333:       pushstring          "Use Inventory Slot 6"
    	Line 2334:       pushstring          "Use item in inventory slot 1"
    	Line 2360:       pushstring          "Use Inventory Slot 7"
    	Line 2361:       pushstring          "Use item in inventory slot 1"
    	Line 2379:       pushstring          "Use Inventory Slot 8"
    	Line 2380:       pushstring          "Use item in inventory slot 1"
    and this

    Code:
    in    com\company\assembleegameclient\net\_-1f.class.asasm (13 hits)
    	Line 10109:       getproperty         QName(PackageNamespace(""), "INVENTORY_0_STAT")
    	Line 11009:       getproperty         QName(PackageNamespace(""), "INVENTORY_0_STAT")
    	Line 11031:       getproperty         QName(PackageNamespace(""), "INVENTORY_1_STAT")
    	Line 11064:       getproperty         QName(PackageNamespace(""), "INVENTORY_2_STAT")
    	Line 11094:       getproperty         QName(PackageNamespace(""), "INVENTORY_3_STAT")
    	Line 11129:       getproperty         QName(PackageNamespace(""), "INVENTORY_4_STAT")
    	Line 11138:       getproperty         QName(PackageNamespace(""), "INVENTORY_5_STAT")
    	Line 11157:       getproperty         QName(PackageNamespace(""), "INVENTORY_6_STAT")
    	Line 11178:       getproperty         QName(PackageNamespace(""), "INVENTORY_7_STAT")
    	Line 11188:       getproperty         QName(PackageNamespace(""), "INVENTORY_8_STAT")
    	Line 11211:       getproperty         QName(PackageNamespace(""), "INVENTORY_9_STAT")
    	Line 11227:       getproperty         QName(PackageNamespace(""), "INVENTORY_10_STAT")
    	Line 11236:       getproperty         QName(PackageNamespace(""), "INVENTORY_11_STAT")
    I think something is moving... ^^

    ---------- Post added at 05:30 PM ---------- Previous post was at 05:26 PM ----------

    plus I found theese

    com/company/assembleegameclient/ui/Inventory.class.asasm and script one..

    ---------- Post added at 05:34 PM ---------- Previous post was at 05:30 PM ----------

    UHU nice this

    Code:
          findpropstrict      QName(PackageNamespace("_-0CP"), "_-GX")
          pushstring          "useInvSlot1"
          pushstring          "Use Inventory Slot 1"
          pushstring          "Use item in inventory slot 1"
          constructprop       QName(PackageNamespace("_-0CP"), "_-GX"), 3
          callpropvoid        QName(PrivateNamespace("*", "_-0CP:Options#0"), "_-yZ"), 1
    only I really don't understand what the heck means all this

    is the pushstring "UseInvSlot1" the function to use invslot 1... or is the findpropstrict??

    ---------- Post added at 05:43 PM ---------- Previous post was at 05:34 PM ----------

    OH dear, i found this ...

    AVM2 Instructions

    it's... beatifull... I love this! HAHA (anything usefull like this? link it!!!)

    ---------- Post added at 06:07 PM ---------- Previous post was at 05:43 PM ----------

    I realized that if someone (a very gentle one) could comment the autonexus code, I could try to understand the programming sintax (i can program in c/c++/java and others so maybe I will understand something)....
    like commenting this code, I sure will understand a lot (I know I'm asking a LOT... )

    Code:
    L461:
          getlex              QName(PackageNamespace(""), "_-0HB")
          getlocal1
          setproperty         QName(PackageNamespace(""), "lastDamage_")
    
    L464:
          pushtrue
    
    
    pop
    getlocal0
    getlex              QName(PackageNamespace(""), "map_")
    getproperty         QName(PackageNamespace(""), "player_")
    ifne L475
    getlex              QName(PackageNamespace(""), "map_")
    getproperty         QName(PackageNamespace(""), "name_")
    pushstring "Nexus"
    ifeq L475
    getlex QName(PackageNamespace(""), "_-aY")
    convert_d
    getlex QName(PackageNamespace(""), "_-LT")
    convert_d
    divide
    pushbyte 7
    convert_d
    pushbyte 20
    convert_d
    divide
    ifgt L475
    getlex              QName(PackageNamespace(""), "map_")
    getproperty         QName(PackageNamespace(""), "gs_")
    getproperty         QName(PackageNamespace(""), "gsc_")
    callpropvoid        QName(PackageNamespace(""), "_-M6"), 0
    
    			
    L475:			
    	pushtrue       
         
    L465:
          returnvalue
         end ; code
        end ; body
       end ; method
      end ; trait

  2. #2
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    Nice idea. I might do some work on this.

    The key to understanding all this is know how the stack works. If you don't understand at least that, nothing will make very much sense. I went ahead and commented the autonexus code including what the stack looks like as the code is executed. It should help.

    Code:
    pop ; take off the pushtrue that was pushed to the stack above
    
    getlocal0 ; push current object onto stack --- Stack: CurrentObject
    
    getlex              QName(PackageNamespace(""), "map_") ; push the property "map_" of the current object onto stack --- Stack: CurrentObject.map_, CurrentObject
    getproperty         QName(PackageNamespace(""), "player_") ; push player object onto stack (uses the getlex instruction below to find it) --- Stack: CurrentObject.map_.player_, CurrentObject
    
    ifne L475 ; if CurrentObject != CurrentObject.map_.player_ jump to L475 (we don't want our code making decisions based on other players health) --- Stack: (Nothing)
    
    getlex              QName(PackageNamespace(""), "map_") ; push the property "map_" of the current object onto stack --- Stack: CurrentObject.map_
    getproperty         QName(PackageNamespace(""), "name_") ; push the property "name_" of "map_" onto stack (uses object from getlex instruction above) --- Stack: CurrentObject.map_.name_
    
    pushstring "Nexus" ; push "Nexus" onto stack --- Stack: "Nexus", CurrentObject.map.name_
    
    ifeq L475 ; if "Nexus" = CurrentObject.map.name_ do nothing --- Stack: (Nothing)
    
    getlex QName(PackageNamespace(""), "_-aY") ; CurrentObject is our player so get property "_-aY" of CurrentObject (get our current health) --- Stack: CurrentObject._-aY
    convert_d ; converts first thing on stack to a double --- Stack: ofTypeDouble(CurrentObject._-aY)
    getlex QName(PackageNamespace(""), "_-LT") ; get property "_-LT" of CurrentObject (get our max health) --- Stack: CurrentObject._-LT, ofTypeDouble(CurrentObject._-aY)
    convert_d ; convert CurrentObject._-LT to type double --- Stack: ofTypeDouble(CurrentObject._-LT), ofTypeDouble(CurrentObject._-aY)
    divide ; divide first 2 objects on stack _-aY / _-LT (i know this seems backwards but this is how it works) --- Stack: ofTypeDouble(_-aY/_-LT)
    
    pushbyte 7 ; push 7 onto stack --- Stack: 7, ofTypeDouble(_-aY/_-LT)
    convert_d ; convert first object on stack to type double --- Stack: ofTypeDouble(7), ofTypeDouble(_-aY/_-LT)
    pushbyte 20 ; push 20 onto stack --- Stack: 20, ofTypeDouble(7), ofTypeDouble(_-aY/_-LT)
    convert_d ; convert first object on stack to type double --- Stack: ofTypeDouble(20), ofTypeDouble(7), ofTypeDouble(_-aY/_-LT)
    divide ; divide first 2 objects on stack ofTypeDouble(7)/ofTypeDouble(20) --- Stack: ofTypeDouble(7.0/20.0), ofTypeDouble(_-aY/_-LT)
    
    ifgt L475 ; if ofTypeDouble(_-aY/_-LT) > ofTypeDouble(7.0/20.0) do nothing --- Stack: (Nothing)
    
    getlex              QName(PackageNamespace(""), "map_") ; get CurrentObject.map_ --- Stack: CurrentObject.map_
    getproperty         QName(PackageNamespace(""), "gs_") ; get property gs_ of CurrentObject.map_ --- Stack: CurrentObject.map_.gs_
    getproperty         QName(PackageNamespace(""), "gsc_") ; get property gsc_ of CurrentObject.map_.gs_ --- Stack: CurrentObject.map_.gs_.gsc_
    callpropvoid        QName(PackageNamespace(""), "_-M6"), 0 ; call property "_-M6" (the game's goto nexus function) of CurrentObject.map_.gs_.gsc_ --- Stack: (Nothing)
    You might want to copy paste this into something that doesn't have word wrap on as the formatting is horrible here on the forums.
    Last edited by nilly; 09-18-2012 at 08:01 PM.

  3. The Following User Says Thank You to nilly For This Useful Post:

    hoople (10-19-2012)

  4. #3
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy
    Omg You'r a savior!! This is LIGHT into the darkness..
    I understand a few things I really really need:
    callpropvoid means to call a function. And I saw something that was ver very similar to a "use slot #" function...

    I can't understand this: how the hell the stack get reinitialized?? for example, when you make an if##, the stak stack become "nothing".. it is a rule of this language?

    getlex and getproperty aren't the same command?

    my "pseudo code" must change, from this:

    Code:
    if (life < 30%)
     if (priest % mana ok)
        hit space 
     else if (potion in inventory)
        use it
     else
       autonexus
    to this:

    all autonexus code until
    Code:
    ifgt L475 
    
    getproperty (current_class) ; stack: current_class
    pushstring "code_for_priest" ; stack: code for priest, current class
    
    ifne Line_of_potion_test ; if player is a priest continue, else go to test the inventory    stack: nothing
    
    getlex (current_tmana); stack: current_mana
    getlex (spell_cost); stack: spell_cost, current_mana
    
    ifgt (use_spell and L475); stack: nothing
    
    ;;; the next one should be line_of_potion_test ;;;
    
    getlex (slot_1) ; stack: slot_1
    pushstring "code_for_pot_1" ; stack: code_for_pot_1, slot_1
    
    ifeq (use_pot and L475)
    
    ;;; REPEAT the last 3 lines for any healing potion there is in rotmg, and for any slot!! ;;;
    ;;; should be 3 type of potion if I'm not wrong, and 8 slots, so there are 24 ;;;
    
    ;;; all slots tested, and didn't find anything!! ;;;
    ;;; use teleport!!! ;;;
    
    getlex              QName(PackageNamespace(""), "map_") ;
    getproperty         QName(PackageNamespace(""), "gs_") ; 
    getproperty         QName(PackageNamespace(""), "gsc_") ;
    callpropvoid        QName(PackageNamespace(""), "_-M6"), 0 ;
    I had to force the code to go to the potion_test line becouse I can't figure how to do a double check:
    if priest and mana (use_spell and L475).

    I evend don't know if the you can perform two action in a "if##"... like I did...

    ---------- Post added at 08:31 PM ---------- Previous post was at 08:28 PM ----------

    This idea could be better if the auto_spell of priest, and auto_potion starts when the player need that amount of life ... but First I want to do the simple thing...

  5. #4
    maxim1200's Avatar
    Join Date
    May 2008
    Gender
    male
    Location
    asdsadsad
    Posts
    55
    Reputation
    10
    Thanks
    7
    My Mood
    Amused
    Wrong place to put this theard.

  6. #5
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy
    I know, I wrote it in the first post, but I don't know how to move the thread...

  7. #6
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    I can't understand this: how the hell the stack get reinitialized?? for example, when you make an if##, the stak stack become "nothing".. it is a rule of this language?
    The stack gets used up by the instructions used. So if you use ifeq instruction, be sure to have the 2 things you want to compare on the stack as it will pop them off the stack to do it's operation.

    getlex and getproperty aren't the same command?
    They are virtually the same. getlex is used for getting properties of the current object and has no stack requirements. getproperty needs an object on the stack from which it will get property.

    Code:
    getlex QName(PackageNamespace(""), "map_")
    
    is the same as
    
    getlocal0 <--- getlocal0 always links to the current object
    getproperty QName(PackageNamespace(""), "map_")
    You got the right idea with your nexus code although the properties you're looking for to do the comparison will likely be buried all over the place and will take some searching. Also you can't do two comparisons at once. You have to test each condition one at a time (this isn't a high-level language).

  8. #7
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy
    ok, now I have only to find the properties.

    anyway, the dowble action is allowed??

    If i make a "ifeq" i can make

    ifeq (do this and this) ?? if yes, how?? example, if I see that there is a potion, (than I will do a ifeq between slot and potion_prop) i will have

    ifeq callpropvoid QName(PackageNamespace(""), "_-use_slot:X"), L475;

    is that ok?

    ---------- Post added at 09:20 PM ---------- Previous post was at 09:14 PM ----------

    although I think the potion code should be one the one you use to cheat engine (uselessly) the game
    https://www.mpgh.net/forum/599-realm-...m-id-list.html

    ---------- Post added at 09:26 PM ---------- Previous post was at 09:20 PM ----------

    found this in
    com\company\assembleegameclient\util\loadEmbeds.me thod.asasm
    Code:
       getlex              QName(PackageNamespace("_-vf"), "_-5T")
       pushstring          "use_potion"
       callpropvoid        QName(PackageNamespace(""), "load"), 1


    ---------- Post added at 09:33 PM ---------- Previous post was at 09:26 PM ----------

    maybe there is an ID for the class too...

    ---------- Post added at 09:44 PM ---------- Previous post was at 09:33 PM ----------

    the potion test maybe is so:

    Code:
    getlex QName(PackageNamespace(""), "INVENTORY_4_STAT"); 4 becouse the count start with 0
    pustring "2594" ; health potion!!
    
    ifeq callpropvoid QName(PrivateNamespace("*", "_-0CP:Options#0"), "_-yZ"), 1; that should be the use inventory slot 1 function.
    and repeat the code for all slots, and for all health potion types.
    Last edited by raikoug; 09-18-2012 at 09:45 PM. Reason: getlex ... I like it more

  9. #8
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    ifeq callpropvoid QName(PackageNamespace(""), "_-use_slot:X"), L475;
    ^^ that won't work.

    More like this

    getlocal0
    getproperty QName(PackageNamespace(""), "myInventoryItems")
    getproperty QName(PackageNamespace(""), "myInventorySlotContentsId_1")

    pushint PotionIdNumber

    ifeq HavePotion_UseIt_1

    getlocal0
    getproperty QName(PackageNamespace(""), "myInventoryItems")
    getproperty QName(PackageNamespace(""), "myInventorySlotContentsId_2")

    pushint PotionIdNumber

    ifeq HavePotion_UseIt_2

    ....

    HavePotion_UseIt_1:
    getlocal0
    getproperty QName(PackageNamespace(""), "useItems")
    callpropvoid QName(PackageNamespace(""), "useMyInventorySlot_1")

    jump Done

    HavePotion_UseIt_2:
    getlocal0
    getproperty QName(PackageNamespace(""), "useItems")
    callpropvoid QName(PackageNamespace(""), "useMyInventorySlot_1")

    jump Done

    ...

    Done:
    This certainly isn't the best way of doing it but it kind of shows you how to implement if statements and such.

  10. #9
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy
    I try to comment this code, becouse it seems that I don't get something important

    Code:
    getlocal0 ; with this i target local prop? dunno... it push the local register to 0... 
    getproperty QName(PackageNamespace(""), "myInventoryItems"); put in stack myInventoryItems
    getproperty QName(PackageNamespace(""), "myInventorySlotContentsId_1"); added the ID of slot 1
    
    pushint PotionIdNumber; added the potion id. Stack: PotionIdNumber, myInventorySlotConstestId_1, myInventoryItems 
    
    ifeq HavePotion_UseIt_1; I have 3 elements in stack, eq between? 
    
    getlocal0
    getproperty QName(PackageNamespace(""), "myInventoryItems")
    getproperty QName(PackageNamespace(""), "myInventorySlotContentsId_2")
    
    pushint PotionIdNumber
    
    ifeq HavePotion_UseIt_2 ; this is a call to a function, i imagine... the functions that are below... 
    
    ....
    
    HavePotion_UseIt_1:
    getlocal0
    getproperty QName(PackageNamespace(""), "useItems")
    callpropvoid QName(PackageNamespace(""), "useMyInventorySlot_1")
    
    jump Done  ; whut?
    
    HavePotion_UseIt_2:
    getlocal0
    getproperty QName(PackageNamespace(""), "useItems")
    callpropvoid QName(PackageNamespace(""), "useMyInventorySlot_1")
    
    jump Done
    
    ...
    
    Done:
    Everything but the part where my stack has 3 elements is clear. You do directly to function if potion founded. that's nice.

  11. #10
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    getlocal0 ; with this i target local prop? dunno... it push the local register to 0...
    getproperty QName(PackageNamespace(""), "myInventoryItems"); put in stack myInventoryItems
    getproperty QName(PackageNamespace(""), "myInventorySlotContentsId_1"); added the ID of slot 1
    getlocal0 pushes the handle of the calling class to the stack. For instance, getlocal0 in Player.class.asasm will push the calling Player object (or class if you will) to the stack. This is useful when you want to get a variable of the class.

    The getproperty instruction that follows will use the first thing on the stack, looking 'inside' it for the property you typed in. It will then push a handle to that property on the stack.

    The next getproperty again uses the first thing on the stack (pop's it off the stack), looking inside it for the property listed. It will then push a handle to that property on the stack.

    ifeq HavePotion_UseIt_2 ; this is a call to a function, i imagine... the functions that are below...
    It isn't a function, more like a goto statement. When compiling, the compiler will see "HavePotion_UseIt_2" after ifeq and will look for "HavePotion_UseIt_2:" in the code. It will then code in the appropriate jump including the correct number of bytes to skip.

    jump Done ; whut?
    jump is the command used when you want to go to another part of the code. Similar to ifeq, only it has no conditionals, it will always jump to where ever you tell it. Done is the label I chose (could be any name). The compiler will look for Done: and code in the appropriate jump.

    I think that should cover most of what you are wondering about in the code.
    Last edited by nilly; 09-19-2012 at 07:41 AM.

  12. #11
    Cygnusx3o's Avatar
    Join Date
    Mar 2012
    Gender
    male
    Posts
    90
    Reputation
    10
    Thanks
    868
    My Mood
    Cheerful
    Please move this thread.

  13. #12
    gorgor's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Location
    Toxic Sewer
    Posts
    583
    Reputation
    15
    Thanks
    161
    one time I changed the source code of a C#project ( doing autonexus at 30% based on screenshot).
    I changed it to teleport me to an alt if it was available... this was when we could TP on WC...

  14. #13
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    Well I've done some work on this and so far I got the autospell if priest, autopot, and autonexus working together. There are still a few things that need refining. So far it only works with "Health Potion" but I think I figured out a way to easily check to see if the pot is a heal pot in general. The other thing is having the auto priest heal tied into the auto-nexus seems dangerous, at least to the level 3's and 5's I've been testing it with. When the spell is cast it doesn't immediately heal the character like potions do. It takes time (probably due to communication with the server) and during that time if you're getting shotgunned you're extremely vulnerable as autonexus will not kick in because the code see you have enough mana to cast a spell. The other thing is when the auto-nexus part kicks in, it seems to kick to the player connection screen a lot. This isn't a big issue but something to think about. I'll refine this a bit and post the code later.

  15. #14
    raikoug's Avatar
    Join Date
    May 2011
    Gender
    male
    Posts
    86
    Reputation
    10
    Thanks
    203
    My Mood
    Happy
    Oh... you managed to find when a player is a priest and when he is not? ... wow...

  16. #15
    nilly's Avatar
    Join Date
    Aug 2012
    Gender
    male
    Posts
    2,652
    Reputation
    155
    Thanks
    13,983
    My Mood
    Angelic
    Just posted the source code for it here: https://www.mpgh.net/forum/599-realm-...exus-code.html

Page 1 of 2 12 LastLast

Similar Threads

  1. Replies: 6
    Last Post: 12-08-2008, 12:57 PM
  2. Post the scariest shit you have seen!
    By arunforce in forum General
    Replies: 26
    Last Post: 08-17-2007, 11:16 PM
  3. Does the Firefly skin Suck?
    By Dave84311 in forum General
    Replies: 11
    Last Post: 02-10-2007, 06:49 AM
  4. Plz I Want Maple Global Hacks And Where Do I Get Game Engine 2 Make The Hacks Work???
    By mattinthehat in forum MapleStory Hacks, Cheats & Trainers
    Replies: 3
    Last Post: 01-15-2006, 06:12 PM
  5. Two Biggest Spammers on the forums!
    By Dave84311 in forum General
    Replies: 20
    Last Post: 01-02-2006, 08:39 AM