Vending Tax for Allies and Guild Members

schan

New member
Messages
60
Points
0
Github
xschan
Emulator
Hi,

I need to add something like vending_tax in items_conf but instead of giving tax for all, I'd like to add a separate tax for Guild members and Guild allies.

These are the changes I made:

srcmapbattle.c

line 6490

+{ "vending_tax_ally",                   &battle_config.vending_tax_ally,                0,      0,      10000,          },
srcmapbattle.h

line 257

+int vending_tax_ally; 

confbattleitems_conf.txt

+vending_tax_ally: 1200


srcmapvending.c

line 162

+//-- Check for Guild/Ally+ if( guild->check_member == 1 || guild->check_alliance == 0 ){+ pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd);+ if( battle_config.vending_tax_ally )+ z -= z * (battle_config.vending_tax_ally/10000.);+ pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);+ } else+//-- pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); if( battle_config.vending_tax ) z -= z * (battle_config.vending_tax/10000.); pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);
I'm not sure with what I did but it didn't work as expected. No errors were returned after compiling.

Did I miss anything?

Thank you!

 
Last edited by a moderator:
first of all, do you know vending_tax is actually means the vendor has lesser income ?

your source mod actually means ... if the buyer is guild member or guild ally, then vendor will be tax by that rate

isn't the idea quite conflict ?

and to add check guild or allies, it should be

Code:
{struct guild *g = guild_search( sd->status.guild_id );if ( sd->status.guild_id == vsd->status.guild.id ||g->alliance[0].guild_id == vsd->status.guild.id ||g->alliance[1].guild_id == vsd->status.guild.id ||g->alliance[2].guild_id == vsd->status.guild.id )<is a guild member or ally guild member>;else<false condition>;}
 
first of all, do you know vending_tax is actually means the vendor has lesser income ?

your source mod actually means ... if the buyer is guild member or guild ally, then vendor will be tax by that rate

isn't the idea quite conflict ?

and to add check guild or allies, it should be

{struct guild *g = guild_search( sd->status.guild_id );if ( sd->status.guild_id == vsd->status.guild.id ||g->alliance[0].guild_id == vsd->status.guild.id ||g->alliance[1].guild_id == vsd->status.guild.id ||g->alliance[2].guild_id == vsd->status.guild.id )<is a guild member or ally guild member>;else<false condition>;}

I got this error Annie on compiling.

vending.c: In function ‘vending_purchasereq’:vending.c:163: warning: implicit declaration of function ‘guild_search’vending.c:163: warning: initialization makes pointer from integer without a castvending.c:165: error: ‘struct mmo_charstatus’ has no member named ‘guild’make[1]: *** [obj_sql/vending.o] Error 1make[1]: Leaving directory `/root/Desktop/trunk/src/map'make: *** [map_sql] Error 2 

Edit:

I changed guild_search to guild->search and left me with this error



Code:
vending.c: In function ‘vending_purchasereq’:vending.c:165: error: ‘struct mmo_charstatus’ has no member named ‘guild’make[1]: *** [obj_sql/vending.o] Error 1make[1]: Leaving directory `/root/Desktop/trunk/src/map'make: *** [map_sql] Error 2 
 

 
Last edited by a moderator:
Code:
ACMD(chkally) {	struct guild * g = guild->search( sd->status.guild_id );	struct map_session_data * pl_sd = map->nick2sd( message );	if ( !message || !*message ) {		clif->message( fd, "empty" );		return false;	}	else if ( !g ) {		clif->message( fd, "you don't have a guild" );		return false;	}	else if ( !pl_sd ) {		clif->message( fd, "the input player is not exist or not online" );		return false;	}	else {		struct guild * pl_g = guild->search( pl_sd->status.guild_id );		int i = 0;		if ( !pl_g ) {			clif->message( fd, "the input player doesn't have a guild" );			return false;		}		ARR_FIND( 0, MAX_GUILDALLIANCE, i, pl_sd->status.guild_id == g->alliance[i].guild_id );		if ( sd->status.guild_id == pl_sd->status.guild_id || i < MAX_GUILDALLIANCE ) {			clif->message( fd, "that player is your guild member or guild ally" );			return true;		}		else {			clif->message( fd, "that player is not your guild member or ally" );			return true;		}	}}
Code:
ACMD_DEF(chkally),
 
