diff options
Diffstat (limited to 'src/map/guild.c')
-rw-r--r-- | src/map/guild.c | 123 |
1 files changed, 67 insertions, 56 deletions
diff --git a/src/map/guild.c b/src/map/guild.c index f4f0c0528..6e5b1c539 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2015 Hercules Dev Team + * Copyright (C) 2012-2016 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify @@ -178,7 +178,7 @@ struct guild* guild_search(int guild_id) struct guild* guild_searchname(char* str) { struct guild* g; - DBIterator *iter = db_iterator(guild->db); + struct DBIterator *iter = db_iterator(guild->db); nullpo_retr(NULL, str); for( g = dbi_first(iter); dbi_exists(iter); g = dbi_next(iter) ) @@ -201,7 +201,7 @@ struct guild_castle* guild_castle_search(int gcid) struct guild_castle* guild_mapindex2gc(short map_index) { struct guild_castle* gc; - DBIterator *iter = db_iterator(guild->castle_db); + struct DBIterator *iter = db_iterator(guild->castle_db); for( gc = dbi_first(iter); dbi_exists(iter); gc = dbi_next(iter) ) { @@ -230,15 +230,18 @@ struct map_session_data* guild_getavailablesd(struct guild* g) } /// lookup: player AID/CID -> member index -int guild_getindex(struct guild *g,int account_id,int char_id) +int guild_getindex(const struct guild *g, int account_id, int char_id) { int i; if( g == NULL ) - return -1; + return INDEX_NOT_FOUND; ARR_FIND( 0, g->max_member, i, g->member[i].account_id == account_id && g->member[i].char_id == char_id ); - return( i < g->max_member ) ? i : -1; + if (i == g->max_member) + return INDEX_NOT_FOUND; + + return i; } /// lookup: player sd -> member position @@ -265,7 +268,7 @@ 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; @@ -279,16 +282,16 @@ 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(DBKey key, DBData *data, va_list ap) { +int guild_payexp_timer_sub(union DBKey key, struct DBData *data, va_list ap) +{ int i; struct guild_expcache *c; struct guild *g; c = DB->data2ptr(data); - if ( - (g = guild->search(c->guild_id)) == NULL || - (i = guild->getindex(g, c->account_id, c->char_id)) < 0 + if ((g = guild->search(c->guild_id)) == NULL + || (i = guild->getindex(g, c->account_id, c->char_id)) == INDEX_NOT_FOUND ) { ers_free(guild->expcache_ers, c); return 0; @@ -316,7 +319,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(DBKey key, DBData *data, va_list ap) +int guild_send_xy_timer_sub(union DBKey key, struct DBData *data, va_list ap) { struct guild *g = DB->data2ptr(data); int i; @@ -396,8 +399,11 @@ 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; } @@ -410,20 +416,18 @@ int guild_request_info(int guild_id) //Information request with event 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; - DBData prev; - ev=(struct eventlist *)aCalloc(sizeof(struct eventlist),1); - memcpy(ev->name,event,strlen(event)); + struct DBData prev; + 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); @@ -433,7 +437,7 @@ int guild_npc_request_info(int guild_id,const char *event) } //Confirmation of the character belongs to guild -int guild_check_member(struct guild *g) +int guild_check_member(const struct guild *g) { int i; struct map_session_data *sd; @@ -447,7 +451,7 @@ int guild_check_member(struct guild *g) continue; i = guild->getindex(g,sd->status.account_id,sd->status.char_id); - if (i < 0) { + if (i == INDEX_NOT_FOUND) { sd->status.guild_id=0; sd->guild_emblem_id=0; ShowWarning("guild: check_member %d[%s] is not member\n",sd->status.account_id,sd->status.name); @@ -475,10 +479,11 @@ int guild_recv_noinfo(int guild_id) } //Get and display information for all member -int guild_recv_info(struct guild *sg) { +int guild_recv_info(const struct guild *sg) +{ struct guild *g,before; int i,bm,m; - DBData data; + struct DBData data; struct map_session_data *sd; bool guild_new = false; struct channel_data *aChSysSave = NULL; @@ -753,9 +758,9 @@ void guild_member_joined(struct map_session_data *sd) guild->block_skill(sd, 300000); } i = guild->getindex(g, sd->status.account_id, sd->status.char_id); - if (i == -1) + if (i == INDEX_NOT_FOUND) { sd->status.guild_id = 0; - else { + } else { g->member[i].sd = sd; sd->guild = g; @@ -875,7 +880,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, i // find the member and perform expulsion i = guild->getindex(g, account_id, char_id); - if( i != -1 && strcmp(g->member[i].name,g->master) != 0 ) //Can't expel the GL! + if (i != INDEX_NOT_FOUND && strcmp(g->member[i].name,g->master) != 0) //Can't expel the GL! intif->guild_leave(g->guild_id,account_id,char_id,1,mes); return 0; @@ -892,7 +897,7 @@ int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, c return 0; // no such guild (error!) i = guild->getindex(g, account_id, char_id); - if( i == -1 ) + if (i == INDEX_NOT_FOUND) return 0; // not a member (inconsistency!) online_member_sd = guild->getavailablesd(g); @@ -972,11 +977,11 @@ 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); - if(i>=0) + int i = guild->getindex(g,sd->status.account_id,sd->status.char_id); + if (i != INDEX_NOT_FOUND) g->member[i].sd=NULL; else ShowError("guild_send_memberinfoshort: Failed to locate member %d:%d in guild %d!\n", sd->status.account_id, sd->status.char_id, g->guild_id); @@ -991,9 +996,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_) +int guild_recv_memberinfoshort(int guild_id, int account_id, int char_id, int online, int lv, int16 class) { // cleaned up [LuzZza] - int i,alv,c,idx=-1,om=0,oldonline=-1; + int i, alv, c, idx = INDEX_NOT_FOUND, om = 0, oldonline = -1; struct guild *g = guild->search(guild_id); if(g == NULL) @@ -1006,7 +1011,7 @@ 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; idx=i; } alv+=m->lv; @@ -1015,7 +1020,7 @@ int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int onlin om++; } - if(idx == -1 || c == 0) { + if (idx == INDEX_NOT_FOUND || c == 0) { //Treat char_id who doesn't match guild_id (not found as member) struct map_session_data *sd = map->id2sd(account_id); if(sd && sd->status.char_id == char_id) { @@ -1056,14 +1061,15 @@ 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) +int guild_send_message(struct map_session_data *sd, const char *mes) { + int len = (int)strlen(mes); nullpo_ret(sd); - if(sd->status.guild_id==0) + if (sd->status.guild_id == 0) 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); + 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); // 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); @@ -1126,7 +1132,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,struct guild_position *p) +int guild_position_changed(int guild_id, int idx, const struct guild_position *p) { struct guild *g=guild->search(guild_id); int i; @@ -1221,7 +1227,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) } } {// update guardians (mobs) - DBIterator* iter = db_iterator(guild->castle_db); + struct DBIterator *iter = db_iterator(guild->castle_db); struct guild_castle* gc; for( gc = (struct guild_castle*)dbi_first(iter) ; dbi_exists(iter); gc = (struct guild_castle*)dbi_next(iter) ) { @@ -1259,7 +1265,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) /** * @see DBCreateData */ -DBData create_expcache(DBKey key, va_list args) +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*); @@ -1717,7 +1723,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(DBKey key, DBData *data, va_list ap) +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); @@ -1743,7 +1749,7 @@ int guild_broken_sub(DBKey key, DBData *data, va_list ap) * Invoked on Castles when a guild is broken. [Skotlex] * @see DBApply */ -int castle_guild_broken_sub(DBKey key, DBData *data, va_list ap) +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); @@ -1824,7 +1830,7 @@ int guild_gm_change(int guild_id, struct map_session_data *sd) 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, sd->status.name, (int)strlen(sd->status.name)+1); return 1; } @@ -1883,7 +1889,8 @@ int guild_gm_changed(int guild_id, int account_id, int char_id) /*==================================================== * Guild disbanded *---------------------------------------------------*/ -int guild_break(struct map_session_data *sd,char *name) { +int guild_break(struct map_session_data *sd, const char *name) +{ struct guild *g; struct unit_data *ud; int i; @@ -1951,7 +1958,7 @@ void guild_castle_map_init(void) if (num > 0) { struct guild_castle* gc = NULL; int *castle_ids, *cursor; - DBIterator* iter = NULL; + struct DBIterator *iter = NULL; CREATE(castle_ids, int, num); cursor = castle_ids; @@ -2064,7 +2071,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, struct guild_castle *gc) +int guild_castledataloadack(int len, const struct guild_castle *gc) { int i; int n = (len-4) / sizeof(struct guild_castle); @@ -2149,7 +2156,7 @@ int guild_checkcastles(struct guild *g) { int nb_cas = 0; struct guild_castle* gc = NULL; - DBIterator *iter = db_iterator(guild->castle_db); + struct DBIterator *iter = db_iterator(guild->castle_db); for (gc = dbi_first(iter); dbi_exists(iter); gc = dbi_next(iter)) { if (gc->guild_id == g->guild_id) { @@ -2218,7 +2225,8 @@ void guild_flag_remove(struct npc_data *nd) { /** * @see DBApply */ -int eventlist_db_final(DBKey key, DBData *data, va_list ap) { +int eventlist_db_final(union DBKey key, struct DBData *data, va_list ap) +{ struct eventlist *next = NULL; struct eventlist *current = DB->data2ptr(data); while (current != NULL) { @@ -2232,7 +2240,8 @@ int eventlist_db_final(DBKey key, DBData *data, va_list ap) { /** * @see DBApply */ -int guild_expcache_db_final(DBKey key, DBData *data, va_list ap) { +int guild_expcache_db_final(union DBKey key, struct DBData *data, va_list ap) +{ ers_free(guild->expcache_ers, DB->data2ptr(data)); return 0; } @@ -2240,7 +2249,8 @@ int guild_expcache_db_final(DBKey key, DBData *data, va_list ap) { /** * @see DBApply */ -int guild_castle_db_final(DBKey key, DBData *data, va_list ap) { +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 ) aFree(gc->temp_guardians); @@ -2279,8 +2289,9 @@ 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) { - DBIterator *iter = db_iterator(guild->db); +void do_final_guild(void) +{ + struct DBIterator *iter = db_iterator(guild->db); struct guild *g; for( g = dbi_first(iter); dbi_exists(iter); g = dbi_next(iter) ) { |