Jump to content

Playtester

Developer
  • Posts

    811
  • Joined

  • Last visited

  • Days Won

    22

Posts posted by Playtester

  1. On 4/27/2024 at 12:21 AM, Unknow said:

    Is there a way to change the emulator's overall damage? Any variables used in calculating overall damage?

    On a simular request I saw someone suggested to use mapflags and then do % damage adjustments like for GVG/WoE. But I'm not too familiar with that.

    I'd probably just change the source code to reduce the damage at some point. Probably in battle.cpp "battle_calc_attack" after the type-specific calls but before any no damage checks.

  2. I personally would start with pre-renewal, just check out latest rAthena and enable PRERE, compile.

    For client you can always use the latest client for which there is a diffable executable (and usually can just get the latest data.grf from kRO). I would recommend just starting with the most recent available because diffing the executable is the hardest and most annoying part of setting up a server, so you only want to do it once and not later again if you want even newer content. Tools like WARP already offer quite some modes and tricks (e.g. to remove the doram selection screen).

     

    The advantage of starting with PRERE is that you already have all the mechanics work like PRERE and you could already just launch your server in alpha mode. Then slowly start adding renewal content. Since this is a long process that can take years, it's better to do it slowly one after another.

    If you started with Renewal, you'd have a long phase were you wouldn't even have a working version, so you'll probably lose motivation before you're even down reverting all renewal mechanics back to pre-re.

    So yeah, my recommendation is to start with pre-renewal.

     

    I think on rAthena we already did it so that even in PRERE all the renewal maps are available and you can warp to them with the warp atcommand.

     

    Now the work starts. The best thing is probably to start small. Just pick a single renewal map you want to make accessible.

     

    You will need to find add the warps from and to the location. You can take them from existing renewal NPC files, but don't blindly copy the complete file because you'll add warps to locations you don't support then. I guess copying or loading the file but commenting out the warps you don't want yet is the best way to go about it.

    Same strategy should work with NPCs on that map, but might want to remove the scripts for all NPCs you don't want yet (if you keep the file location as it is and then link to it from the pre-re scripts_main file you can easily restore the deleted NPCs just using TortoiseGit Diff or a similar tool).

     

    Now you want to add all the database stuff needed for that map: Items, monsters, etc.

    These you can't simply copy over from renewal as the stats there have a different meaning, you will need to rebalance the items.

    I don't think automatically converting items in any form will result in a balanced item. You'd need to look at similar items in renewal and decide for a suitable value.

     

    For monsters, you can actually convert some values mathematically. I never wrote a converter for it, but it could certainly be done.

    For example if you look at HORN_SCARABA (2083):

        Attack: 886
        Attack2: 91
        Defense: 135
        MagicDefense: 20

    Defense 135 in renewal means 23% damage reduction. Which is the same as 23 DEF in pre-renewal.

    MagicDefense 20 in renewal means 15% damage reduction. Which is the same as 15 DEF in pre-renewal.

    So you would want to put this instead:

        Attack: 886
        Attack2: 91
        Defense: 23
        MagicDefense: 15

    Next problem is the attack.

    As you know, in pre-renewal Attack is minimum ATK and Attack2 is maximum ATK. But in renewal Attack is physical ATK and Attack2 is magical ATK.

    This could also automatically be calculated, you just need Level, STR and INT on top of Attack and Attack2.

    From renewal "Attack", "Level" and "STR", you can actually calculate both minimum ATK and maximum ATK.

    From renewal "Attack2", "Level" and "INT" you want to calculate the pre-renewal INT as that determines MATK in pre-renewal. But you only really need to do that if the monsters actually has any magical spells. Otherwise you might just want to leave the original INT value as it is.

     

    Also consider the "Level" as well. If you keep max level 99 on your server, then monsters have level 130+ will have too high HIT/FLEE, which might make them unbalanced on your server.

     

    I just improved my old helper tool to convert those numbers. It's attached.

     

    prerenewal_v2.zip

    • MVP 3
  3. On 3/5/2024 at 5:21 PM, xMysth said:

    Good day.


    I need help.
    It's possible luk not affect card drops, only to equipment and usable items?

    Thanks for your help.

    Depending on how your server rates are that can be easy to do or a bit harder.

    The setting affects the drop rate directly when killing a monster and inside the drop rate function (mob.cpp, mob_getdroprate) you don't have access on the item info.

    But if you for example always want the card drop rate to be unmodified (also by other on-dead effects), you could just not call the mob_getdroprate function for cards.

    			if (it->type != IT_CARD)
    				drop_rate = mob_getdroprate(src, md->db, md->db->dropitem[i].rate, drop_modifier, md);
    			else
    				drop_rate = md->db->dropitem[i].rate;

    For example like this.

    You would need to do the same modification in atcommand.cpp, ACMD_FUNC(mobinfo), otherwise the "monsterinfo" atcommand would show a fake higher card drop rate (note that here the item data is called id and not it).

  4. On 4/17/2024 at 11:53 AM, aleph075 said:

    Oooh thx! Now I discover that "differencce level" also affect the DROP RATE?!?! What??? So, if i am looking for a low level mob card.... I really have less drop chance? Do the servers edit this?

    Official servers have a drop penalty on level difference, but many private server remove that "feature".

    I only play on pre-renewal servers so not sure how many there are that actually have a drop penalty.

    • Upvote 1
  5. It's basically is the max of both values.

    So if aDelay is 76ms and aMotion is 384ms, then the delay between the attacks is 384ms.

     

    Basically "aDelay" determines the time a monster has to wait until it can attack again. "aMotion" determines the time a monster cannot do anything at all after an attack.

    If aMotion is higher than aDelay, the monster has to stand still until it can attack again (aMotion).

    If aDelay is higher than aMotion, then the monster can already move again after aMotion milliseconds, but still cannot attack until after aDelay milliseconds.

     

    Divine Pride currently has incorrect ASPD display because it only considers aMotion, not aDelay. So you cannot get the aDelay value from Divine Pride at all.

    I notified Dia, he will fix it on Divine Pride.

  6. 5 hours ago, aleph075 said:

    1) Help here

    // Skills that bHealPower has effect on
    // 1: Heal, 2: Sanctuary, 4: Potion Pitcher, 8: Slim Pitcher, 16: Apple of Idun,
    // 32: Coluceo Heal, 64: Highness Heal, 128: Mediale Votum, 256: Dilectio Heal
    skill_add_heal_rate: 487 <--- default

     

    This is on the skill.config archive and do not know how to add varius skills. The 487 is the default numer, but... if i wanna add heals and sanctuary.... how i add both of them? 

    Just:  skill_add_heal_rate: 24487 ??? Dunno 

    2) Is editable the penalty EXP by difference level between mob and user?? Where? 

     

    1) You add the numbers together that you want it enabled for. For example if you only want Heal and Sactuary to be boosted by this bonus, then you would put "3" (1+2). If you want everything to be affected from that list you put 1+2+4+8+16+32+64+128+256=511.

    2) If you are running renewal, you can define the exp and drop penalty here: https://github.com/rathena/rathena/blob/master/db/re/level_penalty.yml

    • Upvote 1
  7. The condition for a status change is in status_get_sc_def:

    		if (skill != nullptr && skill->skill_type == BF_MAGIC && // Basic magic skill
    			!skill->inf2[INF2_IGNOREGTB] && // Specific skill to bypass
    			((skill->inf == INF_ATTACK_SKILL || skill->inf == INF_GROUND_SKILL || skill->inf == INF_SUPPORT_SKILL) || // Target skills should get blocked even when cast on self
    			 (skill->inf == INF_SELF_SKILL && src != bl))) // Self skills should get blocked on all targets except self
    			return 0;

    If you really changed the skill used to "misc" then the status should never be blocked by GTB.

    Even easier would be to just use the "IgnoreGTB" flag.

    If it still doesn't work, then maybe it's already blocked in skill.cpp by something. Easiest is to just debug it. Put a breakpoint on the line I quoted above (first line) and see if it even reaches that code when you use the scroll.

    • Love 1
  8. I would assume in status.cpp:

    void status_calc_misc(struct block_list *bl, struct status_data *status, int level)

    	// Flee
    	stat = status->flee;
    	stat += level + status->agi;
    	status->flee = cap_value(stat, 1, SHRT_MAX);

    Change formula to whatever you want. 50% AGI would be:

    	// Flee
    	stat = status->flee;
    	stat += level + status->agi/2;
    	status->flee = cap_value(stat, 1, SHRT_MAX);

    Luk does not increase flee in pre-renewal anyway. Perfect flee you find as Flee2.

  9. Officially, Ragnarok Online has a interval of 20ms.

    If you use rAthena, you can customize the intervals for different things yourself by adjusting some constants. A while ago I set the base timer interval to the official value by default.

    // If the server can't handle processing thousands of monsters
    // or many connected clients, please increase TIMER_MIN_INTERVAL.
    // The official interval of 20ms is however strongly recommended,
    // as it is needed for perfect server-client syncing.
    const t_tick TIMER_MIN_INTERVAL = 20;
    const t_tick TIMER_MAX_INTERVAL = 1000;

    Examples:

    - Unit skills like Firewall and Heat can hit 50 times a second if there's no knockback

    - Skills with an interval not dividable by 20, such as the interval between each waterball hitting will alternate their delays (in case of waterball it's 140->160->140->160 instead of 150ms)

     

  10. You need to recalculate the renewal def to pre-renewal def through a formula if you want it to result in the same % damage reduction.

    For example 214 DEF and 134 MDEF in Renewal is the same as 32 DEF and 52 MDEF in pre-renewal.

    I've attached a tool with which you can convert all the values you want.

    prerenewal.zip

    • Upvote 1
    • MVP 1
  11. Your refine.yml seems pretty old, are you sure you don't get errors when started map server about outdated files?

    I can't spot any error in the file like lacking armor bonus at level 10 but it's clearly outdated (only 6.6 def bonus on +10 instead of +7). And this is version 1 while the current source code would expect version 2. So maybe your server version is old and has this as a bug that's already been fixed or you updated your server and it expects version 2 but you are still using version 1.

  12. Hmm works fine for me in pre-re compile without any changes.

    You probably need to check your refine.yml files. Maybe they are outdated (you should see that in your map-server log) or maybe you customized it but forgot to define the bonus for level 10.

              - Level: 10
                Bonus: 700
                BlacksmithBlessingAmount: 4
                Chances:
                  - Type: Normal
                    Rate: 1000
                    Price: 2000
                    Material: Elunium
                    BreakingRate: 10000
                  - Type: Enriched
                    Rate: 2000
                    Price: 2000
                    Material: Enriched_Elunium
                    BreakingRate: 10000

     

  13. On 6/17/2022 at 9:53 PM, abalahim said:

    Hello good day, im using pre-renewal server. I would like to ask where i can change the formula of thanatos/ice pick effect?

    base on my test, it is base on targets hard def, not on soft def. i believe in pre-re it should be on targets soft def. 

    thanks you in advance

    It's actually both in pre-renewal. It's HardDef+SoftDef basically.

    		ATK_RATE2(wd->damage, wd->damage2,
    			attack_ignores_def(wd, src, target, skill_id, skill_lv, EQI_HAND_R) ?100:(is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_R) ? (int64)is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_R)*(def1+vit_def) : (100-def1)),
    			attack_ignores_def(wd, src, target, skill_id, skill_lv, EQI_HAND_L) ?100:(is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_L) ? (int64)is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_L)*(def1+vit_def) : (100-def1))
    		);

    Only need to change the (def1+vit_def) part if you want to customize it.

    • Love 1
×
×
  • Create New...