ACMD(chkally) { struct guild * g = guild->search( sd->status.guild_id ); struct map_session_data * pl_sd = map->nick2sd( message ); if ( !message || !*message ) { clif->message( fd, "empty" ); return false; } else if ( !g ) { clif->message( fd, "you don't have a guild" ); return false; } else if ( !pl_sd ) { clif->message( fd, "the input player is not exist or not online" ); return false; } else { struct guild * pl_g = guild->search( pl_sd->status.guild_id ); int i = 0; if ( !pl_g ) { clif->message( fd, "the input player doesn't have a guild" ); return false; } ARR_FIND( 0, MAX_GUILDALLIANCE, i, pl_sd->status.guild_id == g->alliance.guild_id ); if ( sd->status.guild_id == pl_sd->status.guild_id || i < MAX_GUILDALLIANCE ) { clif->message( fd, "that player is your guild member or guild ally" ); return true; } else { clif->message( fd, "that player is not your guild member or ally" ); return true; } }}
Code:
ACMD_DEF(chkally),


This is what I did:

//-- Check for Guild/Ally ACMD_DEF(chkally){    pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd);    if( battle_config.vending_tax_ally )        z -= z * (battle_config.vending_tax_ally/10000.);    pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);    } else//--  pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); if( battle_config.vending_tax ) z -= z * (battle_config.vending_tax/10000.); pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd); 
Error:

Code:
vending.c: In function ‘vending_purchasereq’:vending.c:163: warning: implicit declaration of function ‘ACMD_DEF’vending.c:163: error: ‘chkally’ undeclared (first use in this function)vending.c:163: error: (Each undeclared identifier is reported only oncevending.c:163: error: for each function it appears in.)vending.c:163: error: expected ‘;’ before ‘{’ tokenmake[1]: *** [obj_sql/vending.o] Error 1make[1]: Leaving directory `/root/Desktop/trunk/src/map'make: *** [map_sql] Error 2 
 
hmm ... you are quite supportive in script section

but it seems you can't read source code yet

ACMD_DEF(chkally),I am actually writing an atcommand inside atcommand.cI wrote that and tested so to make sure my compiler doesn't throw error, and its working in my test server

put them inside atcommand.c, and you can type "@chkally AnnieRuru" to check the player is your guild member or guild ally

the part that you need to refer, is only just this

  struct guild * g = guild->search( sd->status.guild_id ); if ( !g ) { clif->message( fd, "you don't have a guild" ); return false; }......................   int i = 0;   ARR_FIND( 0, MAX_GUILDALLIANCE, i, pl_sd->status.guild_id == g->alliance.guild_id ); if ( sd->status.guild_id == pl_sd->status.guild_id || i < MAX_GUILDALLIANCE ) { clif->message( fd, "that player is your guild member or guild ally" ); return true; } else { clif->message( fd, "that player is not your guild member or ally" ); return true; }..

... 1 more chance and I'll spoon feed =/

 
Last edited by a moderator:
hmm ... you are quite supportive in script section

but it seems you can't read source code yet

ACMD_DEF(chkally),I am actually writing an atcommand inside atcommand.cI wrote that and tested so to make sure my compiler doesn't throw error, and its working in my test server

put them inside atcommand.c, and you can type "@chkally AnnieRuru" to check the player is your guild member or guild ally

the part that you need to refer, is only just this

  struct guild * g = guild->search( sd->status.guild_id ); if ( !g ) { clif->message( fd, "you don't have a guild" ); return false; }......................   int i = 0;   ARR_FIND( 0, MAX_GUILDALLIANCE, i, pl_sd->status.guild_id == g->alliance.guild_id ); if ( sd->status.guild_id == pl_sd->status.guild_id || i < MAX_GUILDALLIANCE ) { clif->message( fd, "that player is your guild member or guild ally" ); return true; } else { clif->message( fd, "that player is not your guild member or ally" ); return true; }..

... 1 more chance and I'll spoon feed =/

No errors after compiling but there is a problem. Tax won't apply and instead, more zennies were added to the seller.

Here's what I did:

//-- Tax for guild/allies struct guild * g = guild->search( sd->status.guild_id );    ARR_FIND( 0, MAX_GUILDALLIANCE, i, sd->status.guild_id == g->alliance.guild_id );    if ( sd->status.guild_id == sd->status.guild_id || i < MAX_GUILDALLIANCE ) { pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd);    if( battle_config.vending_tax_ally )        z -= z * (battle_config.vending_tax_ally/10000.);    pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd);    } else {//-- pc->payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); if( battle_config.vending_tax ) z -= z * (battle_config.vending_tax/10000.); pc->getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd); }
I'm new to this and I'm just trying to learn it now.
default_biggrin.png

/sry

 
hmm ? how come ?

with the patch, I put 0 on vending_tax and vending_tax_allies

the vendor gets the full money from the purchase

 
Last edited by a moderator:
Yeah that's weird. I tried setting tax to 0 and gave the full money too but when I tried setting a tax it always add +1%.

Don't mind this. I'll be using the workaround. Thank you for your help Annie! 
default_happy.png


 
Back
Top