Jump to content
  • 0

Vending Controller


Question

Posted

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

2 answers to this question

Recommended Posts

  • 0
Posted

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
  • 0
Posted (edited)
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

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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...