instance_live_info command (#3099)

Implemented instance_live_info script command to retrieve some data of running instances

Thanks to @Jeybla, @cydh, @Lemongrass3110 and @aleos89 for the review !
This commit is contained in:
Atemo 2019-06-25 21:48:44 +02:00 committed by GitHub
parent 90f7cf03a9
commit c1975d7ea3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 93 additions and 0 deletions

View File

@ -9057,6 +9057,33 @@ mes .@name$ + " will be destroyed if no one is in the instance for " + instance_
---------------------------------------
*instance_live_info(<info type>{,<instance id>});
Returns the specified <info type> of instance attached to the npc or, if
an instance ID is specified, of that instance.
Valid <info type>:
ILI_NAME - Instance Name
Return the name of the instance or "" if that fails.
ILI_MODE - Instance Mode
Return IM_NONE, IM_CHAR, IM_PARTY, IM_GUILD, IM_CLAN or -1 if that fails.
ILI_OWNER - Owner ID
Return an ID according to the instance mode of the instance attached/specified or -1 if that fails.
When the instance mode is IM_NONE, ILI_OWNER will return the npc ID that created the instance,
IM_CHAR - the owner char ID
IM_PARTY - the party ID
IM_GUILD - the guild ID
IM_CLAN - the clan ID
Examples:
// Return the instance name of the instance attached to the npc.
.@instance_name$ = instance_live_info(ILI_NAME);
// Return the guild owner ID of the given instance ID.
.@owner = instance_live_info(ILI_OWNER, instance_id(IM_GUILD));
---------------------------------------
*getvariableofinstance(<variable>,<instance id>);
Returns a reference to an instance variable (' prefix) of the specific instance ID.

View File

@ -20520,6 +20520,60 @@ BUILDIN_FUNC(instance_info)
return SCRIPT_CMD_SUCCESS;
}
/*------------------------------------------
*instance_live_info( <info type>{, <instance id>} );
- ILI_NAME : Instance Name
- ILI_MODE : Instance Mode
- ILI_OWNER : owner id
*------------------------------------------*/
BUILDIN_FUNC(instance_live_info)
{
int type = script_getnum(st, 2);
int id = 0;
if (type < ILI_NAME || type > ILI_OWNER) {
ShowError("buildin_instance_live_info: Unknown instance information type \"%d\".\n", type);
script_pushint(st, -1);
return SCRIPT_CMD_FAILURE;
}
if (!script_hasdata(st, 3))
id = script_instancegetid(st);
else
id = script_getnum(st, 3);
struct instance_db *db = nullptr;
struct instance_data *im = nullptr;
if (id > 0 && id < MAX_INSTANCE_DATA) {
im = &instance_data[id];
if (im)
db = instance_searchtype_db(im->type);
}
if (!im || !db) {
if (type == ILI_NAME)
script_pushconststr(st, "");
else
script_pushint(st, -1);
return SCRIPT_CMD_SUCCESS;
}
switch( type ) {
case ILI_NAME:
script_pushstrcopy(st, StringBuf_Value(db->name));
break;
case ILI_MODE:
script_pushint(st, im->mode);
break;
case ILI_OWNER:
script_pushint(st, im->owner_id);
break;
}
return SCRIPT_CMD_SUCCESS;
}
/*==========================================
* Custom Fonts
*------------------------------------------*/
@ -24912,6 +24966,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(instance_check_guild,"i???"),
BUILDIN_DEF(instance_check_clan,"i???"),
BUILDIN_DEF(instance_info,"si?"),
BUILDIN_DEF(instance_live_info,"i?"),
/**
* 3rd-related
**/

View File

@ -699,6 +699,12 @@ enum instance_info_type {
IIT_MAP
};
enum e_instance_live_info_type : uint8 {
ILI_NAME,
ILI_MODE,
ILI_OWNER
};
enum vip_status_type {
VIP_STATUS_ACTIVE = 1,
VIP_STATUS_EXPIRE,

View File

@ -4334,6 +4334,11 @@
export_constant(IIT_MAPCOUNT);
export_constant(IIT_MAP);
/* instance live info */
export_constant(ILI_NAME);
export_constant(ILI_MODE);
export_constant(ILI_OWNER);
/* VIP status */
export_constant(VIP_STATUS_ACTIVE);
export_constant(VIP_STATUS_EXPIRE);