diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/battle.c | 3 | ||||
-rw-r--r-- | src/map/battle.h | 1 | ||||
-rw-r--r-- | src/map/map.c | 35 |
3 files changed, 30 insertions, 9 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 5265dd270..e77a26e2e 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3193,6 +3193,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } else //Excepting traps and icewall, you should not be able to target skills. return 0; } + break; //Valid targets with no special checks here. case BL_HOM: break; @@ -3479,6 +3480,7 @@ static const struct battle_data_short { { "atcommand_gm_only", &battle_config.atc_gmonly }, { "atcommand_spawn_quantity_limit", &battle_config.atc_spawn_quantity_limit }, { "atcommand_slave_clone_limit", &battle_config.atc_slave_clone_limit}, + { "partial_name_scan", &battle_config.partial_name_scan }, { "gm_all_skill", &battle_config.gm_allskill }, { "gm_all_skill_add_abra", &battle_config.gm_allskill_addabra }, { "gm_all_equipment", &battle_config.gm_allequip }, @@ -3884,6 +3886,7 @@ void battle_set_defaults() { battle_config.atc_gmonly=0; battle_config.atc_spawn_quantity_limit=0; battle_config.atc_slave_clone_limit=0; + battle_config.partial_name_scan=0; battle_config.gm_allskill=0; battle_config.gm_allequip=0; battle_config.gm_skilluncond=0; diff --git a/src/map/battle.h b/src/map/battle.h index f4cdbd58d..fec0a9025 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -134,6 +134,7 @@ extern struct Battle_Config { unsigned short atc_gmonly;
unsigned short atc_spawn_quantity_limit;
unsigned short atc_slave_clone_limit;
+ unsigned short partial_name_scan;
unsigned short gm_allskill;
unsigned short gm_allskill_addabra;
unsigned short gm_allequip;
diff --git a/src/map/map.c b/src/map/map.c index 61527cadb..87300b2e4 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1787,15 +1787,32 @@ struct map_session_data * map_nick2sd(char *nick) { if (nick == NULL) return NULL; - pl_allsd = map_getallusers(&users); - - for (i = 0; i < users; i++) { - pl_sd = pl_allsd[i]; - // Without case sensitive check (increase the number of similar character names found) - if (strcasecmp(pl_sd->status.name, nick) == 0) - return pl_sd; - } - // Exact character name is not found and 0 or more than 1 similar characters have been found ==> we say not found + pl_allsd = map_getallusers(&users); + if (battle_config.partial_name_scan) + { + int qty = 0, nicklen = strlen(nick); + struct map_session_data *sd = NULL; + for (i = 0; i < users; i++) { + pl_sd = pl_allsd[i]; + // Without case sensitive check (increase the number of similar character names found) + if (strnicmp(pl_sd->status.name, nick, nicklen) == 0) { + // Strict comparison (if found, we finish the function immediatly with correct value) + if (strcmp(pl_sd->status.name, nick) == 0) + return pl_sd; + qty++; + sd = pl_sd; + } + } + // We return the found index of a similar account ONLY if there is 1 similar character + if (qty == 1) + return sd; + } else { //Exact Search + for (i = 0; i < users; i++) { + if (strcasecmp(pl_allsd[i]->status.name, nick) == 0) + return pl_allsd[i]; + } + } + //Not found. return NULL; } |