This is my first script in which I use setd and getd to create a some what a MultiDimensional Array
prontera,153,169,4 script ItemGiver 123,{
//Configuration:
set .npcname$,"Item Giver";
set .arrayCounter,0;
//Categories
// This are the Categories of your Items
setd ".Categories_0$","Headgear";
setd ".Categories_1$","Armors";
setd ".Categories_2$","Footgears";
//Headgears
setd ".Item_0_0",501; //ItemID
setd ".Item_0_0_0",124; //Amount
setd ".Item_0_0_0_0",506; //Required ITEMID
setd ".Item_0_0_0_0_1",20; //Required Amount
setd ".Item_0_0_0_1",507; //Required ITEMID
setd ".Item_0_0_0_1_1",20; //Required Amount
setd ".Item_0_1",502; //ItemID
setd ".Item_0_1_0",124; //Amount
setd ".Item_0_1_0_0",506; //Required ITEMID
setd ".Item_0_1_0_0_1",20; //Required Amount
setd ".Item_0_1_0_1",507; //Required ITEMID
setd ".Item_0_1_0_1_1",20; //Required Amount
//Armors
setd ".Item_1_0",503; //ItemID
setd ".Item_1_0_0",20; //Amount
setd ".Item_1_0_0_0",506; //Required ITEMID
setd ".Item_1_0_0_0_1",20; //Required Amount
setd ".Item_1_0_0_1",507; //Required ITEMID
setd ".Item_1_0_0_1_1",20; //Required Amount
setd ".Item_1_1",504; //ItemID
setd ".Item_1_1_0",124; //Amount
setd ".Item_1_1_0_0",506; //Required ITEMID
setd ".Item_1_1_0_0_1",20; //Required Amount
setd ".Item_1_1_0_1",507; //Required ITEMID
setd ".Item_1_1_0_1_1",20; //Required Amount
//Footgears
setd ".Item_2_0",505; //ItemID
setd ".Item_2_0_0",20; //Amount
//Format:
//.Item_Cateogry_ItemID_0_RequiredITEMID
//.Item_Cateogry_ItemID_0_RequiredITEMID_AMOUNT = 1
setd ".Item_2_0_0_0",506; //Required ITEMID
setd ".Item_2_0_0_0_1",20; //Required Amount
setd ".Item_2_0_0_1",507; //Required ITEMID
setd ".Item_2_0_0_1_1",20; //Required Amount
setd ".Item_2_0_0_2",508; //Required ITEMID
setd ".Item_2_0_0_2_1",20; //Required Amount
setd ".Item_2_0_0_3",508; //Required ITEMID
setd ".Item_2_0_0_3_1",20; //Required Amount
mes .npcname$;
mes "Hello how may I help you?";
callsub CountArrayString,".Categories_",""; //Count the Elements to a given setd array
set .makeMenu$,"";
set .categoryCount,.arrayCounter;
for(set .i,0;.i<.arrayCounter;set .i,.i+1)
{
if(.makeMenu$=="")
set .makeMenu$,getd(".Categories_"+.i+"$");
else
set .makeMenu$,.makeMenu$+":"+getd(".Categories_"+.i+"$");
}
set .selectMenu,select(.makeMenu$);
mes getd(".Categories_"+(.selectMenu-1)+"$");
set .makeMenu$,"";
callsub CountArrayInt,".Item_"+(.selectMenu-1)+"_",(-1); //Count the Elements to a given setd array
for(set .j,0;.j<.arrayCounter;set .j,.j+1)
{
if(.makeMenu$=="")
set .makeMenu$,"["+getd(".Item_"+(.selectMenu-1)+"_"+.j+"_0")+" pc(s).] - "+getitemname(getd(".Item_"+(.selectMenu-1)+"_"+.j));
else
set .makeMenu$,.makeMenu$+":"+"["+getd(".Item_"+(.selectMenu-1)+"_"+.j+"_0")+" pc(s).] - "+getitemname(getd(".Item_"+(.selectMenu-1)+"_"+.j));
}
set .selectItem,select(.makeMenu$);
callsub CountArrayInt,".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_",(-1); //Count the Elements to a given setd array
next;
set .isNotAllowed,2;
mes .npcname$;
mes "Requirements:";
for(set .i,0; .i<.arrayCounter;set .i,.i+1)
{
mes "["+getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i+"_1")+" pcs. ] "+getitemname(getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i));
if(countitem(getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i)) < getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i+"_1"))
{
set .isNotAllowed,1;
}
}
set .yesno,select("Yes:No");
if(.yesno==1 && .isNotAllowed==2)
{
for(set .i,0; .i<.arrayCounter;set .i,.i+1)
{
delitem getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i),getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0_"+.i+"_1");
}
getitem getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)),getd(".Item_"+(.selectMenu-1)+"_"+(.selectItem-1)+"_0");
}
else
{
next;
mes .npcname$;
mes "You do not meet the requirements";
mes "Please go away!";
}
close;
CountArrayInt:
//Use Count Array Like Integer Variables
set .arrayCounter,0;
while(1)
{
if(getarg(1)>=0)
set .arrname$,getarg(0)+(.arrayCounter)+getarg(1);
else
set .arrname$,getarg(0)+(.arrayCounter);
if(getd(.arrname$)==0)
{
set .arrname$,"";
return;
}
else
{
set .arrayCounter,.arrayCounter+1;
continue;
}
}
end;
CountArrayString:
//Use Count Array Like String Variables
set .arrayCounter,0;
while(1)
{
if(getarg(1)!="")
set .arrname$,getarg(0)+(.arrayCounter)+getarg(0)+"$";
else
set .arrname$,getarg(0)+(.arrayCounter)+"$";
if(getstrlen(getd(.arrname$))==0)
{
set .arrname$,"";
return;
}
else
{
set .arrayCounter,.arrayCounter+1;
continue;
}
}
end;
}