summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/pc.c13
-rw-r--r--src/map/pc.h8
-rw-r--r--src/map/script.c4
3 files changed, 18 insertions, 7 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index 0e6fb2f0e..14d12ca5a 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -4007,6 +4007,10 @@ int pc_useitem(struct map_session_data *sd,int n)
// Store information for later use before it is lost (via pc_delitem) [Paradox924X]
nameid = sd->inventory_data[n]->nameid;
+ /* Items with delayed consume are not meant to work while in mounts except reins of mount(12622) */
+ if( sd->inventory_data[n]->flag.delay_consume && nameid != 12622 && sd->sc.option&OPTION_MOUNTING )
+ return 0;
+
//Since most delay-consume items involve using a "skill-type" target cursor,
//perform a skill-use check before going through. [Skotlex]
//resurrection was picked as testing skill, as a non-offensive, generic skill, it will do.
@@ -4058,14 +4062,11 @@ int pc_useitem(struct map_session_data *sd,int n)
//Check if the item is to be consumed immediately [Skotlex]
if( sd->inventory_data[n]->flag.delay_consume )
clif_useitemack(sd,n,amount,true);
- else
- {
- if( sd->status.inventory[n].expire_time == 0 )
- {
+ else {
+ if( sd->status.inventory[n].expire_time == 0 ) {
clif_useitemack(sd,n,amount-1,true);
pc_delitem(sd,n,1,1,0,LOG_TYPE_CONSUME); // Rental Usable Items are not deleted until expiration
- }
- else
+ } else
clif_useitemack(sd,n,0,false);
}
if(sd->status.inventory[n].card[0]==CARD0_CREATE &&
diff --git a/src/map/pc.h b/src/map/pc.h
index 8d8e9e7e0..d14941bb4 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -630,6 +630,14 @@ enum e_pc_permission {
( ((sd)->class_&MAPID_BASEMASK) == MAPID_SWORDMAN && (sd)->status.class_ != JOB_SWORDMAN ) \
)
+/**
+ * New Mounts are available to all jobs prior to November 2011
+ **/
+#if PACKETVER <= 20111100
+ #undef pc_cant_newmount
+ #define pc_cant_newmount(sd) 0
+#endif
+
#define pc_stop_walking(sd, type) unit_stop_walking(&(sd)->bl, type)
#define pc_stop_attack(sd) unit_stop_attack(&(sd)->bl)
diff --git a/src/map/script.c b/src/map/script.c
index 897575a30..6504c41cb 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -7473,6 +7473,8 @@ BUILDIN_FUNC(setoption)
if( flag ){// Add option
if( option&OPTION_WEDDING && !battle_config.wedding_modifydisplay )
option &= ~OPTION_WEDDING;// Do not show the wedding sprites
+ else if ( option&OPTION_MOUNTING && pc_cant_newmount(sd) )
+ option &= ~OPTION_MOUNTING;
pc_setoption(sd, sd->sc.option|option);
} else// Remove option
pc_setoption(sd, sd->sc.option&~option);
@@ -15798,7 +15800,7 @@ BUILDIN_FUNC(setmounting) {
TBL_PC* sd;
if( (sd = script_rid2sd(st)) == NULL )
return 0;
- if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) )
+ if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) || pc_cant_newmount(sd) )
script_pushint(st,0);//can't mount with one of these
else {
if( sd->sc.option&OPTION_MOUNTING )