Fixing Ninja Ambush Skill in MoopleDev

Page 2 of 2 FirstFirst 12
Results 26 to 34 of 34
  1. #26
    Member crisroxmysoc is offline
    MemberRank
    Aug 2016 Join Date
    91Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Last thing before you go! Where do you find description of skills, like how would I know if a skill is acting up or if its intentional I havent played maple in years kinda forgot a lot of things

  2. #27
    Proficient Member Pipotron is offline
    MemberRank
    Sep 2017 Join Date
    PastalandLocation
    156Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    You can find the descriptions in String.wz, in the "skill.img" node; but that's the same information you'd see when hovering over the skill with your mouse, so that's what you can use as reference.

    Also, youtube videos of pre-bigbang Maplestory and websites such as pre-bigbang HiddenStreet have all sorts of informative materials you could use.

    Oh and, some private server forums keep reports about problematic skills publicly available, so you could also browse here and there to figure out which skills tend to give issues most frequently!

  3. #28
    Member crisroxmysoc is offline
    MemberRank
    Aug 2016 Join Date
    91Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Thank you and I will for sure come back to you for more questions ahaha

    - - - Updated - - -

    Might have found a potential problem with Combo Tempest (aran skill) it does no damage to boss monsters and doesnt kill enemies well some and that are affected take 8 damage and then die if attack once again with any skill? and where do you find formulas ?

    - - - Updated - - -

    Nvm: maybe combo tempest is suppose to work like that, hahah how do you know if a skill is suppose to show damage or not so confusing
    Last edited by crisroxmysoc; 31-05-19 at 09:02 PM.

  4. #29
    Proficient Member Pipotron is offline
    MemberRank
    Sep 2017 Join Date
    PastalandLocation
    156Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Yeah, Tempest is supposed to work like that c: it freezes monsters and causes your next attack to be lethal, regardless of monster's HP.

    You could find some formulas on Ayumilove's website; this link should be relevant, although it may be missing Aran still.

  5. #30
    Member crisroxmysoc is offline
    MemberRank
    Aug 2016 Join Date
    91Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Quote Originally Posted by Pipotron View Post
    Yeah, Tempest is supposed to work like that c: it freezes monsters and causes your next attack to be lethal, regardless of monster's HP.

    You could find some formulas on Ayumilove's website; this link should be relevant, although it may be missing Aran still.
    hahah thank you once again, I think I might want to fix it up I think its returning the monsters HP as the lethal attack where as I want your damage to be it instead. EDIT: nvm I think my character glitched or something

    oh how is ninja ambush suppose to work when the monster is at HP what damage are you suppose to see, MISS or your max damage or something else?

    And do you know anything about upgraded server for example v83 to v90 or v95

    - - - Updated - - -

    and here is my "fix" ninja ambush I want your opinion on it.

    Code:
    int damage = (int) 2 * (from.getStr() + from.getLuk())  * (skill.getEffect(level).getDamage()/100);    //formula from the site you posted                     
    
     if (damage > 32767) {   //Since the packet cant take anything higher then an int force it out like this      
    
      damage = 32767;           
    
      }
    Then:

    Code:
    if (damge >= hp) {
    
    damage = hp - 1;
    
    if (type == 1) {
    map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), damage), getPosition());
    }
    
    else if (type == 2) { //Essentially if ninja ambush go here
    map.broadcastMessage(MaplePacketCreator.damageMonster(getObjectId(), dealDamage), getPosition()); // I didnt want the damge to either come out as nothing, miss, or (hp-1) just seemed of so output maximum damage or the damage calculated
    //it seems like the client knows when the enemy hp is 1 and it wont activate the animation to tick the damage from status.setValue(MonsterStatus.NINJA_AMBUSH, damage);
    }
    
    cancelTask.run();
     status.getCancelTask().cancel(false);
    }
    Last edited by crisroxmysoc; 01-06-19 at 12:53 AM.

  6. #31
    Proficient Member Pipotron is offline
    MemberRank
    Sep 2017 Join Date
    PastalandLocation
    156Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    When the monster reaches 1 HP, Ninja Ambush is supposed to be deactivated prematurely.
    That interaction is coded in the cancelTask, and it's what gets activated at the end of the last code portion you quoted. c:

    The edits you made look okay!
    You should never be able to reach over 32767 dot damage with vanilla v83 skills and stats (Ambush damage at max level is 100, so that formula essentially reduces to 2(str + luk), and those two stats alone can't give 16383 via sum), so you might not need the extra check, unless you're planning to custom edit something.


    As for your question about server upgrading, your main concerns would be about updating your current packets (every version changes atleast some of them), and keeping up with the features added with every patch.
    Thanks to the v95 source leak, upgrading to that version is a relatively simple task, provided you're prepared to spend time and patience with it.

    There's a thread that contains information about "what came when" in GMS, on this forum, although I can't go ahead and link it for you at the moment.
    That'll be useful!

  7. #32
    Member crisroxmysoc is offline
    MemberRank
    Aug 2016 Join Date
    91Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    AHH thank you, ill shall put back the edits that you made. Correct your coded did do that. I just didnt fundmentally knew what ninja ambush was suppose to do. Thank you for that insight.

    well if your stats are 32676;) then maybe u can achieve that number haha

    whats the main classes I need to do in order to upgrade, whats the process like?

    Ill try to find it!

  8. #33
    Proficient Member Pipotron is offline
    MemberRank
    Sep 2017 Join Date
    PastalandLocation
    156Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Quote Originally Posted by crisroxmysoc View Post
    whats the main classes I need to do in order to upgrade, whats the process like?
    I'm not experienced at all in server version upgrading, so I can only give you "educated guesses" at what you'd need to focus on.

    Apart from the obvious (existing opcode value changes, existing packet structures changes, new opcodes), you wanna focus on implementing classes/methods for completely new mechanics.

    If you're starting from v83, no matter what your target version is, the first thing that comes to mind is the Evan class, that was partially included in v83, but fully released in v84.
    You're gonna need to implement functions to handle the new job values, add the skill IDs to MapleStatEffect's data initialization, and ofcourse add the skill effects.
    This release by @Eric is gold, when it comes to Evan implementation; keep in mind however that that release refers to implementing Evans in a v83 client, thus you'll need to handle things a bit differently (you won't need client edits, and you'll need to double check the opcode values).

    If you're planning to go past v88, Dual Blade class will also require the same kind of work.

    Post-Bigbang (v93+), there's a lot of extra work to do, starting from the Resistance classes, to mention the quickest guess.


    To have an idea of the features that were added with each new patch, you may refer to the "What came When" thread in BasilMarket. It won't be a simple task for sure. c:

  9. #34
    Member crisroxmysoc is offline
    MemberRank
    Aug 2016 Join Date
    91Posts

    Re: Fixing Ninja Ambush Skill in MoopleDev

    Exactly why I want to do it, I believe this will finally get me right into mapleDev properly.

    I believe I know how to find the headers of a receive and send packet but I dont know the structure you would use them in like in handlers and maplepacketcreator. To send packets to the client and to receive the information of the packet from the client

    - - - Updated - - -

    Ill post an example soon just shoving the v95 into the IDA

    - - - Updated - - -

    Okay Lets look into the CwVsContext__OnPacket: Which is I believe its sendopcode packets. So Its what the server is sending to the client via MaplePacketCreator.java
    https://imgur.com/a/LVf2m6b

    And lets look at the CWvsContext::OnInventoryOperation. The packet header for this specific case is 0x1C as its what gets triggered to go into this case.

    So I would update this in my V.83 source which is currently at 0x1D ->0x1C so it went down.


    However this is the problem: if anyone of the mplew. structure changes and I dont know how to find that. Same goes for handlers when you trying to receive a packet.


    In MaplePacketCreator.java: Current V83 InvetoryOperation. I believe packet structure also changes

    Code:
    public static byte[] modifyInventory(boolean updateTick, final List<ModifyInventory> mods) {     
       final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();   
    mplew.writeShort(SendOpcode.INVENTORY_OPERATION.getValue());       
       mplew.writeBool(updateTick);  
      mplew.write(mods.size());   
      //mplew.write(0); v104 :)     
    
      
      int addMovement = -1;       for (ModifyInventory mod : mods) {          
        mplew.write(mod.getMode());        mplew.write(mod.getInventoryType());     
       mplew.writeShort(mod.getMode() == 2 ? mod.getOldPosition() : mod.getPosition());     
           switch (mod.getMode()) {      
              case 0: {//add item               
         addItemInfo(mplew, mod.getItem(), true);         
               break;               
     }     
               case 1: {//update quantity                 
       mplew.writeShort(mod.getQuantity());                 
       break;               
     }   
                 case 2: {//move                   
                       mplew.writeShort(mod.getPosition());            
            if (mod.getPosition() < 0 || mod.getOldPosition() < 0) {             
               addMovement = mod.getOldPosition() < 0 ? 1 : 2;          
              }                 
       break;             
       }              
      case 3: {//remove                 
       if (mod.getPosition() < 0) {                 
           addMovement = 2;                
        }                  
      break;               
     }           
     }          
      mod.clear();     
       }      
      if (addMovement > -1) {      
          mplew.write(addMovement);    
        }       
     return mplew.getPacket();    
    }
    Last edited by crisroxmysoc; 01-06-19 at 07:17 PM.



Page 2 of 2 FirstFirst 12

Advertisement