joecalis
Members-
Content Count
21 -
Joined
-
Last visited
About joecalis
-
Rank
Member
Recent Profile Visitors
1534 profile views
-
Custom Skill Unit Follow Character (like Bragi)
joecalis replied to joecalis's question in Source Support
Yeah I tried to do that also thats why I have SC_GRUESOME_ZONE But it doesn't seem to affect the visual effect, it only stores the group id of the skill. -
I tried to create a skill which mimics an effect like bragi where the wierd symbols/letters follow the character as they walk, and who ever enters the area gets damaged. I know I setup everything correctly but I encountered a problem, while the skill area that damages everyone who enters follow my character, the visual effect stays on the ground where I first casted it as shown in this vid. And also the skill does not seem to end at the set amount of time limit either, here are the important skill information: skill_db.txt 1026,0,6,4,-1,0x41,0,1,1,no,0,0,0,weapon,0, CS_GRUESOME_ZONE,Gruesome Zone skill_cast_db.txt //-- CS_GRUESOME_ZONE1026,0,3000,3000,10000,0,0,0 skill_unit_db.txt 1026,0xa3, , -1, 0, 500,enemy, 0x000 //CS_GRUESOME_ZONE map.c at map_moveblock if (sc->data[SC_GRUESOME_ZONE]){ skill->unit_move_unit_group(skill->id2group(sc->data[SC_GRUESOME_ZONE]->val4), bl->m, x1-x0, y1-y0); }
-
joecalis reacted to an answer to a question: Skill Specialeffect Duration
-
cool so I can just call it as buff like "sc_start(src, src, SI_BERSERK, 100, skill_lv, skill->get_time2(skill_id,skill_lv))"? Edit: NVM I found it, I used clif->status_change.
-
Bump!
-
Is there anyway to have a skill special effect stay at a desired amount of time? For example if I want to have a skill with berserk (redbody) special effect, body will go back to normal after the skill is dispelled. Is it possible to do that through src and/or lua edit? Most of the stuff I ask here gets the answer "You have to hex edit" And as far as I know, my hex editing skills are over negative 9000 so hex edit is a no no. Anyway if anyone knows if this is possible please answer right away, I really need it Edit: I've tried doing clif->specialeffect on skill start and then refresh all pc in view when the skill ends, but the warping animation (change to black screen) is just annoying. I have tried to use the OPTs in status.c (opt3_berserk) but it seems like it only stores body state data and does not affect client animation, only the opt1, opt2, and option has effects on the client and sadly it does not include berserk effect.
-
I have just tested this and I was wondering if this is a bug or something. I had a character with infinite endure while sitting, normal attacks and single hit skills doesn't make it stand, but multi-hit skills like Double Strafe, Double Attack,Sonic Blow causes the player to stand. I already tried modifying pc_damage in pc.c where it says: if( pc_issit(sd) ) { pc->setstand(sd); skill->sit(sd,0); } to: if( pc_issit(sd) && !sc->data[SC_ENDURE_I]) { pc->setstand(sd); skill->sit(sd,0); } And just in case you're wondering how did I access sc->data in pc_damage I just simply added this: struct status_change *sc;sc = status->get_sc(src); Anyway that is my problem, can anyone please tell me how to fix this? I want the character to keep sitting even if hit by a multi-hit skill.
-
NVM I figured it out, it turned out that "status->base_matk" actually calculates and sets the char's base matk. I modified a few things to make the passive work, I will share what I did for people who wants to do the same thing I did. in status.c find: unsigned short status_base_matk(const struct status_data *st, int level) {#ifdef RENEWAL return st->int_+(st->int_/2)+(st->dex/5)+(st->luk/3)+(level/4);#else return 0;#endif} change to: unsigned short status_base_matk(const struct status_data *st, int level, struct map_session_data *sd) {int skill_lv, total = 0;#ifdef RENEWAL total = st->int_+(st->int_/2)+(st->dex/5)+(st->luk/3)+(level/4); if((skill_lv=pc->checkskill(sd,CS_MATK_MASTERY))>0) total += total*skill_lv/100; return total;#else return 0;#endif} find: st->matk_min = st->matk_max = bl->type == BL_PC ? status->base_matk(st, level) : level + st->int_; change to: st->matk_min = st->matk_max = bl->type == BL_PC ? status->base_matk(st, level, sd) : level + st->int_; find: *matk_min = status->base_matk(st, status->get_lv(bl)); change to: *matk_min = status->base_matk(st, status->get_lv(bl), sd); in status.h find: unsigned short (*base_matk) (const struct status_data *st, int level); change to: unsigned short (*base_matk) (const struct status_data *st, int level, struct map_session_data *sd); in pc.h find: #define pc_leftside_matk(sd) (status->base_matk(status->get_status_data(&(sd)->bl), (sd)->status.base_level)) change to: #define pc_leftside_matk(sd) (status->base_matk(status->get_status_data(&(sd)->bl), (sd)->status.base_level, (sd))) in skill.c find: heal = 5 * status->get_lv(&hd->bl) + status->base_matk(&hd->battle_status, status->get_lv(&hd->bl)); change to: heal = 5 * status->get_lv(&hd->bl) + status->base_matk(&hd->battle_status, status->get_lv(&hd->bl),sd);
-
So which is the right code to change the base matk because there is no "bstatus->base_matk" and the base_matk I used to get the char's current base matk is a function not a bstatus data therefore I could not change it's value.
-
So I've been working on a couple of passive skills, all were fine except for this one. I'm not gonna post all the codes in diff files because there are just too many, but here is the part I am mostly having a problem on. I need to have this skill add 1% Base MATK (the first number that shows in the stat window under MATK) every skill level heres what I have in Status.c // ----- MATK CALCULATION -----if((skill_lv=pc->checkskill(sd,CS_MATK_MASTERY))>0){ bstatus->matk_min += (int)status->base_matk(bstatus,sd->status.base_level)*skill_lv/100; if(bstatus->matk_min > bstatus->matk_max) bstatus->matk_max = bstatus->matk_min;} if you are wondering the part is just to get the characters current base_matk which works perfectly fine as I have tried it. The part I am so confuzzled about is changing "bstatus->matk_min" or "bstatus->matk_max" does not change the character's current matk stat. But "bstatus->batk" and all other "bstatus->etc." works except for matk_min and matk_max. So my question is which is the right "bstatus" or any other code thingamajigie to change to be able to modify my character's current matk which shows at the stat window?
-
But can I get the data from the columns selected and store it in an array?