Jump to content
  • 0

Vending Controller


Radian

Question


  • Group:  Members
  • Topic Count:  162
  • Topics Per Day:  0.05
  • Content Count:  1546
  • Reputation:   192
  • Joined:  07/23/14
  • Last Seen:  

Hey guys, can someone help me out with this script by Emistry.

//===== Hercules Script ====================================
//= Vendor Control
//===== By: ================================================
//= Original by Emistry
//= Rewrite by AnnieRuru
//===== Current Version: ===================================
//= 2.1a
//===== Compatible With: ===================================
//= Hercules 2018-06-02
//===== Description: =======================================
//= Vendors only vend on certain coordinate, looks tidy :P
//===== Topic ==============================================
//= http://herc.ws/board/topic/4509-vendor-control-rewrite/
//===== Additional Comments: ===============================
//= Revert back to use unitwalk
//==========================================================

prontera,146,173,4	script	Vending Board Info	2_BOARD1,{
	mes "[^04B4AE Vending Board Info ^000000]";
	if ( !getskilllv( 41 ) ) {
		mes "You dont have ^0055FFVending Skill^000000.";
		mes "But if you want warp at the market or vending place use the command ^0000ff@ccmd <market>^000000.";
		close;
	}
	mes "Select a slot and start vending.";
	mes "To warp at the market/vending place use the command ^0000ff@ccmd <market>^000000.";
	while ( true ) {
		.@menu$ = .@currentpage ? "<== Previous Page:" : ":";
		.@pageindex = .@currentpage * .slotperpage;
		for ( .@i = 0; .@i < .slotperpage && .@pageindex + .@i < .count; ++.@i ) {
			if ( !getmapxy( .@map$, .@x, .@y, UNITTYPE_NPC, "#vend_slot"+( .@pageindex + .@i ) ) && getareausers( .map$, .@x, .@y, .@x, .@y ) )
				.@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^FF0000[ Unavailable ]^000000:";
			else
				.@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^00CC00[ Available ]^000000:";
		}
		if ( .@currentpage != .maxpage )
			.@menu$ = .@menu$ + "Next Page ==>";
		.@pick = select( .@menu$ ) -1;
		if ( !.@pick )
			{ --.@currentpage; }
		else if ( .@pick == .slotperpage +1 )
			{ ++.@currentpage; }
		else
			break;
	}
	.@s =  .@currentpage * .slotperpage + .@pick -1 ;
	if ( !getmapxy( .@map$, .@x, .@y, UNITTYPE_NPC, "#vend_slot"+ .@s ) && getareausers( .map$, .@x, .@y, .@x, .@y ) ) {
		mes " ";
		mes "This slot is ^FF0000[ UnAvailable ]^000000.";
		close;
	}
	warp .@map$, .@x, .@y;
	hideonnpc "#vend_slot"+ .@s;
	donpcevent "#vend_slot"+ .@s +"::OnCheckAvailable";
	end;
OnInit:
//	======================= Configuration HERE =============================
	.map$ = "prontera"; // map
	setarray .@x, 32,36,40,44,48,52,56,60; // x coordinates
	setarray .@y, 187,183,179,175; // y coordinates
	.slotperpage = 10; // display how many slots per page (prevent making the menu too long)

	freeloop true;
	setcell .map$, 0,0, 500,500, cell_novending, true;
	.@x_size = getarraysize( .@x );
	.@y_size = getarraysize( .@y );
	for ( .@i = 0; .@i < .@y_size; ++.@i ) {
		for ( .@j = 0; .@j < .@x_size; ++.@j ) {
			if ( checkcell( .map$, .@x[.@j], .@y[.@i], cell_chkpass ) ) {
				movenpc "#vend_slot"+ .count, .@x[.@j], .@y[.@i];
				setcell .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i], cell_novending, false;
				if ( getareausers( .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i] ) ) {
					hideonnpc "#vend_slot"+ .count;
					donpcevent "#vend_slot"+ .count +"::OnCheckAvailable";
				}
				++.count;
			}
		}
	}
	.maxpage = .count / .slotperpage + ( .count % .slotperpage > 0 ) -1;
