-
Posts
765 -
Joined
-
Last visited
-
Days Won
19
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Playtester
-
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;
-
I don't really know anything about that part of the code, sorry. Guess you should just debug by setting breakpoints to see what's going wrong.
-
It's better to just uncomment #define PRERE in the same file. Then all the renewal stuff is removed.
-
Doesn't happen on default, maybe you have an item equipped that gives negative crit?
-
Check the second line: // Only official levels included, check db/import-tmpl/job_exp.txt for an expanded list Alternatively you need to add required exp for levels 100-300. (Sorry, can't speak Portuguese.)
-
If I'm not completely mistaken, a much easier way to check would be: sd->status.class_ == JOB_HIGH_PRIEST
-
You need to check for "sd" first. sd is NULL when monsters use the skill which will cause a crash when you try to access sd->status.
-
I can't do anything about it unless you tell me what packet needs to be send to the client so it works. Unit spells can't hit ice wall. LoV can not hit ice wall. Must be an iRO custom if it does on iRO. On rA you can already recast icewall on a destroyed wall tile. Everything is working as on Aegis already.
-
I just checked again and when I compile current rAthena on pre-renewal setting without any changes, Sacrifice already never misses.
-
It doesn't has much to do with immune attack. I didn't try around with that code too much but if you always set state |= BCT_ENEMY there, then I think monsters will always attack each other. If you find a good condition you can write for that you could pull it off.
-
Even though you rewrote battle_check_target to return true in that situation?