Jump to content
  • 0
Sign in to follow this  
schan

Vending Tax for Allies and Guild Members

Question

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!

Edited by schan

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

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>;}

Share this post


Link to post
Share on other sites
  • 0

 

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

 

 

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 

 

 
Edited by schan

Share this post


Link to post
Share on other sites
  • 0
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;		}	}}
ACMD_DEF(chkally),

Share this post


Link to post
Share on other sites
  • 0

 

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;		}	}}
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:

 

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 

 

Share this post


Link to post
Share on other sites
  • 0

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.c

I 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[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;		}
.

.

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

Edited by AnnieRuru

Share this post


Link to post
Share on other sites
  • 0

 

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.c

I 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[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;		}
.

.

... 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[i].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. :D

/sry

Share this post


Link to post
Share on other sites
  • 0

 

It is working now but one slight problem. A 1% tax is being added to vending_tax/vending_tax_ally and I don't know where it's coming from.

Workaround I did is to subtract 1% tax in items_conf. 

 

Thank you so much AnnieRuru! You've been a great help! :D

and sorry for the spoon feeding. :)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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!  ^_^

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

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