//	debugmes "Vendor NPC needed -> "+ .count;
	end;
}

-	script	vend_slot	-1,{
	mes "[^04B4AE Vending Slot ^000000]";
	if ( !getskilllv( 41 ) ) {
		mes "You dont have ^0055FFVending Skill^000000.";
		close;
	}
	getmapxy .@map$, .@x, .@y, UNITTYPE_NPC;
	if ( getareausers( .@map$, .@x, .@y, .@x, .@y ) ) {
		mes "Someone already using this slot";
		close;
	}
	unitwalk getcharid(3), .@x, .@y;
	mes "Spot : ^777777Available^000000";
	mes "^FF0000Use proper Shop Name.^000000";
	mes "^777777Player who failed to follow these rules will be punished.^000000";
	hideonnpc strnpcinfo(0);
	donpcevent strnpcinfo(0)+"::OnCheckAvailable";
	close;
OnCheckAvailable:
	sleep 10000;
	getmapxy .@map$, .@x, .@y, UNITTYPE_NPC;
	while ( getareausers( .@map$, .@x, .@y, .@x, .@y ) )
		sleep 10000;
	hideoffnpc strnpcinfo(0);
	end;
}

// Add more if needed.
prontera,0,0,4	duplicate(vend_slot)	#vend_slot0	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot1	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot2	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot3	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot4	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot5	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot6	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot7	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot8	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot9	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot10	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot11	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot12	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot13	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot14	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot15	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot16	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot17	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot18	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot19	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot20	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot21	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot22	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot23	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot24	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot25	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot26	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot27	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot28	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot29	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot30	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot31	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot32	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot33	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot34	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot35	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot36	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot37	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot38	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot39	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot40	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot41	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot42	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot43	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot44	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot45	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot46	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot47	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot48	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot49	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot50	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot51	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot52	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot53	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot54	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot55	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot56	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot57	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot58	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot59	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot60	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot61	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot62	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot63	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot64	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot65	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot66	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot67	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot68	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot69	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot70	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot71	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot72	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot73	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot74	4_BULLETIN_BOARD2
prontera,0,0,4	duplicate(vend_slot)	#vend_slot75	4_BULLETIN_BOARD2

prontera	mapflag	autotrade

I noticed that when you restart the server and vendors are resumed, the slot will be available. and how can i add another coordinates for the slots 

	setarray .@x, 32,36,40,44,48,52,56,60; // x coordinates
	setarray .@y, 187,183,179,175; // y coordinates

 

  • Love 1
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

hmm ? this script was actually written in mind by having plugin installed ...
however rathena members seems very interested in this script indeed

you can just disable the min_npc_vendchat_distance from battle config

 

On 1/18/2019 at 7:29 AM, Radian said:

I noticed that when you restart the server and vendors are resumed, the slot will be available.

just test on rAthena test server, couldn't reproduce your problem

 

On 1/18/2019 at 7:29 AM, Radian said:

and how can i add another coordinates for the slots 


	setarray .@x, 32,36,40,44,48,52,56,60; // x coordinates
	setarray .@y, 187,183,179,175; // y coordinates

 

try start with only 2 elements in your array, then expend slowly by @reloadscript

  • Love 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  162
  • Topics Per Day:  0.05
  • Content Count:  1546
  • Reputation:   192
  • Joined:  07/23/14
  • Last Seen:  

1 hour ago, AnnieRuru said:

just test on rAthena test server, couldn't reproduce your problem

Yeah my bad. there's no issue on that.

What im trying to do with the coordinates are to start into a different x and y

screenWickedRO023.thumb.jpg.eb8553448b7645732e35ded2fc425ea8.jpg

Edited by Radian
  • Love 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...