summaryrefslogtreecommitdiff
path: root/src/map/pc.c
diff options
context:
space:
mode:
authorFlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-01-09 17:31:13 +0000
committerFlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-01-09 17:31:13 +0000
commitfaa7a02a489886461cd039cc306f1fc55d81daa5 (patch)
tree07ba43506b1c277d7033855c5495dd0e7444ae39 /src/map/pc.c
parentdde71c808130e2923b321561d3d772e0e734b725 (diff)
downloadhercules-faa7a02a489886461cd039cc306f1fc55d81daa5.tar.gz
hercules-faa7a02a489886461cd039cc306f1fc55d81daa5.tar.bz2
hercules-faa7a02a489886461cd039cc306f1fc55d81daa5.tar.xz
hercules-faa7a02a489886461cd039cc306f1fc55d81daa5.zip
- Changes to script buildin functions:
* functions checking if a player is attached as soon as possible. * functions that required a player attached and would crash if none was there terminate the script now. (others keep the current behaviour to maintain full backward compatibility) * removed the unused flag argument in guildskill. * bonus,bonus2,bonus3,bonus4 use the same function now (remains the same script-wise) * added an optional parameter to setcart,setfalcon,setriding so it's possible to remove the cart/falcon/mount or select a specific cart * other cleanups git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9636 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/pc.c')
-rw-r--r--src/map/pc.c73
1 files changed, 40 insertions, 33 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index 656555136..a8f16af13 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2402,47 +2402,47 @@ int pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type4
* 2 - Like 1, except the level granted can stack with previously learned level.
*------------------------------------------
*/
-int pc_skill(struct map_session_data *sd,int id,int level,int flag)
+int pc_skill(TBL_PC* sd, int id, int level, int flag)
{
nullpo_retr(0, sd);
- if(level>MAX_SKILL_LEVEL){
- if(battle_config.error_log)
+ if( level > MAX_SKILL_LEVEL ){
+ if( battle_config.error_log )
ShowError("pc_skill: Skill level %d too high. Max lv supported is MAX_SKILL_LEVEL (%d)\n", level, MAX_SKILL_LEVEL);
return 0;
}
- switch (flag) {
+ switch( flag ){
case 0: //Set skill data overwriting whatever was there before.
- sd->status.skill[id].id=id;
- sd->status.skill[id].lv=level;
- sd->status.skill[id].flag=0;
- if (!level) //Remove skill.
+ sd->status.skill[id].id = id;
+ sd->status.skill[id].lv = level;
+ sd->status.skill[id].flag = 0;
+ if( !level ) //Remove skill.
sd->status.skill[id].id = 0;
- if (!skill_get_inf(id)) //Only recalculate for passive skills.
- status_calc_pc(sd,0);
+ if( !skill_get_inf(id) ) //Only recalculate for passive skills.
+ status_calc_pc(sd, 0);
clif_skillinfoblock(sd);
break;
case 2: //Add skill bonus on top of what you had.
- if (sd->status.skill[id].id==id) {
- if (!sd->status.skill[id].flag)
- sd->status.skill[id].flag=sd->status.skill[id].lv+2; //Store previous level.
+ if( sd->status.skill[id].id == id ){
+ if( !sd->status.skill[id].flag ) // Store previous level.
+ sd->status.skill[id].flag = sd->status.skill[id].lv + 2;
} else {
- sd->status.skill[id].id=id;
- sd->status.skill[id].flag=1; //Set that this is a bonus skill.
+ sd->status.skill[id].id = id;
+ sd->status.skill[id].flag = 1; //Set that this is a bonus skill.
}
- sd->status.skill[id].lv+=level;
+ sd->status.skill[id].lv += level;
break;
case 1: //Item bonus skill.
- if(sd->status.skill[id].lv >= level)
+ if( sd->status.skill[id].lv >= level )
return 0;
- if(sd->status.skill[id].id==id) {
- if (!sd->status.skill[id].flag) //Non-granted skill, store it's level.
- sd->status.skill[id].flag=sd->status.skill[id].lv+2;
+ if( sd->status.skill[id].id == id ){
+ if( !sd->status.skill[id].flag ) //Non-granted skill, store it's level.
+ sd->status.skill[id].flag = sd->status.skill[id].lv + 2;
} else {
- sd->status.skill[id].id=id;
- sd->status.skill[id].flag=1;
+ sd->status.skill[id].id = id;
+ sd->status.skill[id].flag = 1;
}
- sd->status.skill[id].lv=level;
+ sd->status.skill[id].lv = level;
break;
default: //Unknown flag?
return 0;
@@ -4467,7 +4467,7 @@ int pc_skillup(struct map_session_data *sd,int skill_num)
nullpo_retr(0, sd);
if(skill_num >= GD_SKILLBASE){
- guild_skillup(sd,skill_num,0);
+ guild_skillup(sd, skill_num);
return 0;
}
@@ -5790,10 +5790,13 @@ int pc_setcart(struct map_session_data *sd,int type)
* 鷹設定
*------------------------------------------
*/
-int pc_setfalcon(struct map_session_data *sd)
+int pc_setfalcon(TBL_PC* sd, int flag)
{
- if(pc_checkskill(sd,HT_FALCON)>0){ // ファルコンマスタリ?スキル所持
- pc_setoption(sd,sd->sc.option|OPTION_FALCON);
+ if( flag ){
+ if( pc_checkskill(sd,HT_FALCON)>0 ) // ファルコンマスタリ?スキル所持
+ pc_setoption(sd,sd->sc.option|OPTION_FALCON);
+ } else if( pc_isfalcon(sd) ){
+ pc_setoption(sd,sd->sc.option&~OPTION_FALCON); // remove falcon
}
return 0;
@@ -5803,11 +5806,15 @@ int pc_setfalcon(struct map_session_data *sd)
* ペコペコ設定
*------------------------------------------
*/
-int pc_setriding(struct map_session_data *sd)
+int pc_setriding(TBL_PC* sd, int flag)
{
- if((pc_checkskill(sd,KN_RIDING)>0)){ // ライディングスキル所持
- pc_setoption(sd,sd->sc.option|OPTION_RIDING);
+ if( flag ){
+ if( pc_checkskill(sd,KN_RIDING) > 0 ) // ライディングスキル所持
+ pc_setoption(sd, sd->sc.option|OPTION_RIDING);
+ } else if( pc_isriding(sd) ){
+ pc_setoption(sd, sd->sc.option&~OPTION_RIDING);
}
+
return 0;
}
@@ -6297,7 +6304,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
clif_equipitemack(sd,n,0,0); // fail
return 0;
}
-
+
if(pos == EQP_ACC) { //Accesories should only go in one of the two,
pos = req_pos&EQP_ACC;
if (pos == EQP_ACC) //User specified both slots..
@@ -6328,7 +6335,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
sd->equip_index[i] = n;
}
}
-
+
if(pos==EQP_AMMO){
clif_arrowequip(sd,n);
clif_arrow_fail(sd,3);
@@ -6494,7 +6501,7 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
if((sd->status.inventory[n].equip & EQP_ARMS) &&
sd->weapontype1 == 0 && sd->weapontype2 == 0)
skill_enchant_elemental_end(&sd->bl,-1);
-
+
sd->status.inventory[n].equip=0;
if(flag&1) {