summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgumi <git@gumi.ca>2019-10-20 12:55:50 -0400
committergumi <git@gumi.ca>2019-10-20 22:20:01 -0400
commitb2081c13dc6f436e94f620a9fb535e9aabe8d612 (patch)
tree0b8200703ecff81328e1cbf01a98e1a734b1599c
parentddd0e461fb8e451912a6aee90869023e2c2d8272 (diff)
downloadhercules-b2081c13dc6f436e94f620a9fb535e9aabe8d612.tar.gz
hercules-b2081c13dc6f436e94f620a9fb535e9aabe8d612.tar.bz2
hercules-b2081c13dc6f436e94f620a9fb535e9aabe8d612.tar.xz
hercules-b2081c13dc6f436e94f620a9fb535e9aabe8d612.zip
add buildin_getguildinfo
-rw-r--r--src/map/guild.c2
-rw-r--r--src/map/guild.h2
-rw-r--r--src/map/script.c109
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc4
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc6
5 files changed, 112 insertions, 11 deletions
diff --git a/src/map/guild.c b/src/map/guild.c
index 3b611bb05..e270bf01e 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -277,7 +277,7 @@ static struct guild *guild_search(int guild_id)
}
/// lookup: guild name -> guild*
-static struct guild *guild_searchname(char *str)
+static struct guild *guild_searchname(const char *str)
{
struct guild* g;
struct DBIterator *iter = db_iterator(guild->db);
diff --git a/src/map/guild.h b/src/map/guild.h
index 41f52711d..5a14b8a34 100644
--- a/src/map/guild.h
+++ b/src/map/guild.h
@@ -91,7 +91,7 @@ struct guild_interface {
bool (*isallied) (int guild_id, int guild_id2); //Checks alliance based on guild Ids. [Skotlex]
/* */
struct guild *(*search) (int guild_id);
- struct guild *(*searchname) (char *str);
+ struct guild *(*searchname) (const char *str);
struct guild_castle *(*castle_search) (int gcid);
/* */
struct guild_castle *(*mapname2gc) (const char* mapname);
diff --git a/src/map/script.c b/src/map/script.c
index ab7513ede..6d8a38093 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -8980,6 +8980,93 @@ static BUILDIN(getpartyleader)
return true;
}
+enum guildinfo_type {
+ GUILDINFO_NAME,
+ GUILDINFO_ID,
+ GUILDINFO_LEVEL,
+ GUILDINFO_ONLINE,
+ GUILDINFO_AV_LEVEL,
+ GUILDINFO_MAX_MEMBERS,
+ GUILDINFO_EXP,
+ GUILDINFO_NEXT_EXP,
+ GUILDINFO_SKILL_POINTS,
+ GUILDINFO_MASTER_NAME,
+ GUILDINFO_MASTER_CID,
+};
+
+static BUILDIN(getguildinfo)
+{
+ struct guild *g = NULL;
+
+ if (script_hasdata(st, 3)) {
+ if (script_isstringtype(st, 3)) {
+ const char *guild_name = script_getstr(st, 3);
+ g = guild->searchname(guild_name);
+ } else {
+ int guild_id = script_getnum(st, 3);
+ g = guild->search(guild_id);
+ }
+ } else {
+ struct map_session_data *sd = script->rid2sd(st);
+ g = sd ? sd->guild : NULL;
+ }
+
+ enum guildinfo_type type = script_getnum(st, 2);
+
+ if (g == NULL) {
+ // guild does not exist
+ switch (type) {
+ case GUILDINFO_NAME:
+ case GUILDINFO_MASTER_NAME:
+ script_pushconststr(st, "");
+ break;
+ default:
+ script_pushint(st, -1);
+ }
+ } else {
+ switch (type) {
+ case GUILDINFO_NAME:
+ script_pushstrcopy(st, g->name);
+ break;
+ case GUILDINFO_ID:
+ script_pushint(st, g->guild_id);
+ break;
+ case GUILDINFO_LEVEL:
+ script_pushint(st, g->guild_lv);
+ break;
+ case GUILDINFO_ONLINE:
+ script_pushint(st, g->connect_member);
+ break;
+ case GUILDINFO_AV_LEVEL:
+ script_pushint(st, g->average_lv);
+ break;
+ case GUILDINFO_MAX_MEMBERS:
+ script_pushint(st, g->max_member);
+ break;
+ case GUILDINFO_EXP:
+ script_pushint(st, g->exp);
+ break;
+ case GUILDINFO_NEXT_EXP:
+ script_pushint(st, g->next_exp);
+ break;
+ case GUILDINFO_SKILL_POINTS:
+ script_pushint(st, g->skill_point);
+ break;
+ case GUILDINFO_MASTER_NAME:
+ script_pushstrcopy(st, g->member[0].name);
+ break;
+ case GUILDINFO_MASTER_CID:
+ script_pushint(st, g->member[0].char_id);
+ break;
+ default:
+ ShowError("script:getguildinfo: unknown info type!\n");
+ st->state = END;
+ return false;
+ }
+ }
+ return true;
+}
+
/*==========================================
* Return the name of the @guild_id
* null if not found
@@ -15924,7 +16011,7 @@ static BUILDIN(recovery)
return true;
}
-/*
+/*
* Get your current pet information
*/
static BUILDIN(getpetinfo)
@@ -15977,7 +16064,7 @@ static BUILDIN(getpetinfo)
case PETINFO_ACCESSORYFLAG:
script_pushint(st, (pd->pet.equip != 0)? 1:0);
break;
- case PETINFO_EVO_EGGID:
+ case PETINFO_EVO_EGGID:
if (VECTOR_DATA(pd->petDB->evolve_data) != NULL)
script_pushint(st, VECTOR_DATA(pd->petDB->evolve_data)->petEggId);
else
@@ -24901,7 +24988,7 @@ static BUILDIN(showscript)
if (script_hasdata(st, 4))
if (script_getnum(st, 4) == SELF)
flag = SELF;
-
+
clif->ShowScript(bl, msg, flag);
return true;
}
@@ -25786,7 +25873,7 @@ static BUILDIN(identifyidx)
script_pushint(st, false);
return true;
}
-
+
if (sd->status.inventory[idx].nameid <= 0 || sd->status.inventory[idx].identify != 0) {
script_pushint(st, false);
return true;
@@ -26092,6 +26179,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(getguildmaster,"i"),
BUILDIN_DEF(getguildmasterid,"i"),
BUILDIN_DEF(getguildmember,"i?"),
+ BUILDIN_DEF(getguildinfo,"i?"),
BUILDIN_DEF(getguildonline, "i?"),
BUILDIN_DEF(strcharinfo,"i??"),
BUILDIN_DEF(strnpcinfo,"i??"),
@@ -27207,6 +27295,19 @@ static void script_hardcoded_constants(void)
script->set_constant("SIEGE_TYPE_SE", SIEGE_TYPE_SE, false, false);
script->set_constant("SIEGE_TYPE_TE", SIEGE_TYPE_TE, false, false);
+ script->constdb_comment("guildinfo types");
+ script->set_constant("GUILDINFO_NAME", GUILDINFO_NAME, false, false);
+ script->set_constant("GUILDINFO_ID", GUILDINFO_ID, false, false);
+ script->set_constant("GUILDINFO_LEVEL", GUILDINFO_LEVEL, false, false);
+ script->set_constant("GUILDINFO_ONLINE", GUILDINFO_ONLINE, false, false);
+ script->set_constant("GUILDINFO_AV_LEVEL", GUILDINFO_AV_LEVEL, false, false);
+ script->set_constant("GUILDINFO_MAX_MEMBERS", GUILDINFO_MAX_MEMBERS, false, false);
+ script->set_constant("GUILDINFO_EXP", GUILDINFO_EXP, false, false);
+ script->set_constant("GUILDINFO_NEXT_EXP", GUILDINFO_NEXT_EXP, false, false);
+ script->set_constant("GUILDINFO_SKILL_POINTS", GUILDINFO_SKILL_POINTS, false, false);
+ script->set_constant("GUILDINFO_MASTER_NAME", GUILDINFO_MASTER_NAME, false, false);
+ script->set_constant("GUILDINFO_MASTER_CID", GUILDINFO_MASTER_CID, false, false);
+
script->constdb_comment("Renewal");
#ifdef RENEWAL
script->set_constant("RENEWAL", 1, false, false);
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 31e0ca536..24486c6c0 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -2948,8 +2948,8 @@ typedef bool (*HPMHOOK_pre_guild_isallied) (int *guild_id, int *guild_id2);
typedef bool (*HPMHOOK_post_guild_isallied) (bool retVal___, int guild_id, int guild_id2);
typedef struct guild* (*HPMHOOK_pre_guild_search) (int *guild_id);
typedef struct guild* (*HPMHOOK_post_guild_search) (struct guild* retVal___, int guild_id);
-typedef struct guild* (*HPMHOOK_pre_guild_searchname) (char **str);
-typedef struct guild* (*HPMHOOK_post_guild_searchname) (struct guild* retVal___, char *str);
+typedef struct guild* (*HPMHOOK_pre_guild_searchname) (const char **str);
+typedef struct guild* (*HPMHOOK_post_guild_searchname) (struct guild* retVal___, const char *str);
typedef struct guild_castle* (*HPMHOOK_pre_guild_castle_search) (int *gcid);
typedef struct guild_castle* (*HPMHOOK_post_guild_castle_search) (struct guild_castle* retVal___, int gcid);
typedef struct guild_castle* (*HPMHOOK_pre_guild_mapname2gc) (const char **mapname);
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index 8eefa292a..7e9b62b9a 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -32824,11 +32824,11 @@ struct guild* HP_guild_search(int guild_id) {
}
return retVal___;
}
-struct guild* HP_guild_searchname(char *str) {
+struct guild* HP_guild_searchname(const char *str) {
int hIndex = 0;
struct guild* retVal___ = NULL;
if (HPMHooks.count.HP_guild_searchname_pre > 0) {
- struct guild* (*preHookFunc) (char **str);
+ struct guild* (*preHookFunc) (const char **str);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_searchname_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_guild_searchname_pre[hIndex].func;
@@ -32843,7 +32843,7 @@ struct guild* HP_guild_searchname(char *str) {
retVal___ = HPMHooks.source.guild.searchname(str);
}
if (HPMHooks.count.HP_guild_searchname_post > 0) {
- struct guild* (*postHookFunc) (struct guild* retVal___, char *str);
+ struct guild* (*postHookFunc) (struct guild* retVal___, const char *str);
for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_searchname_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_guild_searchname_post[hIndex].func;
retVal___ = postHookFunc(retVal___, str);