Jump to content

Redking178

Members
  • Posts

    7
  • Joined

  • Last visited

Posts posted by Redking178

  1. 33 minutes ago, Haruka Mayumi said:

    hmm. i'm not really sure if i understand what you want.. but this is what was on my mind.. and this is the effect of the script

    https://streamable.com/yrb1be

    Oh that is exactly what I want, hmm I wonder why mine doesn't do that same thing. Is there another file or something I need to edit in relation to the item_db.txt?

  2. 18 minutes ago, Haruka Mayumi said:
    
    501,Red_Potion,Red Potion,0,50,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 EF_HEAL3; sc_start2 SC_L_LIFEPOTION,3600000,-3,10; },{},{}

     

    Thank you for the example, I must be missing something. When I use the item I get the initial heal, but I don't get buff icon or ef_heal3 effect to show. I also don't get the heal over time. I have tried to alter this to add in the heal over time to no avail.
     

    501,Red_Potion,Red Potion,0,50,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 EF_HEAL3; sc_start2 SC_L_LIFEPOTION,3600000,-3,10; },{ bonus2 bRegenPercentHP,10,1000;},{}

    My goals for this test was to create a potion that heals every set duration (example 10 seconds) for a set $ HP/SP amount (example 3%) for a set duration (example 60 minutes)
    If you could provide more help I would greatly appreciate it.

  3. 7 hours ago, Haruka Mayumi said:

    specialeffect2 EF_HEAL3; sc_start2 SC_L_LIFEPOTION,3600000,-3,10;

    Thanks for the response.
    I have tried this in a few different places within the code I posted, could you use the example red potion and show me what the line would look like. I'm still new sorry to ask.

  4. Hello all, looking to get into making some custom items and wanted to start with making some simple regen potions. After digging into Loops for awhile I found some examples but unfortunately I wasn't able to make much progress.
    Request

    • Consumable 
    • Restores hp and sp by 3% per 10 second intervals
    • Lasts for 1 hour
    • Has a buff icon
    • Fine with using the assets from 22702 for the consumable

    I had found some other posts looking for what I would assume would be something similar to what I need but have not been successful in making it function for me. This is my attempt tinkering around by trying to replace the red pots functionality per a post I found from 2012
     

    501,Red_Potion,Red Potion,0,50,,40,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 3,3; for( set @healtime,0; @healtime < 60; set @healtime,@healtime+1 ) { percentheal 10,10; sleep2 10000; } dispbottom "Your healing item has run out."; end; },{},{}

    Any help would be greatly appreciated.

  5. I am using both Euphy's Quest Shop and Emistry's Multi-currency shops and running into issues duplicating the scripts. I have tried to look for all instances of any shared naming conventions but have not been able to get the duplicate scripts to work.
    The reason I don't want to just flood one script with 100 cases/shops is I want to keep it clean as I plan to add a lot and organization will help keep the files smaller and easier to maintain.
    Any help would be tremendous.


    1st Euphy's Quest shop working

    //===== rAthena Script =======================================
    //= Euphy's Quest Shop
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.6c
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= A dynamic quest shop based on Lunar's, with easier config.
    //= Includes support for multiple shops & cashpoints.
    //= Item Preview script by ToastOfDoom.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.2 Added category support.
    //= 1.3 More options and fixes.
    //= 1.4 Added debug settings.
    //= 1.5 Replaced categories with shop IDs.
    //= 1.6 Added support for purchasing stackables.
    //= 1.6a Added support for previewing costumes and robes.
    //= 1.6b Added 'disable_items' command.
    //= 1.6c Replaced function 'A_An' with "F_InsertArticle".
    //============================================================
    
    // Shop NPCs -- supplying no argument displays entire menu.
    //	callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
    //  ADD YOUR NPC HERE
    //============================================================
    aldeba_in,22,50,3	script	Quest Shop#1	998,{ callfunc "qshop",1; }
    aldeba_in,26,54,3	script	Quest Shop#2	998,{ callfunc "qshop",2,3,4; }
    // etc.. Add your Shop NPCs 'Quest Shop#XXX' here
    //============================================================
    
    
    // Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
    //============================================================
    -	script	quest_shop	-1,{
    function Add; function Chk; function Slot;
    OnInit:
    	freeloop(1);
    
    // -----------------------------------------------------------
    //  Basic shop settings.
    // -----------------------------------------------------------
    
    	set .Announce,1;	// Announce quest completion? (1: yes / 0: no)
    	set .ShowSlot,1;	// Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    	set .ShowID,0;  	// Show item IDs? (1: yes / 0: no)
    	set .ShowZeny,0;	// Show Zeny cost, if any? (1: yes / 0: no)
    	set .MaxStack,100;	// Max number of quest items purchased at one time.
    
    // -----------------------------------------------------------
    //  Points variable -- optional quest requirement.
    //	setarray .Points$[0],"<variable name>","<display name>";
    // -----------------------------------------------------------
    
    	setarray .Points$[0],
    		"#CASHPOINTS", "Cash Points";
    
    
    //=====================================================================================
    // ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
    //=====================================================================================
    
    // -----------------------------------------------------------
    //  Shop IDs -- to add shops, copy dummy data at bottom of file.
    //	setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
    // -----------------------------------------------------------
    
    	setarray .Shops$[1],
    		"Ores",			// Shop 1
    		"Headgear",		// Shop 2
    		"Sick Shades",	// Shop 3
    		"Other";		// Shop 4
    
    // -----------------------------------------------------------
    //  Quest items -- do NOT use a reward item more than once!
    //	Add(<shop ID>,<reward ID>,<reward amount>,
    //	    <Zeny cost>,<point cost>,
    //	    <required item ID>,<required item amount>{,...});
    // -----------------------------------------------------------
    
    // Shop 1 - Ores
    	Add(1,7619,1,0,0,6379,2);
    	Add(1,7620,1,0,0,6379,2);
    	Add(1,6635,1,0,0,6379,10);
    	Add(1,6226,1,0,0,6379,4);
    	Add(1,6226,1,0,0,6379,4);
    
    // Shop 2 - Upper Headgear
    	Add(2,18522,1,0,0,6379,25);
    	Add(2,18563,1,0,0,6379,25);
    	Add(2,19111,1,0,0,6379,25);
    	Add(2,19115,1,0,0,6379,25);
    	Add(2,19130,1,0,0,6379,15);
    	Add(2,18673,1,0,0,6379,35);
    	Add(2,5646,1,0,0,6379,35);
    	Add(2,5211,1,0,0,6379,15);
    	Add(2,18528,1,0,0,6379,50);
    
    // Shop 3 - Middle Headgear
    	Add(3,18813,1,0,0,6379,35);
    	Add(3,19181,1,0,0,6379,35);
    	Add(3,19087,1,0,0,6379,10);
    	Add(3,19126,1,0,0,6379,15);
    	Add(3,19128,1,0,0,6379,15);
    	Add(3,19138,1,0,0,6379,50);
    
    // Shop 4 - Other
    	Add(4,2576,1,0,0,6379,50);
    	Add(4,28902,1,0,0,6379,100);
    	Add(4,17162,1,0,0,6379,25);
    
    // -----------------------------------------------------------
    
    //=====================================================================================
    // ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
    //=====================================================================================
    
    	freeloop(0);
    	set .menu$,"";
    	for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
    		set .menu$, .menu$+.Shops$[.@i]+":";
    		npcshopdelitem "qshop"+.@i,909;
    	}
    	end;
    
    OnMenu:
    	set .@size, getarraysize(@i);
    	if (!.@size) set @shop_index, select(.menu$);
    	else if (.@size == 1) set @shop_index, @i[0];
    	else {
    		for(set .@j,0; .@j<.@size; set .@j,.@j+1)
    			set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
    		set @shop_index, @i[select(.@menu$)-1];
    	}
    	deletearray @i[0],getarraysize(@i);
    	if (.Shops$[@shop_index] == "") {
    		message strcharinfo(0),"An error has occurred.";
    		end;
    	}
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    
    OnBuyItem:
    	// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    	set .@q[2],.@q[1]*.@q[3];
    	if (!.@q[2] || .@q[2] > 30000) {
    		message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
    		end;
    	}
    	mes "[Quest Shop]";
    	mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    	mes "Requirements:";
    	disable_items;
    	if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    	if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    	if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    		mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
    	next;
    	setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
    	if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
    		set .@preview,1;
    	addtimer 1000, strnpcinfo(0)+"::OnEnd";
    	while(1) {
    		switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
    		case 1:
    			if (@qe[0]) {
    				mes "[Quest Shop]";
    				mes "You're missing one or more quest requirements.";
    				close;
    			}
    			if (!checkweight(.@q[0],.@q[2])) {
    				mes "[Quest Shop]";
    				mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
    				close;
    			}
    			if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
    			if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
    			if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    				delitem .@q[.@i],.@q[.@i+1]*.@q[1];
    			getitem .@q[0],.@q[2];
    			if (.Announce) announce strcharinfo(0)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):callfunc("F_InsertArticle",getitemname(.@q[0])))+"!",0;
    			specialeffect2 EF_FLOWERLEAF;
    			close;
    		case 2:
    			setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
    			if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
    			else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
    			else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
    			else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
    			break;
    		case 3:
    			close;
    		}
    	}
    
    OnEnd:
    	if (@qe[7]) {
    		changelook LOOK_HEAD_BOTTOM, @qe[3];
    		changelook LOOK_HEAD_TOP, @qe[4];
    		changelook LOOK_HEAD_MID, @qe[5];
    		changelook LOOK_ROBE, @qe[6];
    	}
    	deletearray @qe[0],8;
    	end;
    
    function Add {
    	if (getitemname(getarg(1)) == "null") {
    		debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
    		return;
    	}
    	setarray .@j[0],getarg(2),getarg(3),getarg(4);
    	for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
    		if (getitemname(getarg(.@i)) == "null") {
    			debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
    			return;
    		} else
    			setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    	}
    	copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    	npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    	return;
    }
    
    function Chk {
    	if (getarg(0) < getarg(1)) {
    		set @qe[0],1;
    		return "^FF0000";
    	} else
    		return "^00FF00";
    }
    
    function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) return .@s$;
    		case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
    		default: return .@s$;
    	}
    }
    }
    
    function	script	qshop	{
    	deletearray @i[0],getarraysize(@i);
    	for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
    		set @i[.@i],getarg(.@i);
    	doevent "quest_shop::OnMenu";
    	end;
    }
    
    
    // Dummy shop data -- copy as needed.
    //============================================================
    -	shop	qshop1	-1,909:-1
    -	shop	qshop2	-1,909:-1
    -	shop	qshop3	-1,909:-1
    -	shop	qshop4	-1,909:-1

    2nd Duplicated script with changes to make it unique NOT WORKING

    //===== rAthena Script =======================================
    //= Euphy's Quest Shop
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.6c
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= A dynamic quest shop based on Lunar's, with easier config.
    //= Includes support for multiple shops & cashpoints.
    //= Item Preview script by ToastOfDoom.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.2 Added category support.
    //= 1.3 More options and fixes.
    //= 1.4 Added debug settings.
    //= 1.5 Replaced categories with shop IDs.
    //= 1.6 Added support for purchasing stackables.
    //= 1.6a Added support for previewing costumes and robes.
    //= 1.6b Added 'disable_items' command.
    //= 1.6c Replaced function 'A_An' with "F_InsertArticle".
    //============================================================
    
    // Shop NPCs -- supplying no argument displays entire menu.
    //	callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
    //  ADD YOUR NPC HERE
    //============================================================
    prontera,151,171,3	script	Weapon Shop#3	998,{ callfunc "qshop",5,6; }
    prontera,158,171,3	script	Weapon Shop#4	998,{ callfunc "qshop",7,8; }
    // etc.. Add your Shop NPCs 'Quest Shop#XXX' here
    //============================================================
    
    
    // Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
    //============================================================
    -	script	dc_shop	-1,{
    function Add; function Chk; function Slot;
    OnInit:
    	freeloop(1);
    
    // -----------------------------------------------------------
    //  Basic shop settings.
    // -----------------------------------------------------------
    
    	set .Announce,1;	// Announce quest completion? (1: yes / 0: no)
    	set .ShowSlot,1;	// Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    	set .ShowID,0;  	// Show item IDs? (1: yes / 0: no)
    	set .ShowZeny,0;	// Show Zeny cost, if any? (1: yes / 0: no)
    	set .MaxStack,100;	// Max number of quest items purchased at one time.
    
    // -----------------------------------------------------------
    //  Points variable -- optional quest requirement.
    //	setarray .Points$[0],"<variable name>","<display name>";
    // -----------------------------------------------------------
    
    	setarray .Points$[0],
    		"#CASHPOINTS", "Cash Points";
    
    
    //=====================================================================================
    // ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
    //=====================================================================================
    
    // -----------------------------------------------------------
    //  Shop IDs -- to add shops, copy dummy data at bottom of file.
    //	setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
    // -----------------------------------------------------------
    
    	//.Shops$[5] = "Swordy/Thief"
    	//.Shops$[6] = "Merch/Acolyte"
    	//.Shops$[7] = "Mage/Archer"
    	//.Shops$[8] = "SC/Sura/Musicians"
    
    	setarray .Shops$[1],
    		"Swordy/Thief","Merch/Acolyte","Mage/Archer","SC/Sura/Musicians";
    
    // -----------------------------------------------------------
    //  Quest items -- do NOT use a reward item more than once!
    //	Add(<shop ID>,<reward ID>,<reward amount>,
    //	    <Zeny cost>,<point cost>,
    //	    <required item ID>,<required item amount>{,...});
    // -----------------------------------------------------------
    
    // Shop 5 - Swordy/Gx
    	Add(5,21051,1,0,0,6379,300);
    	Add(5,21052,1,0,0,6379,300);
    	//Add(5,42023,1,0,0,6379,300);
    	Add(5,28765,1,0,0,6379,200);
    	Add(5,28766,1,0,0,6379,100);
    	Add(5,28044,1,0,0,6379,300);
    	Add(5,28042,1,0,0,6379,300);
    	//Add(5,42350,1,0,0,6379,300);
    	//Add(5,42024,1,0,0,6379,300);
    	//Add(5,42025,1,0,0,6379,300);
    
    // Shop 6 - Mage/AB
    	Add(6,26158,1,0,0,6379,300);
    	Add(6,2055,1,0,0,6379,300);
    	Add(6,2056,1,0,0,6379,300);
    	Add(6,26161,1,0,0,6379,300);
    	Add(6,2057,1,0,0,6379,300);
    	Add(6,16095,1,0,0,6379,300);
    	Add(6,26159,1,0,0,6379,300);
    	Add(6,26160,1,0,0,6379,300);
    	Add(6,28633,1,0,0,6379,300);
    
    // Shop 7 - Merch/Archer
    	Add(7,1333,1,0,0,6379,300);
    	Add(7,16092,1,0,0,6379,300);
    	Add(7,28138,1,0,0,6379,300);
    	//Add(7,42351,1,0,0,6379,300);
    	Add(7,16093,1,0,0,6379,300);
    	Add(7,16094,1,0,0,6379,300);
    	Add(7,18185,1,0,0,6379,300);
    	Add(7,18187,1,0,0,6379,300);
    	Add(7,18186,1,0,0,6379,300);
    
    // Shop 8 - SC/Sura/Musicians
    	Add(8,28767,1,0,0,6379,300);
    	Add(8,28768,1,0,0,6379,300);
    	Add(8,18184,1,0,0,6379,300);
    	Add(8,1865,1,0,0,6379,300);
    	Add(8,1866,1,0,0,6379,300);
    	Add(8,16096,1,0,0,6379,300);
    	Add(8,26212,1,0,0,6379,300);
    	Add(8,26213,1,0,0,6379,300);
    	//Add(8,42107,1,0,0,6379,300);
    	//Add(8,42108,1,0,0,6379,300);
    
    // -----------------------------------------------------------
    
    //=====================================================================================
    // ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
    //=====================================================================================
    
    	freeloop(0);
    	set .menu$,"";
    	for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
    		set .menu$, .menu$+.Shops$[.@i]+":";
    		npcshopdelitem "qshop"+.@i,909;
    	}
    	end;
    
    OnMenu:
    	set .@size, getarraysize(@i);
    	if (!.@size) set @shop_index, select(.menu$);
    	else if (.@size == 1) set @shop_index, @i[0];
    	else {
    		for(set .@j,0; .@j<.@size; set .@j,.@j+1)
    			set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
    		set @shop_index, @i[select(.@menu$)-1];
    	}
    	deletearray @i[0],getarraysize(@i);
    	if (.Shops$[@shop_index] == "") {
    		message strcharinfo(0),"An error has occurred.";
    		end;
    	}
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    
    OnBuyItem:
    	// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    	set .@q[2],.@q[1]*.@q[3];
    	if (!.@q[2] || .@q[2] > 30000) {
    		message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
    		end;
    	}
    	mes "[Weapon Shop]";
    	mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    	mes "Requirements:";
    	disable_items;
    	if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    	if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    	if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    		mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
    	next;
    	setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
    	if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
    		set .@preview,1;
    	addtimer 1000, strnpcinfo(0)+"::OnEnd";
    	while(1) {
    		switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
    		case 1:
    			if (@qe[0]) {
    				mes "[Weapon Shop]";
    				mes "You're missing one or more quest requirements.";
    				close;
    			}
    			if (!checkweight(.@q[0],.@q[2])) {
    				mes "[Weapon Shop]";
    				mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
    				close;
    			}
    			if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
    			if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
    			if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
    				delitem .@q[.@i],.@q[.@i+1]*.@q[1];
    			getitem .@q[0],.@q[2];
    			if (.Announce) announce strcharinfo(0)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):callfunc("F_InsertArticle",getitemname(.@q[0])))+"!",0;
    			specialeffect2 EF_FLOWERLEAF;
    			close;
    		case 2:
    			setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
    			if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
    			else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
    			else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
    			else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
    			break;
    		case 3:
    			close;
    		}
    	}
    
    OnEnd:
    	if (@qe[7]) {
    		changelook LOOK_HEAD_BOTTOM, @qe[3];
    		changelook LOOK_HEAD_TOP, @qe[4];
    		changelook LOOK_HEAD_MID, @qe[5];
    		changelook LOOK_ROBE, @qe[6];
    	}
    	deletearray @qe[0],8;
    	end;
    
    function Add {
    	if (getitemname(getarg(1)) == "null") {
    		debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
    		return;
    	}
    	setarray .@j[0],getarg(2),getarg(3),getarg(4);
    	for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
    		if (getitemname(getarg(.@i)) == "null") {
    			debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
    			return;
    		} else
    			setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    	}
    	copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    	npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    	return;
    }
    
    function Chk {
    	if (getarg(0) < getarg(1)) {
    		set @qe[0],1;
    		return "^FF0000";
    	} else
    		return "^00FF00";
    }
    
    function Slot {
    	set .@s$,getitemname(getarg(0));
    	switch(.ShowSlot) {
    		case 1: if (!getitemslots(getarg(0))) return .@s$;
    		case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
    		default: return .@s$;
    	}
    }
    }
    
    function	script	w	{
    	deletearray @i[0],getarraysize(@i);
    	for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
    		set @i[.@i],getarg(.@i);
    	doevent "dc_shop::OnMenu";
    	end;
    }
    
    
    // Dummy shop data -- copy as needed.
    //============================================================
    -	shop	qshop5	-1,909:-1
    -	shop	qshop6	-1,909:-1
    -	shop	qshop7	-1,909:-1
    -	shop	qshop8	-1,909:-1


    Emistry's Multi-Currency Shop WORKING
     

    // Settings :
    //	-	Only required to edit the ShopSetting() Function
    //			Notes : You may also add / remove Menu ( If any )
    //	-	Shop Currency can be either ItemID or Variable Name, but must write within Quotation Marks ( "" )
    //			Ex. of Variable.	->	Zeny , #CASHPOINTS , #KAFRAPOINTS , CustomVariable , #CustomVariable
    //	-	ERROR Message are used to show Invalid Settings in your NPC.
    
    
    // Leave this alone...
    -	shop	Emistry_Shop	-1,512:100
    
    
    aldeba_in,22,115,5	script	Edda	982,{
    function ShopSettings;
    function ValidateCost;
    function CurrencyInfo;
    function ClearData;
    function ValueConvert;
    function ErrorNotice;
    
    mes "Each Shop from the Menu may purchase using ^FF0000Divi Coin^000000.";
    mes "^00FF00____________________________^000000";
    mes "So,Which shop you would like to look at it";
    next;
    // Menu Selection
    select("RK/RG/GX","War/Sorc/Rang","Gen/Mech/AB","SC/Sura/Musicians");
    
    ClearData();
    ShopSettings( @menu );
    npcshopitem "Emistry_Shop",512,100;
    npcshopdelitem "Emistry_Shop",512;
    for(set .@i,0; .@i < getarraysize( @ItemLists ); set .@i,.@i+1)
    	npcshopadditem "Emistry_Shop",@ItemLists[.@i],@ItemCost[.@i];
    mes "Okay...wait awhile";
    mes "^00FF00____________________________^000000";
    CurrencyInfo( @Currency$ );
    mes "^00FF00____________________________^000000";
    callshop "Emistry_Shop",1;
    npcshopattach "Emistry_Shop";
    end;
    
    
    function	ShopSettings	{
    	switch( getarg(0) ){
    		Case 1: // RK/RG/GX
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],21051,21052,28765,28766,28044,28042,32023,32350,32024,32025;
    			// Item Price
    			setarray @ItemCost[0],300,300,200,100,300,300,300,300,300,300;
    			break;
    		Case 2: // War/Sorc/Rang
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],26158,2055,2056,26159,26160,28633,18185,18186,18187;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300;
    			break;
    		Case 3: // Gen/Mech/AB
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],1333,16092,28138,16093,16094,32351,26161,2057,16095;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300,300;
    			break;
    		Case 4: // SC/Sura/Musicians
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],28767,28768,18184,1865,1866,16096,26212,26213,32107,32108;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300,300;
    			break;
    		// Case 4,5,6.....etc...
    		default:
    			ErrorNotice( "Invalid Menu Selection for Menu "+@menu+"." );
    			close;
    	}
    
    
    if( @Currency$ == "" )
    	ErrorNotice( "Invalid Currency Setting in Menu "+@menu+" ." );
    if( getarraysize( @ItemCost ) != getarraysize( @ItemLists ) || getarraysize( @ItemLists ) != getarraysize( @ItemCost ) )
    	ErrorNotice( "Missing or Extra Value of Item or Cost Settings in Menu "+@menu+" ." );
    return;
    }
    
    function	ErrorNotice	{
    	mes "^FF0000ERROR^000000 - "+getarg(0);
    	mes "^00FF00____________________________^000000";
    	mes "Inform this Message to ^0000FFGame Staffs^000000 immediately !";
    	close;
    }
    
    function	CurrencyInfo	{
    	if( getitemname( atoi( getarg(0) ) ) != "null" ){
    		mes "Item Currency : ^FF0000"+getitemname( atoi( getarg(0) ) )+"^000000";
    		mes "Available Amount : ^0000FF"+ValueConvert( countitem( atoi( getarg(0) ) ) )+"^000000";
    	}else if( getitemname( atoi( getarg(0) ) ) == "null" ){
    		mes "Variable Currency : ^FF0000"+getarg(0)+"^000000";
    		mes "Available Amount : ^0000FF"+ValueConvert( getd( getarg(0) ) )+"^000000";
    	}
    return;
    }
    
    function	ValidateCost	{
    	if( getitemname( atoi( getarg(0) ) ) != "null" ){
    		if( countitem( atoi( getarg(0) ) ) < getarg(1) ) return 1;
    	}else{
    		if( getd( getarg(0) ) < getarg(1) ) return 1;
    	}
    return 0;
    }
    
    function ClearData	{
    	set @Currency$,"";
    	set @TotalCost,0;
    	deletearray @bought_nameid[0],getarraysize( @bought_nameid );
    	deletearray @bought_quantity[0],getarraysize( @bought_quantity );
    	deletearray @ItemLists[0],getarraysize( @ItemLists );
    	deletearray @ItemCost[0],getarraysize( @ItemCost );
    return;
    }
    
    function	ValueConvert	{
    	set .@num, atoi(""+getarg(0));
    	if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
    	set .@l, getstrlen(""+.@num);
    	for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
    		set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
    			if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
    	}
    	return .@num$;
    }
    
    OnBuyItem:
    	ShopSettings( @menu );
    	for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
    		for(set @j,0; @j < getarraysize( @ItemLists ); set @j,@j+1)
    			if( @ItemLists[@j] == @bought_nameid[@i] )
    			set @TotalCost,@TotalCost + ( @ItemCost[@j] * @bought_quantity[@i] );
    	mes "^FF0000       BILLING LIST^000000";
    	mes "^00FF00____________________________^000000";
    	for( set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1 )
    			mes "^FF0000"+@bought_quantity[@i]+" x ^0000FF"+getitemname( @bought_nameid[@i] )+"^000000";
    	mes "^00FF00____________________________^000000";
    
    	if( getitemname( atoi( @Currency$ ) ) != "null" )
    		mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" x "+getitemname( atoi( @Currency$ ) )+"^000000";
    	else if( getitemname( atoi( @Currency$ ) ) == "null" ){
    		mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" "+@Currency$+"^000000";
    	}
    
    	mes "^00FF00____________________________^000000";
    	if( ValidateCost( @Currency$,@TotalCost ) ){
    		if( getitemname( atoi( @Currency$ ) ) != "null" )
    			mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+getitemname( atoi( @Currency$ ) )+"^000000";
    		else{
    			mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+@Currency$+"^000000";
    		}
    	}else{
    		if( select( "^0000FFPurchase^000000:Cancel" ) == 1 ){
    			if( getitemname( atoi( @Currency$ ) ) != "null" )
    				delitem atoi( @Currency$ ),@TotalCost;
    			else{
    				set getd( @Currency$ ),getd( @Currency$ ) - @TotalCost;
    			}
    			for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
    				getitem @bought_nameid[@i],@bought_quantity[@i];
    			message strcharinfo(0),"Purchased "+getarraysize( @bought_nameid )+" Items.";
    			mes "Thank you for shopping.";
    		}
    	}
    ClearData();
    close;
    
    }

    2nd Duplicated Emistry's shop NOT WORKING
     

    // Settings :
    //	-	Only required to edit the ShopSetting() Function
    //			Notes : You may also add / remove Menu ( If any )
    //	-	Shop Currency can be either ItemID or Variable Name, but must write within Quotation Marks ( "" )
    //			Ex. of Variable.	->	Zeny , #CASHPOINTS , #KAFRAPOINTS , CustomVariable , #CustomVariable
    //	-	ERROR Message are used to show Invalid Settings in your NPC.
    
    
    // Leave this alone...
    -	shop	ExWeapon_Shop	-1,512:100
    
    
    aldeba_in,30,114,4	script	ExWeapons	953,{
    function ShopSettings;
    function ValidateCost;
    function CurrencyInfo;
    function ClearData;
    function ValueConvert;
    function ErrorNotice;
    
    mes "Each Shop from the Menu may purchase using ^FF0000Divi Coin^000000.";
    mes "^00FF00____________________________^000000";
    mes "So,Which shop you would like to look at it";
    next;
    // Menu Selection
    select("RK/RG/GX","War/Sorc/Rang","Gen/Mech/AB","SC/Sura/Musicians");
    
    ClearData();
    ShopSettings( @menu );
    npcshopitem "ExWeapon_Shop",512,100;
    npcshopdelitem "ExWeapon_Shop",512;
    for(set .@i,0; .@i < getarraysize( @ItemLists ); set .@i,.@i+1)
    	npcshopadditem "ExWeapon_Shop",@ItemLists[.@i],@ItemCost[.@i];
    mes "Okay...wait awhile";
    mes "^00FF00____________________________^000000";
    CurrencyInfo( @Currency$ );
    mes "^00FF00____________________________^000000";
    callshop "ExWeapon_Shop",1;
    npcshopattach "ExWeapon_Shop";
    end;
    
    
    function	ShopSettings	{
    	switch( getarg(0) ){
    		Case 1: // RK/RG/GX
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],21051,21052,28765,28766,28044,28042,32023,32350,32024,32025;
    			// Item Price
    			setarray @ItemCost[0],300,300,200,100,300,300,300,300,300,300;
    			break;
    		Case 2: // War/Sorc/Rang
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],26158,2055,2056,26159,26160,28633,18185,18186,18187;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300;
    			break;
    		Case 3: // Gen/Mech/AB
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],1333,16092,28138,16093,16094,32351,26161,2057,16095;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300,300;
    			break;
    		Case 4: // SC/Sura/Musicians
    			// Currency [ Item ID / Variable Name ]
    			set @Currency$,"6379";
    			// Item ID Lists
    			setarray @ItemLists[0],28767,28768,18184,1865,1866,16096,26212,26213,32107,32108;
    			// Item Price
    			setarray @ItemCost[0],300,300,300,300,300,300,300,300,300,300;
    			break;
    		// Case 4,5,6.....etc...
    		default:
    			ErrorNotice( "Invalid Menu Selection for Menu "+@menu+"." );
    			close;
    	}
    
    
    if( @Currency$ == "" )
    	ErrorNotice( "Invalid Currency Setting in Menu "+@menu+" ." );
    if( getarraysize( @ItemCost ) != getarraysize( @ItemLists ) || getarraysize( @ItemLists ) != getarraysize( @ItemCost ) )
    	ErrorNotice( "Missing or Extra Value of Item or Cost Settings in Menu "+@menu+" ." );
    return;
    }
    
    function	ErrorNotice	{
    	mes "^FF0000ERROR^000000 - "+getarg(0);
    	mes "^00FF00____________________________^000000";
    	mes "Inform this Message to ^0000FFGame Staffs^000000 immediately !";
    	close;
    }
    
    function	CurrencyInfo	{
    	if( getitemname( atoi( getarg(0) ) ) != "null" ){
    		mes "Item Currency : ^FF0000"+getitemname( atoi( getarg(0) ) )+"^000000";
    		mes "Available Amount : ^0000FF"+ValueConvert( countitem( atoi( getarg(0) ) ) )+"^000000";
    	}else if( getitemname( atoi( getarg(0) ) ) == "null" ){
    		mes "Variable Currency : ^FF0000"+getarg(0)+"^000000";
    		mes "Available Amount : ^0000FF"+ValueConvert( getd( getarg(0) ) )+"^000000";
    	}
    return;
    }
    
    function	ValidateCost	{
    	if( getitemname( atoi( getarg(0) ) ) != "null" ){
    		if( countitem( atoi( getarg(0) ) ) < getarg(1) ) return 1;
    	}else{
    		if( getd( getarg(0) ) < getarg(1) ) return 1;
    	}
    return 0;
    }
    
    function ClearData	{
    	set @Currency$,"";
    	set @TotalCost,0;
    	deletearray @bought_nameid[0],getarraysize( @bought_nameid );
    	deletearray @bought_quantity[0],getarraysize( @bought_quantity );
    	deletearray @ItemLists[0],getarraysize( @ItemLists );
    	deletearray @ItemCost[0],getarraysize( @ItemCost );
    return;
    }
    
    function	ValueConvert	{
    	set .@num, atoi(""+getarg(0));
    	if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
    	set .@l, getstrlen(""+.@num);
    	for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
    		set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
    			if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
    	}
    	return .@num$;
    }
    
    OnBuyItem:
    	ShopSettings( @menu );
    	for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
    		for(set @j,0; @j < getarraysize( @ItemLists ); set @j,@j+1)
    			if( @ItemLists[@j] == @bought_nameid[@i] )
    			set @TotalCost,@TotalCost + ( @ItemCost[@j] * @bought_quantity[@i] );
    	mes "^FF0000       BILLING LIST^000000";
    	mes "^00FF00____________________________^000000";
    	for( set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1 )
    			mes "^FF0000"+@bought_quantity[@i]+" x ^0000FF"+getitemname( @bought_nameid[@i] )+"^000000";
    	mes "^00FF00____________________________^000000";
    
    	if( getitemname( atoi( @Currency$ ) ) != "null" )
    		mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" x "+getitemname( atoi( @Currency$ ) )+"^000000";
    	else if( getitemname( atoi( @Currency$ ) ) == "null" ){
    		mes "Total Cost : ^0000FF"+ValueConvert( @TotalCost )+" "+@Currency$+"^000000";
    	}
    
    	mes "^00FF00____________________________^000000";
    	if( ValidateCost( @Currency$,@TotalCost ) ){
    		if( getitemname( atoi( @Currency$ ) ) != "null" )
    			mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+getitemname( atoi( @Currency$ ) )+"^000000";
    		else{
    			mes "[ ^FF0000X^000000 ] Insufficient ^0000FF"+@Currency$+"^000000";
    		}
    	}else{
    		if( select( "^0000FFPurchase^000000:Cancel" ) == 1 ){
    			if( getitemname( atoi( @Currency$ ) ) != "null" )
    				delitem atoi( @Currency$ ),@TotalCost;
    			else{
    				set getd( @Currency$ ),getd( @Currency$ ) - @TotalCost;
    			}
    			for(set @i,0; @i < getarraysize( @bought_nameid ); set @i,@i+1)
    				getitem @bought_nameid[@i],@bought_quantity[@i];
    			message strcharinfo(0),"Purchased "+getarraysize( @bought_nameid )+" Items.";
    			mes "Thank you for shopping.";
    		}
    	}
    ClearData();
    close;
    
    }

     

    In both instances I have tried reverting my changes but I get log errors saying the shop names are not unique and renamed to some gibberish and don't load.
    If I was to pick a shop I want to work more with, currently it is Emistry's but wanted to see what options I had
    Pre-Thank you

×
×
  • Create New...