* Merged from 3CeAM r689 & r690

- Removed OPTION_MOUNTING
 - Added SC_ALL_RIDING
 - Added new option in battle/player.conf for changing speed of players when mounted: 'rental_mount_speed_boost'
This commit is contained in:
Lilith 2014-01-28 07:41:06 -08:00
parent ad13f26fc2
commit fd063a8e2d
13 changed files with 54 additions and 44 deletions

View File

@ -149,6 +149,10 @@ idle_no_autoloot: 0
// Minimum distance a vending/chat room must be from a NPC in order to be placed.
// Default: 3 (0: disabled).
min_npc_vendchat_distance: 3
// How much should rental mounts increase a player's movement speed?
// Default is 25. 100 = 100% Increase.
rental_mount_speed_boost: 25
//===================================
// VIP system

View File

@ -1735,6 +1735,8 @@ SC_QUEST_BUFF2 590
SC_QUEST_BUFF3 591
SC_EXTREMITYFIST2 592
SC_ALL_RIDING 951
//Status Icon
SI_BLANK -1
SI_PROVOKE 0

View File

@ -6129,7 +6129,7 @@
12619,Cgrade_Pocket,C Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Cgrade_Pocket); },{},{}
12620,Dgrade_Pocket,D Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Dgrade_Pocket); },{},{}
12621,Egrade_Pocket,E Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Egrade_Pocket); },{},{}
12622,Boarding_Halter,Reins Of Mount,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ setmounting(); },{},{}
12622,Boarding_Halter,Reins Of Mount,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ALL_RIDING,-1,1; },{},{}
12623,High_Weapon_Box,Advanced Weapons Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getrandgroupitem(IG_Advanced_Weapons_Box),1; },{},{}
12624,Delicious_Jelly,Delicious Jelly,0,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 3,3; },{},{}
12625,Sapa_Feat_Cert_Pack,Sapa Feat Cert Pack,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}

View File

@ -6160,7 +6160,7 @@ REPLACE INTO `item_db_re` VALUES (12618,'Bgrade_Pocket','B Grade Coin Bag',2,20,
REPLACE INTO `item_db_re` VALUES (12619,'Cgrade_Pocket','C Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Cgrade_Pocket);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12620,'Dgrade_Pocket','D Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Dgrade_Pocket);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12621,'Egrade_Pocket','E Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Egrade_Pocket);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12622,'Boarding_Halter','Reins Of Mount',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'setmounting();',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12622,'Boarding_Halter','Reins Of Mount',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_ALL_RIDING,-1,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12623,'High_Weapon_Box','Advanced Weapons Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Advanced_Weapons_Box),1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12624,'Delicious_Jelly','Delicious Jelly',0,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'percentheal 3,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12625,'Sapa_Feat_Cert_Pack','Sapa Feat Cert Pack',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

View File

@ -8717,12 +8717,12 @@ ACMD_FUNC(charcommands)
ACMD_FUNC(mount2) {
clif_displaymessage(sd->fd,msg_txt(sd,1362)); // NOTICE: If you crash with mount your LUA is outdated.
if( !(sd->sc.option&OPTION_MOUNTING) ) {
if( !(sd->sc.data[SC_ALL_RIDING]) ) {
clif_displaymessage(sd->fd,msg_txt(sd,1363)); // You have mounted.
pc_setoption(sd, sd->sc.option|OPTION_MOUNTING);
sc_start(NULL, &sd->bl, SC_ALL_RIDING, 10000, 1, INVALID_TIMER);
} else {
clif_displaymessage(sd->fd,msg_txt(sd,1364)); // You have released your mount.
pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);
status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER);
}
return 0;
}

View File

