diff options
Diffstat (limited to 'src/emap')
-rw-r--r-- | src/emap/init.c | 3 | ||||
-rw-r--r-- | src/emap/map.h | 6 | ||||
-rw-r--r-- | src/emap/script.c | 4 | ||||
-rw-r--r-- | src/emap/script_buildins.c | 67 | ||||
-rw-r--r-- | src/emap/script_buildins.h | 3 |
5 files changed, 50 insertions, 33 deletions
diff --git a/src/emap/init.c b/src/emap/init.c index 3e355f8..45e2d61 100644 --- a/src/emap/init.c +++ b/src/emap/init.c @@ -213,8 +213,7 @@ HPExport void plugin_init (void) addScriptCommand("getitemoptionparambyindex", "ii", getItemOptionParamByIndex); addScriptCommand("setitemoptionbyindex", "iii*", setItemOptionByIndex); addScriptCommand("isinstance", "i", isInstance); - addScriptCommand("getguildpostax","ii",getguildpostax); - addScriptCommand("getguildpostitle","ii",getguildpostitle); + addScriptCommand("getguildposinfo","ii?",getguildposinfo); do_init_langs(); diff --git a/src/emap/map.h b/src/emap/map.h index 2d6a25a..7f4b870 100644 --- a/src/emap/map.h +++ b/src/emap/map.h @@ -50,4 +50,10 @@ void map_alwaysVisible_send(TBL_PC *sd); void edo_final_maps_pre(void); void map_clear_data(void); +enum guildposinfo_type { + GUILDPOSINFO_NAME, + GUILDPOSINFO_MODE, + GUILDPOSINFO_EXPTAX, +}; + #endif // EVOL_MAP_MAP diff --git a/src/emap/script.c b/src/emap/script.c index 236461b..79c3bfe 100644 --- a/src/emap/script.c +++ b/src/emap/script.c @@ -88,6 +88,10 @@ void escript_hardcoded_constants_pre(void) { script->constdb_comment("Evol constants"); script->set_constant("MAX_SLOTS", MAX_SLOTS, false, false); + script->constdb_comment("guildposinfo types"); + script->set_constant("GUILDPOSINFO_NAME", GUILDPOSINFO_NAME, false, false); + script->set_constant("GUILDPOSINFO_MODE", GUILDPOSINFO_MODE, false, false); + script->set_constant("GUILDPOSINFO_EXPTAX", GUILDPOSINFO_EXPTAX, false, false); script->constdb_comment(NULL); eskill_addskill_conststants(); } diff --git a/src/emap/script_buildins.c b/src/emap/script_buildins.c index c1cb193..c8ae6c7 100644 --- a/src/emap/script_buildins.c +++ b/src/emap/script_buildins.c @@ -2352,48 +2352,57 @@ BUILDIN(isInstance) /*========================================== - * Return the EXP tax for (guild, position) - * -1 if not found + * Return data regarding a guild position + * getguildposinfo(arg, position ID, <guild>) *------------------------------------------*/ -BUILDIN(getguildpostax) +BUILDIN(getguildposinfo) { int guild_id, gpos; struct guild* g; - guild_id = script_getnum(st,2); + enum guildposinfo_type type = script_getnum(st, 2); gpos = script_getnum(st,3); - if( ( g = guild->search(guild_id) ) != NULL ) - { - script_pushint(st,g->position[gpos].exp_mode); - } - else - { - script_pushint(st,-1); + if (script_hasdata(st, 4)) { + if (script_isstringtype(st, 4)) { + const char *guild_name = script_getstr(st, 4); + g = guild->searchname(guild_name); + } else { + int guild_id = script_getnum(st, 4); + g = guild->search(guild_id); + } + } else { + struct map_session_data *sd = script->rid2sd(st); + g = sd ? sd->guild : NULL; } - return true; -} - - -/*========================================== - * Return the title (guild, position) - * "" if not found - *------------------------------------------*/ -BUILDIN(getguildpostitle) -{ - int guild_id, gpos; - struct guild* g; - - guild_id = script_getnum(st,2); - gpos = script_getnum(st,3); - if( ( g = guild->search(guild_id) ) != NULL ) + if( g == NULL ) { - script_pushstrcopy(st, g->position[gpos].name); + // guild does not exist + switch (type) { + case GUILDPOSINFO_NAME: + script_pushconststr(st, ""); + break; + default: + script_pushint(st, -1); + } } else { - script_pushstr(st,""); + switch (type) { + case GUILDPOSINFO_NAME: + script_pushstrcopy(st, g->position[gpos].name); + break; + case GUILDPOSINFO_MODE: + script_pushint(st, g->position[gpos].mode); + break; + case GUILDPOSINFO_EXPTAX: + script_pushint(st, g->position[gpos].exp_mode); + break; + default: + ShowError("script:getguildinfo: unknown info type!\n"); + return false; + } } return true; } diff --git a/src/emap/script_buildins.h b/src/emap/script_buildins.h index 87d63f8..8e9bc30 100644 --- a/src/emap/script_buildins.h +++ b/src/emap/script_buildins.h @@ -99,7 +99,6 @@ BUILDIN(getItemOptionValueByIndex); BUILDIN(getItemOptionParamByIndex); BUILDIN(setItemOptionByIndex); BUILDIN(isInstance); -BUILDIN(getguildpostax); -BUILDIN(getguildpostitle); +BUILDIN(getguildposinfo); #endif // EVOL_MAP_SCRIPT_BUILDINS |