-
Posts
905 -
Joined
-
Last visited
-
Days Won
26
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Everything posted by Playtester
-
Nope, you are wrong. I have a Royal Guard with 19474 MaxHP and with Matyr's Reckoning active I always deal 1752 damage. Bare-handed, with spear and with racial damage bonus cards. Always 1752 damage. It isn't affected by weapons or cards on official servers.
-
Okay so you want it to be ground target. Spiderweb is a pretty complex skill, it can stack durations and ends when it doesn't trap anymore, so it might not work to just change targeting of the skill. If you want to give Sages something like Ankle Snare I guess you have two ways to do that: 1. Simply replace Spiderweb with Ankle Snare skill in the Sage skill tree (I think it also requires some client file changes so it can actually display Ankle Snare in the skill tree on the interface, but not sure about those). 2. Search the whole source code for PF_SPIDERWEB and UNT_SPIDERWEB and remove all that code. Then add "PF_SPIDERWEB" whereever HT_ANKLESNARE appears and "UNT_SPIDERWEB" whereever "UNT_ANKLESNARE" appears. Finally the db entries in the skill_db and skill_unit_db also need to be unified (mostly same values except skill id and packet number of sprite).
-
Why would weapon damage affect it when the damage is based on your MaxHP instead of ATK? Anyway you can change it to whatever you want in battle.c: case PA_SACRIFICE: wd.damage = sstatus->max_hp* 9/100; wd.damage2 = 0; Cards affecting damage you can all define in skill_db, no code changes needed for that.
-
What exactly should work like Ankle Snare?
-
The damage depends on your MaxHP, so the way to increase damage is to have more MaxHP.
-
It isn't enough to connect the status change with the skill, you also have to completely recode Land Protector.
-
That's because there's no such status change yet, you would need to add it yourself. Land Protector doesn't give you a status change at all, the only thing it does is remove other units.
-
Same mob_id. That's why only Andre will attack you when you tank Andre. Pierre and Deniro just don't care.
-
How can passive skills like Double Attack be affected by critical?
Playtester replied to Gotcha's question in Source Requests
Requires packet capturing as the current packet data doesn't support to combine crit with skill. But of course you could just put that into the damage calculation like Focused Arrow Strike: if( !(wd.type&DMG_MULTI_HIT) && sstatus->cri && (!skill_id || skill_id == KN_AUTOCOUNTER || skill_id == SN_SHARPSHOOTING || skill_id == MA_SHARPSHOOTING || skill_id == NJ_KIRIKAGE)) Though this code also checks that it's not a multi hit, so I guess further modifications might be needed. -
Also, do you have the required 1st job skills?
-
Sorry, I'm not familiar enough with client mods, so I don't really know how to do it. I just say that you modified the client to show cast range and thought you could configure it to show ground effects as well. It's honestly hard to tell from here, why it doesn't work. I could try again on my rAthena if I can reproduce it somehow, but last time I tried, spaming was possible and I also know rAthena based servers where it works. You probably will need to debug it on your machine directly using Visual Studio. Actually, in the current implementation it doesn't even use timerskill anymore, but I'm not sure if you have that. Let me guide you through the code so you can understand and debug it. In the current implementation, the placing of the meteor storm cells starts here (skill.c): case WZ_METEOR: case SU_CN_METEOR: { int area = skill_get_splash(skill_id, skill_lv); short tmpx = 0, tmpy = 0; if (sd && skill_id == SU_CN_METEOR) { short item_idx = pc_search_inventory(sd, ITEMID_CATNIP_FRUIT); if (item_idx >= 0) { pc_delitem(sd, item_idx, 1, 0, 1, LOG_TYPE_CONSUME); flag |= 1; } } for (i = 1; i <= skill_get_time(skill_id, skill_lv)/skill_get_unit_interval(skill_id); i++) { // Creates a random Cell in the Splash Area tmpx = x - area + rnd()%(area * 2 + 1); tmpy = y - area + rnd()%(area * 2 + 1); skill_unitsetting(src, skill_id, skill_lv, tmpx, tmpy, flag+i*skill_get_unit_interval(skill_id)); } } break; The number of meteor should be "time" define in skill_cast_db.txt (which you quoted early, so at level 9 which you are casting the video it should be 6000) divided by the interval you defined in skill_unit_db which should be 1000. So 6000/1000 = 6 meteor cells placed. Each cell will get a different timer as the Meteors will start at different times (but those don't even count as timerskills, so it doesn't add to the limit). case WZ_METEOR: case SU_CN_METEOR: limit = flag - (flag&1); val1 = (flag&1); flag = 0; // Flag should not influence anything else for these skills break; ^ Here we make sure that the values of the cell are set correctly. default: if (group->val2 == 1 && (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR)) { // Deal damage before expiration break; } skill_delunit(unit); break; ^ This code ensure that Meteor Storm cells don't get removed before dealing damage. default: if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR) { if (group->val2 == 0 && (DIFF_TICK(tick, group->tick) >= group->limit - group->interval || DIFF_TICK(tick, group->tick) >= unit->limit - group->interval)) { // Unit will expire the next interval, start dropping Meteor struct block_list* src; if ((src = map_id2bl(group->src_id)) != NULL) { clif_skill_poseffect(src, group->skill_id, group->skill_lv, bl->x, bl->y, tick); group->val2 = 1; } } // No damage until expiration return 0; } break; ^ This code handles the display of the falling meteor which is 1 second before the cell expires. else if (group->skill_id == WZ_METEOR || group->skill_id == SU_CN_METEOR) { skill_delunit(unit); return 0; } ^ And here we finally delete it after they dealt damage. So, that's how it works in the current rAthena implementation. It doesn't show any error in the map server, right? Something like unit limit reached?
-
I already replied to you in your previous thread: The results of your tests would actually indicate that you have an older implementation of Meteor Storm. In skill.h, check your MAX_SKILLTIMERSKILL value. Also maybe post your current Meteor Storm code. Also setting up your client so that it shows UNT_DUMMYSKILL (the cells where the meteors will land) would most likely make the problem visible.
-
There is no such issue on rAthena or maybe I don't understand what the issue is. In the current rAthena version you can have 50 Meteor Storm casts active at the same time: #define MAX_SKILLTIMERSKILL 50
-
It already has damage variance. It's from DEX to WeaponATK. So e.g. if you have 50 dex and the weapon has 140 attack power you have a variance from 50 to 140, plus the base damage. At least that's how it works in pre-renewal. Other than that, you can always modify damage formulas in battle.c Seach for "atkmin", then you find the relevant code locations (there are multiple). https://raw.githubusercontent.com/rathena/rathena/master/src/map/battle.c
-
Please stop tagging me, if I knew the answer I'd reply.
-
How to set up the max level only for Taekwon class?
Playtester replied to Rockstar xD's question in General Support
Should be fairly easy. First of all, check the db/import folder. After compiling, you should have a file named job_exp.txt there which is a copy of this file: https://github.com/rathena/rathena/blob/master/db/import-tmpl/job_exp.txt Now you can really just follow the instruction, but in short you want to uncomment the appropriate line (base exp) and replace x with the job ID of Taekwon (4046). Then just put the max level you want. As long as you don't increase the level above 175, no other changes should be required. -
Full Chemical Protection skill not working (breakable)
Playtester replied to Halestorm's question in General Support
I just want to note that that Tarot (and Gospel) breaking Chemical Protection is the official behavior. You modify it as maxine02 explained. -
It's not so easy. Generally speaking, the max level for monster skills is already higher, you could do that at least by just raising the level in mob_skill_db. For players, the max level is defined in skill_db, but just raising it might not be sufficient. If you have levels above 13, you will need to update the define in skill.h: #define MAX_SKILL_LEVEL 13 /// Max Skill Level (for skill_db storage) Keep in mind that the system expects you to now define the required values for each level. It will try to continue a fixed pattern like when you define 4:8:12:16:20 it will automatically continues with 24, etc. but in other cases this can cause problem, like the values going negative in case of decreasing values. So in worst case you'll have to update all the skill_xxx_db stuff for every single skill. Finally just increasing the level server-sided much not actually affect how much you can learn on the client. You might need to modify the client to allow values above 10, which I'm not sure if anyone knows how to do. You could also write your own client but then you'll be busy with that the next 10 years. So in short, it's hard to do and that's why nobody replies.
-
eAthena is on github now too, so you can grab it from there: https://github.com/eathena/eathena Don't know how to check out older versions but should be possible. I personally would just check out rAthena, enable PRERE define and then just revert the differences between episode 5 and 13.2 one-by-one.
-
The current skill_id is in the variable "skill_id". It's avaiable in that function. e.g. if(skill_id == KN_BOWLINGBASH && d.damage > 100000)
-
There's no switch for it as the iRO ASPD formula hasn't been coded at all. You could however, use pre-renewal ASPD which is probably closer to iRO than the renewal one. For that you need to open renewal.h and comment RENEWAL_ASPD. If you want to implement iRO ASPD yourself, you need to read yourself into status.c (just search for "aspd" to find the relevant code).
-
The skill is supposed to move the caster to the target, right? Did you try to exchange the two lines? First call clif_blown(src) and then clif_skill_nodamage(...).
-
Skill animation is already there: clif_skill_nodamage(src,bl,skill_id,skill_lv,i);
-
As I said: Above
-
I think easiest way to do that would be to add some code in battle_calc_attack. You have already a min damage check there: if( d.damage + d.damage2 < 1 ) { //Miss/Absorbed //Weapon attacks should go through to cause additional effects. if (d.dmg_lv == ATK_DEF /*&& attack_type&(BF_MAGIC|BF_MISC)*/) // Isn't it that additional effects don't apply if miss? d.dmg_lv = ATK_MISS; d.dmotion = 0; } above that I guess you could add something like: if(d.damage > 100000) d.damage = 100000;