Added a config for disabling novice/summoner character creation (#3008)
* Added a config for disabling novice/summoner character creation. * Summoner can no longer be created on pre-renewal by default. Thanks to @Lemongrass3110 for the help
This commit is contained in:
parent
fdc48770aa
commit
aab5d54945
@ -261,3 +261,10 @@ fame_pharmacy_10: 50
|
|||||||
// Be mindful that the more options used, the easier it becomes to cheat features that rely on idletime (e.g. checkidle()).
|
// Be mindful that the more options used, the easier it becomes to cheat features that rely on idletime (e.g. checkidle()).
|
||||||
// Default: walk (0x1) + useskilltoid (0x2) + useskilltopos (0x4) + useitem (0x8) + attack (0x10) = 0x1F
|
// Default: walk (0x1) + useskilltoid (0x2) + useskilltopos (0x4) + useitem (0x8) + attack (0x10) = 0x1F
|
||||||
idletime_option: 0x1F
|
idletime_option: 0x1F
|
||||||
|
|
||||||
|
// Adjust the summoner class' special traits.
|
||||||
|
// 0: Summoners behave like other classes.
|
||||||
|
// 1: Summoners belong to brute race instead of demi-human
|
||||||
|
// 2: Summoners are small size instead of medium
|
||||||
|
// 3: Both of the above (official value)
|
||||||
|
summoner_trait: 3
|
||||||
|
@ -189,6 +189,14 @@ char_del_option: 2
|
|||||||
// 3: Character cannot be deleted as long as he remains in a party or guild(default)
|
// 3: Character cannot be deleted as long as he remains in a party or guild(default)
|
||||||
char_del_restriction: 3
|
char_del_restriction: 3
|
||||||
|
|
||||||
|
// Restrict certain class from being created. (Only functional on 20151001aRagexe or later)
|
||||||
|
// 0: No character creation is allowed
|
||||||
|
// 1: Only novice is allowed to be created (pre-renewal default)
|
||||||
|
// 2: Only summoner is allowed to be created
|
||||||
|
// 3: Both novice and summoner can be created (renewal default)
|
||||||
|
// Uncomment to customize the restriction
|
||||||
|
//allowed_job_flag: 3
|
||||||
|
|
||||||
// What folder the DB files are in (item_db.txt, etc.)
|
// What folder the DB files are in (item_db.txt, etc.)
|
||||||
db_path: db
|
db_path: db
|
||||||
|
|
||||||
|
@ -1456,7 +1456,8 @@ int char_make_new_char_sql(struct char_session_data* sd, char* name_, int str, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if PACKETVER >= 20151001
|
#if PACKETVER >= 20151001
|
||||||
if (start_job != JOB_NOVICE && start_job != JOB_SUMMONER)
|
if(!(start_job == JOB_NOVICE && (charserv_config.allowed_job_flag&1)) &&
|
||||||
|
!(start_job == JOB_SUMMONER && (charserv_config.allowed_job_flag&2)))
|
||||||
return -2; // Invalid job
|
return -2; // Invalid job
|
||||||
|
|
||||||
// Check for Doram based information.
|
// Check for Doram based information.
|
||||||
@ -2779,6 +2780,12 @@ void char_set_defaults(){
|
|||||||
charserv_config.clan_remove_inactive_days = 14;
|
charserv_config.clan_remove_inactive_days = 14;
|
||||||
charserv_config.mail_return_days = 14;
|
charserv_config.mail_return_days = 14;
|
||||||
charserv_config.mail_delete_days = 14;
|
charserv_config.mail_delete_days = 14;
|
||||||
|
|
||||||
|
#if defined(RENEWAL) && PACKETVER >= 20151001
|
||||||
|
charserv_config.allowed_job_flag = 3;
|
||||||
|
#else
|
||||||
|
charserv_config.allowed_job_flag = 1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3057,6 +3064,8 @@ bool char_config_read(const char* cfgName, bool normal){
|
|||||||
charserv_config.mail_return_days = atoi(w2);
|
charserv_config.mail_return_days = atoi(w2);
|
||||||
} else if (strcmpi(w1, "mail_delete_days") == 0) {
|
} else if (strcmpi(w1, "mail_delete_days") == 0) {
|
||||||
charserv_config.mail_delete_days = atoi(w2);
|
charserv_config.mail_delete_days = atoi(w2);
|
||||||
|
} else if (strcmpi(w1, "allowed_job_flag") == 0) {
|
||||||
|
charserv_config.allowed_job_flag = atoi(w2);
|
||||||
} else if (strcmpi(w1, "import") == 0) {
|
} else if (strcmpi(w1, "import") == 0) {
|
||||||
char_config_read(w2, normal);
|
char_config_read(w2, normal);
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,8 @@ struct CharServ_Config {
|
|||||||
int clan_remove_inactive_days;
|
int clan_remove_inactive_days;
|
||||||
int mail_return_days;
|
int mail_return_days;
|
||||||
int mail_delete_days;
|
int mail_delete_days;
|
||||||
|
|
||||||
|
int allowed_job_flag;
|
||||||
};
|
};
|
||||||
extern struct CharServ_Config charserv_config;
|
extern struct CharServ_Config charserv_config;
|
||||||
|
|
||||||
|
@ -8505,6 +8505,7 @@ static const struct _battle_data {
|
|||||||
{ "skill_drop_items_full", &battle_config.skill_drop_items_full, 0, 0, 1, },
|
{ "skill_drop_items_full", &battle_config.skill_drop_items_full, 0, 0, 1, },
|
||||||
{ "feature.homunculus_autofeed", &battle_config.feature_homunculus_autofeed, 1, 0, 1, },
|
{ "feature.homunculus_autofeed", &battle_config.feature_homunculus_autofeed, 1, 0, 1, },
|
||||||
{ "feature.homunculus_autofeed_rate", &battle_config.feature_homunculus_autofeed_rate,30, 0, 100, },
|
{ "feature.homunculus_autofeed_rate", &battle_config.feature_homunculus_autofeed_rate,30, 0, 100, },
|
||||||
|
{ "summoner_trait", &battle_config.summoner_trait, 3, 0, 3, },
|
||||||
|
|
||||||
#include "../custom/battle_config_init.inc"
|
#include "../custom/battle_config_init.inc"
|
||||||
};
|
};
|
||||||
|
@ -639,8 +639,9 @@ struct Battle_Config
|
|||||||
int autoloot_adjust;
|
int autoloot_adjust;
|
||||||
int broadcast_hide_name;
|
int broadcast_hide_name;
|
||||||
int skill_drop_items_full;
|
int skill_drop_items_full;
|
||||||
int feature_homunculus_autofeed;
|
int feature_homunculus_autofeed;
|
||||||
int feature_homunculus_autofeed_rate;
|
int feature_homunculus_autofeed_rate;
|
||||||
|
int summoner_trait;
|
||||||
|
|
||||||
#include "../custom/battle_config_struct.inc"
|
#include "../custom/battle_config_struct.inc"
|
||||||
};
|
};
|
||||||
|
@ -3415,7 +3415,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
|
|||||||
// Give them all modes except these (useful for clones)
|
// Give them all modes except these (useful for clones)
|
||||||
base_status->mode = static_cast<e_mode>(MD_MASK&~(MD_STATUS_IMMUNE|MD_IGNOREMELEE|MD_IGNOREMAGIC|MD_IGNORERANGED|MD_IGNOREMISC|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK));
|
base_status->mode = static_cast<e_mode>(MD_MASK&~(MD_STATUS_IMMUNE|MD_IGNOREMELEE|MD_IGNOREMAGIC|MD_IGNORERANGED|MD_IGNOREMISC|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK));
|
||||||
|
|
||||||
base_status->size = (sd->class_&JOBL_BABY || (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) ? SZ_SMALL : SZ_MEDIUM;
|
base_status->size = (sd->class_&JOBL_BABY || ((battle_config.summoner_trait&2) && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER)) ? SZ_SMALL : SZ_MEDIUM;
|
||||||
if (battle_config.character_size && pc_isriding(sd)) { // [Lupus]
|
if (battle_config.character_size && pc_isriding(sd)) { // [Lupus]
|
||||||
if (sd->class_&JOBL_BABY) {
|
if (sd->class_&JOBL_BABY) {
|
||||||
if (battle_config.character_size&SZ_BIG)
|
if (battle_config.character_size&SZ_BIG)
|
||||||
@ -3426,7 +3426,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
|
|||||||
}
|
}
|
||||||
base_status->aspd_rate = 1000;
|
base_status->aspd_rate = 1000;
|
||||||
base_status->ele_lv = 1;
|
base_status->ele_lv = 1;
|
||||||
base_status->race = ((sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) ? RC_BRUTE : RC_PLAYER;
|
base_status->race = ((battle_config.summoner_trait&1) && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) ? RC_BRUTE : RC_PLAYER;
|
||||||
base_status->class_ = CLASS_NORMAL;
|
base_status->class_ = CLASS_NORMAL;
|
||||||
|
|
||||||
// Zero up structures...
|
// Zero up structures...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user