- Updated the at-command system to exchange hard-coded messages with those from the at-command help file

- Amended existing commands to display additional information when no parameters are entered

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15907 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
epoque11 2012-04-21 11:01:56 +00:00
parent 0d31185766
commit 15d1f7106f

View File

@ -147,6 +147,39 @@ void do_final_msg(void)
aFree(msg_table[i]); aFree(msg_table[i]);
} }
/**
* retrieves the help string associated with a given command.
*
* @param name the name of the command to retrieve help information for
* @return the string associated with the command, or NULL
*/
static const char* atcommand_help_string(const char* name)
{
const char* str = NULL;
config_setting_t* info;
if( *name == atcommand_symbol || *name == charcommand_symbol )
{// remove the prefix symbol for the raw name of the command
name ++;
}
// attept to find the first default help command
info = config_lookup(&atcommand_config, "help");
if( info == NULL )
{// failed to find the help property in the configuration file
return NULL;
}
if( !config_setting_lookup_string( info, name, &str ) )
{// failed to find the matching help string
return NULL;
}
// push the result from the method
return str;
}
/*========================================== /*==========================================
* @send (used for testing packet sends from the client) * @send (used for testing packet sends from the client)
@ -869,8 +902,21 @@ ACMD_FUNC(option)
int param1 = 0, param2 = 0, param3 = 0; int param1 = 0, param2 = 0, param3 = 0;
nullpo_retr(-1, sd); nullpo_retr(-1, sd);
if (!message || !*message || sscanf(message, "%d %d %d", &param1, &param2, &param3) < 1 || param1 < 0 || param2 < 0 || param3 < 0) { if (!message || !*message || sscanf(message, "%d %d %d", &param1, &param2, &param3) < 1 || param1 < 0 || param2 < 0 || param3 < 0)
clif_displaymessage(fd, "Please, enter at least a option (usage: @option <param1:0+> <param2:0+> <param3:0+>)."); {// failed to match the parameters so inform the user of the options
const char* text = NULL;
// attempt to find the setting information for this command
text = atcommand_help_string( command );
// notify the user of the requirement to enter an option
clif_displaymessage(fd, "Please, enter at least one option..");
if( text )
{// send the help text associated with this command
clif_displaymessage( fd, text );
}
return -1; return -1;
} }
@ -1078,6 +1124,7 @@ ACMD_FUNC(jobchange)
} }
} }
// TODO: convert this to use atcommand_help_string()
if (!found) { if (!found) {
clif_displaymessage(fd, "Please, enter a job ID (usage: @job/@jobchange <job name/ID>)."); clif_displaymessage(fd, "Please, enter a job ID (usage: @job/@jobchange <job name/ID>).");
clif_displaymessage(fd, "----- Novice / 1st Class -----"); clif_displaymessage(fd, "----- Novice / 1st Class -----");
@ -1145,6 +1192,7 @@ ACMD_FUNC(jobchange)
return -1; return -1;
} }
} else { } else {
// TODO: convert this to use atcommand_help_string()
clif_displaymessage(fd, "Please enter a valid job ID (usage: @job/@jobchange <job name/ID>)."); clif_displaymessage(fd, "Please enter a valid job ID (usage: @job/@jobchange <job name/ID>).");
clif_displaymessage(fd, "----- Novice / 1st Class -----"); clif_displaymessage(fd, "----- Novice / 1st Class -----");
clif_displaymessage(fd, " 0 Novice 1 Swordman 2 Magician 3 Archer"); clif_displaymessage(fd, " 0 Novice 1 Swordman 2 Magician 3 Archer");
@ -1950,22 +1998,21 @@ ACMD_FUNC(go)
// get the number // get the number
town = atoi(message); town = atoi(message);
// if no value, display all value if (!message || !*message || sscanf(message, "%11s", map_name) < 1 || town < 0 || town >= ARRAYLENGTH(data))
if (!message || !*message || sscanf(message, "%11s", map_name) < 1 || town < 0 || town >= ARRAYLENGTH(data)) { {// no value matched so send the list of locations
clif_displaymessage(fd, msg_txt(38)); // Invalid location number, or name. const char* text;
clif_displaymessage(fd, msg_txt(82)); // Please provide a name or number from the list provided:
clif_displaymessage(fd, " 0=Prontera 1=Morroc 2=Geffen"); // attempt to find the text help string
clif_displaymessage(fd, " 3=Payon 4=Alberta 5=Izlude"); text = atcommand_help_string( command );
clif_displaymessage(fd, " 6=Al De Baran 7=Lutie 8=Comodo");
clif_displaymessage(fd, " 9=Yuno 10=Amatsu 11=Gonryun"); // Invalid location number, or name.
clif_displaymessage(fd, " 12=Umbala 13=Niflheim 14=Louyang"); clif_displaymessage(fd, msg_txt(38));
clif_displaymessage(fd, " 15=Novice Grounds 16=Prison 17=Jawaii");
clif_displaymessage(fd, " 18=Ayothaya 19=Einbroch 20=Lighthalzen"); if( text )
clif_displaymessage(fd, " 21=Einbech 22=Hugel 23=Rachel"); {// send the text to the client
clif_displaymessage(fd, " 24=Veins 25=Moscovia 26=Midgard Camp"); clif_displaymessage( fd, text );
clif_displaymessage(fd, " 27=Manuk 28=Splendide 29=Brasilis"); }
clif_displaymessage(fd, " 30=El Dicastes 31=Mora 32=Dewata");
clif_displaymessage(fd, " 33=Malangdo Island 34=Malaya Port 35=Eclage");
return -1; return -1;
} }
@ -3333,8 +3380,21 @@ ACMD_FUNC(questskill)
int skill_id; int skill_id;
nullpo_retr(-1, sd); nullpo_retr(-1, sd);
if (!message || !*message || (skill_id = atoi(message)) < 0) { if (!message || !*message || (skill_id = atoi(message)) < 0)
clif_displaymessage(fd, "Please, enter a quest skill number (usage: @questskill <#:0+>)."); {// also send a list of skills applicable to this command
const char* text;
// attempt to find the text corresponding to this command
text = atcommand_help_string( command );
// send the error message as always
clif_displaymessage(fd, "Please enter a quest skill number.");
if( text )
{// send the skill ID list associated with this command
clif_displaymessage( fd, text );
}
return -1; return -1;
} }
if (skill_id < 0 && skill_id >= MAX_SKILL_DB) { if (skill_id < 0 && skill_id >= MAX_SKILL_DB) {
@ -3364,8 +3424,21 @@ ACMD_FUNC(lostskill)
int skill_id; int skill_id;
nullpo_retr(-1, sd); nullpo_retr(-1, sd);
if (!message || !*message || (skill_id = atoi(message)) < 0) { if (!message || !*message || (skill_id = atoi(message)) < 0)
clif_displaymessage(fd, "Please, enter a quest skill number (usage: @lostskill <#:0+>)."); {// also send a list of skills applicable to this command
const char* text;
// attempt to find the text corresponding to this command
text = atcommand_help_string( command );
// send the error message as always
clif_displaymessage(fd, "Please enter a quest skill number.");
if( text )
{// send the skill ID list associated with this command
clif_displaymessage( fd, text );
}
return -1; return -1;
} }
if (skill_id < 0 && skill_id >= MAX_SKILL) { if (skill_id < 0 && skill_id >= MAX_SKILL) {