-
Posts
897 -
Joined
-
Last visited
-
Days Won
26
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Playtester
-
I need help in editing mob_skill_db (renewal)
Playtester replied to kagzzz's question in Scripting Support
The picture does not work, so we don't know what the error is. -
1. skill.cpp -> skill_calc_heal -> adjust as needed 2. Not as trivial, but it's all in status.cpp (if you search for status_calc_aspd you find most relevant locations) 3. Not too familiar with it, but I suggest taking a look at the fame point system for crafting or even just TK mission and try to replicate it somehow, probably requires database changes to store the value too. It's also mostly in skill.cpp but pc.cpp handles storing those values. 4. You'll need to recode the skill, take a look at how AoE skills work and how single target skills work in skill.cpp. 5. Not sure. Could just be DB not allowing the class to equip the item if it works as thief and not as assassin. 6. That's pretty easy, but it can be at different locations. If you want to adjust damage check battle.cpp (search e.g. for AM_AXEMASTERY and you immediately find the location). To adjust other values you might want to do that in status.cpp at the location where the corresponding stat is calculated like KN_CAVALIERMASTERY.
-
If you're on renewal, test with high AGI value. (High Agi on Target.)
-
For some reason this reply displayed for me today. Maybe some bug with the year? Anyway, if you still want the answer - I honestly don't understand how you can even reach that conclusion. When adding hexadecimals there's no number over flow. You just add per digit. Take a look at the second digit from the right, you will have: 0 + 1 + 2 + 8 + 0 + 0 + 0 + 0 + 0 +0 = 11 11 in hexidecimal is a B. So the result for the second digit from the right is B. You do the same for every digit.
-
There's also that invincible spell: 1929,Great Demon Baphomet@NPC_INVINCIBLE,idle,685,1,10000,1000,60000,no,self,always,0,,,,,,,19 1929,Great Demon Baphomet@NPC_INVINCIBLE,chase,685,1,10000,1000,60000,no,self,always,0,,,,,,,19 1929,Great Demon Baphomet@NPC_INVINCIBLE,attack,685,1,10000,1000,60000,no,self,always,0,,,,,,,19 Or just make the monster cast NPC_ALLHEAL when wounded. Usually plant mode (all the MD_IGNORE bitsets) and sufficient HP should really do the trick though. That's how they do it on official servers too.
-
so is rathena something official or just some kids project
Playtester replied to lllaaazzz's question in General Support
Basically developers bored and crazy enough to work for no money whatsoever recoded the whole server engine of the Ragnarok Online MMORPG, mainly due to legal reasons and to be able to easily add customization. Then that project split up into many different projects because people who are not getting paid have the tendency to get into pointless fights about how to approach certain things. And language barrier. -
How big of a difference is pre-renewal to renewal?
Playtester replied to anjasoleil1's question in General Support
Hmm I think later updating might actually work if you don't add any customization to the code. You could compile the server pre-renewal and after a while switch to renewal and recompile. I mean I did that all the time when testing stuff. -
Disputes, Paypal and Why we can't have nice things
Playtester replied to Akkarin's topic in Community News
Honestly I don't get why donations even need a chargeback option. Donations are donations and not a purchase. -
Just because the code compiles doesn't mean it makes any sense. What you're doing is casting mob_id to a pointer (memory address) and then make the sd pointer point to that address. I explained to you how you can get sd -> by fetching all the players in visible range of the monster.
-
sd will just get garbage data like that (it will point to whatever memory that mob_id value is saved on and behind that). sd is only for players not for monsters. Monsters are not human beings, there's no point showing them a label.
-
An event is player-specific, but here you are in a mob-specific function, so how should that work? You need to put it in a place that is player-specific. Technically, if you want to get from the monster to a list of player, you would do something like "For all players in view range of the monster", but that's fairly complex, nothing I can write down for you. You can search for "map_foreach" in mob.cpp to see similar applications. For example this part: // Scan area for targets if (!tbl && can_move && mode&MD_LOOTER && md->lootitems && DIFF_TICK(tick, md->ud.canact_tick) > 0 && (md->lootitem_count < LOOTITEM_SIZE || battle_config.monster_loot_type != 1)) { // Scan area for items to loot, avoid trying to loot if the mob is full and can't consume the items. map_foreachinshootrange (mob_ai_sub_hard_lootsearch, &md->bl, view_range, BL_ITEM, md, &tbl); } if ((!tbl && mode&MD_AGGRESSIVE) || md->state.skillstate == MSS_FOLLOW) { map_foreachinallrange (mob_ai_sub_hard_activesearch, &md->bl, view_range, DEFAULT_ENEMY_TYPE(md), md, &tbl, mode); } else if (mode&MD_CHANGECHASE && (md->state.skillstate == MSS_RUSH || md->state.skillstate == MSS_FOLLOW)) { int search_size; search_size = view_range<md->status.rhw.range ? view_range:md->status.rhw.range; map_foreachinallrange (mob_ai_sub_hard_changechase, &md->bl, search_size, DEFAULT_ENEMY_TYPE(md), md, &tbl); } Here is search for all targets in range and calls a function per target found. In that underlying function you will have "bl" of the player from which you can fetch sd. You basically want something similar: "For all players in range -> call new function (you need to define it) -> get sd from bl in new function and then do your function call"
-
Refer to this document if you are looking for item bonuses: https://github.com/rathena/rathena/blob/master/doc/item_bonus.txt Cast time/delay --------------- bonus bCastrate,n; Skill cast time rate + n%. (If RENEWAL_CAST is defined, this bonus is equal to bVariableCastrate) bonus2 bCastrate,sk,n; Adjust casting time of skill sk by n%.(If RENEWAL_CAST is defined, this bonus is equal to bVariableCastrate) bonus bFixedCastrate,n; Increases fixed cast time of all skills by n% (has effect in RENEWAL_CAST only) bonus2 bFixedCastrate,sk,n; Increases fixed cast time of skill sk by n% (has effect in RENEWAL_CAST only) bonus bVariableCastrate,n; Increases variable cast time of all skills by n%. (If RENEWAL_CAST is NOT defined, this bonus is equal to bCastrate) bonus2 bVariableCastrate,sk,n; Increases variable cast time of skill sk by n% (If RENEWAL_CAST is NOT defined, this bonus is equal to bCastrate) bonus bFixedCast,t; Increases fixed cast time of all skills by t milliseconds (has effect in RENEWAL_CAST only) bonus2 bSkillFixedCast,sk,t; Increases fixed cast time of skill sk by t milliseconds (has effect in RENEWAL_CAST only) bonus bVariableCast,t; Increases variable cast time of all skills by t milliseconds (has effect in RENEWAL_CAST only) bonus2 bSkillVariableCast,sk,t; Increases variable cast time of skill sk by t milliseconds (has effect in RENEWAL_CAST only) bonus bNoCastCancel,n; Prevents casting from being interrupted when hit (does not work in GvG | n is meaningless) bonus bNoCastCancel2,n; Prevents casting from being interrupted when hit (works even in GvG | n is meaningless) bonus bDelayrate,n; Increases skill delay by n% bonus2 bSkillCooldown,sk,t; Increases cooldown of skill sk by t milliseconds
-
Could be a bug looking at all the sources that say weapon attack of instruments and whips should depend on dex. But currently it's implemented to use STR for all attack with range of 3 or lower. Anything with range 4 or higher uses DEX to calc watk. #ifdef RENEWAL /** * Weapon attack value calculated for Players * @param wa: Weapon attack * @param status: Player status * @return weapon attack */ unsigned int status_weapon_atk(struct weapon_atk wa, struct map_session_data *sd) { float str = sd->base_status.str; int weapon_atk_bonus = 0; if (wa.range > 3 && !pc_checkskill(sd, SU_SOULATTACK)) str = sd->base_status.dex; if (sd->bonus.weapon_atk_rate) weapon_atk_bonus = wa.atk * sd->bonus.weapon_atk_rate / 100; // wa.atk2 = refinement, wa.atk = base equip atk, wa.atk*str/200 = bonus str return wa.atk + wa.atk2 + (int)(wa.atk * (str/200) + weapon_atk_bonus); } #endif
-
Keep in mind that it just adds extra damage which is calculated as fire but does not make the attack fire element. It's hard to notice that it's working unless you do the math. Did you try to increase the bonus damage to a higher value to see if it really doesn't increase the damage?
-
Well the resist does not affect the base duration which is different for each skill. But if you want 12 seconds to be reduced to 4-5 seconds then try: 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 = 6000 + status->mdef*40; tick_def2 = status_src->luk*-10; // Caster can increase final duration with luk break;
-
I'm not sure why you would want that. Freeze would be useless if it only lasted 2 seconds and also makes spells like Storm Gust abusable, BUT if you really insist then find this in status.cpp: case SC_FREEZE: sc_def = status->mdef*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def2 = status_src->luk*-10; // Caster can increase final duration with luk break; And change it to: 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 = 8000 + status->mdef*20; tick_def2 = status_src->luk*-10; // Caster can increase final duration with luk break; That way all Freeze durations are reduced by 5 times, but you still maintain same immunity and other behavior.
-
Sorry, I mixed that second part up with Heat, but I realize now you mean dealing a lot of damage with a single attack. I actually don't think that Miracle itself increases the damage. It only allows you to ignore map and target checks. So you won't find much code for it either. To find Miracle code you go here: https://raw.githubusercontent.com/rathena/rathena/master/src/map/skill.cpp And then search for "SC_MIRACLE".
-
Pretty sure it only activates on normal attacks. Also the skill was really exploitable when it was first implemented, but it was nerfed several times even before renewal was even added.
-
How to convert Miscrosoft SQL .mdf file to mysql files DB
Playtester replied to BURAOT's question in General Support
You can just install MS SQL Server Express version which is free. Get SQL Management Studio too. Then you can import the database and access its data and do whatever you want with it. Just requires some SQL knowledge, but it's fairly similar to MySQL so if you know how to use one, you should manage to use the other. -
How to convert Miscrosoft SQL .mdf file to mysql files DB
Playtester replied to BURAOT's question in General Support
You see migration on google because that's how it's called. The conversion tools are really expensive though. Depending on why you want to do it, you might be cheaper off with other solutions (e.g. manual copying of values or exporting table data as CSV). -
I don't even know what you mean with full episode (client or server?), but nope, I don't have any Ragnarok Online files.
-
Yes.
-
Just comment the corresponding quests in npc/scripts_jobs.conf Commenting valkyrie.txt might already be sufficient, but it probably makes more sense to also comment expanded and transcendent stuff.
-
case SC_STONE: sc_def = status->mdef*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def = status->luk*32; tick_def2 = 0; break; Are you sure it's always 15 seconds? I'd think it would be 5 seconds minimum because that's the incubation time. I don't really know of an easy way to reduce incubation time because that's skill-specific and works on timers. Would require quite some rewriting. But that second phase of stone where you can't move anymore should actually be over after 100ms if you have 320 LUK.
-
Yes that should work. If it doesn't work for stun, then paste all the code you have between "case SC_STUN:" and "break;".