Can someone help me with this script that will allow players to view the items listed like a dynamic shop?
//====================================================================================
//Script Name: Vote For Points NPC Script for FluxCP
//SVN: Tested in rAthena r156513
//Developed By: JayPee Mateo
//Version: 1.0
//Requirement(s): FluxCP V4P Addon
//Description: This is a npc script for FluxCP Vote for points in order for the players
//to claim their vote points
//====================================================================================
mellina,98,96,3 script V4P Redeemer 89,{
//Function Prototypes
function garbagecol;//Garbage collection for the Character variables
garbagecol();
function add_item; //Syntanx: add_item(ITEMID,QUANTITY,POINTS,CATEGORY);
function makeCategory;//This will return a list of the categories
function getItemsByCat;//This will return the list of items associated to the particular category
function getItemDetails;//This will return the details of the item
function getPoints;//This will return the points of the player stored in the database
function updatePoints;//This will updates the points of the player stored in the database
//NPC Name
set .npcname$,"[ Vote For Points ]";
//Initialization of the Rewards
add_item(32069,1,500,"Upper/Middle/Lower");
add_item(32068,1,200,"Upper/Middle/Lower");
add_item(32168,1,150,"Upper/Middle/Lower");
add_item(32180,1,300,"Upper/Middle/Lower");
add_item(32159,1,700,"Upper/Middle/Lower");
add_item(32177,1,270,"Upper/Middle/Lower");
add_item(32176,1,350,"Upper/Middle/Lower");
add_item(32171,1,250,"Upper/Middle/Lower");
add_item(32167,1,350,"Upper/Middle/Lower");
add_item(32166,1,250,"Upper/Middle/Lower");
add_item(32162,1,500,"Upper/Middle/Lower");
add_item(32151,1,100,"Upper/Middle/Lower");
add_item(32080,1,500,"Upper/Middle/Lower");
add_item(32045,1,200,"Upper/Middle/Lower");
// Costume Box
add_item(32562,1,100,"Costume Headgears Box");
add_item(32563,1,100,"Costume Headgears Box");
add_item(32564,1,100,"Costume Headgears Box");
add_item(32565,1,100,"Costume Headgears Box");
add_item(32566,1,100,"Costume Headgears Box");
//Script Start
mes .npcname$;
mes "Hi! Do you want to exchange your vote points?";
switch(select("Exchange Points:Check my Points"))
{
case 1:
next;
mes .npcname$;
mes "Please choose a category:";
set .@selected,select(makeCategory())-1;
next;
mes .npcname$;
mes "Please the item you want:";
set .@selected,select(getItemsByCat(@listCat$[.@selected]))-1;
next;
mes .npcname$;
set .@ritemid,getItemDetails(@itemKeys[.@selected],"itemid");
set .@rquantity,getItemDetails(@itemKeys[.@selected],"quantity");
set .@rpoints,getItemDetails(@itemKeys[.@selected],"points");
mes "ID#: "+.@ritemid;
mes "Item Name: "+getitemname(.@ritemid);
mes "Item Quantity: "+.@rquantity+" x";
mes "Required Points: "+.@rpoints+" x";
mes "\n";
mes "Do you want to this item?";
if(select("Yes:No")==1)
{
set .@points,getPoints(getcharid(3));
if(.@points>=.@rpoints)
{
next;
mes .npcname$;
updatePoints(getcharid(3),.@rpoints);
getitem .@ritemid,.@rquantity;
mes "Here you go!. Thank you for voting. Don't forget to vote again. :D";
}
else
mes "Sorry, you do not have enough points for this item.";
}
else
{
next;
mes .npcname$;
mes "Okay bye!";
}
garbagecol();
close;
case 2:
next;
mes .npcname$;
set .@points,getPoints(getcharid(3));
mes "You currently have "+.@points+" pt(s).";
garbagecol();
close;
}
end;
//Functions Bodies
function updatePoints {
set .@account_id,getarg(0);
set .@usedPoints,getarg(1);
query_sql("UPDATE `cp_v4p_voters` SET points=(points-"+.@usedPoints+") WHERE account_id='"+.@account_id+"'");
return;
}
function getPoints {
set .@account_id,getarg(0);
query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+.@account_id+" LIMIT 1",.@points);
if(getarraysize(.@points)==0)
return 0;
return .@points[0];
}
function getItemDetails {
set .@key,getarg(0); //Key
set .@detail$,getarg(1); //What details to return such as ItemID, Points, Quantity, Category
if(strtolower(.@detail$) == strtolower("ItemID"))
return @itemID[.@key];
else if(strtolower(.@detail$) == strtolower("Quantity"))
return @itemQ[.@key];
else if(strtolower(.@detail$) == strtolower("Points"))
return @points[.@key];
else if(strtolower(.@detail$) == strtolower("Category"))
return @category$[.@key];
}
function getItemsByCat {
set .@selectedCat$,getarg(0);
set .@make_string$,"";
set .@x,0;
for(set .@i,0; .@i<getarraysize(@category$); set .@i,.@i+1)
{
if(strtolower(.@selectedCat$) == strtolower(@category$[.@i]))
{
setarray @itemKeys[.@x],.@i;
if(.@make_string$ == "")
set .@make_string$,getitemname(@itemID[.@i]);
else
set .@make_string$,.@make_string$+":"+getitemname(@itemID[.@i]);
set .@x,.@x+1;
}
}
return .@make_string$;
}
function makeCategory {
set .@make_string$,"";
for(set .@i,0; .@i<getarraysize(@category$); set .@i,.@i+1)
{
if(.@make_string$ == "")
{
setarray @listCat$[getarraysize(@listCat$)],@category$[.@i];
set .@make_string$,@category$[.@i];
}
else
{
if(compare(.@make_string$,@category$[.@i])==0)
{
setarray @listCat$[getarraysize(@listCat$)],@category$[.@i];
set .@make_string$,.@make_string$+":"+@category$[.@i];
}
}
}
return .@make_string$;
}
function add_item
{
set .@itemID,getarg(0,-1); //IteID
set .@itemQ,getarg(1,-1); //Item Quantity
set .@points,getarg(2,-1);
set .@cat$,getarg(3,"Uncategorized"); //Category
if(.@itemID == -1)
{
debugmes "Invalid Item ID. Script not completely loaded.";
end;
}
else if(.@itemQ == -1)
{
debugmes "Invalid Item Quantity. Script not completely loaded.";
end;
}
else if(.@points == -1)
{
debugmes "Points assignment error. Script not completely loaded.";
end;
}
set .@key,getarraysize(@itemID);
setarray @itemID[.@key],.@itemID;
setarray @itemQ[.@key],.@itemQ;
setarray @points[.@key],.@points;
setarray @category$[.@key],.@cat$;
return 1; //return 1 as success
}
function garbagecol{
deletearray @itemID[0],128;
deletearray @itemQ[0],128;
deletearray @points[0],128;
deletearray @category$[0],128;
deletearray @listCat$[0],128;
deletearray @itemKeys[0],128;
return;
}
}