summaryrefslogtreecommitdiff
path: root/src/map/guild.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/guild.c')
-rw-r--r--src/map/guild.c448
1 files changed, 295 insertions, 153 deletions
diff --git a/src/map/guild.c b/src/map/guild.c
index 39d580bb7..f344878e1 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
- * Copyright (C) Athena Dev Teams
+ * Copyright (C) 2012-2020 Hercules Dev Team
+ * Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -38,6 +38,7 @@
#include "map/storage.h"
#include "common/HPM.h"
#include "common/cbasetypes.h"
+#include "common/conf.h"
#include "common/ers.h"
#include "common/memmgr.h"
#include "common/mapindex.h"
@@ -51,13 +52,13 @@
#include <stdlib.h>
#include <string.h>
-struct guild_interface guild_s;
+static struct guild_interface guild_s;
struct guild_interface *guild;
/*==========================================
* Retrieves and validates the sd pointer for this guild member [Skotlex]
*------------------------------------------*/
-struct map_session_data *guild_sd_check(int guild_id, int account_id, int char_id)
+static struct map_session_data *guild_sd_check(int guild_id, int account_id, int char_id)
{
struct map_session_data *sd = map->id2sd(account_id);
@@ -74,14 +75,16 @@ struct map_session_data *guild_sd_check(int guild_id, int account_id, int char_i
}
// Modified [Komurka]
-int guild_skill_get_max (int id) {
+static int guild_skill_get_max(int id)
+{
if (id < GD_SKILLBASE || id >= GD_SKILLBASE+MAX_GUILDSKILL)
return 0;
return guild->skill_tree[id-GD_SKILLBASE].max;
}
// Retrieve skill_lv learned by guild
-int guild_checkskill(struct guild *g, int id) {
+static int guild_checkskill(struct guild *g, int id)
+{
int idx = id - GD_SKILLBASE;
nullpo_ret(g);
if (idx < 0 || idx >= MAX_GUILDSKILL)
@@ -92,7 +95,7 @@ int guild_checkskill(struct guild *g, int id) {
/*==========================================
* guild_skill_tree.txt reading - from jA [Komurka]
*------------------------------------------*/
-bool guild_read_guildskill_tree_db(char* split[], int columns, int current)
+static bool guild_read_guildskill_tree_db(char *split[], int columns, int current)
{// <skill id>,<max lv>,<req id1>,<req lv1>,<req id2>,<req lv2>,<req id3>,<req lv3>,<req id4>,<req lv4>,<req id5>,<req lv5>
int k, id, skill_id;
@@ -125,7 +128,7 @@ bool guild_read_guildskill_tree_db(char* split[], int columns, int current)
/*==========================================
* Guild skill check - from jA [Komurka]
*------------------------------------------*/
-int guild_check_skill_require(struct guild *g,int id)
+static int guild_check_skill_require(struct guild *g, int id)
{
int i;
int idx = id-GD_SKILLBASE;
@@ -145,37 +148,137 @@ int guild_check_skill_require(struct guild *g,int id)
return 1;
}
-bool guild_read_castledb(char* str[], int columns, int current)
-{// <castle id>,<map name>,<castle name>,<castle event>[,<reserved/unused switch flag>]
- struct guild_castle *gc;
- int index;
+static bool guild_read_castledb_libconfig(void)
+{
+ struct config_t castle_conf;
+ struct config_setting_t *castle_db = NULL, *it = NULL;
+ char config_filename[256];
+ libconfig->format_db_path("castle_db.conf", config_filename, sizeof(config_filename));
+ int i = 0;
- nullpo_retr(false, str);
- index = mapindex->name2id(str[1]);
- if (map->mapindex2mapid(index) < 0) // Map not found or on another map-server
+ if (libconfig->load_file(&castle_conf, config_filename) == 0)
return false;
+ if ((castle_db = libconfig->setting_get_member(castle_conf.root, "castle_db")) == NULL) {
+ libconfig->destroy(&castle_conf);
+ ShowError("guild_read_castledb_libconfig: can't read %s\n", config_filename);
+ return false;
+ }
+
+ while ((it = libconfig->setting_get_elem(castle_db, i++)) != NULL) {
+ guild->read_castledb_libconfig_sub(it, i - 1, config_filename);
+ }
+
+ libconfig->destroy(&castle_conf);
+ ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(guild->castle_db), config_filename);
+ return true;
+}
+
+static bool guild_read_castledb_libconfig_sub(struct config_setting_t *it, int idx, const char *source)
+{
+ nullpo_ret(it);
+ nullpo_ret(source);
+
+ struct guild_castle *gc = NULL;
+ const char *name = NULL;
+ int i32 = 0;
CREATE(gc, struct guild_castle, 1);
- gc->castle_id = atoi(str[0]);
+
+ if (libconfig->setting_lookup_int(it, "CastleID", &i32) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid or missing CastleID (%d) in \"%s\", entry #%d, skipping.\n", i32, source, idx);
+ return false;
+ }
+ gc->castle_id = i32;
+
+ if (libconfig->setting_lookup_string(it, "MapName", &name) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid or missing MapName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ int index = mapindex->name2id(name);
+ if (map->mapindex2mapid(index) < 0) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid MapName (%s) in \"%s\", entry #%d, skipping.\n", name, source, idx);
+ return false;
+ }
gc->mapindex = index;
- safestrncpy(gc->castle_name, str[2], sizeof(gc->castle_name));
- safestrncpy(gc->castle_event, str[3], sizeof(gc->castle_event));
- idb_put(guild->castle_db,gc->castle_id,gc);
+ if (libconfig->setting_lookup_string(it, "CastleName", &name) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid CastleName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ safestrncpy(gc->castle_name, name, sizeof(gc->castle_name));
- //intif->guild_castle_info(gc->castle_id);
+ if (libconfig->setting_lookup_string(it, "OnGuildBreakEventName", &name) == CONFIG_FALSE){
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid OnGuildBreakEventName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ safestrncpy(gc->castle_event, name, sizeof(gc->castle_event));
+ if (itemdb->lookup_const(it, "SiegeType", &i32) && (i32 >= SIEGE_TYPE_MAX || i32 < 0)) {
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid SiegeType in \"%s\", entry #%d, defaulting to SIEGE_TYPE_FE.\n", source, idx);
+ gc->siege_type = SIEGE_TYPE_FE;
+ } else {
+ gc->siege_type = i32;
+ }
+
+ libconfig->setting_lookup_bool_real(it, "EnableClientWarp", &gc->enable_client_warp);
+ if (gc->enable_client_warp == true) {
+ struct config_setting_t *wd = libconfig->setting_get_member(it, "ClientWarp");
+ guild->read_castledb_libconfig_sub_warp(wd, source, gc);
+ }
+ idb_put(guild->castle_db, gc->castle_id, gc);
+ return true;
+}
+
+static bool guild_read_castledb_libconfig_sub_warp(struct config_setting_t *wd, const char *source, struct guild_castle *gc)
+{
+ nullpo_retr(false, wd);
+ nullpo_retr(false, gc);
+ nullpo_retr(false, source);
+
+ int64 i64 = 0;
+ struct config_setting_t *it = libconfig->setting_get_member(wd, "Position");
+ if (config_setting_is_list(it)) {
+ int m = map->mapindex2mapid(gc->mapindex);
+
+ gc->client_warp.x = libconfig->setting_get_int_elem(it, 0);
+ gc->client_warp.y = libconfig->setting_get_int_elem(it, 1);
+ if (gc->client_warp.x < 0 || gc->client_warp.x >= map->list[m].xs || gc->client_warp.y < 0 || gc->client_warp.y >= map->list[m].ys) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid Position in \"%s\", for castle (%d).\n", source, gc->castle_id);
+ return false;
+ }
+ } else {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid format for Position in \"%s\", for castle (%d).\n", source, gc->castle_id);
+ return false;
+ }
+
+ if (libconfig->setting_lookup_int64(wd, "ZenyCost", &i64)) {
+ if (i64 > MAX_ZENY) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCost is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id);
+ }
+ gc->client_warp.zeny = cap_value((int)i64, 0, MAX_ZENY);
+ }
+ if (libconfig->setting_lookup_int64(wd, "ZenyCostSiegeTime", &i64)) {
+ if (i64 > MAX_ZENY) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCostSiegeTime is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id);
+ }
+ gc->client_warp.zeny_siege = cap_value((int)i64, 0, MAX_ZENY);
+ }
return true;
}
/// lookup: guild id -> guild*
-struct guild* guild_search(int guild_id)
+static struct guild *guild_search(int guild_id)
{
return (struct guild*)idb_get(guild->db,guild_id);
}
/// lookup: guild name -> guild*
-struct guild* guild_searchname(char* str)
+static struct guild *guild_searchname(const char *str)
{
struct guild* g;
struct DBIterator *iter = db_iterator(guild->db);
@@ -192,13 +295,13 @@ struct guild* guild_searchname(char* str)
}
/// lookup: castle id -> castle*
-struct guild_castle* guild_castle_search(int gcid)
+static struct guild_castle *guild_castle_search(int gcid)
{
return (struct guild_castle*)idb_get(guild->castle_db,gcid);
}
/// lookup: map index -> castle*
-struct guild_castle* guild_mapindex2gc(short map_index)
+static struct guild_castle *guild_mapindex2gc(short map_index)
{
struct guild_castle* gc;
struct DBIterator *iter = db_iterator(guild->castle_db);
@@ -214,12 +317,12 @@ struct guild_castle* guild_mapindex2gc(short map_index)
}
/// lookup: map name -> castle*
-struct guild_castle* guild_mapname2gc(const char* mapname)
+static struct guild_castle *guild_mapname2gc(const char *mapname)
{
return guild->mapindex2gc(mapindex->name2id(mapname));
}
-struct map_session_data* guild_getavailablesd(struct guild* g)
+static struct map_session_data *guild_getavailablesd(struct guild *g)
{
int i;
@@ -230,7 +333,7 @@ struct map_session_data* guild_getavailablesd(struct guild* g)
}
/// lookup: player AID/CID -> member index
-int guild_getindex(const struct guild *g, int account_id, int char_id)
+static int guild_getindex(const struct guild *g, int account_id, int char_id)
{
int i;
@@ -245,7 +348,7 @@ int guild_getindex(const struct guild *g, int account_id, int char_id)
}
/// lookup: player sd -> member position
-int guild_getposition(struct guild* g, struct map_session_data* sd)
+static int guild_getposition(struct guild *g, struct map_session_data *sd)
{
int i;
@@ -257,7 +360,7 @@ int guild_getposition(struct guild* g, struct map_session_data* sd)
}
//Creation of member information
-void guild_makemember(struct guild_member *m,struct map_session_data *sd)
+static void guild_makemember(struct guild_member *m, struct map_session_data *sd)
{
nullpo_retv(sd);
nullpo_retv(m);
@@ -268,13 +371,14 @@ void guild_makemember(struct guild_member *m,struct map_session_data *sd)
m->hair = sd->status.hair;
m->hair_color = sd->status.hair_color;
m->gender = sd->status.sex;
- m->class_ = sd->status.class_;
+ m->class = sd->status.class;
m->lv = sd->status.base_level;
//m->exp = 0;
//m->exp_payper = 0;
m->online = 1;
m->position = MAX_GUILDPOSITION-1;
memcpy(m->name,sd->status.name,NAME_LENGTH);
+ m->last_login = (uint32)time(NULL); // When player create or join a guild the date is updated
return;
}
@@ -282,7 +386,7 @@ void guild_makemember(struct guild_member *m,struct map_session_data *sd)
* Server cache to be flushed to inter the Guild EXP
* @see DBApply
*/
-int guild_payexp_timer_sub(union DBKey key, struct DBData *data, va_list ap)
+static int guild_payexp_timer_sub(union DBKey key, struct DBData *data, va_list ap)
{
int i;
struct guild_expcache *c;
@@ -310,7 +414,8 @@ int guild_payexp_timer_sub(union DBKey key, struct DBData *data, va_list ap)
return 0;
}
-int guild_payexp_timer(int tid, int64 tick, int id, intptr_t data) {
+static int guild_payexp_timer(int tid, int64 tick, int id, intptr_t data)
+{
guild->expcache_db->clear(guild->expcache_db,guild->payexp_timer_sub);
return 0;
}
@@ -319,7 +424,7 @@ int guild_payexp_timer(int tid, int64 tick, int id, intptr_t data) {
* Taken from party_send_xy_timer_sub. [Skotlex]
* @see DBApply
*/
-int guild_send_xy_timer_sub(union DBKey key, struct DBData *data, va_list ap)
+static int guild_send_xy_timer_sub(union DBKey key, struct DBData *data, va_list ap)
{
struct guild *g = DB->data2ptr(data);
int i;
@@ -344,12 +449,13 @@ int guild_send_xy_timer_sub(union DBKey key, struct DBData *data, va_list ap)
}
//Code from party_send_xy_timer [Skotlex]
-int guild_send_xy_timer(int tid, int64 tick, int id, intptr_t data) {
+static int guild_send_xy_timer(int tid, int64 tick, int id, intptr_t data)
+{
guild->db->foreach(guild->db,guild->send_xy_timer_sub,tick);
return 0;
}
-int guild_send_dot_remove(struct map_session_data *sd)
+static int guild_send_dot_remove(struct map_session_data *sd)
{
nullpo_ret(sd);
if (sd->status.guild_id)
@@ -358,13 +464,18 @@ int guild_send_dot_remove(struct map_session_data *sd)
}
//------------------------------------------------------------------------
-int guild_create(struct map_session_data *sd, const char *name)
+static int guild_create(struct map_session_data *sd, const char *name)
{
char tname[NAME_LENGTH];
struct guild_member m;
nullpo_ret(sd);
nullpo_ret(name);
+ if (sd->clan != NULL) {
+ clif->messagecolor_self(sd->fd, COLOR_RED, "You cannot create a guild because you are in a clan.");
+ return 0;
+ }
+
safestrncpy(tname, name, NAME_LENGTH);
trim(tname);
@@ -387,7 +498,8 @@ int guild_create(struct map_session_data *sd, const char *name)
}
//Whether or not to create guild
-int guild_created(int account_id,int guild_id) {
+static int guild_created(int account_id, int guild_id)
+{
struct map_session_data *sd=map->id2sd(account_id);
if(sd==NULL)
@@ -399,34 +511,35 @@ int guild_created(int account_id,int guild_id) {
//struct guild *g;
sd->status.guild_id=guild_id;
clif->guild_created(sd,0); // Success
- if(battle_config.guild_emperium_check)
- pc->delitem(sd, pc->search_inventory(sd, ITEMID_EMPERIUM), 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME); //emperium consumption
+ if (battle_config.guild_emperium_check) {
+ int n = pc->search_inventory(sd, ITEMID_EMPERIUM);
+ if (n != INDEX_NOT_FOUND)
+ pc->delitem(sd, n, 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME); //emperium consumption
+ }
return 0;
}
//Information request
-int guild_request_info(int guild_id)
+static int guild_request_info(int guild_id)
{
return intif->guild_request_info(guild_id);
}
//Information request with event
-int guild_npc_request_info(int guild_id,const char *event)
+static int guild_npc_request_info(int guild_id, const char *event)
{
- if( guild->search(guild_id) )
- {
- if( event && *event )
+ if (guild->search(guild_id) != NULL) {
+ if (event != NULL && *event != '\0')
npc->event_do(event);
return 0;
}
- if( event && *event )
- {
+ if (event != NULL && *event != '\0') {
struct eventlist *ev;
struct DBData prev;
- ev=(struct eventlist *)aCalloc(sizeof(struct eventlist),1);
- memcpy(ev->name,event,strlen(event));
+ CREATE(ev, struct eventlist, 1);
+ safestrncpy(ev->name, event, sizeof(ev->name));
//The one in the db (if present) becomes the next event from this.
if (guild->infoevent_db->put(guild->infoevent_db, DB->i2key(guild_id), DB->ptr2data(ev), &prev))
ev->next = DB->data2ptr(&prev);
@@ -436,7 +549,7 @@ int guild_npc_request_info(int guild_id,const char *event)
}
//Confirmation of the character belongs to guild
-int guild_check_member(const struct guild *g)
+static int guild_check_member(const struct guild *g)
{
int i;
struct map_session_data *sd;
@@ -453,6 +566,7 @@ int guild_check_member(const struct guild *g)
if (i == INDEX_NOT_FOUND) {
sd->status.guild_id=0;
sd->guild_emblem_id=0;
+ sd->guild = NULL;
ShowWarning("guild: check_member %d[%s] is not member\n",sd->status.account_id,sd->status.name);
}
}
@@ -462,15 +576,18 @@ int guild_check_member(const struct guild *g)
}
//Delete association with guild_id for all characters
-int guild_recv_noinfo(int guild_id)
+static int guild_recv_noinfo(int guild_id)
{
struct map_session_data *sd;
struct s_mapiterator* iter;
iter = mapit_getallusers();
for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
- if( sd->status.guild_id == guild_id )
+ if (sd->status.guild_id == guild_id) {
sd->status.guild_id = 0; // erase guild
+ sd->guild_emblem_id = 0;
+ sd->guild = NULL;
+ }
}
mapit->free(iter);
@@ -478,7 +595,7 @@ int guild_recv_noinfo(int guild_id)
}
//Get and display information for all member
-int guild_recv_info(const struct guild *sg)
+static int guild_recv_info(const struct guild *sg)
{
struct guild *g,before;
int i,bm,m;
@@ -542,10 +659,10 @@ int guild_recv_info(const struct guild *sg)
before=*sg;
//Perform the check on the user because the first load
guild->check_member(sg);
- if ((sd = map->nick2sd(sg->master)) != NULL) {
+ if ((sd = map->nick2sd(sg->master, false)) != NULL) {
//If the guild master is online the first time the guild_info is received,
//that means he was the first to join, so apply guild skill blocking here.
- if( battle_config.guild_skill_relog_delay )
+ if( battle_config.guild_skill_relog_delay == 1)
guild->block_skill(sd, 300000);
//Also set the guild master flag.
@@ -627,7 +744,8 @@ int guild_recv_info(const struct guild *sg)
/*=============================================
* Player sd send a guild invatation to player tsd to join his guild
*--------------------------------------------*/
-int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) {
+static int guild_invite(struct map_session_data *sd, struct map_session_data *tsd)
+{
struct guild *g;
int i;
@@ -681,7 +799,8 @@ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) {
/// Guild invitation reply.
/// flag: 0:rejected, 1:accepted
-int guild_reply_invite(struct map_session_data* sd, int guild_id, int flag) {
+static int guild_reply_invite(struct map_session_data *sd, int guild_id, int flag)
+{
struct map_session_data* tsd;
nullpo_ret(sd);
@@ -707,7 +826,6 @@ int guild_reply_invite(struct map_session_data* sd, int guild_id, int flag) {
}
else
{// accepted
- struct guild_member m;
struct guild* g;
int i;
@@ -727,8 +845,8 @@ int guild_reply_invite(struct map_session_data* sd, int guild_id, int flag) {
return 0;
}
- guild->makemember(&m,sd);
- intif->guild_addmember(guild_id, &m);
+ guild->makemember(&g->member[i], sd);
+ intif->guild_addmember(guild_id, &g->member[i]);
//TODO: send a minimap update to this player
}
@@ -739,7 +857,7 @@ int guild_reply_invite(struct map_session_data* sd, int guild_id, int flag) {
//- If guild is not in memory, it is requested
//- Otherwise sd pointer is set up.
//- Player must be authed and must belong to a guild before invoking this method
-void guild_member_joined(struct map_session_data *sd)
+static void guild_member_joined(struct map_session_data *sd)
{
struct guild* g;
int i;
@@ -753,12 +871,14 @@ void guild_member_joined(struct map_session_data *sd)
// set the Guild Master flag
sd->state.gmaster_flag = 1;
// prevent Guild Skills from being used directly after relog
- if( battle_config.guild_skill_relog_delay )
+ if( battle_config.guild_skill_relog_delay == 1 )
guild->block_skill(sd, 300000);
}
i = guild->getindex(g, sd->status.account_id, sd->status.char_id);
if (i == INDEX_NOT_FOUND) {
sd->status.guild_id = 0;
+ sd->guild_emblem_id = 0;
+ sd->guild = NULL;
} else {
g->member[i].sd = sd;
sd->guild = g;
@@ -773,7 +893,8 @@ void guild_member_joined(struct map_session_data *sd)
/*==========================================
* Add a player to a given guild_id
*----------------------------------------*/
-int guild_member_added(int guild_id,int account_id,int char_id,int flag) {
+static int guild_member_added(int guild_id, int account_id, int char_id, int flag)
+{
struct map_session_data *sd = map->id2sd(account_id),*sd2;
struct guild *g;
@@ -814,6 +935,11 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag) {
//Next line commented because it do nothing, look at guild_recv_info [LuzZza]
//clif->charnameupdate(sd); //Update display name [Skotlex]
+ // Makes the character join their respective guild's channel for #ally chat
+ if (channel->config->ally && channel->config->ally_autojoin) {
+ channel->join(g->channel, sd, "", true);
+ }
+
return 0;
}
@@ -821,7 +947,7 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag) {
* Player request leaving a given guild_id
* mes - non null terminated string
*----------------------------------------*/
-int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes)
+static int guild_leave(struct map_session_data *sd, int guild_id, int account_id, int char_id, const char *mes)
{
struct guild *g;
@@ -850,7 +976,8 @@ int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int c
* Request remove a player to a given guild_id
* mes - non null terminated string
*----------------------------------------*/
-int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes) {
+static int guild_expulsion(struct map_session_data *sd, int guild_id, int account_id, int char_id, const char *mes)
+{
struct map_session_data *tsd;
struct guild *g;
int i,ps;
@@ -885,7 +1012,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, i
return 0;
}
-int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, const char* name, const char* mes)
+static int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, const char *name, const char *mes)
{
int i;
struct guild* g = guild->search(guild_id);
@@ -909,9 +1036,9 @@ int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, c
#endif
if(!flag)
- clif->guild_leave(online_member_sd, name, mes);
+ clif->guild_leave(online_member_sd, name, char_id, mes);
else
- clif->guild_expulsion(online_member_sd, name, mes, account_id);
+ clif->guild_expulsion(online_member_sd, name, char_id, mes, account_id);
// remove member from guild
memset(&g->member[i],0,sizeof(struct guild_member));
@@ -941,7 +1068,8 @@ int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, c
return 0;
}
-void guild_retrieveitembound(int char_id,int aid,int guild_id) {
+static void guild_retrieveitembound(int char_id, int aid, int guild_id)
+{
#ifdef GP_BOUND_ITEMS
struct map_session_data *sd = map->charid2sd(char_id);
if (sd != NULL) { //Character is online
@@ -963,8 +1091,9 @@ void guild_retrieveitembound(int char_id,int aid,int guild_id) {
#endif
}
-int guild_send_memberinfoshort(struct map_session_data *sd,int online)
-{ // cleaned up [LuzZza]
+// cleaned up [LuzZza]
+static int guild_send_memberinfoshort(struct map_session_data *sd, int online)
+{
struct guild *g;
nullpo_ret(sd);
@@ -976,7 +1105,7 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online)
return 0;
intif->guild_memberinfoshort(g->guild_id,
- sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class_);
+ sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class);
if(!online){
int i = guild->getindex(g,sd->status.account_id,sd->status.char_id);
@@ -995,8 +1124,9 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online)
return 0;
}
-int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class_)
-{ // cleaned up [LuzZza]
+// cleaned up [LuzZza]
+static int guild_recv_memberinfoshort(int guild_id, int account_id, int char_id, int online, int lv, int class, uint32 last_login)
+{
int i, alv, c, idx = INDEX_NOT_FOUND, om = 0, oldonline = -1;
struct guild *g = guild->search(guild_id);
@@ -1010,7 +1140,8 @@ int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int onlin
oldonline=m->online;
m->online=online;
m->lv=lv;
- m->class_=class_;
+ m->class = class;
+ m->last_login = last_login;
idx=i;
}
alv+=m->lv;
@@ -1060,14 +1191,16 @@ int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int onlin
/*====================================================
* Send a message to whole guild
*---------------------------------------------------*/
-int guild_send_message(struct map_session_data *sd,const char *mes,int len)
+static int guild_send_message(struct map_session_data *sd, const char *mes)
{
nullpo_ret(sd);
- if(sd->status.guild_id==0)
+ if (sd->status.guild_id == 0 || sd->guild == NULL)
return 0;
- intif->guild_message(sd->status.guild_id,sd->status.account_id,mes,len);
- guild->recv_message(sd->status.guild_id,sd->status.account_id,mes,len);
+
+ int len = (int)strlen(mes);
+
+ clif->guild_message(sd->guild, sd->status.account_id, mes, len);
// Chat logging type 'G' / Guild Chat
logs->chat(LOG_CHAT_GUILD, sd->status.guild_id, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, mes);
@@ -1076,21 +1209,9 @@ int guild_send_message(struct map_session_data *sd,const char *mes,int len)
}
/*====================================================
- * Guild receive a message, will be displayed to whole member
- *---------------------------------------------------*/
-int guild_recv_message(int guild_id,int account_id,const char *mes,int len)
-{
- struct guild *g;
- if( (g=guild->search(guild_id))==NULL)
- return 0;
- clif->guild_message(g,account_id,mes,len);
- return 0;
-}
-
-/*====================================================
* Member changing position in guild
*---------------------------------------------------*/
-int guild_change_memberposition(int guild_id,int account_id,int char_id,short idx)
+static int guild_change_memberposition(int guild_id, int account_id, int char_id, short idx)
{
return intif->guild_change_memberinfo(guild_id,account_id,char_id,GMI_POSITION,&idx,sizeof(idx));
}
@@ -1098,7 +1219,7 @@ int guild_change_memberposition(int guild_id,int account_id,int char_id,short id
/*====================================================
* Notification of new position for member
*---------------------------------------------------*/
-int guild_memberposition_changed(struct guild *g,int idx,int pos)
+static int guild_memberposition_changed(struct guild *g, int idx, int pos)
{
nullpo_ret(g);
Assert_ret(idx >= 0 && idx < MAX_GUILD);
@@ -1108,14 +1229,14 @@ int guild_memberposition_changed(struct guild *g,int idx,int pos)
// Update char position in client [LuzZza]
if(g->member[idx].sd != NULL)
- clif->charnameupdate(g->member[idx].sd);
+ clif->guild_position_selected(g->member[idx].sd);
return 0;
}
/*====================================================
* Change guild title or member
*---------------------------------------------------*/
-int guild_change_position(int guild_id,int idx,int mode,int exp_mode,const char *name)
+static int guild_change_position(int guild_id, int idx, int mode, int exp_mode, const char *name)
{
struct guild_position p;
nullpo_ret(name);
@@ -1130,7 +1251,7 @@ int guild_change_position(int guild_id,int idx,int mode,int exp_mode,const char
/*====================================================
* Notification of member has changed his guild title
*---------------------------------------------------*/
-int guild_position_changed(int guild_id, int idx, const struct guild_position *p)
+static int guild_position_changed(int guild_id, int idx, const struct guild_position *p)
{
struct guild *g=guild->search(guild_id);
int i;
@@ -1144,14 +1265,14 @@ int guild_position_changed(int guild_id, int idx, const struct guild_position *p
// Update char name in client [LuzZza]
for(i=0;i<g->max_member;i++)
if(g->member[i].position == idx && g->member[i].sd != NULL)
- clif->charnameupdate(g->member[i].sd);
+ clif->guild_position_selected(g->member[i].sd);
return 0;
}
/*====================================================
* Change guild notice
*---------------------------------------------------*/
-int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2)
+static int guild_change_notice(struct map_session_data *sd, int guild_id, const char *mes1, const char *mes2)
{
nullpo_ret(sd);
@@ -1163,7 +1284,7 @@ int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes
/*====================================================
* Notification of guild has changed his notice
*---------------------------------------------------*/
-int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
+static int guild_notice_changed(int guild_id, const char *mes1, const char *mes2)
{
int i;
struct guild *g=guild->search(guild_id);
@@ -1186,14 +1307,14 @@ int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
/*====================================================
* Change guild emblem
*---------------------------------------------------*/
-int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
+static int guild_change_emblem(struct map_session_data *sd, int len, const char *data)
{
struct guild *g;
nullpo_ret(sd);
if (battle_config.require_glory_guild &&
!((g = sd->guild) && guild->checkskill(g, GD_GLORYGUILD)>0)) {
- clif->skill_fail(sd,GD_GLORYGUILD,USESKILL_FAIL_LEVEL,0);
+ clif->skill_fail(sd, GD_GLORYGUILD, USESKILL_FAIL_LEVEL, 0, 0);
return 0;
}
@@ -1203,7 +1324,7 @@ int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
/*====================================================
* Notification of guild emblem changed
*---------------------------------------------------*/
-int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
+static int guild_emblem_changed(int len, int guild_id, int emblem_id, const char *data)
{
int i;
struct map_session_data *sd;
@@ -1263,7 +1384,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
/**
* @see DBCreateData
*/
-struct DBData create_expcache(union DBKey key, va_list args)
+static struct DBData create_expcache(union DBKey key, va_list args)
{
struct guild_expcache *c;
struct map_session_data *sd = va_arg(args, struct map_session_data*);
@@ -1280,7 +1401,8 @@ struct DBData create_expcache(union DBKey key, va_list args)
/*====================================================
* Return taxed experience from player sd to guild
*---------------------------------------------------*/
-unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp) {
+static uint64 guild_payexp(struct map_session_data *sd, uint64 exp)
+{
struct guild *g;
struct guild_expcache *c;
int per;
@@ -1313,7 +1435,7 @@ unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp) {
* Add this experience to guild exp
* [Celest]
*---------------------------------------------------*/
-int guild_getexp(struct map_session_data *sd,int exp)
+static int guild_getexp(struct map_session_data *sd, int exp)
{
struct guild_expcache *c;
nullpo_ret(sd);
@@ -1332,7 +1454,7 @@ int guild_getexp(struct map_session_data *sd,int exp)
/*====================================================
* Ask to increase guildskill skill_id
*---------------------------------------------------*/
-int guild_skillup(struct map_session_data *sd, uint16 skill_id)
+static int guild_skillup(struct map_session_data *sd, uint16 skill_id)
{
struct guild* g;
int idx = skill_id - GD_SKILLBASE;
@@ -1356,7 +1478,8 @@ int guild_skillup(struct map_session_data *sd, uint16 skill_id)
/*====================================================
* Notification of guildskill skill_id increase request
*---------------------------------------------------*/
-int guild_skillupack(int guild_id,uint16 skill_id,int account_id) {
+static int guild_skillupack(int guild_id, uint16 skill_id, int account_id)
+{
struct map_session_data *sd=map->id2sd(account_id);
struct guild *g=guild->search(guild_id);
int i;
@@ -1385,7 +1508,8 @@ int guild_skillupack(int guild_id,uint16 skill_id,int account_id) {
return 0;
}
-void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv) {
+static void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv)
+{
struct skill_unit_group* group = NULL;
int type = status->skill2sc(skill_id);
nullpo_retv(sd);
@@ -1411,7 +1535,7 @@ void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id, uint1
* 0 = allied
* 1 = enemy
*---------------------------------------------------*/
-int guild_get_alliance_count(struct guild *g,int flag)
+static int guild_get_alliance_count(struct guild *g, int flag)
{
int i,c;
@@ -1425,7 +1549,7 @@ int guild_get_alliance_count(struct guild *g,int flag)
}
// Blocks all guild skills which have a common delay time.
-void guild_block_skill(struct map_session_data *sd, int time)
+static void guild_block_skill(struct map_session_data *sd, int time)
{
uint16 skill_id[] = { GD_BATTLEORDER, GD_REGENERATION, GD_RESTORE, GD_EMERGENCYCALL };
int i;
@@ -1440,7 +1564,7 @@ void guild_block_skill(struct map_session_data *sd, int time)
* 1 = enemy
* Returns true if yes.
*---------------------------------------------------*/
-int guild_check_alliance(int guild_id1, int guild_id2, int flag)
+static int guild_check_alliance(int guild_id1, int guild_id2, int flag)
{
struct guild *g;
int i;
@@ -1456,7 +1580,8 @@ int guild_check_alliance(int guild_id1, int guild_id2, int flag)
/*====================================================
* Player sd, asking player tsd an alliance between their 2 guilds
*---------------------------------------------------*/
-int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd) {
+static int guild_reqalliance(struct map_session_data *sd, struct map_session_data *tsd)
+{
struct guild *g[2];
int i;
@@ -1512,7 +1637,8 @@ int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
/*====================================================
* Player sd, answer to player tsd (account_id) for an alliance request
*---------------------------------------------------*/
-int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag) {
+static int guild_reply_reqalliance(struct map_session_data *sd, int account_id, int flag)
+{
struct map_session_data *tsd;
nullpo_ret(sd);
@@ -1572,7 +1698,8 @@ int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
/*====================================================
* Player sd asking to break alliance with guild guild_id
*---------------------------------------------------*/
-int guild_delalliance(struct map_session_data *sd,int guild_id,int flag) {
+static int guild_delalliance(struct map_session_data *sd, int guild_id, int flag)
+{
nullpo_ret(sd);
if(map->agit_flag || map->agit2_flag) {
@@ -1588,7 +1715,7 @@ int guild_delalliance(struct map_session_data *sd,int guild_id,int flag) {
/*====================================================
* Player sd, asking player tsd a formal enemy relation between their 2 guilds
*---------------------------------------------------*/
-int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
+static int guild_opposition(struct map_session_data *sd, struct map_session_data *tsd)
{
struct guild *g;
int i;
@@ -1631,7 +1758,8 @@ int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
/*====================================================
* Notification of a relationship between 2 guilds
*---------------------------------------------------*/
-int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag,const char *name1,const char *name2) {
+static int guild_allianceack(int guild_id1, int guild_id2, int account_id1, int account_id2, int flag, const char *name1, const char *name2)
+{
struct guild *g[2] = { NULL };
int guild_id[2] = { 0 };
const char *guild_name[2] = { NULL };
@@ -1721,7 +1849,7 @@ int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id
* Notification for the guild disbanded
* @see DBApply
*/
-int guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
+static int guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
{
struct guild *g = DB->data2ptr(data);
int guild_id=va_arg(ap,int);
@@ -1747,7 +1875,7 @@ int guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
* Invoked on Castles when a guild is broken. [Skotlex]
* @see DBApply
*/
-int castle_guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
+static int castle_guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
{
struct guild_castle *gc = DB->data2ptr(data);
int guild_id = va_arg(ap, int);
@@ -1768,7 +1896,7 @@ int castle_guild_broken_sub(union DBKey key, struct DBData *data, va_list ap)
}
//Invoked on /breakguild "Guild name"
-int guild_broken(int guild_id,int flag)
+static int guild_broken(int guild_id, int flag)
{
struct guild *g = guild->search(guild_id);
struct map_session_data *sd = NULL;
@@ -1812,28 +1940,33 @@ int guild_broken(int guild_id,int flag)
}
//Changes the Guild Master to the specified player. [Skotlex]
-int guild_gm_change(int guild_id, struct map_session_data *sd)
+static int guild_gm_change(int guild_id, int char_id)
{
- struct guild *g;
- nullpo_ret(sd);
+ struct guild *g = guild->search(guild_id);
+ char *name;
+ int i;
- if (sd->status.guild_id != guild_id)
- return 0;
+ nullpo_ret(g);
- g=guild->search(guild_id);
+ ARR_FIND(0, MAX_GUILD, i, g->member[i].char_id == char_id);
- nullpo_ret(g);
+ if (i == MAX_GUILD ) {
+ // Not part of the guild
+ return 0;
+ }
+
+ name = g->member[i].name;
- if (strcmp(g->master, sd->status.name) == 0) //Nothing to change.
+ if (strcmp(g->master, name) == 0) //Nothing to change.
return 0;
//Notify servers that master has changed.
- intif->guild_change_gm(guild_id, sd->status.name, strlen(sd->status.name)+1);
+ intif->guild_change_gm(guild_id, name, (int)strlen(name) + 1);
return 1;
}
//Notification from Char server that a guild's master has changed. [Skotlex]
-int guild_gm_changed(int guild_id, int account_id, int char_id)
+static int guild_gm_changed(int guild_id, int account_id, int char_id)
{
struct guild *g;
struct guild_member gm;
@@ -1862,6 +1995,7 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
if (g->member[pos].sd && g->member[pos].sd->fd) {
clif->message(g->member[pos].sd->fd, msg_sd(g->member[pos].sd,878)); //"You no longer are the Guild Master."
g->member[pos].sd->state.gmaster_flag = 0;
+ clif->blname_ack(0, &g->member[pos].sd->bl);
}
if (g->member[0].sd && g->member[0].sd->fd) {
@@ -1869,6 +2003,7 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
g->member[0].sd->state.gmaster_flag = 1;
//Block his skills for 5 minutes to prevent abuse.
guild->block_skill(g->member[0].sd, 300000);
+ clif->blname_ack(0, &g->member[pos].sd->bl);
}
// announce the change to all guild members
@@ -1878,6 +2013,7 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
{
clif->guild_basicinfo(g->member[i].sd);
clif->guild_memberlist(g->member[i].sd);
+ clif->guild_belonginfo(g->member[i].sd, g); // Update clientside guildmaster flag
}
}
@@ -1887,7 +2023,7 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
/*====================================================
* Guild disbanded
*---------------------------------------------------*/
-int guild_break(struct map_session_data *sd, const char *name)
+static int guild_break(struct map_session_data *sd, const char *name)
{
struct guild *g;
struct unit_data *ud;
@@ -1949,7 +2085,7 @@ int guild_break(struct map_session_data *sd, const char *name)
* Creates a list of guild castle IDs to be requested
* from char-server.
*/
-void guild_castle_map_init(void)
+static void guild_castle_map_init(void)
{
int num = db_size(guild->castle_db);
@@ -1979,7 +2115,7 @@ void guild_castle_map_init(void)
* @param index Type of data to change
* @param value New value
*/
-int guild_castledatasave(int castle_id, int index, int value)
+static int guild_castledatasave(int castle_id, int index, int value)
{
struct guild_castle *gc = guild->castle_search(castle_id);
@@ -2040,7 +2176,7 @@ int guild_castledatasave(int castle_id, int index, int value)
return 0;
}
-void guild_castle_reconnect_sub(void *key, void *data, va_list ap)
+static void guild_castle_reconnect_sub(void *key, void *data, va_list ap)
{
int castle_id = GetWord((int)h64BPTRSIZE(key), 0);
int index = GetWord((int)h64BPTRSIZE(key), 1);
@@ -2053,7 +2189,7 @@ void guild_castle_reconnect_sub(void *key, void *data, va_list ap)
* disconnected.
* On reconnect pushes all changes to char-server for saving.
*/
-void guild_castle_reconnect(int castle_id, int index, int value)
+static void guild_castle_reconnect(int castle_id, int index, int value)
{
static struct linkdb_node *gc_save_pending = NULL;
@@ -2069,7 +2205,7 @@ void guild_castle_reconnect(int castle_id, int index, int value)
}
// Load castle data then invoke OnAgitInit* on last
-int guild_castledataloadack(int len, const struct guild_castle *gc)
+static int guild_castledataloadack(int len, const struct guild_castle *gc)
{
int i;
int n = (len-4) / sizeof(struct guild_castle);
@@ -2112,7 +2248,7 @@ int guild_castledataloadack(int len, const struct guild_castle *gc)
/*====================================================
* Start normal woe and triggers all npc OnAgitStart
*---------------------------------------------------*/
-void guild_agit_start(void)
+static void guild_agit_start(void)
{
// Run All NPC_Event[OnAgitStart]
int c = npc->event_doall("OnAgitStart");
@@ -2122,7 +2258,7 @@ void guild_agit_start(void)
/*====================================================
* End normal woe and triggers all npc OnAgitEnd
*---------------------------------------------------*/
-void guild_agit_end(void)
+static void guild_agit_end(void)
{
// Run All NPC_Event[OnAgitEnd]
int c = npc->event_doall("OnAgitEnd");
@@ -2132,7 +2268,7 @@ void guild_agit_end(void)
/*====================================================
* Start woe2 and triggers all npc OnAgitStart2
*---------------------------------------------------*/
-void guild_agit2_start(void)
+static void guild_agit2_start(void)
{
// Run All NPC_Event[OnAgitStart2]
int c = npc->event_doall("OnAgitStart2");
@@ -2142,7 +2278,7 @@ void guild_agit2_start(void)
/*====================================================
* End woe2 and triggers all npc OnAgitEnd2
*---------------------------------------------------*/
-void guild_agit2_end(void)
+static void guild_agit2_end(void)
{
// Run All NPC_Event[OnAgitEnd2]
int c = npc->event_doall("OnAgitEnd2");
@@ -2150,7 +2286,7 @@ void guild_agit2_end(void)
}
// How many castles does this guild have?
-int guild_checkcastles(struct guild *g)
+static int guild_checkcastles(struct guild *g)
{
int nb_cas = 0;
struct guild_castle* gc = NULL;
@@ -2166,7 +2302,7 @@ int guild_checkcastles(struct guild *g)
}
// Are these two guilds allied?
-bool guild_isallied(int guild_id, int guild_id2)
+static bool guild_isallied(int guild_id, int guild_id2)
{
int i;
struct guild* g = guild->search(guild_id);
@@ -2176,7 +2312,8 @@ bool guild_isallied(int guild_id, int guild_id2)
return( i < MAX_GUILDALLIANCE && g->alliance[i].opposition == 0 );
}
-void guild_flag_add(struct npc_data *nd) {
+static void guild_flag_add(struct npc_data *nd)
+{
int i;
nullpo_retv(nd);
@@ -2194,7 +2331,8 @@ void guild_flag_add(struct npc_data *nd) {
guild->flags[i] = nd;
}
-void guild_flag_remove(struct npc_data *nd) {
+static void guild_flag_remove(struct npc_data *nd)
+{
int i, cursor;
nullpo_retv(nd);
if( guild->flags_count == 0 )
@@ -2223,7 +2361,7 @@ void guild_flag_remove(struct npc_data *nd) {
/**
* @see DBApply
*/
-int eventlist_db_final(union DBKey key, struct DBData *data, va_list ap)
+static int eventlist_db_final(union DBKey key, struct DBData *data, va_list ap)
{
struct eventlist *next = NULL;
struct eventlist *current = DB->data2ptr(data);
@@ -2238,7 +2376,7 @@ int eventlist_db_final(union DBKey key, struct DBData *data, va_list ap)
/**
* @see DBApply
*/
-int guild_expcache_db_final(union DBKey key, struct DBData *data, va_list ap)
+static int guild_expcache_db_final(union DBKey key, struct DBData *data, va_list ap)
{
ers_free(guild->expcache_ers, DB->data2ptr(data));
return 0;
@@ -2247,7 +2385,7 @@ int guild_expcache_db_final(union DBKey key, struct DBData *data, va_list ap)
/**
* @see DBApply
*/
-int guild_castle_db_final(union DBKey key, struct DBData *data, va_list ap)
+static int guild_castle_db_final(union DBKey key, struct DBData *data, va_list ap)
{
struct guild_castle* gc = DB->data2ptr(data);
if( gc->temp_guardians )
@@ -2257,7 +2395,8 @@ int guild_castle_db_final(union DBKey key, struct DBData *data, va_list ap)
}
/* called when scripts are reloaded/unloaded */
-void guild_flags_clear(void) {
+static void guild_flags_clear(void)
+{
int i;
for( i = 0; i < guild->flags_count; i++ ) {
if( guild->flags[i] )
@@ -2267,7 +2406,8 @@ void guild_flags_clear(void) {
guild->flags_count = 0;
}
-void do_init_guild(bool minimal) {
+static void do_init_guild(bool minimal)
+{
if (minimal)
return;
@@ -2277,8 +2417,7 @@ void do_init_guild(bool minimal) {
guild->infoevent_db = idb_alloc(DB_OPT_BASE);
guild->expcache_ers = ers_new(sizeof(struct guild_expcache),"guild.c::expcache_ers",ERS_OPT_NONE);
- sv->readdb(map->db_path, "castle_db.txt", ',', 4, 5, -1, guild->read_castledb);
-
+ guild->read_castledb_libconfig();
sv->readdb(map->db_path, "guild_skill_tree.txt", ',', 2+MAX_GUILD_SKILL_REQUIRE*2, 2+MAX_GUILD_SKILL_REQUIRE*2, -1, guild->read_guildskill_tree_db); //guild skill tree [Komurka]
timer->add_func_list(guild->payexp_timer,"guild_payexp_timer");
@@ -2287,7 +2426,7 @@ void do_init_guild(bool minimal) {
timer->add_interval(timer->gettick()+GUILD_SEND_XY_INVERVAL,guild->send_xy_timer,0,0,GUILD_SEND_XY_INVERVAL);
}
-void do_final_guild(void)
+static void do_final_guild(void)
{
struct DBIterator *iter = db_iterator(guild->db);
struct guild *g;
@@ -2313,7 +2452,9 @@ void do_final_guild(void)
if( guild->flags )
aFree(guild->flags);
}
-void guild_defaults(void) {
+
+void guild_defaults(void)
+{
guild = &guild_s;
guild->init = do_init_guild;
@@ -2384,7 +2525,6 @@ void guild_defaults(void) {
guild->change_emblem = guild_change_emblem;
guild->emblem_changed = guild_emblem_changed;
guild->send_message = guild_send_message;
- guild->recv_message = guild_recv_message;
guild->send_dot_remove = guild_send_dot_remove;
guild->skillupack = guild_skillupack;
guild->dobreak = guild_break;
@@ -2411,7 +2551,9 @@ void guild_defaults(void) {
guild->payexp_timer = guild_payexp_timer;
guild->sd_check = guild_sd_check;
guild->read_guildskill_tree_db = guild_read_guildskill_tree_db;
- guild->read_castledb = guild_read_castledb;
+ guild->read_castledb_libconfig = guild_read_castledb_libconfig;
+ guild->read_castledb_libconfig_sub = guild_read_castledb_libconfig_sub;
+ guild->read_castledb_libconfig_sub_warp = guild_read_castledb_libconfig_sub_warp;
guild->payexp_timer_sub = guild_payexp_timer_sub;
guild->send_xy_timer_sub = guild_send_xy_timer_sub;
guild->send_xy_timer = guild_send_xy_timer;