Jump to content

Playtester

Developer
  • Posts

    811
  • Joined

  • Last visited

  • Days Won

    22

Everything posted by Playtester

  1. Just try around a bit. Basically "regen" is the normal regen and "sregen" is the sitting regen.
  2. Just open the rAthena project in Visual Studio and search for the Aegis name e.g. "SM_RECOVERY" and you find everything related to it in the source code.
  3. 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.
  4. Are you running your server in renewal after all? Because that's the renewal defense code. There is not a single function that calculates VIT_DEF at the moment, but it's basically calculated right above the code you quoted. It uses DEF2 from status.cpp as input. Just search for "def2" in that file (calculation depends on bl type).
  5. On the script page there is a "Support" button which brings you to the support thread for this script. Maybe try to ask there. Akkarin is still around (he's the admin of rAthena actually).
  6. 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
  7. Not sure about Renewal, but in Pre-Renewal the damage of Auto-Blitz gets divided by number of targets, whereas actively using it doesn't.
  8. 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).
  9. 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.
  10. 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.
  11. 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
  12. If the config files are enough then I recommend using them. If you want a special implementation, you'd need to modify the source code. The right position in the code depends a bit on how you want to modify it.
  13. 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.
  14. The "0x" in front of the number is the indicator that the number is in hex by the way.
  15. Need more info. You want to increase BB's range? In PVP only?
  16. 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.
  17. Not sure what the default is, maybe better set bonus to 0 instead of removing the whole line. Make sure to set it to 0 for all levels.
  18. 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)
  19. 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
  20. You should list if you are using renewal or pre-renewal and at least give the item's YAML entry that reduces the DEF.
  21. 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.
  22. 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
  23. Resistance from items is applied after the stat resistance. It's multiplicatively, not additively. 100% reduced by 90% = 10% 10% reduced by 20% = 8%
  24. 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.
  25. As for the latest file you can always get it from here: https://github.com/rathena/rathena/ Also if you didn't check your changes into Git then you can just use a diff tool to compare the changes and undo them (I use TortoiseGit for it).
×
×
  • Create New...