- Cleaned up and reorganized status_change_start. Now it also receives the success % rate (0->100)
- Added local function status_get_sc_tick which takes care of reducing the effect duration as need is be. - Modified status_get_sc_def to handle defense against all related statuses, now returns defense on a scale where 10000 is 100%. - Added time2 to pangvoice, it is the player effect's duration while time1 is for the mon's effect. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5227 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
516668a5ec
commit
d25d952fc6
@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV
|
|||||||
GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
|
GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
|
||||||
|
|
||||||
2006/02/08
|
2006/02/08
|
||||||
|
* Rewrote/organized status_change_start, it now receives the base rate for
|
||||||
|
the effect. It handles reducing this rate/duration through natural
|
||||||
|
resistances and whatever else should reduce it. [Skotlex]
|
||||||
* Fixes to exp2.txt on the novice job exp. Thanks to rollopop. [Skotlex]
|
* Fixes to exp2.txt on the novice job exp. Thanks to rollopop. [Skotlex]
|
||||||
- Also modified exp2.txt to use the normal max levels by default.
|
- Also modified exp2.txt to use the normal max levels by default.
|
||||||
2006/02/07
|
2006/02/07
|
||||||
|
@ -819,9 +819,9 @@
|
|||||||
//-- HT_PHANTASMIC
|
//-- HT_PHANTASMIC
|
||||||
1009,0,0,0,0
|
1009,0,0,0,0
|
||||||
//-- BA_PANGVOICE
|
//-- BA_PANGVOICE
|
||||||
1010,1000,2000,10000,0
|
1010,1000,2000,17000,0
|
||||||
//-- DC_WINKCHARM
|
//-- DC_WINKCHARM (time1: Charm, time2: Confusion)
|
||||||
1011,1000,2000,10000,0
|
1011,1000,2000,10000,17000
|
||||||
|
|
||||||
//-- BS_GREED
|
//-- BS_GREED
|
||||||
1013,0,1000,0,0
|
1013,0,1000,0,0
|
||||||
|
@ -8336,7 +8336,7 @@ int atcommand_mute(
|
|||||||
clif_GM_silence(sd, pl_sd, 0);
|
clif_GM_silence(sd, pl_sd, 0);
|
||||||
pl_sd->status.manner -= manner;
|
pl_sd->status.manner -= manner;
|
||||||
if(pl_sd->status.manner < 0)
|
if(pl_sd->status.manner < 0)
|
||||||
status_change_start(&pl_sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
status_change_start(&pl_sd->bl,SC_NOCHAT,100,0,0,0,0,0,0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
clif_displaymessage(fd, msg_table[3]); // Character not found.
|
clif_displaymessage(fd, msg_table[3]); // Character not found.
|
||||||
@ -9431,7 +9431,7 @@ static int atcommand_mutearea_sub(struct block_list *bl,va_list ap)
|
|||||||
if (id != bl->id && !pc_isGM(pl_sd)) {
|
if (id != bl->id && !pc_isGM(pl_sd)) {
|
||||||
pl_sd->status.manner -= time;
|
pl_sd->status.manner -= time;
|
||||||
if (pl_sd->status.manner < 0)
|
if (pl_sd->status.manner < 0)
|
||||||
status_change_start(&pl_sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
status_change_start(&pl_sd->bl,SC_NOCHAT,100,0,0,0,0,0,0);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -611,9 +611,10 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|||||||
|
|
||||||
if(sc->data[SC_DODGE].timer != -1 && !sc->opt1 && (flag&BF_LONG || (sc->data[SC_SPURT].timer != -1 && flag&BF_WEAPON))
|
if(sc->data[SC_DODGE].timer != -1 && !sc->opt1 && (flag&BF_LONG || (sc->data[SC_SPURT].timer != -1 && flag&BF_WEAPON))
|
||||||
&& rand()%100 < 20) {
|
&& rand()%100 < 20) {
|
||||||
|
if (sd && pc_issit(sd)) pc_setstand(sd); //Stand it to dodge.
|
||||||
clif_skill_nodamage(bl,bl,TK_DODGE,1,1);
|
clif_skill_nodamage(bl,bl,TK_DODGE,1,1);
|
||||||
if (sc->data[SC_COMBO].timer == -1)
|
if (sc->data[SC_COMBO].timer == -1)
|
||||||
status_change_start(bl, SC_COMBO, TK_JUMPKICK, src->id, 0, 0, 2000, 0);
|
status_change_start(bl, SC_COMBO, 100, TK_JUMPKICK, src->id, 0, 0, 2000, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2292,14 +2293,14 @@ static struct Damage battle_calc_weapon_attack(
|
|||||||
if (target->type == BL_PC)
|
if (target->type == BL_PC)
|
||||||
pc_breakweapon((struct map_session_data *)target);
|
pc_breakweapon((struct map_session_data *)target);
|
||||||
else
|
else
|
||||||
status_change_start(target,SC_STRIPWEAPON,1,75,0,0,breaktime,0);
|
status_change_start(target,SC_STRIPWEAPON,100,1,75,0,0,breaktime,0);
|
||||||
}
|
}
|
||||||
if(rand() % 10000 < breakrate[1] * battle_config.equip_skill_break_rate/100 || breakrate[1] >= 10000) {
|
if(rand() % 10000 < breakrate[1] * battle_config.equip_skill_break_rate/100 || breakrate[1] >= 10000) {
|
||||||
if (target->type == BL_PC) {
|
if (target->type == BL_PC) {
|
||||||
struct map_session_data *tsd = (struct map_session_data *)target;
|
struct map_session_data *tsd = (struct map_session_data *)target;
|
||||||
pc_breakarmor(tsd);
|
pc_breakarmor(tsd);
|
||||||
} else
|
} else
|
||||||
status_change_start(target,SC_STRIPSHIELD,1,75,0,0,breaktime,0);
|
status_change_start(target,SC_STRIPSHIELD,100,1,75,0,0,breaktime,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3043,9 +3044,9 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
|
|||||||
int duration = skill_get_time2(MO_BLADESTOP,skilllv);
|
int duration = skill_get_time2(MO_BLADESTOP,skilllv);
|
||||||
status_change_end(target, SC_BLADESTOP_WAIT, -1);
|
status_change_end(target, SC_BLADESTOP_WAIT, -1);
|
||||||
clif_damage(src, target, tick, status_get_amotion(src), 1, 0, 1, 0, 0); //Display MISS.
|
clif_damage(src, target, tick, status_get_amotion(src), 1, 0, 1, 0, 0); //Display MISS.
|
||||||
status_change_start(target, SC_BLADESTOP, skilllv, 2, (int)target, (int)src, duration, 0);
|
status_change_start(target, SC_BLADESTOP, 100, skilllv, 2, (int)target, (int)src, duration, 0);
|
||||||
skilllv = sd?pc_checkskill(sd, MO_BLADESTOP):1;
|
skilllv = sd?pc_checkskill(sd, MO_BLADESTOP):1;
|
||||||
status_change_start(src, SC_BLADESTOP, skilllv, 1, (int)src, (int)target, duration, 0);
|
status_change_start(src, SC_BLADESTOP, 100, skilllv, 1, (int)src, (int)target, duration, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3092,12 +3093,15 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
|
|||||||
if (!status_isdead(target) && damage > 0) {
|
if (!status_isdead(target) && damage > 0) {
|
||||||
if (sd) {
|
if (sd) {
|
||||||
int boss = status_get_mode(target)&MD_BOSS;
|
int boss = status_get_mode(target)&MD_BOSS;
|
||||||
if (
|
int rate = 0;
|
||||||
(sd->weapon_coma_ele[ele] > 0 && rand()%10000 < sd->weapon_coma_ele[ele]) ||
|
if (sd->weapon_coma_ele[ele] > 0)
|
||||||
(sd->weapon_coma_race[race] > 0 && rand()%10000 < sd->weapon_coma_race[race]) ||
|
rate+=sd->weapon_coma_ele[ele];
|
||||||
(sd->weapon_coma_race[boss?10:11] > 0 && rand()%10000 < sd->weapon_coma_race[boss?10:11])
|
if (sd->weapon_coma_race[race] > 0)
|
||||||
)
|
rate += sd->weapon_coma_race[race];
|
||||||
status_change_start(target, SC_COMA, 0, 0, 0, 0, 0, 0);
|
if (sd->weapon_coma_race[boss?10:11] > 0)
|
||||||
|
rate += sd->weapon_coma_race[boss?10:11];
|
||||||
|
if (rate)
|
||||||
|
status_change_start(target, SC_COMA, rate/100, 0, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1227,7 +1227,7 @@ int chrif_load_scdata(int fd)
|
|||||||
ShowWarning("chrif_load_scdata: Received invalid duration (%d ms) for status change %d (character %s)\n", data.tick, sd->status.name);
|
ShowWarning("chrif_load_scdata: Received invalid duration (%d ms) for status change %d (character %s)\n", data.tick, sd->status.name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
status_change_start(&sd->bl, data.type, data.val1, data.val2, data.val3, data.val4, data.tick, 7);
|
status_change_start(&sd->bl, data.type, 100, data.val1, data.val2, data.val3, data.val4, data.tick, 15);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5220,7 +5220,7 @@ int clif_skill_nodamage(struct block_list *src,struct block_list *dst,
|
|||||||
WBUFB(buf,14)=fail;
|
WBUFB(buf,14)=fail;
|
||||||
clif_send(buf,packet_len_table[0x11a],src,AREA);
|
clif_send(buf,packet_len_table[0x11a],src,AREA);
|
||||||
|
|
||||||
return 0;
|
return fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
@ -8762,7 +8762,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
|||||||
clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->status.clothes_color);
|
clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->status.clothes_color);
|
||||||
|
|
||||||
if(battle_config.muting_players && sd->status.manner < 0 && battle_config.manner_system)
|
if(battle_config.muting_players && sd->status.manner < 0 && battle_config.manner_system)
|
||||||
status_change_start(&sd->bl,SC_NOCHAT,0,0,0,0,0,0);
|
status_change_start(&sd->bl,SC_NOCHAT,100,0,0,0,0,0,0);
|
||||||
|
|
||||||
// Lance
|
// Lance
|
||||||
if (script_config.event_script_type == 0) {
|
if (script_config.event_script_type == 0) {
|
||||||
@ -8787,7 +8787,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
|||||||
if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
|
if(sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
|
||||||
status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
|
status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
|
||||||
if(sd->special_state.infinite_endure && sd->sc_data[SC_ENDURE].timer == -1)
|
if(sd->special_state.infinite_endure && sd->sc_data[SC_ENDURE].timer == -1)
|
||||||
status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
|
status_change_start(&sd->bl,SC_ENDURE,100,10,1,0,0,0,0);
|
||||||
|
|
||||||
// Required to eliminate glow bugs because it's executed before clif_changeoption [Lance]
|
// Required to eliminate glow bugs because it's executed before clif_changeoption [Lance]
|
||||||
//New 'night' effect by dynamix [Skotlex]
|
//New 'night' effect by dynamix [Skotlex]
|
||||||
@ -9097,7 +9097,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) { // S 008c <
|
|||||||
sd->state.snovice_flag = 3;
|
sd->state.snovice_flag = 3;
|
||||||
else if (sd->state.snovice_flag == 3) {
|
else if (sd->state.snovice_flag == 3) {
|
||||||
clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,-1,1);
|
clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,-1,1);
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],
|
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],100,
|
||||||
17,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,1),0 ); //Lv17-> +50 critical (noted by Poki) [Skotlex]
|
17,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,1),0 ); //Lv17-> +50 critical (noted by Poki) [Skotlex]
|
||||||
sd->state.snovice_flag = 0;
|
sd->state.snovice_flag = 0;
|
||||||
}
|
}
|
||||||
@ -11002,7 +11002,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd)
|
|||||||
{
|
{
|
||||||
dstsd->status.manner -= limit;
|
dstsd->status.manner -= limit;
|
||||||
if(dstsd->status.manner < 0)
|
if(dstsd->status.manner < 0)
|
||||||
status_change_start(bl,SC_NOCHAT,0,0,0,0,0,0);
|
status_change_start(bl,SC_NOCHAT,100,0,0,0,0,0,0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dstsd->status.manner = 0;
|
dstsd->status.manner = 0;
|
||||||
@ -11199,7 +11199,7 @@ void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd) {
|
|||||||
sd->doridori_counter = 1;
|
sd->doridori_counter = 1;
|
||||||
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON
|
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON
|
||||||
&& sd->state.rest && (level = pc_checkskill(sd,TK_SPTIME)))
|
&& sd->state.rest && (level = pc_checkskill(sd,TK_SPTIME)))
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[TK_SPTIME],level,0,0,0,skill_get_time(TK_SPTIME, level),0);
|
status_change_start(&sd->bl,SkillStatusChangeTable[TK_SPTIME],100,level,0,0,0,skill_get_time(TK_SPTIME, level),0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/*==========================================
|
/*==========================================
|
||||||
@ -11217,8 +11217,9 @@ void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
|
|||||||
ShowInfo("SuperNovice explosionspirits!! %d %d %d 000\n",sd->bl.id,sd->status.class_,sd->status.base_exp);
|
ShowInfo("SuperNovice explosionspirits!! %d %d %d 000\n",sd->bl.id,sd->status.class_,sd->status.base_exp);
|
||||||
}
|
}
|
||||||
if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_exp > 0 && nextbaseexp > 0 && (int)((double)1000*sd->status.base_exp/nextbaseexp)%100==0){
|
if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_exp > 0 && nextbaseexp > 0 && (int)((double)1000*sd->status.base_exp/nextbaseexp)%100==0){
|
||||||
clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,5,1);
|
clif_skill_nodamage(&sd->bl,&sd->bl,MO_EXPLOSIONSPIRITS,5,
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],5,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,5),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[MO_EXPLOSIONSPIRITS],100,
|
||||||
|
5,0,0,0,skill_get_time(MO_EXPLOSIONSPIRITS,5),0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -2327,7 +2327,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
|||||||
max_hp = status_get_max_hp(&md->bl);
|
max_hp = status_get_max_hp(&md->bl);
|
||||||
mob_heal(md, 10*md->sc.data[SC_KAIZEL].val1*max_hp/100);
|
mob_heal(md, 10*md->sc.data[SC_KAIZEL].val1*max_hp/100);
|
||||||
clif_resurrection(&md->bl, 1);
|
clif_resurrection(&md->bl, 1);
|
||||||
status_change_start(&md->bl,SkillStatusChangeTable[SL_KAIZEL],10,0,0,0,skill_get_time2(SL_KAIZEL, md->sc.data[SC_KAIZEL].val1),0);
|
status_change_start(&md->bl,SkillStatusChangeTable[PR_KYRIE],100,10,0,0,0,skill_get_time2(SL_KAIZEL, md->sc.data[SC_KAIZEL].val1),0);
|
||||||
status_change_end(&md->bl,SC_KAIZEL,-1);
|
status_change_end(&md->bl,SC_KAIZEL,-1);
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
@ -567,7 +567,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, int skillid, in
|
|||||||
&& sd->bl.m == p_sd->bl.m
|
&& sd->bl.m == p_sd->bl.m
|
||||||
&& pc_checkskill(p_sd,MO_TRIPLEATTACK)) {
|
&& pc_checkskill(p_sd,MO_TRIPLEATTACK)) {
|
||||||
int rate = 50 +50*skilllv; //+100/150/200% success rate
|
int rate = 50 +50*skilllv; //+100/150/200% success rate
|
||||||
status_change_start(&p_sd->bl,SC_SKILLRATE_UP,MO_TRIPLEATTACK,rate,0,0,skill_get_time(SG_FRIEND, 1),0);
|
status_change_start(&p_sd->bl,SC_SKILLRATE_UP,100,MO_TRIPLEATTACK,rate,0,0,skill_get_time(SG_FRIEND, 1),0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MO_TRIPLEATTACK: //Increase Counter rate of Star Gladiators
|
case MO_TRIPLEATTACK: //Increase Counter rate of Star Gladiators
|
||||||
@ -575,7 +575,7 @@ int party_skill_check(struct map_session_data *sd, int party_id, int skillid, in
|
|||||||
&& sd->bl.m == p_sd->bl.m
|
&& sd->bl.m == p_sd->bl.m
|
||||||
&& pc_checkskill(p_sd,TK_COUNTER)) {
|
&& pc_checkskill(p_sd,TK_COUNTER)) {
|
||||||
int rate = 50 +50*pc_checkskill(p_sd,TK_COUNTER); //+100/150/200% success rate
|
int rate = 50 +50*pc_checkskill(p_sd,TK_COUNTER); //+100/150/200% success rate
|
||||||
status_change_start(&p_sd->bl,SC_SKILLRATE_UP,TK_COUNTER,rate,0,0,skill_get_time(SG_FRIEND, 1),0);
|
status_change_start(&p_sd->bl,SC_SKILLRATE_UP,100,TK_COUNTER,rate,0,0,skill_get_time(SG_FRIEND, 1),0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AM_TWILIGHT2: //Twilight Pharmacy, requires Super Novice
|
case AM_TWILIGHT2: //Twilight Pharmacy, requires Super Novice
|
||||||
|
26
src/map/pc.c
26
src/map/pc.c
@ -306,7 +306,7 @@ int pc_setrestartvalue(struct map_session_data *sd,int type) {
|
|||||||
sd->status.sp=sd->status.max_sp;
|
sd->status.sp=sd->status.max_sp;
|
||||||
if (sd->state.snovice_flag == 4) {
|
if (sd->state.snovice_flag == 4) {
|
||||||
sd->state.snovice_flag = 0;
|
sd->state.snovice_flag = 0;
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_STEELBODY],1,0,0,0,skill_get_time(MO_STEELBODY,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[MO_STEELBODY],100,1,0,0,0,skill_get_time(MO_STEELBODY,1),0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1157,14 +1157,14 @@ int pc_checkweighticon(struct map_session_data *sd)
|
|||||||
|
|
||||||
if(flag==1){
|
if(flag==1){
|
||||||
if(sd->sc.data[SC_WEIGHT50].timer==-1)
|
if(sd->sc.data[SC_WEIGHT50].timer==-1)
|
||||||
status_change_start(&sd->bl,SC_WEIGHT50,0,0,0,0,0,0);
|
status_change_start(&sd->bl,SC_WEIGHT50,100,0,0,0,0,0,1);
|
||||||
}else{
|
}else{
|
||||||
if(sd->sc.data[SC_WEIGHT50].timer!=-1)
|
if(sd->sc.data[SC_WEIGHT50].timer!=-1)
|
||||||
status_change_end(&sd->bl,SC_WEIGHT50,-1);
|
status_change_end(&sd->bl,SC_WEIGHT50,-1);
|
||||||
}
|
}
|
||||||
if(flag==2){
|
if(flag==2){
|
||||||
if(sd->sc.data[SC_WEIGHT90].timer==-1)
|
if(sd->sc.data[SC_WEIGHT90].timer==-1)
|
||||||
status_change_start(&sd->bl,SC_WEIGHT90,0,0,0,0,0,0);
|
status_change_start(&sd->bl,SC_WEIGHT90,100,0,0,0,0,0,1);
|
||||||
}else{
|
}else{
|
||||||
if(sd->sc.data[SC_WEIGHT90].timer!=-1)
|
if(sd->sc.data[SC_WEIGHT90].timer!=-1)
|
||||||
status_change_end(&sd->bl,SC_WEIGHT90,-1);
|
status_change_end(&sd->bl,SC_WEIGHT90,-1);
|
||||||
@ -4620,11 +4620,11 @@ int pc_checkbaselevelup(struct map_session_data *sd)
|
|||||||
|
|
||||||
//スパノビはキリエ、イムポ、マニピ、グロ、サフラLv1がかかる
|
//スパノビはキリエ、イムポ、マニピ、グロ、サフラLv1がかかる
|
||||||
if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE || (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON){
|
if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE || (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON){
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_KYRIE],1,0,0,0,skill_get_time(PR_KYRIE,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_KYRIE],100,1,0,0,0,skill_get_time(PR_KYRIE,1),0 );
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_IMPOSITIO],1,0,0,0,skill_get_time(PR_IMPOSITIO,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_IMPOSITIO],100,1,0,0,0,skill_get_time(PR_IMPOSITIO,1),0 );
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],1,0,0,0,skill_get_time(PR_MAGNIFICAT,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_MAGNIFICAT],100,1,0,0,0,skill_get_time(PR_MAGNIFICAT,1),0 );
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_GLORIA],1,0,0,0,skill_get_time(PR_GLORIA,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_GLORIA],100,1,0,0,0,skill_get_time(PR_GLORIA,1),0 );
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_SUFFRAGIUM],1,0,0,0,skill_get_time(PR_SUFFRAGIUM,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_SUFFRAGIUM],100,1,0,0,0,skill_get_time(PR_SUFFRAGIUM,1),0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
clif_misceffect(&sd->bl,0);
|
clif_misceffect(&sd->bl,0);
|
||||||
@ -5333,7 +5333,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
|
|||||||
if(sd->status.hp<sd->status.max_hp>>2 && sd->sc.data[SC_AUTOBERSERK].timer != -1 &&
|
if(sd->status.hp<sd->status.max_hp>>2 && sd->sc.data[SC_AUTOBERSERK].timer != -1 &&
|
||||||
(sd->sc.data[SC_PROVOKE].timer==-1 || sd->sc.data[SC_PROVOKE].val2==0 ))
|
(sd->sc.data[SC_PROVOKE].timer==-1 || sd->sc.data[SC_PROVOKE].val2==0 ))
|
||||||
// オ?トバ?サ?ク?動
|
// オ?トバ?サ?ク?動
|
||||||
status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
|
status_change_start(&sd->bl,SC_PROVOKE,100,10,1,0,0,0,0);
|
||||||
|
|
||||||
sd->canlog_tick = gettick();
|
sd->canlog_tick = gettick();
|
||||||
|
|
||||||
@ -5392,7 +5392,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
|
|||||||
if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) {
|
if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) {
|
||||||
ssd->status.manner -= 5;
|
ssd->status.manner -= 5;
|
||||||
if(ssd->status.manner < 0)
|
if(ssd->status.manner < 0)
|
||||||
status_change_start(src,SC_NOCHAT,0,0,0,0,0,0);
|
status_change_start(src,SC_NOCHAT,100,0,0,0,0,0,0);
|
||||||
|
|
||||||
// PK/Karma system code (not enabled yet) [celest]
|
// PK/Karma system code (not enabled yet) [celest]
|
||||||
// originally from Kade Online, so i don't know if any of these is correct ^^;
|
// originally from Kade Online, so i don't know if any of these is correct ^^;
|
||||||
@ -5634,9 +5634,9 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
|
|||||||
if(battle_config.pc_invincible_time)
|
if(battle_config.pc_invincible_time)
|
||||||
pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
|
pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
|
||||||
if (resurrect_flag)
|
if (resurrect_flag)
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[PR_KYRIE],10,0,0,0,skill_get_time2(SL_KAIZEL, resurrect_flag),0);
|
status_change_start(&sd->bl,SkillStatusChangeTable[PR_KYRIE],100,10,0,0,0,skill_get_time2(SL_KAIZEL, resurrect_flag),0);
|
||||||
else
|
else
|
||||||
status_change_start(&sd->bl,SkillStatusChangeTable[MO_STEELBODY],1,0,0,0,skill_get_time(MO_STEELBODY,1),0 );
|
status_change_start(&sd->bl,SkillStatusChangeTable[MO_STEELBODY],100,1,0,0,0,skill_get_time(MO_STEELBODY,1),0 );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6993,7 +6993,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int pos)
|
|||||||
|
|
||||||
if(sd->special_state.infinite_endure) {
|
if(sd->special_state.infinite_endure) {
|
||||||
if(sd->sc.data[SC_ENDURE].timer == -1)
|
if(sd->sc.data[SC_ENDURE].timer == -1)
|
||||||
status_change_start(&sd->bl,SC_ENDURE,10,1,0,0,0,0);
|
status_change_start(&sd->bl,SC_ENDURE,100,10,1,0,0,0,0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(sd->sc.count && sd->sc.data[SC_ENDURE].timer != -1 && sd->sc.data[SC_ENDURE].val2)
|
if(sd->sc.count && sd->sc.data[SC_ENDURE].timer != -1 && sd->sc.data[SC_ENDURE].val2)
|
||||||
|
@ -6066,7 +6066,7 @@ int buildin_sc_start(struct script_state *st)
|
|||||||
val4 = 1; //Mark that this was a thrown sc_effect
|
val4 = 1; //Mark that this was a thrown sc_effect
|
||||||
}
|
}
|
||||||
if (bl)
|
if (bl)
|
||||||
status_change_start(bl,type,val1,0,0,val4,tick,0);
|
status_change_start(bl,type,100,val1,0,0,val4,tick,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6093,8 +6093,8 @@ int buildin_sc_start2(struct script_state *st)
|
|||||||
val4 = 1;
|
val4 = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bl && rand()%10000 < per)
|
if(bl)
|
||||||
status_change_start(bl,type,val1,0,0,val4,tick,0);
|
status_change_start(bl,type,per/100,val1,0,0,val4,tick,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6124,7 +6124,7 @@ int buildin_sc_start4(struct script_state *st)
|
|||||||
tick/=2;
|
tick/=2;
|
||||||
}
|
}
|
||||||
if (bl)
|
if (bl)
|
||||||
status_change_start(bl,type,val1,val2,val3,val4,tick,0);
|
status_change_start(bl,type,100,val1,val2,val3,val4,tick,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6153,7 +6153,7 @@ int buildin_sc_end(struct script_state *st)
|
|||||||
int buildin_getscrate(struct script_state *st)
|
int buildin_getscrate(struct script_state *st)
|
||||||
{
|
{
|
||||||
struct block_list *bl;
|
struct block_list *bl;
|
||||||
int sc_def,type,rate;
|
int sc_def=0,type,rate;
|
||||||
|
|
||||||
type=conv_num(st,& (st->stack->stack_data[st->start+2]));
|
type=conv_num(st,& (st->stack->stack_data[st->start+2]));
|
||||||
rate=conv_num(st,& (st->stack->stack_data[st->start+3]));
|
rate=conv_num(st,& (st->stack->stack_data[st->start+3]));
|
||||||
@ -6162,10 +6162,11 @@ int buildin_getscrate(struct script_state *st)
|
|||||||
else
|
else
|
||||||
bl = map_id2bl(st->rid);
|
bl = map_id2bl(st->rid);
|
||||||
|
|
||||||
sc_def = status_get_sc_def(bl,type);
|
if (bl)
|
||||||
|
sc_def = status_get_sc_def(bl,type);
|
||||||
|
|
||||||
rate = rate * sc_def / 100;
|
rate = rate*(10000-sc_def)/10000;
|
||||||
push_val(st->stack,C_INT,rate);
|
push_val(st->stack,C_INT,rate<0?0:rate);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
952
src/map/skill.c
952
src/map/skill.c
File diff suppressed because it is too large
Load Diff
811
src/map/status.c
811
src/map/status.c
File diff suppressed because it is too large
Load Diff
@ -479,7 +479,7 @@ int status_get_sc_def(struct block_list *bl, int type);
|
|||||||
#define status_get_sc_def_luk(bl) (status_get_sc_def(bl, SP_LUK))
|
#define status_get_sc_def_luk(bl) (status_get_sc_def(bl, SP_LUK))
|
||||||
|
|
||||||
// 状態異常関連 skill.c より移動
|
// 状態異常関連 skill.c より移動
|
||||||
int status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
|
int status_change_start(struct block_list *bl,int type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
|
||||||
int status_change_end( struct block_list* bl , int type,int tid );
|
int status_change_end( struct block_list* bl , int type,int tid );
|
||||||
int status_change_timer(int tid, unsigned int tick, int id, int data);
|
int status_change_timer(int tid, unsigned int tick, int id, int data);
|
||||||
int status_change_timer_sub(struct block_list *bl, va_list ap );
|
int status_change_timer_sub(struct block_list *bl, va_list ap );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user