@ -7349,6 +7349,7 @@ static const struct _battle_data {
{ "warg_can_falcon", &battle_config.warg_can_falcon, 0, 0, 1, },
{ "atcommand_enable_npc", &battle_config.atcommand_enable_npc, 0, 0, 100, },
{ "path_blown_halt", &battle_config.path_blown_halt, 1, 0, 1, },
{ "rental_mount_speed_boost", &battle_config.rental_mount_speed_boost, 25, 0, 100, },
};
#ifndef STATS_OPT_OUT
/**

View File

@ -531,6 +531,7 @@ extern struct Battle_Config
int warg_can_falcon;
int atcommand_enable_npc;
int path_blown_halt;
int rental_mount_speed_boost;
} battle_config;
void do_init_battle(void);

View File

@ -1348,10 +1348,6 @@ int clif_spawn(struct block_list *bl)
clif_specialeffect(bl,421,AREA);
if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd);
if( sd->sc.option&OPTION_MOUNTING ) {
//New Mounts are not complaint to the original method, so we gotta tell this guy that he is mounting.
clif_status_load_notick(&sd->bl,SI_ALL_RIDING,2,1,0,0);
}
for(i = 1; i < 5; i++){
if( sd->talisman[i] > 0 )
clif_talisman(sd, i);
@ -1375,6 +1371,8 @@ int clif_spawn(struct block_list *bl)
clif_status_load(bl,SI_MOONSTAR,1);
if( sd->sc.data[SC_SUPER_STAR] )
clif_status_load(bl,SI_SUPER_STAR,1);
if( sd->sc.data[SC_ALL_RIDING] )
clif_status_load(bl,SI_ALL_RIDING,1);
}
break;
case BL_MOB:
@ -4173,10 +4171,6 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d
if( dstsd->sc.data[i] )
clif_status_load_single(sd->fd,dstsd->bl.id,StatusIconChangeTable[i],1,dstsd->sc.data[i]->val1,dstsd->sc.data[i]->val2,0);
}
if( dstsd->sc.option&OPTION_MOUNTING ) {
//New Mounts are not complaint to the original method, so we gotta tell this guy that I'm mounting.
clif_status_load_single(sd->fd,dstsd->bl.id,SI_ALL_RIDING,2,1,0,0);
}
#ifdef NEW_CARTS
if( dstsd->sc.data[SC_PUSH_CART] )
clif_status_load_single(sd->fd, dstsd->bl.id, SI_ON_PUSH_CART, 2, dstsd->sc.data[SC_PUSH_CART]->val1, 0, 0);
@ -4244,6 +4238,8 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
clif_status_load(bl,SI_MOONSTAR,1);
if( tsd->sc.data[SC_SUPER_STAR] )
clif_status_load(bl,SI_SUPER_STAR,1);
if( tsd->sc.data[SC_ALL_RIDING] )
clif_status_load(bl,SI_ALL_RIDING,1);
}
break;
case BL_MER: // Devotion Effects

View File

@ -459,10 +459,8 @@ void pc_inventory_rentals(struct map_session_data *sd)
continue;
if( sd->status.inventory[i].expire_time <= time(NULL) ) {
if( sd->status.inventory[i].nameid == ITEMID_REINS_OF_MOUNT
&& sd->sc.option&OPTION_MOUNTING ) {
pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);
}
if( sd->status.inventory[i].nameid == ITEMID_REINS_OF_MOUNT && sd->sc.data[SC_ALL_RIDING] )
status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER);
clif_rental_expired(sd->fd, i, sd->status.inventory[i].nameid);
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_OTHER);
} else {
@ -529,9 +527,9 @@ int pc_makesavestatus(struct map_session_data *sd)
//Only copy the Cart/Peco/Falcon options, the rest are handled via
//status change load/saving. [Skotlex]
#ifdef NEW_CARTS
sd->status.option = sd->sc.option&(OPTION_INVISIBLE|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_MOUNTING);
sd->status.option = sd->sc.option&(OPTION_INVISIBLE|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR);
#else
sd->status.option = sd->sc.option&(OPTION_INVISIBLE|OPTION_CART|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR|OPTION_MOUNTING);
sd->status.option = sd->sc.option&(OPTION_INVISIBLE|OPTION_CART|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_WUGRIDER|OPTION_MADOGEAR);
#endif
if (sd->sc.data[SC_JAILED])
{ //When Jailed, do not move last point.
@ -4474,7 +4472,7 @@ int pc_useitem(struct map_session_data *sd,int n)
/* Items with delayed consume are not meant to work while in mounts except reins of mount(12622) */
if( id->flag.delay_consume ) {
if( nameid != ITEMID_REINS_OF_MOUNT && sd->sc.option&OPTION_MOUNTING )
if( nameid != ITEMID_REINS_OF_MOUNT && sd->sc.data[SC_ALL_RIDING] )
return 0;
else if( pc_issit(sd) )
return 0;
@ -4545,7 +4543,7 @@ int pc_useitem(struct map_session_data *sd,int n)
clif_useitemack(sd, n, amount, true);
else
{
if (item.expire_time == 0)
if( item.expire_time == 0 && nameid != ITEMID_REINS_OF_MOUNT )
{
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
@ -6583,8 +6581,6 @@ int pc_resetskill(struct map_session_data* sd, int flag)
i &= ~OPTION_WUGRIDER;
if( i&OPTION_MADOGEAR && ( sd->class_&MAPID_THIRDMASK ) == MAPID_MECHANIC )
i &= ~OPTION_MADOGEAR;
if( i&OPTION_MOUNTING )
i &= ~OPTION_MOUNTING;
#ifndef NEW_CARTS
if( i&OPTION_CART && pc_checkskill(sd, MC_PUSHCART) )
i &= ~OPTION_CART;
@ -7919,15 +7915,6 @@ void pc_setoption(struct map_session_data *sd,int type)
}
#endif
if (type&OPTION_MOUNTING && !(p_type&OPTION_MOUNTING) ) {
clif_status_load_notick(&sd->bl,SI_ALL_RIDING,2,1,0,0);
status_calc_pc(sd,0);
} else if (!(type&OPTION_MOUNTING) && p_type&OPTION_MOUNTING) {
clif_status_load_notick(&sd->bl,SI_ALL_RIDING,0,0,0,0);
status_calc_pc(sd,0);
}
if (type&OPTION_FALCON && !(p_type&OPTION_FALCON)) //Falcon ON
clif_status_load(&sd->bl,SI_FALCON,1);
else if (!(type&OPTION_FALCON) && p_type&OPTION_FALCON) //Falcon OFF
@ -8074,6 +8061,9 @@ void pc_setfalcon(TBL_PC* sd, int flag)
*------------------------------------------*/
void pc_setriding(TBL_PC* sd, int flag)
{
if( sd->sc.data[SC_ALL_RIDING] )
return;
if( flag ){
if( pc_checkskill(sd,KN_RIDING) > 0 ) // add peco
pc_setoption(sd, sd->sc.option|OPTION_RIDING);

View File

@ -17261,7 +17261,7 @@ BUILDIN_FUNC(ismounting) {
TBL_PC* sd;
if( (sd = script_rid2sd(st)) == NULL )
return 0;
if( sd->sc.option&OPTION_MOUNTING )
if( sd->sc.data[SC_ALL_RIDING] )
script_pushint(st,1);
else
script_pushint(st,0);
@ -17280,12 +17280,12 @@ BUILDIN_FUNC(setmounting) {
return 0;
if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) ) {
clif_msgtable(sd->fd, 0x78b);
script_pushint(st,0);//can't mount with one of these
script_pushint(st,0); //can't mount with one of these
} else {
if( sd->sc.option&OPTION_MOUNTING )
pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);//release mount
if( sd->sc.data[SC_ALL_RIDING] )
status_change_end(&sd->bl, SC_ALL_RIDING, INVALID_TIMER); //release mount
else
pc_setoption(sd, sd->sc.option|OPTION_MOUNTING);//mount
sc_start(NULL, &sd->bl, SC_ALL_RIDING, 10000, 1, INVALID_TIMER); //mount
script_pushint(st,1);//in both cases, return 1.
}
return SCRIPT_CMD_SUCCESS;

View File

@ -541,8 +541,8 @@ bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd)
return true;
}
if( sd->sc.option&OPTION_MOUNTING )
return true;//You can't use skills while in the new mounts (The client doesn't let you, this is to make cheat-safe)
if( sd->sc.data[SC_ALL_RIDING] )
return true; //You can't use skills while in the new mounts (The client doesn't let you, this is to make cheat-safe)
switch (skill_id) {
case AL_WARP:

View File

@ -784,6 +784,8 @@ void initChangeTables(void)
set_sc( RL_AM_BLAST , SC_ANTI_M_BLAST , SI_ANTI_M_BLAST , SCB_DEF_ELE );
set_sc( RL_HEAT_BARREL , SC_HEAT_BARREL , SI_HEAT_BARREL , SCB_BATK|SCB_ASPD|SCB_HIT );
set_sc_with_vfx( SC_ALL_RIDING , SC_ALL_RIDING , SI_ALL_RIDING , SCB_SPEED );
/* Storing the target job rather than simply SC_SPIRIT simplifies code later on */
SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
SkillStatusChangeTable[SL_MONK] = (sc_type)MAPID_MONK,
@ -1825,10 +1827,11 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
}
if (sc->option&OPTION_CHASEWALK && skill_id != ST_CHASEWALK)
return 0;
if(sc->option&OPTION_MOUNTING)
return 0; // New mounts can't attack nor use skills in the client; this check makes it cheat-safe [Ind]
}
if( sc->data[SC_ALL_RIDING] )
return 0; //You can't use skills while in the new mounts (The client doesn't let you, this is to make cheat-safe)
if (target == NULL || target == src) // No further checking needed.
return 1;
@ -5749,7 +5752,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
if( sc->data[SC_FUSION] )
val = 25;
else if( sd ) {
if( pc_isriding(sd) || sd->sc.option&(OPTION_DRAGON|OPTION_MOUNTING) )
if( pc_isriding(sd) || sd->sc.option&OPTION_DRAGON )
val = 25; // Same bonus
else if( pc_isridingwug(sd) )
val = 15 + 5 * pc_checkskill(sd, RA_WUGRIDER);
@ -5758,6 +5761,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
if( sc->data[SC_ACCELERATION] )
val += 25;
}
else if( sc->data[SC_ALL_RIDING] )
val = battle_config.rental_mount_speed_boost;
}
speed_rate -= val;
@ -7351,6 +7356,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
if((type == SC_FREEZE || type == SC_FREEZING || type == SC_CRYSTALIZE) && sc->data[SC_WARMER])
return 0; // Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
break;
case SC_ALL_RIDING:
if( !sd || sc->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_MADOGEAR) )
return 0;
if( sc->data[type] )
{ // Already mounted, just dismount.
status_change_end(bl, SC_ALL_RIDING, INVALID_TIMER);
return 0;
}
break;
// They're all like berserk, do not everlap each other
case SC_BERSERK:

View File

@ -697,6 +697,8 @@ typedef enum sc_type {
SC_EXTREMITYFIST2,
#endif
SC_ALL_RIDING = 951,
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;
@ -1597,8 +1599,7 @@ enum e_option {
OPTION_DRAGON4 = 0x02000000,
OPTION_DRAGON5 = 0x04000000,
OPTION_HANBOK = 0x08000000,
OPTION_MOUNTING = 0x10000000,
OPTION_OKTOBERFEST = 0x20000000,
OPTION_OKTOBERFEST = 0x10000000,
#ifndef NEW_CARTS
OPTION_CART1 = 0x00000008,