* Added bSubSize, bHPGainValue, and bDamageWhenUnequip
* Updated bSPDrainValue/Rate * Set baby class players' size to 0(small) * Fixed item_db2.txt reading printing wrong number of entries read * Fixed @allskill not giving the newer stalker, whitesmith and creator skills git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1139 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
3154906a1a
commit
a32145fde2
@ -1,5 +1,13 @@
|
|||||||
Date Added
|
Date Added
|
||||||
|
|
||||||
|
02/19
|
||||||
|
* Added bSubSize, bHPGainValue, and bDamageWhenUnequip [celest]
|
||||||
|
* Updated bSPDrainValue/Rate to accept a 'type' [celest]
|
||||||
|
* Set baby class players' size to 0(small) [celest]
|
||||||
|
* Fixed item_db2.txt reading printing wrong number of entries read [celest]
|
||||||
|
* Fixed @allskill not giving the newer stalker, whitesmith and creator skills
|
||||||
|
[celest]
|
||||||
|
|
||||||
02/18
|
02/18
|
||||||
* Fixed a bug with statpoint.txt reading and giving too much stat points,
|
* Fixed a bug with statpoint.txt reading and giving too much stat points,
|
||||||
thanks to Benz / eAthenaC [celest]
|
thanks to Benz / eAthenaC [celest]
|
||||||
|
@ -258,7 +258,8 @@ gm_skill_unconditional: no
|
|||||||
// Can a normal player by-pass the skill tree? (Note 1)
|
// Can a normal player by-pass the skill tree? (Note 1)
|
||||||
player_skillfree: no
|
player_skillfree: no
|
||||||
|
|
||||||
// When doing a skill reset, whether the skill's restriction is to be ignored or not. (Note 1)
|
// When set to yes, forces skill points gained from 1st class to be put into 1st class
|
||||||
|
// sklls, and forces novice skill points to be put into the basic skill. (Note 1)
|
||||||
player_skillup_limit: no
|
player_skillup_limit: no
|
||||||
|
|
||||||
// Forging success rate. (Note 2)
|
// Forging success rate. (Note 2)
|
||||||
|
@ -246,6 +246,9 @@ bSPGainValue 2021
|
|||||||
bIgnoreDefMob 2022
|
bIgnoreDefMob 2022
|
||||||
bHPLossRate 2023
|
bHPLossRate 2023
|
||||||
bAddRace2 2024
|
bAddRace2 2024
|
||||||
|
bHPGainValue 2025
|
||||||
|
bSubSize 2026
|
||||||
|
bDamageWhenUnequip 2027
|
||||||
|
|
||||||
|
|
||||||
Eff_Stone 0
|
Eff_Stone 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//eAthena Items Scripting Manual
|
//eAthena Items Scripting Manual
|
||||||
|
|
||||||
skill n,x; skill n of level x
|
skill n,x; skill n of level x
|
||||||
|
|
||||||
@ -150,9 +150,12 @@ bonus bNoRegen,n; Stops regeneration for n.
|
|||||||
bonus bUnstripable,n; Armor cannot be taken off via Strip skills
|
bonus bUnstripable,n; Armor cannot be taken off via Strip skills
|
||||||
bonus bSPGainValue,n; When killing a monster by physical attack
|
bonus bSPGainValue,n; When killing a monster by physical attack
|
||||||
gain n amount of sp
|
gain n amount of sp
|
||||||
|
bonus bHPGainValue,n; When killing a monster by physical attack
|
||||||
|
gain n amount of hp
|
||||||
bonus bIgnoreDefMob,n; Ignore monster's DEF when attacking.
|
bonus bIgnoreDefMob,n; Ignore monster's DEF when attacking.
|
||||||
n:0=All normal monsters, except Bosses
|
n:0=All normal monsters, except Bosses
|
||||||
1=All monsters
|
1=All monsters
|
||||||
|
bonus bDamageWhenUnequip,n; Lose n HP when the item is unequipped
|
||||||
|
|
||||||
bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x
|
bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x
|
||||||
bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time
|
bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time
|
||||||
@ -163,11 +166,22 @@ bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase
|
|||||||
damage taken by x%
|
damage taken by x%
|
||||||
bonus2 bAddRace2,n,x; Increase damage by x% vs. enemies of race n
|
bonus2 bAddRace2,n,x; Increase damage by x% vs. enemies of race n
|
||||||
(Check db/mob_race2_db.txt)
|
(Check db/mob_race2_db.txt)
|
||||||
|
bonus2 bSubSize,n,x; Damage x% reduction from n size
|
||||||
|
n:0=Small 1=Medium 2=Large
|
||||||
|
|
||||||
bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time
|
bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time
|
||||||
y:0=Don't show damage 1=Show damage
|
y:0=Don't show damage 1=Show damage
|
||||||
bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when
|
bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when
|
||||||
being hit by physical close range damage
|
being hit by physical close range damage
|
||||||
|
bonus3 bSPDrainRate,n,x,y; When attacking there is a n% chance to either
|
||||||
|
gain SP equivalent to x% of damage dealt, OR
|
||||||
|
drain the amount of sp from the enemy.
|
||||||
|
y:0=gain sp 1:drain enemy sp
|
||||||
|
bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either
|
||||||
|
gain x SP, OR drain the amount of sp from the
|
||||||
|
enemy. y:0=gain sp 1:drain enemy sp
|
||||||
|
(Note: setting x to -1 or below will reduce
|
||||||
|
YOUR sp)
|
||||||
|
|
||||||
bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when
|
bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when
|
||||||
being hit by physical close range damage
|
being hit by physical close range damage
|
||||||
|
@ -1058,7 +1058,7 @@ static struct Damage battle_calc_mob_weapon_attack(
|
|||||||
struct Damage wd;
|
struct Damage wd;
|
||||||
int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
||||||
int flag,skill,ac_flag = 0,dmg_lv = 0;
|
int flag,skill,ac_flag = 0,dmg_lv = 0;
|
||||||
int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0;
|
int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0,s_size=0;
|
||||||
struct status_change *sc_data,*t_sc_data;
|
struct status_change *sc_data,*t_sc_data;
|
||||||
short *sc_count;
|
short *sc_count;
|
||||||
short *option, *opt1, *opt2;
|
short *option, *opt1, *opt2;
|
||||||
@ -1074,6 +1074,7 @@ static struct Damage battle_calc_mob_weapon_attack(
|
|||||||
|
|
||||||
s_race = status_get_race(src);
|
s_race = status_get_race(src);
|
||||||
s_ele = status_get_attack_element(src);
|
s_ele = status_get_attack_element(src);
|
||||||
|
s_size = status_get_size(src);
|
||||||
sc_data = status_get_sc_data(src);
|
sc_data = status_get_sc_data(src);
|
||||||
sc_count = status_get_sc_count(src);
|
sc_count = status_get_sc_count(src);
|
||||||
option = status_get_option(src);
|
option = status_get_option(src);
|
||||||
@ -1498,6 +1499,7 @@ static struct Damage battle_calc_mob_weapon_attack(
|
|||||||
int cardfix=100,i;
|
int cardfix=100,i;
|
||||||
cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性
|
||||||
cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性
|
||||||
|
cardfix=cardfix*(100-tsd->subsize[s_size])/100;
|
||||||
if(mob_db[md->class_].mode & 0x20)
|
if(mob_db[md->class_].mode & 0x20)
|
||||||
cardfix=cardfix*(100-tsd->subrace[10])/100;
|
cardfix=cardfix*(100-tsd->subrace[10])/100;
|
||||||
else
|
else
|
||||||
@ -1616,7 +1618,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
|||||||
struct Damage wd;
|
struct Damage wd;
|
||||||
int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
||||||
int flag,skill,dmg_lv = 0;
|
int flag,skill,dmg_lv = 0;
|
||||||
int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0;
|
int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0,s_size=1;
|
||||||
int t_race2=0;
|
int t_race2=0;
|
||||||
struct status_change *sc_data,*t_sc_data;
|
struct status_change *sc_data,*t_sc_data;
|
||||||
short *sc_count;
|
short *sc_count;
|
||||||
@ -1640,6 +1642,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
|||||||
s_race=status_get_race(src); //種族
|
s_race=status_get_race(src); //種族
|
||||||
s_ele=status_get_attack_element(src); //属性
|
s_ele=status_get_attack_element(src); //属性
|
||||||
s_ele_=status_get_attack_element2(src); //左手属性
|
s_ele_=status_get_attack_element2(src); //左手属性
|
||||||
|
s_size=status_get_size(src);
|
||||||
sc_data=status_get_sc_data(src); //ステータス異常
|
sc_data=status_get_sc_data(src); //ステータス異常
|
||||||
sc_count=status_get_sc_count(src); //ステータス異常の数
|
sc_count=status_get_sc_count(src); //ステータス異常の数
|
||||||
option=status_get_option(src); //鷹とかペコとかカートとか
|
option=status_get_option(src); //鷹とかペコとかカートとか
|
||||||
@ -2602,6 +2605,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
|||||||
cardfix=100;
|
cardfix=100;
|
||||||
cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性
|
||||||
cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属性によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属性によるダメージ耐性
|
||||||
|
cardfix=cardfix*(100-tsd->subsize[s_size])/100;
|
||||||
if(status_get_mode(src) & 0x20)
|
if(status_get_mode(src) & 0x20)
|
||||||
cardfix=cardfix*(100-tsd->subrace[10])/100; //ボスからの攻撃はダメージ減少
|
cardfix=cardfix*(100-tsd->subrace[10])/100; //ボスからの攻撃はダメージ減少
|
||||||
else
|
else
|
||||||
@ -2904,7 +2908,7 @@ struct Damage battle_calc_magic_attack(
|
|||||||
int aflag;
|
int aflag;
|
||||||
int normalmagic_flag=1;
|
int normalmagic_flag=1;
|
||||||
int matk_flag = 1;
|
int matk_flag = 1;
|
||||||
int ele=0,race=7,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i;
|
int ele=0,race=7,size=1,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i;
|
||||||
struct map_session_data *sd=NULL,*tsd=NULL;
|
struct map_session_data *sd=NULL,*tsd=NULL;
|
||||||
struct mob_data *tmd = NULL;
|
struct mob_data *tmd = NULL;
|
||||||
|
|
||||||
@ -2925,6 +2929,7 @@ struct Damage battle_calc_magic_attack(
|
|||||||
matk2=status_get_matk2(bl);
|
matk2=status_get_matk2(bl);
|
||||||
ele = skill_get_pl(skill_num);
|
ele = skill_get_pl(skill_num);
|
||||||
race = status_get_race(bl);
|
race = status_get_race(bl);
|
||||||
|
size = status_get_size(bl);
|
||||||
t_ele = status_get_elem_type(target);
|
t_ele = status_get_elem_type(target);
|
||||||
t_race = status_get_race(target);
|
t_race = status_get_race(target);
|
||||||
t_mode = status_get_mode(target);
|
t_mode = status_get_mode(target);
|
||||||
@ -3131,6 +3136,7 @@ struct Damage battle_calc_magic_attack(
|
|||||||
cardfix=100;
|
cardfix=100;
|
||||||
cardfix=cardfix*(100-tsd->subele[ele])/100; // 属 性によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subele[ele])/100; // 属 性によるダメージ耐性
|
||||||
cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性
|
||||||
|
cardfix=cardfix*(100-tsd->subsize[size])/100;
|
||||||
cardfix=cardfix*(100-tsd->magic_subrace[race])/100;
|
cardfix=cardfix*(100-tsd->magic_subrace[race])/100;
|
||||||
if(status_get_mode(bl) & 0x20)
|
if(status_get_mode(bl) & 0x20)
|
||||||
cardfix=cardfix*(100-tsd->magic_subrace[10])/100;
|
cardfix=cardfix*(100-tsd->magic_subrace[10])/100;
|
||||||
@ -3207,7 +3213,7 @@ struct Damage battle_calc_misc_attack(
|
|||||||
int int_=status_get_int(bl);
|
int int_=status_get_int(bl);
|
||||||
// int luk=status_get_luk(bl);
|
// int luk=status_get_luk(bl);
|
||||||
int dex=status_get_dex(bl);
|
int dex=status_get_dex(bl);
|
||||||
int skill,ele,race,cardfix;
|
int skill,ele,race,size,cardfix;
|
||||||
struct map_session_data *sd=NULL,*tsd=NULL;
|
struct map_session_data *sd=NULL,*tsd=NULL;
|
||||||
int damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
int damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
||||||
struct Damage md;
|
struct Damage md;
|
||||||
@ -3311,6 +3317,7 @@ struct Damage battle_calc_misc_attack(
|
|||||||
|
|
||||||
ele = skill_get_pl(skill_num);
|
ele = skill_get_pl(skill_num);
|
||||||
race = status_get_race(bl);
|
race = status_get_race(bl);
|
||||||
|
size = status_get_size(bl);
|
||||||
|
|
||||||
if(damagefix){
|
if(damagefix){
|
||||||
if(damage<1 && skill_num != NPC_DARKBREATH)
|
if(damage<1 && skill_num != NPC_DARKBREATH)
|
||||||
@ -3320,6 +3327,7 @@ struct Damage battle_calc_misc_attack(
|
|||||||
cardfix=100;
|
cardfix=100;
|
||||||
cardfix=cardfix*(100-tsd->subele[ele])/100; // 属性によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subele[ele])/100; // 属性によるダメージ耐性
|
||||||
cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性
|
cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性
|
||||||
|
cardfix=cardfix*(100-tsd->subsize[size])/100;
|
||||||
cardfix=cardfix*(100-tsd->misc_def_rate)/100;
|
cardfix=cardfix*(100-tsd->misc_def_rate)/100;
|
||||||
damage=damage*cardfix/100;
|
damage=damage*cardfix/100;
|
||||||
}
|
}
|
||||||
@ -3605,6 +3613,8 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hp || sp) pc_heal(sd, hp, sp);
|
if (hp || sp) pc_heal(sd, hp, sp);
|
||||||
|
if (sd->sp_drain_type && target->type == BL_PC)
|
||||||
|
battle_heal(NULL,target,0,-sp,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (target->type == BL_PC) {
|
if (target->type == BL_PC) {
|
||||||
|
@ -381,6 +381,7 @@ static int itemdb_readdb(void)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
sprintf(tmp_output,"Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n",ln,filename[i]);
|
sprintf(tmp_output,"Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n",ln,filename[i]);
|
||||||
ShowStatus(tmp_output);
|
ShowStatus(tmp_output);
|
||||||
|
ln=0; // reset to 0
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -285,11 +285,14 @@ struct map_session_data {
|
|||||||
unsigned short unstripable_equip;
|
unsigned short unstripable_equip;
|
||||||
short add_damage_classid2[10],add_damage_class_count2;
|
short add_damage_classid2[10],add_damage_class_count2;
|
||||||
int add_damage_classrate2[10];
|
int add_damage_classrate2[10];
|
||||||
short sp_gain_value;
|
short sp_gain_value, hp_gain_value;
|
||||||
|
short sp_drain_type;
|
||||||
short ignore_def_mob, ignore_def_mob_;
|
short ignore_def_mob, ignore_def_mob_;
|
||||||
int hp_loss_tick, hp_loss_rate;
|
int hp_loss_tick, hp_loss_rate;
|
||||||
short hp_loss_value, hp_loss_type;
|
short hp_loss_value, hp_loss_type;
|
||||||
int addrace2[6],addrace2_[6];
|
int addrace2[6],addrace2_[6];
|
||||||
|
int subsize[3];
|
||||||
|
short unequip_damage;
|
||||||
|
|
||||||
short spiritball, spiritball_old;
|
short spiritball, spiritball_old;
|
||||||
int spirit_timer[MAX_SKILL_LEVEL];
|
int spirit_timer[MAX_SKILL_LEVEL];
|
||||||
@ -631,7 +634,8 @@ enum {
|
|||||||
|
|
||||||
SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
|
SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
|
||||||
SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020
|
SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020
|
||||||
SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2 // 2021-2023
|
SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025
|
||||||
|
SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP // 2026
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -2384,18 +2384,25 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
|
|||||||
|
|
||||||
|
|
||||||
if(sd) {
|
if(sd) {
|
||||||
int sp = 0;
|
int sp = 0, hp = 0;
|
||||||
if (sd->state.attack_type == BF_MAGIC && (i=pc_checkskill(sd,HW_SOULDRAIN))>0){ /* ソウルドレイン */
|
if (sd->state.attack_type == BF_MAGIC && (i=pc_checkskill(sd,HW_SOULDRAIN))>0){ /* ソウルドレイン */
|
||||||
clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,i,1);
|
clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,i,1);
|
||||||
sp += (status_get_lv(&md->bl))*(65+15*i)/100;
|
sp += (status_get_lv(&md->bl))*(65+15*i)/100;
|
||||||
}
|
}
|
||||||
sp += sd->sp_gain_value;
|
sp += sd->sp_gain_value;
|
||||||
|
hp += sd->hp_gain_value;
|
||||||
if (sp > 0) {
|
if (sp > 0) {
|
||||||
if(sd->status.sp + sp > sd->status.max_sp)
|
if(sd->status.sp + sp > sd->status.max_sp)
|
||||||
sp = sd->status.max_sp - sd->status.sp;
|
sp = sd->status.max_sp - sd->status.sp;
|
||||||
sd->status.sp += sp;
|
sd->status.sp += sp;
|
||||||
clif_heal(sd->fd,SP_SP,sp);
|
clif_heal(sd->fd,SP_SP,sp);
|
||||||
}
|
}
|
||||||
|
if (hp > 0) {
|
||||||
|
if(sd->status.hp + hp > sd->status.max_hp)
|
||||||
|
hp = sd->status.max_hp - sd->status.hp;
|
||||||
|
sd->status.hp += hp;
|
||||||
|
clif_heal(sd->fd,SP_HP,hp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// map外に消えた人は計算から除くので
|
// map外に消えた人は計算から除くので
|
||||||
|
47
src/map/pc.c
47
src/map/pc.c
@ -980,6 +980,8 @@ int pc_calc_skilltree(struct map_session_data *sd)
|
|||||||
if(battle_config.enable_upper_class){ //confで無?でなければ?み?む
|
if(battle_config.enable_upper_class){ //confで無?でなければ?み?む
|
||||||
for(i=355;i<411;i++)
|
for(i=355;i<411;i++)
|
||||||
sd->status.skill[i].id=i;
|
sd->status.skill[i].id=i;
|
||||||
|
for(i=475;i<480;i++)
|
||||||
|
sd->status.skill[i].id=i;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
do {
|
do {
|
||||||
@ -1585,6 +1587,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
|||||||
else if(sd->state.lr_flag == 1)
|
else if(sd->state.lr_flag == 1)
|
||||||
sd->ignore_def_mob_ |= 1<<val;
|
sd->ignore_def_mob_ |= 1<<val;
|
||||||
break;
|
break;
|
||||||
|
case SP_HP_GAIN_VALUE:
|
||||||
|
if(!sd->state.lr_flag)
|
||||||
|
sd->hp_gain_value += val;
|
||||||
|
break;
|
||||||
|
case SP_DAMAGE_WHEN_UNEQUIP:
|
||||||
|
if(!sd->state.lr_flag)
|
||||||
|
sd->unequip_damage += val;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
printf("pc_bonus: unknown type %d %d !\n",type,val);
|
printf("pc_bonus: unknown type %d %d !\n",type,val);
|
||||||
@ -1766,6 +1776,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
|||||||
sd->sp_drain_rate_ += type2;
|
sd->sp_drain_rate_ += type2;
|
||||||
sd->sp_drain_per_ += val;
|
sd->sp_drain_per_ += val;
|
||||||
}
|
}
|
||||||
|
sd->sp_drain_type = 0;
|
||||||
break;
|
break;
|
||||||
case SP_SP_DRAIN_VALUE:
|
case SP_SP_DRAIN_VALUE:
|
||||||
if(!sd->state.lr_flag) {
|
if(!sd->state.lr_flag) {
|
||||||
@ -1776,7 +1787,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
|||||||
sd->sp_drain_rate_ += type2;
|
sd->sp_drain_rate_ += type2;
|
||||||
sd->sp_drain_value_ += val;
|
sd->sp_drain_value_ += val;
|
||||||
}
|
}
|
||||||
|
sd->sp_drain_type = 0;
|
||||||
break;
|
break;
|
||||||
case SP_WEAPON_COMA_ELE:
|
case SP_WEAPON_COMA_ELE:
|
||||||
if(sd->state.lr_flag != 2)
|
if(sd->state.lr_flag != 2)
|
||||||
@ -1847,6 +1858,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
|||||||
else
|
else
|
||||||
sd->addrace2_[type2] += val;
|
sd->addrace2_[type2] += val;
|
||||||
break;
|
break;
|
||||||
|
case SP_SUBSIZE:
|
||||||
|
if(sd->state.lr_flag != 2)
|
||||||
|
sd->subsize[type2]+=val;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
@ -1900,6 +1915,27 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
|||||||
sd->hp_loss_type = val;
|
sd->hp_loss_type = val;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SP_SP_DRAIN_RATE:
|
||||||
|
if(!sd->state.lr_flag) {
|
||||||
|
sd->sp_drain_rate += type2;
|
||||||
|
sd->sp_drain_per += type3;
|
||||||
|
}
|
||||||
|
else if(sd->state.lr_flag == 1) {
|
||||||
|
sd->sp_drain_rate_ += type2;
|
||||||
|
sd->sp_drain_per_ += type3;
|
||||||
|
}
|
||||||
|
sd->sp_drain_type = val;
|
||||||
|
break;
|
||||||
|
case SP_SP_DRAIN_VALUE:
|
||||||
|
if(!sd->state.lr_flag) {
|
||||||
|
sd->sp_drain_rate += type2;
|
||||||
|
sd->sp_drain_value += type3;
|
||||||
|
}
|
||||||
|
else if(sd->state.lr_flag == 1) {
|
||||||
|
sd->sp_drain_rate_ += type2;
|
||||||
|
sd->sp_drain_value_ += type3;
|
||||||
|
}
|
||||||
|
sd->sp_drain_type = val;
|
||||||
default:
|
default:
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val);
|
printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val);
|
||||||
@ -4306,6 +4342,8 @@ int pc_allskillup(struct map_session_data *sd)
|
|||||||
if(battle_config.enable_upper_class){ //confで無?でなければ?み?む
|
if(battle_config.enable_upper_class){ //confで無?でなければ?み?む
|
||||||
for(i=355;i<411;i++)
|
for(i=355;i<411;i++)
|
||||||
sd->status.skill[i].id=i;
|
sd->status.skill[i].id=i;
|
||||||
|
for(i=475;i<480;i++)
|
||||||
|
sd->status.skill[i].id=i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -6067,6 +6105,13 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
|
|||||||
} else {
|
} else {
|
||||||
clif_unequipitemack(sd,n,0,0);
|
clif_unequipitemack(sd,n,0,0);
|
||||||
}
|
}
|
||||||
|
if (sd->unequip_damage > 0) {
|
||||||
|
short dmg = sd->unequip_damage;
|
||||||
|
if (dmg > sd->status.hp)
|
||||||
|
dmg = sd->status.hp;
|
||||||
|
pc_heal(sd,-dmg,0);
|
||||||
|
}
|
||||||
|
|
||||||
if(flag&1) {
|
if(flag&1) {
|
||||||
status_calc_pc(sd,0);
|
status_calc_pc(sd,0);
|
||||||
if(sd->sc_count && sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
|
if(sd->sc_count && sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele))
|
||||||
|
@ -1588,7 +1588,10 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
|
|||||||
if(sd->sp_drain_rate_ > 0 && sp < 1) sp = 1;
|
if(sd->sp_drain_rate_ > 0 && sp < 1) sp = 1;
|
||||||
else if(sd->sp_drain_rate_ < 0 && sp > -1) sp = -1;
|
else if(sd->sp_drain_rate_ < 0 && sp > -1) sp = -1;
|
||||||
}
|
}
|
||||||
if(hp || sp) pc_heal(sd,hp,sp);
|
if(hp || sp)
|
||||||
|
pc_heal(sd,hp,sp);
|
||||||
|
if (sd->sp_drain_type && bl->type == BL_PC)
|
||||||
|
battle_heal(NULL,bl,0,-sp,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((skillid || flag) && rdamage > 0)
|
if((skillid || flag) && rdamage > 0)
|
||||||
|
@ -611,7 +611,8 @@ enum {
|
|||||||
WE_BABY,
|
WE_BABY,
|
||||||
WE_CALLPARENT,
|
WE_CALLPARENT,
|
||||||
WE_CALLBABY,
|
WE_CALLBABY,
|
||||||
TK_RUN,
|
|
||||||
|
TK_RUN = 411,
|
||||||
TK_READYSTORM,
|
TK_READYSTORM,
|
||||||
TK_STORMKICK,
|
TK_STORMKICK,
|
||||||
TK_READYDOWN,
|
TK_READYDOWN,
|
||||||
|
@ -512,6 +512,9 @@ int status_calc_pc(struct map_session_data* sd,int first)
|
|||||||
sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0;
|
sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0;
|
||||||
memset(sd->addrace2,0,sizeof(sd->addrace2));
|
memset(sd->addrace2,0,sizeof(sd->addrace2));
|
||||||
memset(sd->addrace2_,0,sizeof(sd->addrace2_));
|
memset(sd->addrace2_,0,sizeof(sd->addrace2_));
|
||||||
|
sd->hp_gain_value = sd->sp_drain_type = 0;
|
||||||
|
memset(sd->subsize,0,sizeof(sd->subsize));
|
||||||
|
sd->unequip_damage = 0;
|
||||||
|
|
||||||
if(!sd->disguiseflag && sd->disguise) {
|
if(!sd->disguiseflag && sd->disguise) {
|
||||||
sd->disguise=0;
|
sd->disguise=0;
|
||||||
@ -2786,11 +2789,16 @@ int status_get_size(struct block_list *bl)
|
|||||||
nullpo_retr(1, bl);
|
nullpo_retr(1, bl);
|
||||||
if(bl->type==BL_MOB && (struct mob_data *)bl)
|
if(bl->type==BL_MOB && (struct mob_data *)bl)
|
||||||
return mob_db[((struct mob_data *)bl)->class_].size;
|
return mob_db[((struct mob_data *)bl)->class_].size;
|
||||||
else if(bl->type==BL_PC && (struct map_session_data *)bl)
|
|
||||||
return 1;
|
|
||||||
else if(bl->type==BL_PET && (struct pet_data *)bl)
|
else if(bl->type==BL_PET && (struct pet_data *)bl)
|
||||||
return mob_db[((struct pet_data *)bl)->class_].size;
|
return mob_db[((struct pet_data *)bl)->class_].size;
|
||||||
else
|
else if(bl->type==BL_PC) {
|
||||||
|
struct map_session_data *sd = (struct map_session_data *)bl;
|
||||||
|
//if (pc_isriding(sd)) // fact or rumour?
|
||||||
|
// return 2;
|
||||||
|
if (pc_calc_upper(sd->status.class_) == 2)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
} else
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
int status_get_mode(struct block_list *bl)
|
int status_get_mode(struct block_list *bl)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user