summaryrefslogtreecommitdiff
path: root/src/char
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2018-06-24 17:51:14 +0200
committerHaru <haru@dotalux.com>2018-06-30 01:51:09 +0200
commit396d96cedf3b2a6e27daea85ba270f4172a12544 (patch)
treeaeda145430f9eb90df94dbb0e84a406585066f8d /src/char
parentfb1d9e23b926dc893d3e62c708ef0243077ef392 (diff)
downloadhercules-396d96cedf3b2a6e27daea85ba270f4172a12544.tar.gz
hercules-396d96cedf3b2a6e27daea85ba270f4172a12544.tar.bz2
hercules-396d96cedf3b2a6e27daea85ba270f4172a12544.tar.xz
hercules-396d96cedf3b2a6e27daea85ba270f4172a12544.zip
Move some non-mapif functionality from the mapif interface to the inter_guild interface
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'src/char')
-rw-r--r--src/char/char.c4
-rw-r--r--src/char/int_guild.c359
-rw-r--r--src/char/int_guild.h16
-rw-r--r--src/char/mapif.c2
-rw-r--r--src/char/mapif.h1
5 files changed, 245 insertions, 137 deletions
diff --git a/src/char/char.c b/src/char/char.c
index 0e80cf971..2c9c73dd7 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -1887,9 +1887,9 @@ int char_delete_char_sql(int char_id)
if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `guild_id` FROM `%s` WHERE `char_id` = '%d'", guild_db, char_id) )
Sql_ShowDebug(inter->sql_handle);
else if( SQL->NumRows(inter->sql_handle) > 0 )
- mapif->parse_BreakGuild(0,guild_id);
+ inter_guild->disband(guild_id);
else if( guild_id )
- inter_guild->leave(guild_id, account_id, char_id);// Leave your guild.
+ inter_guild->leave(guild_id, account_id, char_id, 0, "** Character Deleted **", -1);// Leave your guild.
return 0;
}
diff --git a/src/char/int_guild.c b/src/char/int_guild.c
index 38c79ec28..1d1369396 100644
--- a/src/char/int_guild.c
+++ b/src/char/int_guild.c
@@ -1160,8 +1160,7 @@ int mapif_guild_castle_dataload(int fd, int sz, const int *castle_ids)
// Packet received from map server
-// Guild creation request
-int mapif_parse_CreateGuild(int fd, int account_id, const char *name, const struct guild_member *master)
+struct guild *inter_guild_create(const char *name, const struct guild_member *master)
{
struct guild *g;
int i=0;
@@ -1172,21 +1171,18 @@ int mapif_parse_CreateGuild(int fd, int account_id, const char *name, const stru
nullpo_ret(master);
if(inter_guild->search_guildname(name) != 0){
ShowInfo("int_guild: guild with same name exists [%s]\n",name);
- mapif->guild_created(fd,account_id,NULL);
- return 0;
+ return NULL;
}
// Check Authorized letters/symbols in the name of the character
if (char_name_option == 1) { // only letters/symbols in char_name_letters are authorized
for (i = 0; i < NAME_LENGTH && name[i]; i++)
if (strchr(char_name_letters, name[i]) == NULL) {
- mapif->guild_created(fd,account_id,NULL);
- return 0;
+ return NULL;
}
} else if (char_name_option == 2) { // letters/symbols in char_name_letters are forbidden
for (i = 0; i < NAME_LENGTH && name[i]; i++)
if (strchr(char_name_letters, name[i]) != NULL) {
- mapif->guild_created(fd,account_id,NULL);
- return 0;
+ return NULL;
}
}
@@ -1222,23 +1218,36 @@ int mapif_parse_CreateGuild(int fd, int account_id, const char *name, const stru
if (!inter_guild->tosql(g,GS_BASIC|GS_POSITION|GS_SKILL|GS_MEMBER)) {
//Failed to Create guild....
ShowError("Failed to create Guild %s (Guild Master: %s)\n", g->name, g->master);
- mapif->guild_created(fd,account_id,NULL);
aFree(g);
- return 0;
+ return NULL;
}
ShowInfo("Created Guild %d - %s (Guild Master: %s)\n", g->guild_id, g->name, g->master);
//Add to cache
idb_put(inter_guild->guild_db, g->guild_id, g);
- // Report to client
- mapif->guild_created(fd,account_id,g);
- mapif->guild_info(fd,g);
-
if (inter->enable_logs)
inter->log("guild %s (id=%d) created by master %s (id=%d)\n",
name, g->guild_id, master->name, master->account_id);
+ return g;
+}
+
+// Guild creation request
+int mapif_parse_CreateGuild(int fd, int account_id, const char *name, const struct guild_member *master)
+{
+ struct guild *g;
+ nullpo_ret(name);
+ nullpo_ret(master);
+
+ g = inter_guild->create(name, master);
+
+ // Report to client
+ mapif->guild_created(fd,account_id,g);
+ if (g != NULL) {
+ mapif->guild_info(fd,g);
+ }
+
return 0;
}
@@ -1256,74 +1265,75 @@ int mapif_parse_GuildInfo(int fd, int guild_id)
return 0;
}
-// Add member to guild
-int mapif_parse_GuildAddMember(int fd, int guild_id, const struct guild_member *m)
+bool inter_guild_add_member(int guild_id, const struct guild_member *member)
{
struct guild * g;
int i;
+ nullpo_ret(member);
- nullpo_ret(m);
g = inter_guild->fromsql(guild_id);
- if(g==NULL){
- mapif->guild_memberadded(fd,guild_id,m->account_id,m->char_id,1); // 1: Failed to add
- return 0;
- }
+ if (g == NULL)
+ return false;
// Find an empty slot
- for(i=0;i<g->max_member;i++)
- {
- if(g->member[i].account_id==0)
- {
- memcpy(&g->member[i],m,sizeof(struct guild_member));
+ for (i = 0; i < g->max_member; i++) {
+ if (g->member[i].account_id == 0) {
+ g->member[i] = *member;
g->member[i].modified = (GS_MEMBER_NEW | GS_MEMBER_MODIFIED);
- mapif->guild_memberadded(fd,guild_id,m->account_id,m->char_id,0); // 0: success
if (!inter_guild->calcinfo(g)) //Send members if it was not invoked.
- mapif->guild_info(-1,g);
+ mapif->guild_info(-1, g);
g->save_flag |= GS_MEMBER;
if (g->save_flag&GS_REMOVE)
g->save_flag&=~GS_REMOVE;
- return 0;
+ return true;
}
}
+ return false;
+}
+
+// Add member to guild
+int mapif_parse_GuildAddMember(int fd, int guild_id, const struct guild_member *m)
+{
+ nullpo_ret(m);
- mapif->guild_memberadded(fd,guild_id,m->account_id,m->char_id,1); // 1: Failed to add
+ if (!inter_guild->add_member(guild_id, m)) {
+ mapif->guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1); // 1: Failed to add
+ } else {
+ mapif->guild_memberadded(fd, guild_id, m->account_id, m->char_id, 0); // 0: success
+ }
return 0;
}
-// Delete member from guild
-int mapif_parse_GuildLeave(int fd, int guild_id, int account_id, int char_id, int flag, const char *mes)
+bool inter_guild_leave(int guild_id, int account_id, int char_id, int flag, const char *mes, int map_fd)
{
int i;
- struct guild* g = inter_guild->fromsql(guild_id);
- if( g == NULL )
- {
+ struct guild *g = inter_guild->fromsql(guild_id);
+ if (g == NULL) {
// Unknown guild, just update the player
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `guild_id`='0' WHERE `account_id`='%d' AND `char_id`='%d'", char_db, account_id, char_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `guild_id`='0' WHERE `account_id`='%d' AND `char_id`='%d'", char_db, account_id, char_id))
Sql_ShowDebug(inter->sql_handle);
// mapif->guild_withdraw(guild_id,account_id,char_id,flag,g->member[i].name,mes);
- return 0;
+ return false;
}
nullpo_ret(mes);
// Find the member
- ARR_FIND( 0, g->max_member, i, g->member[i].account_id == account_id && g->member[i].char_id == char_id );
- if( i == g->max_member )
- {
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == account_id && g->member[i].char_id == char_id);
+ if (i == g->max_member) {
//TODO
- return 0;
+ return false;
}
if (flag) {
// Write expulsion reason
// Find an empty slot
int j;
- ARR_FIND( 0, MAX_GUILDEXPULSION, j, g->expulsion[j].account_id == 0 );
- if( j == MAX_GUILDEXPULSION )
- {
+ ARR_FIND(0, MAX_GUILDEXPULSION, j, g->expulsion[j].account_id == 0);
+ if (j == MAX_GUILDEXPULSION) {
// Expulsion list is full, flush the oldest one
- for( j = 0; j < MAX_GUILDEXPULSION - 1; j++ )
+ for (j = 0; j < MAX_GUILDEXPULSION - 1; j++)
g->expulsion[j] = g->expulsion[j+1];
j = MAX_GUILDEXPULSION-1;
}
@@ -1338,39 +1348,44 @@ int mapif_parse_GuildLeave(int fd, int guild_id, int account_id, int char_id, in
memset(&g->member[i],0,sizeof(struct guild_member));
- if( inter_guild->check_empty(g) )
- mapif->parse_BreakGuild(-1,guild_id); //Break the guild.
- else {
+ if (inter_guild->check_empty(g)) {
+ inter_guild->disband(guild_id);
+ } else {
//Update member info.
if (!inter_guild->calcinfo(g))
- mapif->guild_info(fd,g);
+ mapif->guild_info(map_fd,g);
g->save_flag |= GS_EXPULSION;
}
+ return true;
+}
+
+// Delete member from guild
+int mapif_parse_GuildLeave(int fd, int guild_id, int account_id, int char_id, int flag, const char *mes)
+{
+ inter_guild->leave(guild_id, account_id, char_id, flag, mes, fd);
return 0;
}
-// Change member info
-int mapif_parse_GuildChangeMemberInfoShort(int fd, int guild_id, int account_id, int char_id, int online, int lv, int16 class)
+bool inter_guild_update_member_info_short(int guild_id, int account_id, int char_id, int online, int lv, int16 class)
{
// Could speed up by manipulating only guild_member
- struct guild * g;
+ struct guild *g;
int i,sum,c;
int prev_count, prev_alv;
g = inter_guild->fromsql(guild_id);
- if(g==NULL)
- return 0;
+ if (g == NULL)
+ return false;
- ARR_FIND( 0, g->max_member, i, g->member[i].account_id == account_id && g->member[i].char_id == char_id );
- if( i < g->max_member )
- {
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == account_id && g->member[i].char_id == char_id);
+ if (i < g->max_member) {
g->member[i].online = online;
g->member[i].lv = lv;
g->member[i].class = class;
g->member[i].last_login = (uint32)time(NULL);
g->member[i].modified = GS_MEMBER_MODIFIED;
- mapif->guild_memberinfoshort(g,i);
+ mapif->guild_memberinfoshort(g, i);
}
prev_count = g->connect_member;
@@ -1381,75 +1396,84 @@ int mapif_parse_GuildChangeMemberInfoShort(int fd, int guild_id, int account_id,
c = 0;
sum = 0;
- for( i = 0; i < g->max_member; i++ )
- {
- if( g->member[i].account_id > 0 )
- {
+ for (i = 0; i < g->max_member; i++) {
+ if (g->member[i].account_id > 0) {
sum += g->member[i].lv;
c++;
}
- if( g->member[i].online )
+ if (g->member[i].online)
g->connect_member++;
}
- if( c ) // this check should always succeed...
- {
+ if (c != 0) { // this check should always succeed...
g->average_lv = sum / c;
- if( g->connect_member != prev_count || g->average_lv != prev_alv )
+ if (g->connect_member != prev_count || g->average_lv != prev_alv)
g->save_flag |= GS_CONNECT;
- if( g->save_flag & GS_REMOVE )
+ if (g->save_flag & GS_REMOVE)
g->save_flag &= ~GS_REMOVE;
}
g->save_flag |= GS_MEMBER; //Update guild member data
- return 0;
+ return true;
}
-// BreakGuild
-int mapif_parse_BreakGuild(int fd, int guild_id)
+// Change member info
+int mapif_parse_GuildChangeMemberInfoShort(int fd, int guild_id, int account_id, int char_id, int online, int lv, int16 class)
{
- struct guild * g;
+ inter_guild->update_member_info_short(guild_id, account_id, char_id, online, lv, class);
+ return 0;
+}
- g = inter_guild->fromsql(guild_id);
- if(g==NULL)
- return 0;
+bool inter_guild_disband(int guild_id)
+{
+ struct guild *g = inter_guild->fromsql(guild_id);
+ if (g == NULL)
+ return false;
// Delete guild from sql
//printf("- Delete guild %d from guild\n",guild_id);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_member_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_member_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_castle_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_castle_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_storage_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_storage_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d' OR `alliance_id` = '%d'", guild_alliance_db, guild_id, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d' OR `alliance_id` = '%d'", guild_alliance_db, guild_id, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_position_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_position_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_skill_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_skill_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_expulsion_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '%d'", guild_expulsion_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
//printf("- Update guild %d of char\n",guild_id);
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `guild_id`='0' WHERE `guild_id`='%d'", char_db, guild_id) )
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `guild_id`='0' WHERE `guild_id`='%d'", char_db, guild_id))
Sql_ShowDebug(inter->sql_handle);
- mapif->guild_broken(guild_id,0);
+ mapif->guild_broken(guild_id, 0);
if (inter->enable_logs)
inter->log("guild %s (id=%d) broken\n", g->name, guild_id);
//Remove the guild from memory. [Skotlex]
idb_remove(inter_guild->guild_db, guild_id);
+
+ return true;
+}
+
+// BreakGuild
+int mapif_parse_BreakGuild(int fd, int guild_id)
+{
+ inter_guild->disband(guild_id);
return 0;
}
@@ -1459,21 +1483,18 @@ int mapif_parse_GuildMessage(int fd, int guild_id, int account_id, const char *m
return mapif->guild_message(guild_id,account_id,mes,len, fd);
}
-/**
- * Changes basic guild information
- * The types are available in mmo.h::guild_basic_info
- **/
-int mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const void *data, int len) {
+bool inter_guild_update_basic_info(int guild_id, int type, const void *data, int len)
+{
struct guild *g;
struct guild_skill gd_skill;
short value;
g = inter_guild->fromsql(guild_id);
- if( g == NULL )
- return 0;
+ if (g == NULL)
+ return false;
nullpo_ret(data);
- switch(type) {
+ switch (type) {
case GBI_EXP:
value = *((const int16 *)data);
if( value < 0 && abs(value) > g->exp )
@@ -1509,26 +1530,37 @@ int mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const void
default:
ShowError("int_guild: GuildBasicInfoChange: Unknown type %d, see mmo.h::guild_basic_info for more information\n",type);
- return 0;
+ return false;
}
mapif->guild_info(-1,g);
g->save_flag |= GS_LEVEL;
+
+ return true;
+}
+
+/**
+ * Changes basic guild information
+ * The types are available in mmo.h::guild_basic_info
+ **/
+int mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const void *data, int len)
+{
+ inter_guild->update_basic_info(guild_id, type, data, len);
// Information is already sent in mapif->guild_info
//mapif->guild_basicinfochanged(guild_id,type,data,len);
return 0;
}
// Modification of the guild
-int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len)
+bool inter_guild_update_member_info(int guild_id, int account_id, int char_id, int type, const char *data, int len)
{
// Could make some improvement in speed, because only change guild_member
int i;
- struct guild * g;
+ struct guild *g;
nullpo_ret(data);
g = inter_guild->fromsql(guild_id);
if(g==NULL)
- return 0;
+ return false;
// Search the member
for (i = 0; i < g->max_member; i++) {
@@ -1540,7 +1572,7 @@ int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int
if(i==g->max_member){
ShowWarning("int_guild: GuildMemberChange: Not found %d,%d in guild (%d - %s)\n",
account_id,char_id,guild_id,g->name);
- return 0;
+ return false;
}
switch(type)
@@ -1621,14 +1653,22 @@ int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int
}
default:
ShowError("int_guild: GuildMemberInfoChange: Unknown type %d\n",type);
+ return false;
break;
}
+ return true;
+}
+
+// Modification of the guild
+int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len)
+{
+ inter_guild->update_member_info(guild_id, account_id, char_id, type, data, len);
return 0;
}
int inter_guild_sex_changed(int guild_id, int account_id, int char_id, short gender)
{
- return mapif->parse_GuildMemberInfoChange(0, guild_id, account_id, char_id, GMI_GENDER, (const char*)&gender, sizeof(gender));
+ return inter_guild->update_member_info(guild_id, account_id, char_id, GMI_GENDER, (const char*)&gender, sizeof(gender));
}
int inter_guild_charname_changed(int guild_id, int account_id, int char_id, char *name)
@@ -1669,35 +1709,42 @@ int inter_guild_charname_changed(int guild_id, int account_id, int char_id, char
}
// Change a position desc
-int mapif_parse_GuildPosition(int fd, int guild_id, int idx, const struct guild_position *p)
+bool inter_guild_update_position(int guild_id, int idx, const struct guild_position *p)
{
// Could make some improvement in speed, because only change guild_position
- struct guild * g;
+ struct guild *g;
nullpo_ret(p);
g = inter_guild->fromsql(guild_id);
if(g==NULL || idx<0 || idx>=MAX_GUILDPOSITION)
- return 0;
+ return false;
memcpy(&g->position[idx],p,sizeof(struct guild_position));
mapif->guild_position(g,idx);
g->position[idx].modified = GS_POSITION_MODIFIED;
g->save_flag |= GS_POSITION; // Change guild_position
+ return true;
+}
+
+// Change a position desc
+int mapif_parse_GuildPosition(int fd, int guild_id, int idx, const struct guild_position *p)
+{
+ nullpo_ret(p);
+ inter_guild->update_position(guild_id, idx, p);
return 0;
}
// Guild Skill UP
-int mapif_parse_GuildSkillUp(int fd, int guild_id, uint16 skill_id, int account_id, int max)
+bool inter_guild_use_skill_point(int guild_id, uint16 skill_id, int account_id, int max)
{
struct guild * g;
int idx = skill_id - GD_SKILLBASE;
g = inter_guild->fromsql(guild_id);
if(g == NULL || idx < 0 || idx >= MAX_GUILDSKILL)
- return 0;
+ return false;
- if(g->skill_point>0 && g->skill[idx].id>0 && g->skill[idx].lv<max )
- {
+ if (g->skill_point > 0 && g->skill[idx].id > 0 && g->skill[idx].lv < max) {
g->skill[idx].lv++;
g->skill_point--;
if (!inter_guild->calcinfo(g))
@@ -1705,11 +1752,18 @@ int mapif_parse_GuildSkillUp(int fd, int guild_id, uint16 skill_id, int account_
mapif->guild_skillupack(guild_id,skill_id,account_id);
g->save_flag |= (GS_LEVEL|GS_SKILL); // Change guild & guild_skill
}
+ return true;
+}
+
+// Guild Skill UP
+int mapif_parse_GuildSkillUp(int fd, int guild_id, uint16 skill_id, int account_id, int max)
+{
+ inter_guild->use_skill_point(guild_id, skill_id, account_id, max);
return 0;
}
//Manual deletion of an alliance when partnering guild does not exists. [Skotlex]
-int mapif_parse_GuildDeleteAlliance(struct guild *g, int guild_id, int account_id1, int account_id2, int flag)
+bool inter_guild_remove_alliance(struct guild *g, int guild_id, int account_id1, int account_id2, int flag)
{
int i;
char name[NAME_LENGTH];
@@ -1717,18 +1771,18 @@ int mapif_parse_GuildDeleteAlliance(struct guild *g, int guild_id, int account_i
nullpo_retr(-1, g);
ARR_FIND( 0, MAX_GUILDALLIANCE, i, g->alliance[i].guild_id == guild_id );
if( i == MAX_GUILDALLIANCE )
- return -1;
+ return false;
strcpy(name, g->alliance[i].name);
g->alliance[i].guild_id=0;
mapif->guild_alliance(g->guild_id,guild_id,account_id1,account_id2,flag,g->name,name);
g->save_flag |= GS_ALLIANCE;
- return 0;
+ return true;
}
// Alliance modification
-int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_id1, int account_id2, int flag)
+bool inter_guild_change_alliance(int guild_id1, int guild_id2, int account_id1, int account_id2, int flag)
{
// Could speed up
struct guild *g[2] = { NULL };
@@ -1737,10 +1791,10 @@ int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_
g[1] = inter_guild->fromsql(guild_id2);
if(g[0] && g[1]==NULL && (flag & GUILD_ALLIANCE_REMOVE)) //Requested to remove an alliance with a not found guild.
- return mapif->parse_GuildDeleteAlliance(g[0], guild_id2, account_id1, account_id2, flag); //Try to do a manual removal of said guild.
+ return inter_guild->remove_alliance(g[0], guild_id2, account_id1, account_id2, flag); //Try to do a manual removal of said guild.
if(g[0]==NULL || g[1]==NULL)
- return 0;
+ return false;
if( flag&GUILD_ALLIANCE_REMOVE ) {
// Remove alliance/opposition, in case of alliance, remove on both side
@@ -1769,11 +1823,18 @@ int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_
// Mark the two guild to be saved
g[0]->save_flag |= GS_ALLIANCE;
g[1]->save_flag |= GS_ALLIANCE;
+ return true;
+}
+
+// Alliance modification
+int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_id1, int account_id2, int flag)
+{
+ inter_guild->change_alliance(guild_id1, guild_id2, account_id1, account_id2, flag);
return 0;
}
// Change guild message
-int mapif_parse_GuildNotice(int fd, int guild_id, const char *mes1, const char *mes2)
+bool inter_guild_update_notice(int guild_id, const char *mes1, const char *mes2)
{
struct guild *g;
@@ -1781,22 +1842,30 @@ int mapif_parse_GuildNotice(int fd, int guild_id, const char *mes1, const char *
nullpo_ret(mes2);
g = inter_guild->fromsql(guild_id);
if(g==NULL)
- return 0;
+ return false;
memcpy(g->mes1,mes1,MAX_GUILDMES1);
memcpy(g->mes2,mes2,MAX_GUILDMES2);
g->save_flag |= GS_MES; //Change mes of guild
- return mapif->guild_notice(g);
+ mapif->guild_notice(g);
+ return true;
}
-int mapif_parse_GuildEmblem(int fd, int len, int guild_id, int dummy, const char *data)
+// Change guild message
+int mapif_parse_GuildNotice(int fd, int guild_id, const char *mes1, const char *mes2)
+{
+ inter_guild->update_notice(guild_id, mes1, mes2);
+ return 0;
+}
+
+bool inter_guild_update_emblem(int len, int guild_id, const char *data)
{
struct guild * g;
nullpo_ret(data);
g = inter_guild->fromsql(guild_id);
if(g==NULL)
- return 0;
+ return false;
if (len > sizeof(g->emblem_data))
len = sizeof(g->emblem_data);
@@ -1805,7 +1874,14 @@ int mapif_parse_GuildEmblem(int fd, int len, int guild_id, int dummy, const char
g->emblem_len=len;
g->emblem_id++;
g->save_flag |= GS_EMBLEM; //Change guild
- return mapif->guild_emblem(g);
+ mapif->guild_emblem(g);
+ return true;
+}
+
+int mapif_parse_GuildEmblem(int fd, int len, int guild_id, int dummy, const char *data)
+{
+ inter_guild->update_emblem(len, guild_id, data);
+ return 0;
}
int mapif_parse_GuildCastleDataLoad(int fd, int len, const int *castle_ids)
@@ -1813,13 +1889,13 @@ int mapif_parse_GuildCastleDataLoad(int fd, int len, const int *castle_ids)
return mapif->guild_castle_dataload(fd, len, castle_ids);
}
-int mapif_parse_GuildCastleDataSave(int fd, int castle_id, int index, int value)
+bool inter_guild_update_castle_data(int castle_id, int index, int value)
{
struct guild_castle *gc = inter_guild->castle_fromsql(castle_id);
if (gc == NULL) {
- ShowError("mapif->parse_GuildCastleDataSave: castle id=%d not found\n", castle_id);
- return 0;
+ ShowError("inter_guild->update_castle_data: castle id=%d not found\n", castle_id);
+ return false;
}
switch (index) {
@@ -1845,14 +1921,20 @@ int mapif_parse_GuildCastleDataSave(int fd, int castle_id, int index, int value)
gc->guardian[index-10].visible = value;
break;
}
- ShowError("mapif->parse_GuildCastleDataSave: not found index=%d\n", index);
- return 0;
+ ShowError("inter_guild->update_castle_data: not found index=%d\n", index);
+ return false;
}
inter_guild->castle_tosql(gc);
+ return true;
+}
+
+int mapif_parse_GuildCastleDataSave(int fd, int castle_id, int index, int value)
+{
+ inter_guild->update_castle_data(castle_id, index, value);
return 0;
}
-int mapif_parse_GuildMasterChange(int fd, int guild_id, const char* name, int len)
+bool inter_guild_change_leader(int guild_id, const char *name, int len)
{
struct guild * g;
struct guild_member gm;
@@ -1887,7 +1969,14 @@ int mapif_parse_GuildMasterChange(int fd, int guild_id, const char* name, int le
ShowInfo("int_guild: Guildmaster Changed to %s (Guild %d - %s)\n",g->master, guild_id, g->name);
g->save_flag |= (GS_BASIC|GS_MEMBER); //Save main data and member data.
- return mapif->guild_master_changed(g, g->member[0].account_id, g->member[0].char_id);
+ mapif->guild_master_changed(g, g->member[0].account_id, g->member[0].char_id);
+ return true;
+}
+
+int mapif_parse_GuildMasterChange(int fd, int guild_id, const char* name, int len)
+{
+ inter_guild->change_leader(guild_id, name, len);
+ return 0;
}
// Communication from the map server
@@ -1926,12 +2015,6 @@ int inter_guild_parse_frommap(int fd)
return 1;
}
-//Leave request from the server (for deleting character from guild)
-int inter_guild_leave(int guild_id, int account_id, int char_id)
-{
- return mapif->parse_GuildLeave(-1, guild_id, account_id, char_id, 0, "** Character Deleted **");
-}
-
int inter_guild_broken(int guild_id)
{
return mapif->guild_broken(guild_id, 0);
@@ -1965,6 +2048,20 @@ void inter_guild_defaults(void)
inter_guild->sex_changed = inter_guild_sex_changed;
inter_guild->charname_changed = inter_guild_charname_changed;
inter_guild->parse_frommap = inter_guild_parse_frommap;
- inter_guild->leave = inter_guild_leave;
inter_guild->broken = inter_guild_broken;
+ inter_guild->create = inter_guild_create;
+ inter_guild->add_member = inter_guild_add_member;
+ inter_guild->leave = inter_guild_leave;
+ inter_guild->update_member_info_short = inter_guild_update_member_info_short;
+ inter_guild->update_member_info = inter_guild_update_member_info;
+ inter_guild->disband = inter_guild_disband;
+ inter_guild->update_basic_info = inter_guild_update_basic_info;
+ inter_guild->update_position = inter_guild_update_position;
+ inter_guild->use_skill_point = inter_guild_use_skill_point;
+ inter_guild->remove_alliance = inter_guild_remove_alliance;
+ inter_guild->change_alliance = inter_guild_change_alliance;
+ inter_guild->update_notice = inter_guild_update_notice;
+ inter_guild->update_emblem = inter_guild_update_emblem;
+ inter_guild->update_castle_data = inter_guild_update_castle_data;
+ inter_guild->change_leader = inter_guild_change_leader;
}
diff --git a/src/char/int_guild.h b/src/char/int_guild.h
index 6fefba598..2af8f6801 100644
--- a/src/char/int_guild.h
+++ b/src/char/int_guild.h
@@ -68,8 +68,22 @@ struct inter_guild_interface {
int (*sex_changed) (int guild_id, int account_id, int char_id, short gender);
int (*charname_changed) (int guild_id, int account_id, int char_id, char *name);
int (*parse_frommap) (int fd);
- int (*leave) (int guild_id, int account_id, int char_id);
int (*broken) (int guild_id);
+ struct guild *(*create) (const char *name, const struct guild_member *master);
+ bool (*add_member) (int guild_id, const struct guild_member *member);
+ bool (*leave) (int guild_id, int account_id, int char_id, int flag, const char *mes, int map_fd);
+ bool (*update_member_info_short) (int guild_id, int account_id, int char_id, int online, int lv, int16 class);
+ bool (*update_member_info) (int guild_id, int account_id, int char_id, int type, const char *data, int len);
+ bool (*disband) (int guild_id);
+ bool (*update_basic_info) (int guild_id, int type, const void *data, int len);
+ bool (*update_position) (int guild_id, int idx, const struct guild_position *p);
+ bool (*use_skill_point) (int guild_id, uint16 skill_id, int account_id, int max);
+ bool (*remove_alliance) (struct guild *g, int guild_id, int account_id1, int account_id2, int flag);
+ bool (*change_alliance) (int guild_id1, int guild_id2, int account_id1, int account_id2, int flag);
+ bool (*update_notice) (int guild_id, const char *mes1, const char *mes2);
+ bool (*update_emblem) (int len, int guild_id, const char *data);
+ bool (*update_castle_data) (int castle_id, int index, int value);
+ bool (*change_leader) (int guild_id, const char *name, int len);
};
#ifdef HERCULES_CORE
diff --git a/src/char/mapif.c b/src/char/mapif.c
index 442f60709..8ecb0d027 100644
--- a/src/char/mapif.c
+++ b/src/char/mapif.c
@@ -504,7 +504,6 @@ int mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const void
int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len);
int mapif_parse_GuildPosition(int fd, int guild_id, int idx, const struct guild_position *p);
int mapif_parse_GuildSkillUp(int fd, int guild_id, uint16 skill_id, int account_id, int max);
-int mapif_parse_GuildDeleteAlliance(struct guild *g, int guild_id, int account_id1, int account_id2, int flag);
int mapif_parse_GuildAlliance(int fd, int guild_id1, int guild_id2, int account_id1, int account_id2, int flag);
int mapif_parse_GuildNotice(int fd, int guild_id, const char *mes1, const char *mes2);
int mapif_parse_GuildEmblem(int fd, int len, int guild_id, int dummy, const char *data);
@@ -718,7 +717,6 @@ void mapif_defaults(void) {
mapif->parse_GuildMemberInfoChange = mapif_parse_GuildMemberInfoChange;
mapif->parse_GuildPosition = mapif_parse_GuildPosition;
mapif->parse_GuildSkillUp = mapif_parse_GuildSkillUp;
- mapif->parse_GuildDeleteAlliance = mapif_parse_GuildDeleteAlliance;
mapif->parse_GuildAlliance = mapif_parse_GuildAlliance;
mapif->parse_GuildNotice = mapif_parse_GuildNotice;
mapif->parse_GuildEmblem = mapif_parse_GuildEmblem;
diff --git a/src/char/mapif.h b/src/char/mapif.h
index b27bd8092..4f32d8a62 100644
--- a/src/char/mapif.h
+++ b/src/char/mapif.h
@@ -86,7 +86,6 @@ struct mapif_interface {
int (*parse_GuildMemberInfoChange) (int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len);
int (*parse_GuildPosition) (int fd, int guild_id, int idx, const struct guild_position *p);
int (*parse_GuildSkillUp) (int fd, int guild_id, uint16 skill_id, int account_id, int max);
- int (*parse_GuildDeleteAlliance) (struct guild *g, int guild_id, int account_id1, int account_id2, int flag);
int (*parse_GuildAlliance) (int fd, int guild_id1, int guild_id2, int account_id1, int account_id2, int flag);
int (*parse_GuildNotice) (int fd, int guild_id, const char *mes1, const char *mes2);
int (*parse_GuildEmblem) (int fd, int len, int guild_id, int dummy, const char *data);