Skip to content

Commit

Permalink
Merge pull request #2397 from AnnieRuru/68-getmercinfo
Browse files Browse the repository at this point in the history
Add constants and MERCINFO_GID to *getmercinfo script command
  • Loading branch information
MishimaHaruna authored Mar 10, 2019
2 parents 28eb508 + 0d99c34 commit 47cfee4
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 52 deletions.
23 changes: 12 additions & 11 deletions doc/script_commands.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9845,17 +9845,18 @@ If char id is given, the information of that character is retrieved
instead. Type specifies what information to retrieve and can be one of the
following:

0 - Database ID
1 - Class
2 - Name
3 - Faith value for this mercenary's guild, if any
4 - Calls value for this mercenary's guild, if any
5 - Kill count
6 - Remaining life time in msec
7 - Level

If the character does not have a mercenary, the command returns ""
for name and 0 for all other types.
MERCINFO_ID - Mercenary Database ID
MERCINFO_CLASS - Mercenary Class
MERCINFO_NAME - Mercenary Name
MERCINFO_FAITH - Mercenary faith value for this mercenary's guild, if any
MERCINFO_CALLS - Mercenary calls value for this mercenary's guild, if any
MERCINFO_KILLCOUNT - Mercenary kill count
MERCINFO_LIFETIME - Mercenary remaining life time in mili-second
MERCINFO_LEVEL - Mercenary Level
MERCINFO_GID - Mercenary Game ID

If the character does not have a mercenary, the command returns "" for MERCINFO_NAME
and 0 for all other types.

