summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authormc_cameri <mc_cameri@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-21 14:31:17 +0000
committermc_cameri <mc_cameri@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-21 14:31:17 +0000
commit81ff879313b29ee97375d214b00f78b1f75d3d4a (patch)
treefb24b8968145131e12919645166b89fcb1383ee6 /src/map
parentb005f9413dbdc081fa09365f927677e7f7e9319d (diff)
downloadhercules-81ff879313b29ee97375d214b00f78b1f75d3d4a.tar.gz
hercules-81ff879313b29ee97375d214b00f78b1f75d3d4a.tar.bz2
hercules-81ff879313b29ee97375d214b00f78b1f75d3d4a.tar.xz
hercules-81ff879313b29ee97375d214b00f78b1f75d3d4a.zip
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@292 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/atcommand.c190
-rw-r--r--src/map/atcommand.h5
-rw-r--r--src/map/charcommand.c139
-rw-r--r--src/map/charcommand.h4
4 files changed, 190 insertions, 148 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index a4d89c293..9343b5bed 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -107,7 +107,6 @@ ATCOMMAND_FUNC(petrename);
ATCOMMAND_FUNC(charpetrename); // by Yor
ATCOMMAND_FUNC(recall);
ATCOMMAND_FUNC(recallall);
-ATCOMMAND_FUNC(character_job);
ATCOMMAND_FUNC(revive);
ATCOMMAND_FUNC(character_stats);
ATCOMMAND_FUNC(character_stats_all);
@@ -219,7 +218,8 @@ ATCOMMAND_FUNC(changesex); // by MC Cameri
ATCOMMAND_FUNC(mute); // celest
ATCOMMAND_FUNC(refresh); // by MC Cameri
ATCOMMAND_FUNC(petid); // by MC Cameri
-ATCOMMAND_FUNC(identify);
+ATCOMMAND_FUNC(identify); // by MC Cameri
+ATCOMMAND_FUNC(gmotd); // Added by MC Cameri, created by davidsiaw
#ifndef TXT_ONLY
ATCOMMAND_FUNC(checkmail); // [Valaris]
@@ -299,8 +299,8 @@ static AtCommandInfo atcommand_info[] = {
{ AtCommand_Spawn, "@spawn", 50, atcommand_spawn },
// { AtCommand_Spawn, "@summon", 50, atcommand_spawn },
{ AtCommand_Monster, "@monster2", 50, atcommand_monster },
- { AtCommand_MonsterSmall, "@monstersmall", 50, atcommand_monstersmall },
- { AtCommand_MonsterBig, "@monsterbig", 50, atcommand_monsterbig },
+ { AtCommand_MonsterSmall, "@monstersmall", 50, atcommand_monstersmall },
+ { AtCommand_MonsterBig, "@monsterbig", 50, atcommand_monsterbig },
{ AtCommand_KillMonster, "@killmonster", 60, atcommand_killmonster },
{ AtCommand_KillMonster2, "@killmonster2", 40, atcommand_killmonster2 },
{ AtCommand_Refine, "@refine", 60, atcommand_refine },
@@ -324,10 +324,7 @@ static AtCommandInfo atcommand_info[] = {
{ AtCommand_PetFriendly, "@petfriendly", 40, atcommand_petfriendly },
{ AtCommand_PetHungry, "@pethungry", 40, atcommand_pethungry },
{ AtCommand_PetRename, "@petrename", 1, atcommand_petrename },
- { AtCommand_CharPetRename, "@charpetrename", 50, atcommand_charpetrename }, // by Yor
{ AtCommand_Recall, "@recall", 60, atcommand_recall }, // + /recall
- { AtCommand_CharacterJob, "@charjob", 60, atcommand_character_job },
- { AtCommand_CharacterJob, "@charjobchange", 60, atcommand_character_job },
{ AtCommand_Revive, "@revive", 60, atcommand_revive },
{ AtCommand_CharacterStats, "@charstats", 40, atcommand_character_stats },
{ AtCommand_CharacterStatsAll, "@charstatsall", 40, atcommand_character_stats_all },
@@ -477,6 +474,7 @@ static AtCommandInfo atcommand_info[] = {
{ AtCommand_Refresh, "@refresh", 0, atcommand_refresh }, // by MC Cameri
{ AtCommand_PetId, "@petid", 40, atcommand_petid }, // by MC Cameri
{ AtCommand_Identify, "@identify", 40, atcommand_identify }, // by MC Cameri
+ { AtCommand_Gmotd, "@gmotd", 0, atcommand_gmotd }, // Added by MC Cameri, created by davidsiaw
#ifndef TXT_ONLY // sql-only commands
{ AtCommand_CheckMail, "@checkmail", 1, atcommand_listmail }, // [Valaris]
@@ -2021,8 +2019,10 @@ int atcommand_alive(
const int fd, struct map_session_data* sd,
const char* command, const char* message)
{
+ if (pc_isdead(sd)) {
sd->status.hp = sd->status.max_hp;
sd->status.sp = sd->status.max_sp;
+ clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
pc_setstand(sd);
if (battle_config.pc_invincible_time > 0)
pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
@@ -2030,8 +2030,10 @@ int atcommand_alive(
clif_updatestatus(sd, SP_SP);
clif_resurrection(&sd->bl, 1);
clif_displaymessage(fd, msg_table[16]); // You've been revived! It's a miracle!
-
return 0;
+ }
+ return -1;
+
}
/*==========================================
@@ -3963,47 +3965,6 @@ int atcommand_petrename(
*
*------------------------------------------
*/
-int atcommand_charpetrename(
- const int fd, struct map_session_data* sd,
- const char* command, const char* message)
-{
- char character[100];
- struct map_session_data *pl_sd;
-
- memset(character, '\0', sizeof(character));
-
- if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
- clif_displaymessage(fd, "Please, enter a player name (usage: @charpetrename <char name>).");
- return -1;
- }
-
- if ((pl_sd = map_nick2sd(character)) != NULL) {
- if (pl_sd->status.pet_id > 0 && pl_sd->pd) {
- if (pl_sd->pet.rename_flag != 0) {
- pl_sd->pet.rename_flag = 0;
- intif_save_petdata(pl_sd->status.account_id, &pl_sd->pet);
- clif_send_petstatus(pl_sd);
- clif_displaymessage(fd, msg_table[189]); // This player can now rename his/her pet.
- } else {
- clif_displaymessage(fd, msg_table[190]); // This player can already rename his/her pet.
- return -1;
- }
- } else {
- clif_displaymessage(fd, msg_table[191]); // Sorry, but this player has no pet.
- return -1;
- }
- } else {
- clif_displaymessage(fd, msg_table[3]); // Character not found.
- return -1;
- }
-
- return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
int
atcommand_recall(
const int fd, struct map_session_data* sd,
@@ -4052,87 +4013,6 @@ atcommand_recall(
}
/*==========================================
- * 対象キャラクターを転職させる upper指定で転生や養子も可能
- *------------------------------------------
- */
-int atcommand_character_job(
- const int fd, struct map_session_data* sd,
- const char* command, const char* message)
-{
- char character[100];
- struct map_session_data* pl_sd;
- int job = 0, upper = -1;
-
- memset(character, '\0', sizeof(character));
-
- if (!message || !*message) {
- clif_displaymessage(fd, "Please, enter a job and a player name (usage: @charjob/@charjobchange <job ID> <char name>).");
- return -1;
- }
-
- if (sscanf(message, "%d %d %99[^\n]", &job, &upper, character) < 3) { //upper指定してある
- upper = -1;
- if (sscanf(message, "%d %99[^\n]", &job, character) < 2) { //upper指定してない上に何か足りない
- clif_displaymessage(fd, "Please, enter a job and a player name (usage: @charjob/@charjobchange <job ID> <char name>).");
- return -1;
- }
- }
-
- if ((pl_sd = map_nick2sd(character)) != NULL) {
- if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change job only to lower or same level
- if ((job >= 0 && job < MAX_PC_CLASS)) {
-
- // fix pecopeco display
- if ((job != 13 && job != 21 && job != 4014 && job != 4022)) {
- if (pc_isriding(sd)) {
- if (pl_sd->status.class == 13)
- pl_sd->status.class = pl_sd->view_class = 7;
- if (pl_sd->status.class == 21)
- pl_sd->status.class = pl_sd->view_class = 14;
- if (pl_sd->status.class == 4014)
- pl_sd->status.class = pl_sd->view_class = 4008;
- if (pl_sd->status.class == 4022)
- pl_sd->status.class = pl_sd->view_class = 4015;
- pl_sd->status.option &= ~0x0020;
- clif_changeoption(&pl_sd->bl);
- pc_calcstatus(pl_sd, 0);
- }
- } else {
- if (!pc_isriding(sd)) {
- if (job == 13)
- job = 7;
- if (job == 21)
- job = 14;
- if (job == 4014)
- job = 4008;
- if (job == 4022)
- job = 4015;
- }
- }
-
- if (pc_jobchange(pl_sd, job, upper) == 0)
- clif_displaymessage(fd, msg_table[48]); // Character's job changed.
- else {
- clif_displaymessage(fd, msg_table[192]); // Impossible to change the character's job.
- return -1;
- }
- } else {
- clif_displaymessage(fd, msg_table[49]); // Invalid job ID.
- return -1;
- }
- } else {
- clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
- return -1;
- }
- } else {
- clif_displaymessage(fd, msg_table[3]); // Character not found.
- return -1;
- }
-
- return 0;
-}
-
-/*==========================================
*
*------------------------------------------
*/
@@ -4151,14 +4031,19 @@ int atcommand_revive(
}
if ((pl_sd = map_nick2sd(character)) != NULL) {
- pl_sd->status.hp = pl_sd->status.max_hp;
- pc_setstand(pl_sd);
- if (battle_config.pc_invincible_time > 0)
- pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
- clif_updatestatus(pl_sd, SP_HP);
- clif_updatestatus(pl_sd, SP_SP);
- clif_resurrection(&pl_sd->bl, 1);
- clif_displaymessage(fd, msg_table[51]); // Character revived.
+ if (pc_isdead(sd)) {
+ pl_sd->status.hp = pl_sd->status.max_hp;
+ clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
+ pc_setstand(pl_sd);
+ if (battle_config.pc_invincible_time > 0)
+ pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
+ clif_updatestatus(pl_sd, SP_HP);
+ clif_updatestatus(pl_sd, SP_SP);
+ clif_resurrection(&pl_sd->bl, 1);
+ clif_displaymessage(fd, msg_table[51]); // Character revived.
+ return 0;
+ }
+ return -1;
} else {
clif_displaymessage(fd, msg_table[3]); // Character not found.
return -1;
@@ -4726,6 +4611,7 @@ int atcommand_doommap(
static void atcommand_raise_sub(struct map_session_data* sd)
{
if (sd && sd->state.auth && pc_isdead(sd)) {
+ clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
sd->status.hp = sd->status.max_hp;
sd->status.sp = sd->status.max_sp;
pc_setstand(sd);
@@ -7995,6 +7881,34 @@ atcommand_identify(
return 0;
}
+/*==========================================
+ * @gmotd (Global MOTD)
+ * by davidsiaw :P
+ *------------------------------------------
+ */
+int
+atcommand_gmotd(
+ const int fd, struct map_session_data* sd,
+ const char* command, const char* message)
+{
+ char buf[256];
+ FILE *fp;
+ if( (fp = fopen(motd_txt, "r"))!=NULL){
+ while (fgets(buf, 250, fp) != NULL){
+ int i;
+ for( i=0; buf[i]; i++){
+ if( buf[i]=='\r' || buf[i]=='\n'){
+ buf[i]=0;
+ break;
+ }
+ }
+ intif_GMmessage(buf,strlen(buf)+1,8);
+ }
+ fclose(fp);
+ }
+ return 0;
+}
+
#ifndef TXT_ONLY /* Begin SQL-Only commands */
/*==========================================
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index cccdaa89a..77ecebf79 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -80,9 +80,7 @@ enum AtCommandType {
AtCommand_PetRename,
AtCommand_CharPetRename, // by Yor
AtCommand_Recall,
- AtCommand_CharacterJob,
- AtCommand_CharacterJob2,
- AtCommand_CharacterJob3,
+// AtCommand_CharacterJob, // Now #jobchange
AtCommand_Revive,
AtCommand_CharacterStats,
AtCommand_CharacterStatsAll,
@@ -201,6 +199,7 @@ enum AtCommandType {
AtCommand_Refresh, // by MC Cameri
AtCommand_PetId, // by MC Cameri
AtCommand_Identify, // by MC Cameri
+ AtCommand_Gmotd, // Added by MC Cameri, created by davidsiaw
// SQL-only commands start
#ifndef TXT_ONLY
diff --git a/src/map/charcommand.c b/src/map/charcommand.c
index af52aebfa..e26c339d2 100644
--- a/src/map/charcommand.c
+++ b/src/map/charcommand.c
@@ -33,13 +33,17 @@ static char command_symbol = '#';
static char msg_table[1000][1024]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others)
#define CHARCOMMAND_FUNC(x) int charcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message)
+
+CHARCOMMAND_FUNC(jobchange);
+CHARCOMMAND_FUNC(petrename);
+
#ifdef TXT_ONLY
/* TXT_ONLY */
- CHARCOMMAND_FUNC(test);
+
/* TXT_ONLY */
#else
/* SQL-only */
- //CHARCOMMAND_FUNC(funcname);
+
/* SQL Only */
#endif
@@ -51,15 +55,17 @@ static char msg_table[1000][1024]; // Server messages (0-499 reserved for GM com
// First char of commands is configured in charcommand_athena.conf. Leave @ in this list for default value.
// to set default level, read charcommand_athena.conf first please.
static CharCommandInfo charcommand_info[] = {
-
+ { CharCommandJobChange, "#job", 60, charcommand_jobchange },
+ { CharCommandJobChange, "#jobchange", 60, charcommand_jobchange },
+ { CharCommandPetRename, "#petrename", 50, charcommand_petrename },
+
#ifdef TXT_ONLY
/* TXT_ONLY */
-// { CharCommandType, "#name", level, charcommand_func },
- { CharCommandTest, "#test", 0, charcommand_test },
+
/* TXT_ONLY */
#else
/* SQL-only */
-// { CharCommandType, "#name", level, charcommand_func },
+
/* SQL Only */
#endif
@@ -252,3 +258,124 @@ charcommand_test (const int fd, struct map_session_data* sd,
return 0;
}
+/*==========================================
+ * 対象キャラクターを転職させる upper指定で転生や養子も可能
+ *------------------------------------------
+ */
+int charcommand_jobchange(
+ const int fd, struct map_session_data* sd,
+ const char* command, const char* message)
+{
+ char character[100];
+ struct map_session_data* pl_sd;
+ int job = 0, upper = -1;
+
+ memset(character, '\0', sizeof(character));
+
+ if (!message || !*message) {
+ clif_displaymessage(fd, "Please, enter a job and a player name (usage: #job/#jobchange <job ID> <char name>).");
+ return -1;
+ }
+
+ if (sscanf(message, "%d %d %99[^\n]", &job, &upper, character) < 3) { //upper指定してある
+ upper = -1;
+ if (sscanf(message, "%d %99[^\n]", &job, character) < 2) { //upper指定してない上に何か足りない
+ clif_displaymessage(fd, "Please, enter a job and a player name (usage: #job/#jobchange <job ID> <char name>).");
+ return -1;
+ }
+ }
+
+ if ((pl_sd = map_nick2sd(character)) != NULL) {
+ if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change job only to lower or same level
+ if ((job >= 0 && job < MAX_PC_CLASS)) {
+
+ // fix pecopeco display
+ if ((job != 13 && job != 21 && job != 4014 && job != 4022)) {
+ if (pc_isriding(sd)) {
+ if (pl_sd->status.class == 13)
+ pl_sd->status.class = pl_sd->view_class = 7;
+ if (pl_sd->status.class == 21)
+ pl_sd->status.class = pl_sd->view_class = 14;
+ if (pl_sd->status.class == 4014)
+ pl_sd->status.class = pl_sd->view_class = 4008;
+ if (pl_sd->status.class == 4022)
+ pl_sd->status.class = pl_sd->view_class = 4015;
+ pl_sd->status.option &= ~0x0020;
+ clif_changeoption(&pl_sd->bl);
+ pc_calcstatus(pl_sd, 0);
+ }
+ } else {
+ if (!pc_isriding(sd)) {
+ if (job == 13)
+ job = 7;
+ if (job == 21)
+ job = 14;
+ if (job == 4014)
+ job = 4008;
+ if (job == 4022)
+ job = 4015;
+ }
+ }
+
+ if (pc_jobchange(pl_sd, job, upper) == 0)
+ clif_displaymessage(fd, msg_table[48]); // Character's job changed.
+ else {
+ clif_displaymessage(fd, msg_table[192]); // Impossible to change the character's job.
+ return -1;
+ }
+ } else {
+ clif_displaymessage(fd, msg_table[49]); // Invalid job ID.
+ return -1;
+ }
+ } else {
+ clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
+ return -1;
+ }
+ } else {
+ clif_displaymessage(fd, msg_table[3]); // Character not found.
+ return -1;
+ }
+
+ return 0;
+}
+
+/*==========================================
+ *
+ *------------------------------------------
+ */
+int charcommand_petrename(
+ const int fd, struct map_session_data* sd,
+ const char* command, const char* message)
+{
+ char character[100];
+ struct map_session_data *pl_sd;
+
+ memset(character, '\0', sizeof(character));
+
+ if (!message || !*message || sscanf(message, "%99[^\n]", character) < 1) {
+ clif_displaymessage(fd, "Please, enter a player name (usage: #petrename <char name>).");
+ return -1;
+ }
+
+ if ((pl_sd = map_nick2sd(character)) != NULL) {
+ if (pl_sd->status.pet_id > 0 && pl_sd->pd) {
+ if (pl_sd->pet.rename_flag != 0) {
+ pl_sd->pet.rename_flag = 0;
+ intif_save_petdata(pl_sd->status.account_id, &pl_sd->pet);
+ clif_send_petstatus(pl_sd);
+ clif_displaymessage(fd, msg_table[189]); // This player can now rename his/her pet.
+ } else {
+ clif_displaymessage(fd, msg_table[190]); // This player can already rename his/her pet.
+ return -1;
+ }
+ } else {
+ clif_displaymessage(fd, msg_table[191]); // Sorry, but this player has no pet.
+ return -1;
+ }
+ } else {
+ clif_displaymessage(fd, msg_table[3]); // Character not found.
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/map/charcommand.h b/src/map/charcommand.h
index 95ca8aae6..ed191aa8f 100644
--- a/src/map/charcommand.h
+++ b/src/map/charcommand.h
@@ -3,10 +3,12 @@
enum CharCommandType {
CharCommand_None = -1,
+ CharCommandJobChange,
+ CharCommandPetRename,
#ifdef TXT_ONLY
/* TXT_ONLY */
- CharCommandTest,
+
/* TXT_ONLY */
#else
/* SQL-only */