Jump to content

brunosc

Members
  • Content Count

    33
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by brunosc


  1. 23 hours ago, BuLaLaKaW said:

    awesome! use the updated version

    use dastgirp plugin the best

     

    https://github.com/dastgirp/HPM-Plugins/blob/master/src/plugins/auraset.c


  2. On 6/12/2020 at 7:10 AM, adobo said:

    Hi! Good Day!

    I got an error while compiling my server. 

    In file included from vendor.c:21:0: vendor.c: In function ‘plugin_init’: ../plugins/HPMHooking.h:53:11: error: ‘HPMHOOK_pre_unit_walktoxy_timer’ undeclared (first use in this function) (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:68:2: note: in expansion of macro ‘addHookPre’ addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre ); ^ ../plugins/HPMHooking.h:53:11: note: each undeclared identifier is reported only once for each function it appears in (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:68:2: note: in expansion of macro ‘addHookPre’ addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre ); ^ ../plugins/HPMHooking.h:53:51: error: expected ‘)’ before numeric constant (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:68:2: note: in expansion of macro ‘addHookPre’ addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre ); ^ ../plugins/HPMHooking.h:53:63: warning: left-hand operand of comma expression has no effect [-Wunused-value] (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:68:2: note: in expansion of macro ‘addHookPre’ addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre ); ^ ../plugins/HPMHooking.h:63:11: error: ‘HPMHOOK_post_unit_walktoxy_timer’ undeclared (first use in this function) (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:69:2: note: in expansion of macro ‘addHookPost’ addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post ); ^ ../plugins/HPMHooking.h:63:52: error: expected ‘)’ before numeric constant (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:69:2: note: in expansion of macro ‘addHookPost’ addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post ); ^ ../plugins/HPMHooking.h:63:64: warning: left-hand operand of comma expression has no effect [-Wunused-value] (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \ ^ vendor.c:69:2: note: in expansion of macro ‘addHookPost’ addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post ); ^

    
    In file included from vendor.c:21:0:
    vendor.c: In function ‘plugin_init’:
    ../plugins/HPMHooking.h:53:11: error: ‘HPMHOOK_pre_unit_walktoxy_timer’ undeclared (first use in this function)
       (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \
               ^
    vendor.c:68:2: note: in expansion of macro ‘addHookPre’
      addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre );
      ^
    ../plugins/HPMHooking.h:53:11: note: each undeclared identifier is reported only once for each function it appears in
       (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \
               ^
    vendor.c:68:2: note: in expansion of macro ‘addHookPre’
      addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre );
      ^
    ../plugins/HPMHooking.h:53:51: error: expected ‘)’ before numeric constant
       (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \
                                                       ^
    vendor.c:68:2: note: in expansion of macro ‘addHookPre’
      addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre );
      ^
    ../plugins/HPMHooking.h:53:63: warning: left-hand operand of comma expression has no effect [-Wunused-value]
       (void)((HPMHOOK_pre_ ## ifname ## _ ## funcname)0 == (hook)), \
                                                                   ^
    vendor.c:68:2: note: in expansion of macro ‘addHookPre’
      addHookPre(unit, walktoxy_timer, unit_walktoxy_timer_pre );
      ^
    ../plugins/HPMHooking.h:63:11: error: ‘HPMHOOK_post_unit_walktoxy_timer’ undeclared (first use in this function)
       (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \
               ^
    vendor.c:69:2: note: in expansion of macro ‘addHookPost’
      addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post );
      ^
    ../plugins/HPMHooking.h:63:52: error: expected ‘)’ before numeric constant
       (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \
                                                        ^
    vendor.c:69:2: note: in expansion of macro ‘addHookPost’
      addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post );
      ^
    ../plugins/HPMHooking.h:63:64: warning: left-hand operand of comma expression has no effect [-Wunused-value]
       (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \
                                                                    ^
    vendor.c:69:2: note: in expansion of macro ‘addHookPost’
      addHookPost(unit, walktoxy_timer, unit_walktoxy_timer_post );
      ^

     

     

    please help.

    same problem here, but i fixed.

    change walktoxy_timer

    to walk_toxy_timer in all file .c

     


  3. On 3/1/2021 at 9:12 PM, Caspian said:

    I think that's why it isn't working. The dev's team keep changing the code all the time and then the plugins become outdated.

    I use an old revison of hercules, so that's why I am able to use all the plugins I want.

    im try to update it but not ok.


  4. im using AnnieRuru plugin . version 0.4 Link -> https://upaste.me/75d049918e2088402

    //===== Hercules Plugin ======================================
    //= @showbuff
    //===== By: ==================================================
    //= AnnieRuru
    //===== Current Version: =====================================
    //= 0.4
    //===== Compatible With: ===================================== 
    //= Hercules 2018-06-05
    //===== Description: =========================================
    //= @showbuff on the party screen Alt + Z
    //===== Topic ================================================
    //= http://herc.ws/board/topic/11349-partybuff-spb/
    //===== Additional Comments: =================================  
    //=	testing ...
    //=	join party -> OK -> clif_party_member_info_overload
    //=	somebody leave party -> OK -> clif_party_withdraw_overload
    //=	disband party -> not yet ... I guess no need test this one
    //=	party member log in -> OK
    //=	party member log out -> OK
    //=	expel party -> BUG -> no choice but have to prevent them from doing so
    //=	you leave party -> party_leave_pre
    //============================================================
    
    #include "common/hercules.h"
    #include "map/pc.h"
    #include "map/clif.h"
    #include "map/party.h"
    #include "common/nullpo.h"
    #include "common/socket.h"
    #include "common/memmgr.h"
    #include "plugins/HPMHooking.h"
    #include "common/HPMDataCheck.h"
    
    HPExport struct hplugin_info pinfo = {
    	"showbuff",
    	SERVER_TYPE_MAP,
    	"0.4",
    	HPM_VERSION,
    };
    
    struct player_data {
    	int buff;
    	bool showbuff;
    };
    
    int status_change_start_post( int retVal, struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag) {
    	if ( bl->type == BL_PC && retVal > 0 ) {
    		struct map_session_data *sd = BL_CAST( BL_PC, bl );
    		struct party_data *p;
    		if ( p = party->search(sd->status.party_id )) {
    			struct player_data *ssd = getFromMSD( sd, 0 );
    			int before_buff = ssd->buff;
    			if ( type == SC_BLESSING )
    				ssd->buff |= 0x1;
    			if ( type == SC_INC_AGI )
    				ssd->buff |= 0x2;
    			if ( type == SC_PROTECTWEAPON || type == SC_PROTECTSHIELD || type == SC_PROTECTARMOR || type == SC_PROTECTHELM )
    				if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )
    					ssd->buff |= 0x4;
    			if ( type == SC_SOULLINK )
    				ssd->buff |= 0x8;
    			if ( type == SC_DEVOTION )
    				ssd->buff |= 0x10;
    			if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status
    				clif->party_info( p, NULL );
    		}
    	}
    	return retVal;
    }
    
    int status_change_end_post( int retVal, struct block_list *bl, enum sc_type type, int tid, const char *file, int line ) {
    	if ( bl->type == BL_PC && retVal > 0 ) {
    		struct map_session_data *sd = BL_CAST( BL_PC, bl );
    		struct party_data *p;
    		if ( sd->state.active == 1 ) { // fix map-server crash when player logout
    			if (( p = party->search(sd->status.party_id ))) {
    				struct player_data *ssd = getFromMSD( sd, 0 );
    				int before_buff = ssd->buff;
    				if ( type == SC_BLESSING )
    					ssd->buff &= ~0x1;
    				if ( type == SC_INC_AGI )
    					ssd->buff &= ~0x2;
    				if ( type == SC_PROTECTWEAPON || type == SC_PROTECTSHIELD || type == SC_PROTECTARMOR || type == SC_PROTECTHELM )
    					if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )
    						ssd->buff &= ~0x4;
    				if ( type == SC_SOULLINK )
    					ssd->buff &= ~0x8;
    				if ( type == SC_DEVOTION )
    					ssd->buff &= ~0x10;
    				if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status
    					clif->party_info( p, NULL );
    			}
    		}
    	}
    	return retVal;
    }
    
    char *showing_buff( struct map_session_data *sd ) {
    	struct player_data *ssd = getFromMSD( sd, 0 );
    	char *temp = "\0";
    	safesnprintf( temp, NAME_LENGTH, "[%s%s%s%s%s]%s",
    		( ssd->buff & 0x1 )? "B" : "_",
    		( ssd->buff & 0x2 )? "A" : "_",
    		( ssd->buff & 0x4 )? "F" : "_",
    		( ssd->buff & 0x8 )? "S" : "_",
    		( ssd->buff & 0x10 )? "+" : "_",
    		sd->status.name );
    	return temp;
    }
    
    void clif_party_info_overload( struct party_data *p, struct map_session_data *sd ) {
    	struct PACKET_ZC_GROUP_LIST *packet;
    	int i, c;
    	unsigned char buf[sizeof(*packet) + sizeof(struct PACKET_ZC_GROUP_LIST_SUB) * MAX_PARTY];
    	nullpo_retv(p);
    
    	memset( buf, 0, sizeof(buf) );
    	packet = (struct PACKET_ZC_GROUP_LIST *)buf;
    	packet->packetType = partyinfo;
    	memcpy( packet->partyName, p->party.name, NAME_LENGTH );
    	for ( i = 0, c = 0; i < MAX_PARTY; ++i ) {
    		struct party_member *m = &p->party.member[i];
    		if ( !m->account_id )
    			continue;
    		packet->members[c].AID = m->account_id;
    #if PACKETVER >= 20171207
    		packet->members[c].GID = m->char_id;
    #endif
    		memcpy( packet->members[c].playerName, m->name, NAME_LENGTH );
    		mapindex->getmapname_ext(mapindex_id2name(m->map), packet->members[c].mapName);
    		packet->members[c].leader = (m->leader) ? 0 : 1;
    		packet->members[c].offline = (m->online) ? 0 : 1;
    #if PACKETVER >= 20170502
    		packet->members[c].class = m->class;
    		packet->members[c].baseLevel = m->lv;
    #endif
    		++c;
    	}
    	packet->packetLen = sizeof(*packet) + c * sizeof( struct PACKET_ZC_GROUP_LIST_SUB );
    	if ( sd ) {
    		struct player_data *ssd = getFromMSD( sd, 0 );
    		if ( ssd && ssd->showbuff ) {
    			for ( i = 0, c = 0; i < MAX_PARTY; ++i ) {
    				struct party_member *m = &p->party.member[i];
    				if ( !m->account_id )
    					continue;
    				if ( m->online && p->data[i].sd != NULL )
    					memcpy( packet->members[c].playerName, showing_buff( p->data[i].sd ), NAME_LENGTH );
    				++c;
    			}
    		}
    		clif->send( buf, packet->packetLen, &sd->bl, SELF );
    	}
    	else {
    		int j;
    		for ( j = 0; j < MAX_PARTY; ++j ) {
    			struct party_member *m1 = &p->party.member[j];
    			if ( !m1 || !m1->account_id )
    				continue;
    			else {
    				struct map_session_data *tsd = map->id2sd( m1->account_id );
    				struct player_data *ssd = NULL;
    				if ( !tsd )
    					continue;
    				ssd = getFromMSD( tsd, 0 );
    				if ( ssd && ssd->showbuff ) {
    					for ( i = 0, c = 0; i < MAX_PARTY; ++i ) {
    						struct party_member *m = &p->party.member[i];
    						if ( !m->account_id )
    							continue;
    						if ( m->online && p->data[i].sd != NULL ) {
    							memcpy( packet->members[c].playerName, showing_buff( p->data[i].sd ), NAME_LENGTH );
    						}
    						++c;
    					}
    				}
    				else {
    					for ( i = 0, c = 0; i < MAX_PARTY; ++i ) {
    						struct party_member *m = &p->party.member[i];
    						if ( !m->account_id )
    							continue;
    						memcpy( packet->members[c].playerName, m->name, NAME_LENGTH );
    						++c;
    					}
    				}
    				clif->send( buf, packet->packetLen, map->id2bl( m1->account_id ), SELF );
    			}
    		}
    	}
    }
    
    bool pc_authok_pre( struct map_session_data **sd, int *login_id2, time_t *expiration_time, int *group_id, const struct mmo_charstatus **st, bool *changing_mapservers ) {
    	struct player_data *ssd;
    	CREATE( ssd, struct player_data, true );
    	ssd->buff = 0;
    	ssd->showbuff = 0;
    	addToMSD( *sd, ssd, 0, true );
    	return 0;
    }
    
    void clif_party_member_info_overload( struct party_data *p, struct map_session_data *sd ) {
    	return;
    }
    
    void clif_party_withdraw_overload( struct party_data *p, struct map_session_data *sd, int account_id, const char *name, int flag ) {
    	unsigned char buf[64];
    	nullpo_retv(p);
    	nullpo_retv(name);
    	if ( !sd && !(flag & 0xf0) ) {
    		int i;
    		ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd != NULL );
    		if ( i != MAX_PARTY )
    			sd = p->data[i].sd;
    	}
    	if ( !sd )
    		return;
    	WBUFW(buf,0) = 0x105;
    	WBUFL(buf,2) = account_id;
    	memcpy( WBUFP(buf,6), name, NAME_LENGTH );
    	WBUFB(buf,30) = flag & 0x0f;
    	if ( !(flag & 0xf0) ) {
    		for ( int i = 0; i < MAX_PARTY; ++i ) {
    			struct party_member *m = &p->party.member[i];
    			if ( !m || !m->account_id )
    				continue;
    			else {
    				struct map_session_data *tsd = map->id2sd( m->account_id );
    				struct player_data *ssd = NULL;
    				if ( !tsd )
    					continue;
    				ssd = getFromMSD( tsd, 0 );
    				if ( ssd && ssd->showbuff )
    					memcpy( WBUFP(buf,6), showing_buff( sd ), NAME_LENGTH );
    				else
    					memcpy( WBUFP(buf,6), name, NAME_LENGTH );
    				clif->send( buf, 31, map->id2bl( m->account_id ), SELF );
    			}
    		}
    	}
    	else
    		clif->send( buf, 31, &sd->bl, SELF );
    }
    
    int party_removemember_pre( struct map_session_data **sd, int *account_id, const char **name ) {
    	struct player_data *ssd = getFromMSD( *sd, 0 );
    	if ( ssd->showbuff ) {		
    		clif->message( (*sd)->fd, "You cannot expel a party member while @showbuff is turn ON." );
    		hookStop();
    	}
    	return 0;
    }
    
    int party_leave_pre( struct map_session_data **sd ) {
    	struct party_data *p;
    	int i;
    	nullpo_ret(*sd);
    	p = party->search( (*sd)->status.party_id );
    	if ( p == NULL )
    		return 0;
    	ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == (*sd)->status.account_id && p->party.member[i].char_id == (*sd)->status.char_id );
    	if ( i == MAX_PARTY )
    		return 0;
    	else {
    		struct player_data *ssd = getFromMSD( *sd, 0 );
    		if ( ssd->showbuff )
    			ssd->showbuff = 0;
    	}
    	return 0;
    }
    
    ACMD(showbuff) {
    	struct player_data *ssd = getFromMSD( sd, 0 );
    	struct party_data *p = party->search( sd->status.party_id );
    	if ( !p ) {
    		clif->message( sd->fd, "You don't have a Party." );
    		return false;
    	}
    	else if ( ssd->showbuff ) {
    		ssd->showbuff = 0;
    		clif->message( sd->fd, "@showbuff is now turn OFF." );
    	}
    	else {
    		ssd->showbuff = 1;
    		clif->message( sd->fd, "@showbuff is now turn ON." );
    	}
    	clif->party_info( p, sd );
    	return true;
    }
    
    HPExport void plugin_init (void) {
    	addHookPost( status, change_start, status_change_start_post );
    	addHookPost( status, change_end_, status_change_end_post );
    	clif->party_info = &clif_party_info_overload;
    	addHookPre( pc, authok, pc_authok_pre );
    	clif->party_member_info = &clif_party_member_info_overload;
    	clif->party_withdraw = &clif_party_withdraw_overload;
    	addHookPre( party, removemember, party_removemember_pre );
    	addHookPre( party, leave, party_leave_pre );
    	addAtcommand( "showbuff", showbuff );
    }

    and i fix some problem reading topic. in line 70 change it

    int status_change_end_post(int retVal, struct block_list* bl, enum sc_type type, int tid, const char* file, int line) {

    for

    int status_change_end_post(int retVal, struct block_list* bl, enum sc_type type, int tid)//, const char* file, int line) {
    {

    and in line 50

    change it

      if ( p = party->search(sd->status.party_id )) {

    for it

    struct party_data* p = party->search(sd->status.party_id);
    		if (p) {

    i dont have some errors  when compile but got game crash.

     

    image.thumb.png.e1c1a00e262b1d8b8f81cf7345212c7c.png

     

    today im searching about it i found this :

    //===== Hercules Plugin ======================================
    //= Show Party Buffs
    //===== By: ==================================================
    //= Samuel [Hercules]
    //===== Current Version: =====================================
    //= 1.0
    //===== Compatible With: ===================================== 
    //= Hercules/RagEmu
    //===== Description: =========================================
    //= With this plugin, it will show certain buffs that are
    //= present with you and your party members in the party
    //= window.
    //= B - Blessing
    //= A - Agility Up
    //= F - Full Chemical Protection
    //= S - Soul Link
    //= + - Devotion
    //===== Credits: =============================================
    //= AnnieRuru - originally made the plugin
    //= Functor - bug fix
    //============================================================
    
    #include "common/hercules.h"
    #include "common/nullpo.h"
    #include "common/socket.h"
    #include "common/memmgr.h"
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include "map/pc.h"
    #include "map/clif.h"
    #include "map/party.h"
    
    #include "plugins/HPMHooking.h"
    #include "common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)
    
    HPExport struct hplugin_info pinfo = {
        "partybuff",    // Plugin name
        SERVER_TYPE_MAP,// Which server types this plugin works with?
        "0.0",            // Plugin version
        HPM_VERSION,    // HPM Version (don't change, macro is automatically updated)
    };
    
    struct player_data {
        int buff;
    };
    
    int status_change_start_post( int retVal___, struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag)
    {
        if ( bl->type == BL_PC && retVal___ > 0 ) {
            TBL_PC *sd = BL_CAST(BL_PC, bl);
            struct party_data *p;
            if (( p = party->search(sd->status.party_id ))) {
    			struct player_data *ssd = getFromMSD( sd, 0 );
    			int before_buff = ssd->buff;
    			if ( type == SC_BLESSING )
    				ssd->buff |= 0x1;
    			if ( type == SC_INC_AGI )
    				ssd->buff |= 0x2;
    			if ( type == SC_PROTECTWEAPON || type == SC_PROTECTSHIELD || type == SC_PROTECTARMOR || type == SC_PROTECTHELM )
    				if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )
    					ssd->buff |= 0x4;
    			if ( type == SC_SOULLINK )
    				ssd->buff |= 0x8;
    			if ( type == SC_DEVOTION )
    				ssd->buff |= 0x10;
    			if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status
    				clif->party_info( p, NULL );
    		}
    	}
        return retVal___;
    }
    
    int status_change_end_post( int retVal___, struct block_list *bl, enum sc_type type, int tid, const char *file, int line )
    {
        if ( bl->type == BL_PC && retVal___ > 0 ) {
            TBL_PC *sd = BL_CAST(BL_PC, bl);
            struct party_data *p;
            if ( sd->state.active == 1 ) { // fix map-server crash when player logout
            if (( p = party->search(sd->status.party_id ))) {
               struct player_data *ssd = getFromMSD( sd, 0 );
    			int before_buff = ssd->buff;
    			if ( type == SC_BLESSING )
    				ssd->buff &= ~0x1;
    			if ( type == SC_INC_AGI )
    				ssd->buff &= ~0x2;
    			if ( type == SC_PROTECTWEAPON || type == SC_PROTECTSHIELD || type == SC_PROTECTARMOR || type == SC_PROTECTHELM )
    				if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )
    					ssd->buff &= ~0x4;
    			if ( type == SC_SOULLINK )
    				ssd->buff &= ~0x8;
    			if ( type == SC_DEVOTION )
    				ssd->buff &= ~0x10;
    			if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status
    				clif->party_info( p, NULL );
    			}
    		}
    	}
        return retVal___;
    }
    
    void clif_party_info_overload( 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;
        int i, c;
        nullpo_retv(p);
        WBUFW(buf,0) = 0xfb;
        memcpy( WBUFP(buf,4), p->party.name, NAME_LENGTH );
        for ( i = 0, c = 0; i < MAX_PARTY; i++ ) {
            struct party_member* m = &p->party.member[i];
            if(!m->account_id) continue;
            if(party_sd == NULL) party_sd = p->data[i].sd;
            WBUFL(buf,28+c*46) = m->account_id;
            if ( m->online && p->data[i].sd != NULL ) {
                struct player_data *ssd = getFromMSD( p->data[i].sd, 0 );
                char temp[NAME_LENGTH];
                safesnprintf( temp, NAME_LENGTH, "[%s%s%s%s%s]%s",
                                                                ( ssd->buff & 0x1 )? "B" : "_",
                                                                ( ssd->buff & 0x2 )? "A" : "_",
                                                                ( ssd->buff & 0x4 )? "F" : "_",
                                                                ( ssd->buff & 0x8 )? "S" : "_",
                                                                ( ssd->buff & 0x10 )? "+" : "_",
                                                                m->name );
                memcpy(WBUFP(buf,28+c*46+4), temp, NAME_LENGTH);
            } else
                memcpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH);
            mapindex->getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28));
            WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1;
            WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1;
            c++;
        }
        WBUFW(buf,2) = 28+c*46;
        if (sd)
            clif->send(buf, WBUFW(buf,2), &sd->bl, SELF);
        else if (party_sd)
            clif->send(buf, WBUFW(buf,2), &party_sd->bl, PARTY);
        return;
    }
    
    bool pc_authok_pre( struct map_session_data **sd, int *login_id2, time_t *expiration_time, int *group_id, const struct mmo_charstatus **st, bool *changing_mapservers ) {
        struct player_data *ssd;
        CREATE( ssd, struct player_data, true );
        ssd->buff = 0;
        addToMSD( *sd, ssd, 0, true );
        return true;
    }
    
    int map_quit_post( int retVal___, struct map_session_data *sd ) {
        //struct player_data *ssd = getFromMSD( sd, 0 );
        removeFromMSD( sd, 0 );
        return retVal___;
    }
    
    void clif_party_member_info_overload(struct party_data* p, struct map_session_data* sd)
    {
    	return;
    }
    
    HPExport void plugin_init (void) {
    	clif->party_member_info = &clif_party_member_info_overload;
    	addHookPre( pc, authok, pc_authok_pre );
        addHookPost( map, quit, map_quit_post );
    	clif->party_info = &clif_party_info_overload;
        addHookPost( status, change_start, status_change_start_post );
        addHookPost( status, change_end_, status_change_end_post );
    }

    this work show BA..... in mae player on party window.

    but sometimes got gravit error and dont have @showbuff and simbol of my job is wrong.

     


  5. i got it in latest.

    showbuff.c: In function ‘status_change_start_post’:
    showbuff.c:50:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
       if (p = party->search(sd->status.party_id)) {
       ^
    In file included from showbuff.c:31:0:
    showbuff.c: In function ‘plugin_init’:
    ../plugins/HPMHooking.h:63:54: warning: comparison of distinct pointer types lacks a cast [enabled by default]
       (void)((HPMHOOK_post_ ## ifname ## _ ## funcname)0 == (hook)), \
                                                          ^
    showbuff.c:292:2: note: in expansion of macro ‘addHookPost’
      addHookPost(status, change_end_, status_change_end_post);
      ^
            PLUGIN  showbuff
    make[1]: Leaving directory `/home/emulador/src/plugins'

    im Fixed, all problems, but now i got crash map-server, and my debug only show it.

    Program received signal SIGSEGV, Segmentation fault.
    0x00007ffff61000f2 in vsnprintf () from /lib64/libc.so.6
    Missing separate debuginfos, use: debuginfo-install glibc-2.17-322.el7_9.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-50.el7.x86_64 libcom_err-1.42.9-19.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 libselinux-2.5-15.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64 mariadb-libs-5.5.68-1.el7.x86_64 openssl-libs-1.0.2k-21.el7_9.x86_64 pcre-8.32-17.el7.x86_64 zlib-1.2.7-19.el7_9.x86_64
    (gdb)

    image.png.4d57302df3e96a4b2b54a676158e4c59.png

    @AnnieRuru


  6. I need to set  9 slot when player create new account, because when player will be vip i need to change to 15 slots.

    maybe it is possible to set for group ID, group_id = 0 have 9 slots. group_id = 99 have 15 slots.


  7. a long time ago, we had this functionality.

    // Adjustment for the natural rate of resistance from status changes.
    // If 50, status defense is halved, and you need twice as much stats to block
    // them (eg: 200 vit to completely block stun)
    pc_status_def_rate: 100
    mob_status_def_rate: 100
    
    // Required luk to gain inmunity to status changes.
    // Luk increases resistance by closing the gap between natural resist and max 
    // linearly. This setting indicates required luk to gain complete immunity.
    // Eg: 40 vit -> 40% resist. 150 luk -> +50% of the missing gap. 
    //     So 40% + (50% of 60%) = 70%
    pc_luk_status_def: 300
    mob_luk_status_def: 300

    is it possible to add this in new herc? 

    if yes, how?  pls someone can help, this newb friend?


  8. @Ridley and @Kenpachi brows,  i was test it

     

    /// Characters with group level => 99 don't use gemstones.
    +	if (sd->group->level >= 99)
    +		sd->special_state.no_gemstone = 1;

    but not work the other method  all skill no consume itens, i need put only gems, blue red yelow..

    send one light! pls !

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.