- Added BL_HOM handling to battle_gettarget.
- Some cleaning in skill.c in regard to homun skills. - Madness Canceller now stacks with other aspd bonuses, just like Berserk does. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8403 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
fd6e193e90
commit
03601f28fc
@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/08/21
|
2006/08/21
|
||||||
|
* Some cleaning in skill.c in regard to homun skills. [Skotlex]
|
||||||
|
* Madness Canceller now stacks with other aspd bonuses, just like Berserk
|
||||||
|
does. [Skotlex]
|
||||||
* Removed config setting "muting_players", and expanded the manner_system
|
* Removed config setting "muting_players", and expanded the manner_system
|
||||||
config to specify how having negative manner (mute) affects a player (see
|
config to specify how having negative manner (mute) affects a player (see
|
||||||
battle/misc.conf). [Skotlex]
|
battle/misc.conf). [Skotlex]
|
||||||
|
@ -100,6 +100,8 @@ int battle_gettarget(struct block_list *bl)
|
|||||||
return ((struct mob_data*)bl)->target_id;
|
return ((struct mob_data*)bl)->target_id;
|
||||||
case BL_PET:
|
case BL_PET:
|
||||||
return ((struct pet_data*)bl)->target_id;
|
return ((struct pet_data*)bl)->target_id;
|
||||||
|
case BL_HOM:
|
||||||
|
return ((struct homun_data*)bl)->target_id;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3043,7 +3045,6 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rdamage > 0) { //By sending attack type "none" skill_additional_effect won't be invoked. [Skotlex]
|
if (rdamage > 0) { //By sending attack type "none" skill_additional_effect won't be invoked. [Skotlex]
|
||||||
|
|
||||||
if(tsd && src != target)
|
if(tsd && src != target)
|
||||||
battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
|
battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
|
||||||
battle_delay_damage(tick+wd.amotion, target, src, 0, 0, 0, rdamage, ATK_DEF, rdelay);
|
battle_delay_damage(tick+wd.amotion, target, src, 0, 0, 0, rdamage, ATK_DEF, rdelay);
|
||||||
@ -4090,7 +4091,7 @@ void battle_set_defaults() {
|
|||||||
battle_config.equip_skill_break_rate = 100; // [Valaris], adapted by [Skotlex]
|
battle_config.equip_skill_break_rate = 100; // [Valaris], adapted by [Skotlex]
|
||||||
battle_config.pk_mode = 0; // [Valaris]
|
battle_config.pk_mode = 0; // [Valaris]
|
||||||
battle_config.pk_level_range = 0; // [Skotlex]
|
battle_config.pk_level_range = 0; // [Skotlex]
|
||||||
battle_config.manner_system = 1; // [Valaris]
|
battle_config.manner_system = 0xFFF; // [Valaris]
|
||||||
battle_config.pet_equip_required = 0; // [Valaris]
|
battle_config.pet_equip_required = 0; // [Valaris]
|
||||||
battle_config.multi_level_up = 0; // [Valaris]
|
battle_config.multi_level_up = 0; // [Valaris]
|
||||||
battle_config.max_exp_gain_rate = 0; // [Skotlex]
|
battle_config.max_exp_gain_rate = 0; // [Skotlex]
|
||||||
|
@ -5542,63 +5542,44 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
AREA_SIZE, BL_MOB, bl, src);
|
AREA_SIZE, BL_MOB, bl, src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
// Failed
|
||||||
{
|
else if (hd && hd->master)
|
||||||
// Failed
|
clif_skill_fail(hd->master, skillid, 0, 0);
|
||||||
if (hd)
|
else if (sd)
|
||||||
clif_skill_fail(hd->master, skillid, 0, 0);
|
clif_skill_fail(sd, skillid, 0, 0);
|
||||||
else if (sd)
|
|
||||||
clif_skill_fail(sd, skillid, 0, 0);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case HVAN_CHAOTIC: //[orn]
|
case HVAN_CHAOTIC: //[orn]
|
||||||
{
|
{
|
||||||
if(hd){
|
static const int per[10][2]={{20,50},{50,60},{25,75},{60,64},{34,67},
|
||||||
//HOM,PC,MOB
|
{34,67},{34,67},{34,67},{34,67},{34,67}};
|
||||||
struct block_list* heal_target=NULL;
|
int rnd = rand()%100;
|
||||||
int heal = skill_calc_heal( src, 1+rand()%skilllv );
|
if(rnd<per[skilllv-1][0]) //Self
|
||||||
static const int per[10][2]={{20,50},{50,60},{25,75},{60,64},{34,67},
|
bl = src;
|
||||||
{34,67},{34,67},{34,67},{34,67},{34,67}};
|
else if(rnd<per[skilllv-1][1]) //Master
|
||||||
int rnd = rand()%100;
|
bl = battle_get_master(src);
|
||||||
if(rnd<per[skilllv-1][0])
|
else //Enemy
|
||||||
{
|
bl = map_id2bl(battle_gettarget(src));
|
||||||
heal_target = &hd->bl;
|
|
||||||
}else if(rnd<per[skilllv-1][1])
|
if (!bl) bl = src;
|
||||||
{
|
i = skill_calc_heal( src, 1+rand()%skilllv);
|
||||||
if(!status_isdead(&hd->master->bl))
|
//Eh? why double skill packet?
|
||||||
heal_target = &hd->master->bl;
|
clif_skill_nodamage(src,bl,AL_HEAL,i,1);
|
||||||
else
|
clif_skill_nodamage(src,bl,skillid,i,1);
|
||||||
heal_target = &hd->bl;
|
status_heal(bl, i, 0, 0);
|
||||||
}else{//MOB
|
if (hd)
|
||||||
heal_target = map_id2bl(hd->target_id);
|
|
||||||
if(heal_target==NULL)
|
|
||||||
heal_target = &hd->bl;
|
|
||||||
}
|
|
||||||
clif_skill_nodamage(src,heal_target,AL_HEAL,heal,1);
|
|
||||||
clif_skill_nodamage(src,heal_target,skillid,heal,1);
|
|
||||||
status_heal(heal_target, heal, 0, 0);
|
|
||||||
skill_blockmerc_start(hd, skillid, skill_get_time2(skillid,skilllv)) ;
|
skill_blockmerc_start(hd, skillid, skill_get_time2(skillid,skilllv)) ;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HAMI_BLOODLUST: //[orn]
|
//Homun single-target support skills [orn]
|
||||||
case HFLI_FLEET: //[orn]
|
case HAMI_BLOODLUST:
|
||||||
case HFLI_SPEED: //[orn]
|
case HFLI_FLEET:
|
||||||
if ( hd ) {
|
case HFLI_SPEED:
|
||||||
clif_skill_nodamage(src,bl,skillid,skilllv,
|
case HLIF_CHANGE:
|
||||||
sc_start(&hd->bl,type,100,skilllv,skill_get_time(skillid,skilllv))) ;
|
|
||||||
skill_blockmerc_start(hd, skillid, skill_get_time2(skillid,skilllv)) ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
clif_skill_fail(hd->master,skillid,0,0);
|
|
||||||
break;
|
|
||||||
case HLIF_CHANGE: //[orn]
|
|
||||||
clif_skill_nodamage(src,bl,skillid,skilllv,
|
clif_skill_nodamage(src,bl,skillid,skilllv,
|
||||||
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
||||||
if (hd)
|
if (hd)
|
||||||
skill_blockmerc_start(hd, skillid, skill_get_time2(skillid,skilllv));
|
skill_blockmerc_start(hd, skillid, skill_get_time2(skillid,skilllv));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skillid);
|
ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skillid);
|
||||||
map_freeblock_unlock();
|
map_freeblock_unlock();
|
||||||
|
@ -3587,9 +3587,6 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
|
|||||||
if(sc->data[SC_STAR_COMFORT].timer!=-1)
|
if(sc->data[SC_STAR_COMFORT].timer!=-1)
|
||||||
max = sc->data[SC_STAR_COMFORT].val2;
|
max = sc->data[SC_STAR_COMFORT].val2;
|
||||||
|
|
||||||
if(sc->data[SC_MADNESSCANCEL].timer!=-1 && max < 200)
|
|
||||||
max = 200;
|
|
||||||
|
|
||||||
if(sc->data[SC_TWOHANDQUICKEN].timer!=-1 &&
|
if(sc->data[SC_TWOHANDQUICKEN].timer!=-1 &&
|
||||||
max < sc->data[SC_TWOHANDQUICKEN].val2)
|
max < sc->data[SC_TWOHANDQUICKEN].val2)
|
||||||
max = sc->data[SC_TWOHANDQUICKEN].val2;
|
max = sc->data[SC_TWOHANDQUICKEN].val2;
|
||||||
@ -3639,8 +3636,11 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
|
|||||||
}
|
}
|
||||||
aspd_rate -= max;
|
aspd_rate -= max;
|
||||||
|
|
||||||
|
//These stack with the rest of bonuses.
|
||||||
if(sc->data[SC_BERSERK].timer!=-1)
|
if(sc->data[SC_BERSERK].timer!=-1)
|
||||||
aspd_rate -= 300; //Stacks with the rest of bonuses.
|
aspd_rate -= 300;
|
||||||
|
else if(sc->data[SC_MADNESSCANCEL].timer!=-1)
|
||||||
|
aspd_rate -= 200;
|
||||||
}
|
}
|
||||||
if(sc->data[i=SC_ASPDPOTION3].timer!=-1 ||
|
if(sc->data[i=SC_ASPDPOTION3].timer!=-1 ||
|
||||||
sc->data[i=SC_ASPDPOTION2].timer!=-1 ||
|
sc->data[i=SC_ASPDPOTION2].timer!=-1 ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user