diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/battle.c | 18 | ||||
-rw-r--r-- | src/map/pc.c | 3 | ||||
-rw-r--r-- | src/map/skill.c | 76 | ||||
-rw-r--r-- | src/map/skill.h | 7 |
5 files changed, 77 insertions, 29 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index cff8ab8cf..3d604497a 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -9805,7 +9805,7 @@ int atcommand_mobinfo( return 0;
}
-*==========================================
+/*=========================================
* @showmobs by KarLaeda
* => For 5 sec displays the mobs on minimap
*------------------------------------------
diff --git a/src/map/battle.c b/src/map/battle.c index ca04db941..a39a006c1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -858,7 +858,6 @@ static struct Damage battle_calc_weapon_attack( } wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG; break; - case GS_MAGICALBULLET: case HT_PHANTASMIC: //Since these do not consume ammo, they need to be explicitly set as arrow attacks. flag.arrow = 1; @@ -882,6 +881,10 @@ static struct Damage battle_calc_weapon_attack( case NPC_GRANDDARKNESS: case NJ_HUUMA: case NJ_TATAMIGAESHI: + case GS_FLING: + case GS_TRIPLEACTION: + case GS_BULLSEYE: + case GS_MAGICALBULLET: wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG; break; @@ -1506,13 +1509,10 @@ static struct Damage battle_calc_weapon_attack( break; case GS_BULLSEYE: skillratio += 400; + flag.cardfix = 0; break; case GS_TRACKING: - skillratio += 60*skill_lv; - if (skill_lv == 2) skillratio += 20; - if (skill_lv == 3) skillratio += 80; - if (skill_lv >= 4) skillratio += 60*(skill_lv-3); - if (skill_lv == 10) skillratio += 80; + skillratio += 100 *(skill_lv+1); break; case GS_PIERCINGSHOT: skillratio += 20*skill_lv; @@ -1521,16 +1521,16 @@ static struct Damage battle_calc_weapon_attack( skillratio += 10*skill_lv; break; case GS_DESPERADO: - skillratio += 50*skill_lv - 50; + skillratio += 50*(skill_lv-1); break; case GS_DUST: skillratio += 50*skill_lv; break; case GS_FULLBUSTER: - skillratio += 200 + 100*skill_lv; + skillratio += 100*(skill_lv+2); break; case GS_SPREADATTACK: - skillratio += 20*skill_lv-20; + skillratio += 20*(skill_lv-1); break; case NJ_HUUMA: skillratio += 50 + 150*skill_lv; diff --git a/src/map/pc.c b/src/map/pc.c index 42b8a0ed1..5516b51ab 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4821,6 +4821,9 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) npc_script_event(sd,NPCE_DIE); } + if ( sd && sd->spiritball && (sd->class_&MAPID_BASEMASK)==MAPID_GUNSLINGER ) // maybe also monks' spiritballs ? + pc_delspiritball(sd,sd->spiritball,0); + if (src) switch (src->type) { case BL_MOB: diff --git a/src/map/skill.c b/src/map/skill.c index 3357d8aa6..5b99b7722 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1356,10 +1356,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int case GS_BULLSEYE: //0.1% coma rate. status_change_start(bl,SC_COMA,10,skilllv,0,0,0,0,0); break; - case GS_CRACKER: - if (!dstsd) // according to latest patch, should not work on players [Reddozen] - sc_start(bl,SC_STUN,(100 - 10*distance_bl(src, bl)),skilllv,skill_get_time2(skillid,skilllv)); //Temp stun rate - break; case GS_PIERCINGSHOT: sc_start(bl,SC_BLEEDING,(skilllv*3),skilllv,skill_get_time2(skillid,skilllv)); break; @@ -1528,7 +1524,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * sc_start(src,SkillStatusChangeTable(skillid),100,skilllv,skill_get_time2(skillid,skilllv)); break; case GS_FULLBUSTER: - sc_start(src,SC_BLIND,(2*skilllv),skilllv,skill_get_time2(skillid,skilllv)); + status_change_start(src,SC_BLIND,200*skilllv,skilllv,0,0,0,skill_get_time2(skillid,skilllv),10); break; } @@ -2762,7 +2758,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case TK_COUNTER: case GS_TRIPLEACTION: case GS_MAGICALBULLET: - case GS_CRACKER: case GS_TRACKING: case GS_PIERCINGSHOT: case GS_RAPIDSHOWER: @@ -3145,7 +3140,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int break; case GS_BULLSEYE: - if(tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN) + if((tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN) && !(tstatus->mode&MD_BOSS)) skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); else if (sd) clif_skill_fail(sd,skillid,0,0); @@ -3727,7 +3722,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case GS_MADNESSCANCEL: case GS_ADJUSTMENT: case GS_INCREASING: - case GS_CRACKER: case NJ_KASUMIKIRI: case NJ_UTSUSEMI: case NJ_NEN: @@ -5483,6 +5477,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in } break; + case GS_CRACKER: + if (!dstsd) // according to latest patch, should not work on players [Reddozen] + { + int rate=10+(skill_get_range2(src,skillid,skilllv)-distance_bl(src,bl))*20; + clif_skill_nodamage(src,bl,skillid,skilllv,1); + sc_start(bl,SC_STUN,(rate>100)?100:rate,skilllv,skill_get_time2(skillid,skilllv)); //New temp stun rate (by RockmanEXE) + } + else + clif_skill_fail(sd,skillid,0,0); + break; case AM_REST: if (sd) { @@ -6474,6 +6478,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid, struct status_data *status; struct status_change *sc; int active_flag=1; + int subunt=0; nullpo_retr(0, src); @@ -6680,17 +6685,36 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid, break; case GS_GROUNDDRIFT: - { //Take on the base element, not the elemental one. - struct status_data *bstatus = status_get_base_status(src); - val1 = bstatus?bstatus->rhw.ele:status->rhw.ele; - if (sd) sd->state.arrow_atk = 0; //Disable consumption right away. - else if (!val1) val1 = ELE_WATER+rand()%(ELE_WIND-ELE_WATER); - break; + { + int element[5]={ELE_WIND,ELE_DARK,ELE_POISON,ELE_WATER,ELE_FIRE}; + + if (src->type == BL_PC) + val1=sd->arrow_ele; + else val1=element[rand()%5]; + + switch (val1) + { + case ELE_FIRE: + subunt++; + case ELE_WATER: + subunt++; + case ELE_POISON: + subunt++; + case ELE_DARK: + subunt++; + case ELE_WIND: + break; + default: + subunt=rand()%5; + break; + } + + break; } } nullpo_retr(NULL, group=skill_initunitgroup(src,(count > 0 ? count : layout->count), - skillid,skilllv,skill_get_unit_id(skillid,flag&1), limit, interval)); + skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval)); group->val1=val1; group->val2=val2; group->val3=val3; @@ -7284,8 +7308,26 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); break; - case UNT_GROUNDDRIFT: + case UNT_GROUNDDRIFT_WIND: + case UNT_GROUNDDRIFT_DARK: + case UNT_GROUNDDRIFT_POISON: + case UNT_GROUNDDRIFT_WATER: + case UNT_GROUNDDRIFT_FIRE: skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,sg->val1); + + switch (sg->val1) + { + case ELE_WATER: + sc_start(bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv)); + break; + case ELE_POISON: + sc_start(bl,SC_POISON,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv)); + break; + case ELE_DARK: + sc_start(bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv)); + break; + } + sg->unit_id = UNT_USED_TRAPS; clif_changetraplook(&src->bl, UNT_FIREPILLAR_ACTIVE); sg->limit=DIFF_TICK(tick,sg->tick)+1500; @@ -7751,7 +7793,7 @@ int skill_isammotype (TBL_PC *sd, int skill) { return ( (sd->status.weapon == W_BOW || (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE)) && - skill != HT_PHANTASMIC && skill != GS_MAGICALBULLET && + skill != HT_PHANTASMIC && skill_get_type(skill) == BF_WEAPON && !(skill_get_nk(skill)&NK_NO_DAMAGE) && !skill_get_spiritball(skill,1) //Assume spirit spheres are used as ammo instead. diff --git a/src/map/skill.h b/src/map/skill.h index 1c2e1aab7..c5d3fca58 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -947,8 +947,11 @@ enum { UNT_SUITON = 0xbb,
UNT_TATAMIGAESHI,
UNT_KAENSIN,
- //0xbe, 0xc0, 0xc1 //Maybe the other elements of Ground Drift?
- UNT_GROUNDDRIFT = 0xc2,
+ UNT_GROUNDDRIFT_WIND,
+ UNT_GROUNDDRIFT_DARK,
+ UNT_GROUNDDRIFT_POISON,
+ UNT_GROUNDDRIFT_WATER,
+ UNT_GROUNDDRIFT_FIRE,
};
#endif
|