Jump to content

Playtester

Developer
  • Posts

    765
  • Joined

  • Last visited

  • Days Won

    19

Posts posted by Playtester

  1. Well if you want to do it properly and only want to change the duration and nothing else, then you have to do the math.

    How much % reduction should each point in LUK give so that at 320 LUK, you have 100% resist?

    100%/320 = 0.3125%

    Unfortunately that's an odd number the program can't properly work with in its current state. You could give 0.31% reduction per LUK, then at 320 LUK you'd have 320*0.31% = 99.2% reduction.

    So for example for freeze, you could put something like:

    		case SC_FREEZE:
    			sc_def = status->mdef*100;
    			sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
    			tick_def = status->luk*31;
    			tick_def2 = 0;
    			break;

    See the luk*31? There I define that each point in LUK should reduce the duration by 0.31%.

    Keep in mind that MDEF will now only reduce the chance but not the duration anymore.

    • Like 1
  2. Sounds like MAX_LEVEL is still 175. Might be an issue with how you compile, but it's hard for me to see what's wrong.

    For starters, try to change the error message and see if it actually changes your output, e.g.:

    ShowError("pc_readdb_job_exp: Invalid maxlevel %d specified. MAX_LEVEL=%d\n", maxlvl, MAX_LEVEL);

    Then, when you start it and the error message is still the same, then you know that it didn't actually recompile your sources at all.

  3. Can't find an error on first look, try to debug in pc.c:

    	maxlvl = atoi(fields[0]);
    	if(maxlvl > MAX_LEVEL || maxlvl<1){
    		ShowError("pc_readdb_job_exp: Invalid maxlevel %d specified.\n", maxlvl);
    		return false;
    	}

    As you can see, it just reads the first column in the file (255) then compared it with MAX_LEVEL. So it seems "maxlvl > MAX_LEVEL" is true. The only reason for that can be that MAX_LEVEL is not set to 255.

  4. I can't give you a full solution, but the function you are looking for is:

    int status_damage(struct block_list *src,struct block_list *target,int64 dhp, int64 dsp, int walkdelay, int flag)

    All damage goes through here and you have "src" available. So you can check if src is BL_PC and then do something.

    The cleanest solution would probably be to add a new status change that lasts very long but gets dispelled on map change.

    • Like 1
  5. I honestly don't understand that code part either (why axes, why swords?).

    Anyway, you could debug here (just set a breakpoint, run server in debug, then log in and equip an item, then check the variables):

    	if(pos == EQP_ARMS && id->equip == EQP_HAND_R) { //Dual wield capable weapon.
    		pos = (req_pos&EQP_ARMS);
    		if (pos == EQP_ARMS) //User specified both slots, pick one for them.
    			pos = sd->equip_index[EQI_HAND_R] >= 0 ? EQP_HAND_L : EQP_HAND_R;
    	}

    Is pos "EQP_ARMS"? What is req_pos? What does pos get set to at the end?

  6. A bit late, but the code you are looking for is in skill.c

    	case ASC_METEORASSAULT:
    		//Any enemies hit by this skill will receive Stun, Darkness, or external bleeding status ailment with a 5%+5*skill_lv% chance.
    		switch(rnd()%3) {
    			case 0:
    				sc_start(src,bl,SC_BLIND,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,1));
    				break;
    			case 1:
    				sc_start(src,bl,SC_STUN,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,2));
    				break;
    			default:
    				sc_start2(src,bl,SC_BLEEDING,(5+skill_lv*5),skill_lv,src->id,skill_get_time2(skill_id,3));
    		}
    		break;

    If you change SC_STUN in general, it affects all skills, not only Meteor Assault.

    You will need to replace sc_start with a status_change_start call with the corresponding parameters. With the "flag" parameter you can define that chance / duration cannot be reduced.

     * @param flag: Value which determines what parts to calculate. See e_status_change_start_flags
    
  7. Make sure you modify it in the /re/ folder rather than the /pre-re/ folder.

    It should work for sure. If it doesn't for you, there must be an error in your modification. Make sure the class matches and the weapon type matches.

  8. I always start a second client to fix it in the first client then close the second client. But your solution seems even easier than this. It actually seems that taken over admin rights is what fixes it. You usually take over admin rights when starting RO but for some reason that isn't sufficient for it. You need to get admin rights while the client is already running.

  9. This must be caused by some customization. You first need to find out which status change reduces LUK. Because in that screenshot above you applied at least two (Agi Up and Blessing). Try to apply them one-by-one to find the one that reduces LUK. After you found that out, you can check for it in status.c to see if there's anything that would make the status change reduce LUK.

    If only the NPC reduces LUK but the buffs normally don't you also should post the NPC script part, because the error might be there (might add another SC that's invisible and reduces LUK).

  10. Nah, Bowling Bash works in a way that it hits twice (hard-coded) because it works with collision code. If it only hits once it's either not default rAthena (which it actually isn't) or you are standing on the gutter line on which Bowling Bash doesn't hit twice.

    Also note, that even if BB hits twice, you won't see it. The two damage numbers usually overlap.

  11. There's a global setting for the amount in monster.conf as well, no need to change it in all spawn files.

    // Rate of monsters on a map, 200 would be twice as many as normal. (Note 2)
    mob_count_rate: 100

     

  12. Yes, that file contains all the delays. Keep in mind that +5 ASPD is equal to -50 delay. So if you change 700 to 650, that would be +5 ASPD. This is just the base ASPD though. If you have a buff that halves your delay, the bonus will also be halved. (130->165 would change to 135->167.5).

    • MVP 1
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.