---------------------------------------
//=====================================
Expand Down
12 changes: 6 additions & 6 deletions npc/re/jobs/3-1/archbishop.txt
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ job3_arch01,29,34,3 script Valkyrie#arch 4_F_VALKYRIE2,{
warp "odin_tem02",282,263;
end;
}
if (getmercinfo(1)) {
if (getmercinfo(MERCINFO_CLASS)) {
mes "[Valkyrie]";
mes "If you want to talk with me, you have to ^3131FFcancel all contracts^000000 with any mercenaries you have.";
close;
Expand Down Expand Up @@ -1006,7 +1006,7 @@ OnTouch:
if (countitem(ValkyrieA_Scroll)) {
delitem ValkyrieA_Scroll,1;
// fall through
} else if (getmercinfo(1) == 2037) {
} else if (getmercinfo(MERCINFO_CLASS) == VALKYRIE_A) {
if (strnpcinfo(NPC_NAME) == "#arch_1_10")
viewpoint 1,113,327,1,0xFF9900;
.@randht = rand(1,10);
Expand Down Expand Up @@ -1038,7 +1038,7 @@ OnTouch:
if (countitem(ValkyrieA_Scroll)) {
delitem ValkyrieA_Scroll,1;
// fall through
} else if (getmercinfo(1) == 2037) {
} else if (getmercinfo(MERCINFO_CLASS) == VALKYRIE_A) {
mapannounce "job3_arch02","Valkyrie's Nightmare: An incompetent illusion of Valkyrie came here with the assistance of humans. You wanna have that nightmare?",bc_map,"0xFF0000";
donpcevent "mob#arch_1::OnKill";
end;
Expand Down Expand Up @@ -1113,7 +1113,7 @@ OnKill:
}

job3_arch02,113,327,5 script Valkyrie#arch_01 4_F_VALKYRIE2,{
if (getmercinfo(1)) {
if (getmercinfo(MERCINFO_CLASS)) {
mes "[Valkyrie]";
mes "If you want to talk with me, you have to ^3131FFcancel all contracts^000000 with any mercenaries you have.";
close;
Expand Down Expand Up @@ -1355,7 +1355,7 @@ OnTouch:
if (countitem(ValkyrieB_Scroll)) {
delitem ValkyrieB_Scroll,1;
// fall through
} else if (getmercinfo(1) == 2038) {
} else if (getmercinfo(MERCINFO_CLASS) == VALKYRIE_B) {
.@randht = rand(1,10);
if (.@randht < 8)
mapannounce "job3_arch02","Whispering of an impersonation: I can feel the devil's spirits. Can you hear? The sound of gathering in crowds.",bc_map,"0xFFCE00";
Expand Down Expand Up @@ -1400,7 +1400,7 @@ OnTouch:
if (countitem(ValkyrieB_Scroll)) {
delitem ValkyrieB_Scroll,1;
// fall through
} else if (getmercinfo(1) == 2038) {
} else if (getmercinfo(MERCINFO_CLASS) == VALKYRIE_B) {
mapannounce "job3_arch02","A shout of devil: You are so childish. I invite you a party of devil. I'll make you have a fun!",bc_map,"0xFF0000";
end;
}
Expand Down
4 changes: 2 additions & 2 deletions npc/re/jobs/3-1/ranger.txt
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ tur_dun01,91,169,3 script Test Instructor#jr02 4_M_JOB_HUNTER,{
mes "Don't hang around here doing nothing. This is my area!";
close;
L_Start:
if (getmercinfo(1)) {
if (getmercinfo(MERCINFO_CLASS)) {
mes "[Test Instructor, Teardrop]";
mes "Stop!";
next;
Expand Down Expand Up @@ -1491,7 +1491,7 @@ job3_rang02,251,49,3 script Test Supervisor#jr_13 4_M_JOB_HUNTER,{
setquest 8261;
close;
}
if (getmercinfo(1) == 2034) {
if (getmercinfo(MERCINFO_CLASS) == M_DESERT_WOLF_B) {
erasequest 8261;
mes "Good! Then I'll start the test right now!";
next;
Expand Down
2 changes: 1 addition & 1 deletion npc/re/quests/eden/eden_tutorial.txt
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ moc_para01,34,178,3 script Tutorial Instructor 4_M_KHMAN,{
close;
}
} else if (questprogress(9167) == 1) {
if (!getmercinfo(1)) {
if (!getmercinfo(MERCINFO_CLASS)) {
mes "[Tutorial Instructor]";
mes "You haven't gotten a mercenary yet.";
next;
Expand Down
91 changes: 59 additions & 32 deletions src/map/script.c
Original file line number Diff line number Diff line change
Expand Up @@ -15613,20 +15613,15 @@ static BUILDIN(gethominfo)
return true;
}

/// Retrieves information about character's mercenary
/// getmercinfo <type>[,<char id>];
/*
* Retrieves information about character's mercenary
* getmercinfo <type>{, <char id> };
*/
static BUILDIN(getmercinfo)
{
int type;
struct map_session_data* sd;
struct mercenary_data* md;

type = script_getnum(st,2);

if (script_hasdata(st,3)) {
int char_id = script_getnum(st,3);

if ((sd = script->charid2sd(st, char_id)) == NULL) {
struct map_session_data *sd;
if (script_hasdata(st, 3)) {
if ((sd = script->charid2sd(st, script_getnum(st, 3))) == NULL) {
script_pushnil(st);
return true;
}
Expand All @@ -15635,27 +15630,48 @@ static BUILDIN(getmercinfo)
return true;
}

md = ( sd->status.mer_id && sd->md ) ? sd->md : NULL;
struct mercenary_data *md = (sd->status.mer_id && sd->md)? sd->md : NULL;
int type = script_getnum(st, 2);
if (md == NULL) {
if (type == MERCINFO_NAME)
script_pushconststr(st, "");
else
script_pushint(st, 0);
return true;
}

switch( type )
{
case 0: script_pushint(st,md ? md->mercenary.mercenary_id : 0); break;
case 1: script_pushint(st,md ? md->mercenary.class_ : 0); break;
case 2:
if( md )
script_pushstrcopy(st,md->db->name);
else
script_pushconststr(st,"");
break;
case 3: script_pushint(st,md ? mercenary->get_faith(md) : 0); break;
case 4: script_pushint(st,md ? mercenary->get_calls(md) : 0); break;
case 5: script_pushint(st,md ? md->mercenary.kill_count : 0); break;
case 6: script_pushint(st,md ? mercenary->get_lifetime(md) : 0); break;
case 7: script_pushint(st,md ? md->db->lv : 0); break;
default:
ShowError("buildin_getmercinfo: Invalid type %d (char_id=%d).\n", type, sd->status.char_id);
script_pushnil(st);
return false;
switch (type) {
case MERCINFO_ID:
script_pushint(st, md->mercenary.mercenary_id);
break;
case MERCINFO_CLASS:
script_pushint(st, md->mercenary.class_);
break;
case MERCINFO_NAME:
script_pushstrcopy(st, md->db->name);
break;
case MERCINFO_FAITH:
script_pushint(st, mercenary->get_faith(md));
break;
case MERCINFO_CALLS:
script_pushint(st, mercenary->get_calls(md));
break;
case MERCINFO_KILLCOUNT:
script_pushint(st, md->mercenary.kill_count);
break;
case MERCINFO_LIFETIME:
script_pushint(st, mercenary->get_lifetime(md));
break;
case MERCINFO_LEVEL:
script_pushint(st, md->db->lv);
break;
case MERCINFO_GID:
script_pushint(st, md->bl.id);
break;
default:
ShowError("buildin_getmercinfo: Invalid type %d (char_id=%d).\n", type, sd->status.char_id);
script_pushnil(st);
return false;
}

return true;
Expand Down Expand Up @@ -26118,6 +26134,17 @@ static void script_hardcoded_constants(void)
script->set_constant("ITEMINFO_VIEWSPRITE", ITEMINFO_VIEWSPRITE, false, false);
script->set_constant("ITEMINFO_TRADE", ITEMINFO_TRADE, false, false);

script->constdb_comment("getmercinfo options");
script->set_constant("MERCINFO_ID,", MERCINFO_ID, false, false);
script->set_constant("MERCINFO_CLASS", MERCINFO_CLASS, false, false);
script->set_constant("MERCINFO_NAME", MERCINFO_NAME, false, false);
script->set_constant("MERCINFO_FAITH", MERCINFO_FAITH, false, false);
script->set_constant("MERCINFO_CALLS", MERCINFO_CALLS, false, false);
script->set_constant("MERCINFO_KILLCOUNT", MERCINFO_KILLCOUNT, false, false);
script->set_constant("MERCINFO_LIFETIME", MERCINFO_LIFETIME, false, false);
script->set_constant("MERCINFO_LEVEL", MERCINFO_LEVEL, false, false);
script->set_constant("MERCINFO_GID", MERCINFO_GID, false, false);

script->constdb_comment("monster skill states");
script->set_constant("MSS_ANY", MSS_ANY, false, false);
script->set_constant("MSS_IDLE", MSS_IDLE, false, false);
Expand Down
17 changes: 17 additions & 0 deletions src/map/script.h
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,23 @@ enum script_iteminfo_types {
ITEMINFO_MAX
};

/**
* Mercenary Info types.
*/
enum script_mercinfo_types {
MERCINFO_ID = 0,
MERCINFO_CLASS,
MERCINFO_NAME,
MERCINFO_FAITH,
MERCINFO_CALLS,
MERCINFO_KILLCOUNT,
MERCINFO_LIFETIME,
MERCINFO_LEVEL,
MERCINFO_GID,

MERCINFO_MAX
};

/**
* Player blocking actions related flags.
*/
Expand Down

0 comments on commit 47cfee4

Please sign in to comment.