I tried to put this mod on my eAthena emulator but give error when will compile .. could someone help me?
Diff
Index: conf/msg_conf/map_msg.conf =================================================================== --- conf/msg_conf/map_msg.conf (revision 17251) +++ conf/msg_conf/map_msg.conf (working copy) @@ -1457,5 +1457,10 @@ 1434: You're already in the '%s' channel. 1435: You're now in the '#%s' channel for '%s'. +// ----- @partybuff / @spb ----- // +1450: You're not in a party. +1451: Displaying party member's buffs disabled. +1452: Displaying party member's buffs enabled. + //Custom translations //import: conf/msg_conf/import/map_msg_eng_conf.txt Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 17251) +++ src/map/atcommand.c (working copy) @@ -9100,6 +9100,29 @@ return 0; } +ACMD_FUNC(partybuff) +{ + struct party_data* p = NULL; + nullpo_retr(-1, sd); + + if( !sd->status.party_id ) { + clif_displaymessage(fd, msg_txt(sd,1450)); // You're not in a party. + return -1; + } + + p = party_search(sd->status.party_id); + + if( sd->state.spb ) { + sd->state.spb = 0; + clif_displaymessage(fd, msg_txt(sd,1451)); // Displaying party member's buffs disabled. + } else { + sd->state.spb = 1; + clif_displaymessage(fd, msg_txt(sd,1452)); // Displaying party member's buffs enabled. + } + + clif_party_info(p,sd); + return 0; +} /** * Fills the reference of available commands in atcommand DBMap **/ @@ -9111,6 +9134,8 @@ **/ AtCommandInfo atcommand_base[] = { ACMD_DEF2("warp", mapmove), + ACMD_DEF(partybuff), + ACMD_DEF2("spb", partybuff), ACMD_DEF(where), ACMD_DEF(jumpto), ACMD_DEF(jump), Index: src/map/clif.c =================================================================== --- src/map/clif.c (revision 17251) +++ src/map/clif.c (working copy) @@ -455,6 +455,7 @@ case PARTY_WOS: case PARTY_SAMEMAP: case PARTY_SAMEMAP_WOS: + case PARTY_BUFF_INFO: if (sd && sd->status.party_id) p = party_search(sd->status.party_id); @@ -469,12 +470,15 @@ if( sd->bl.id == bl->id && (type == PARTY_WOS || type == PARTY_SAMEMAP_WOS || type == PARTY_AREA_WOS) ) continue; - if( type != PARTY && type != PARTY_WOS && bl->m != sd->bl.m ) + if( type != PARTY_BUFF_INFO && type != PARTY && type != PARTY_WOS && bl->m != sd->bl.m ) continue; if( (type == PARTY_AREA || type == PARTY_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1) ) continue; + if( type == PARTY_BUFF_INFO && !sd->state.spb ) + continue; + if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ) { // packet must exist for the client version WFIFOHEAD(fd,len); @@ -6557,8 +6561,9 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) { unsigned char buf[2+2+NAME_LENGTH+(4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1)*MAX_PARTY]; - struct map_session_data* party_sd = NULL; + struct map_session_data* party_sd = NULL, *target = NULL; int i, c; + char output[NAME_LENGTH+10]; nullpo_retv(p); @@ -6585,6 +6590,33 @@ } else if (party_sd) { // send to whole party clif_send(buf, WBUFW(buf,2), &party_sd->bl, PARTY); } + + for(i = 0; i < MAX_PARTY; i++) + { + if( (target = p->data[i].sd) ) + { + strcpy(output, "["); + if( target->sc.data[SC_BLESSING] ) strcat(output,"B"); + else strcat(output,"_"); + if( target->sc.data[SC_INCREASEAGI] ) strcat(output,"A"); + else strcat(output,"_"); + if( target->sc.data[SC_CP_WEAPON] && target->sc.data[SC_CP_SHIELD] && + target->sc.data[SC_CP_ARMOR] && target->sc.data[SC_CP_HELM] ) strcat(output,"F"); + else strcat(output,"_"); + if( target->sc.data[SC_SPIRIT] ) strcat(output,"S"); + else strcat(output,"_"); + if( target->sc.data[SC_DEVOTION] ) strcat(output,"+"); + else strcat(output,"_"); + strcat(output, "]"); + strncat(output, p->data[i].sd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,28+i*46+4), output, NAME_LENGTH); + } + } + + if( sd && sd->state.spb ) + clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); + else if( party_sd ) + clif_send(buf, WBUFW(buf,2), &party_sd->bl, PARTY_BUFF_INFO); } Index: src/map/clif.h =================================================================== --- src/map/clif.h (revision 17251) +++ src/map/clif.h (working copy) @@ -65,6 +65,7 @@ PARTY_SAMEMAP_WOS, PARTY_AREA, PARTY_AREA_WOS, + PARTY_BUFF_INFO, GUILD, GUILD_WOS, GUILD_SAMEMAP, Index: src/map/party.c =================================================================== --- src/map/party.c (revision 17251) +++ src/map/party.c (working copy) @@ -563,12 +563,17 @@ memset(&p->data[i], 0, sizeof(p->data[0])); p->party.count--; party_check_state(p); + clif_party_info(p, NULL); } } if( sd && sd->status.party_id == party_id && sd->status.char_id == char_id ) { sd->status.party_id = 0; + if( sd->state.spb ) { + sd->state.spb = 0; + clif_displaymessage(sd->fd, msg_txt(sd,1451)); + } clif_charnameupdate(sd); //Update name display [Skotlex] //TODO: hp bars should be cleared too if( p->instance_id ) Index: src/map/pc.h =================================================================== --- src/map/pc.h (revision 17251) +++ src/map/pc.h (working copy) @@ -164,6 +164,7 @@ struct guild *gmaster_flag; unsigned int prevend : 1;//used to flag wheather you've spent 40sp to open the vending or not. unsigned int warping : 1;//states whether you're in the middle of a warp processing + unsigned int spb : 1; // @spb / @partybuff unsigned int permanent_speed : 1; // When 1, speed cannot be changed through status_calc_pc(). } state; struct { Index: src/map/status.c =================================================================== --- src/map/status.c (revision 17251) +++ src/map/status.c (working copy) @@ -31,6 +31,7 @@ #include "mercenary.h" #include "elemental.h" #include "vending.h" +#include "party.h" #include <time.h> #include <stdio.h> @@ -9113,6 +9114,15 @@ if( opt_flag&2 && sd && sd->touching_id ) npc_touchnext_areanpc(sd,false); // run OnTouch_ on next char in range + if( sd && sd->status.party_id && ( + type == SC_BLESSING || type == SC_INCREASEAGI || type == SC_CP_WEAPON || type == SC_CP_SHIELD || + type == SC_CP_ARMOR || type == SC_CP_HELM || type == SC_SPIRIT || type == SC_DEVOTION ) + ) + { + struct party_data *p = party_search(sd->status.party_id); + clif_party_info(p, NULL); + } + return 1; } @@ -9884,6 +9894,15 @@ if(opt_flag&2 && sd && map_getcell(bl->m,bl->x,bl->y,CELL_CHKNPC)) npc_touch_areanpc(sd,bl->m,bl->x,bl->y); //Trigger on-touch event. + if( sd && sd->status.party_id && ( + type == SC_BLESSING || type == SC_INCREASEAGI || type == SC_CP_WEAPON || type == SC_CP_SHIELD || + type == SC_CP_ARMOR || type == SC_CP_HELM || type == SC_SPIRIT || type == SC_DEVOTION ) + ) + { + struct party_data *p = party_search(sd->status.party_id); + clif_party_info(p, NULL); + } + ers_free(sc_data_ers, sce); return 1; }
[erro console compiler]
clif.c: In function 'clif_bl_type': clif.c:443: warning: comparison is always true due to limited range of data type clif.c:445: warning: comparison is always true due to limited range of data type clif.c: In function 'clif_setdisguise': clif.c:1469: warning: comparison is always true due to limited range of data type clif.c: At top level: clif.c:6670: error: expected identifier or '(' before 'for' clif.c:6670: error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token clif.c:6670: error: expected '=', ',', ';', 'asm' or '__attribute__' before '++' token clif.c:6692: error: expected identifier or '(' before 'if' clif.c:6694: error: expected identifier or '(' before 'else' clif.c:6697: error: expected identifier or '(' before 'return' clif.c:6698: error: expected identifier or '(' before '}' token make[1]: *** [obj_sql/clif.o] Error 1 make[1]: Leaving directory `/home/emulador/src/map' make: *** [map_sql] Error 2 -bash-3.2# -bash-3.2#