Jump to content
  • 0

Question Regards Emistry's Multi Currency Shop


Yonko

Question


  • Group:  Members
  • Topic Count:  166
  • Topics Per Day:  0.03
  • Content Count:  789
  • Reputation:   50
  • Joined:  04/16/12
  • Last Seen:  

can i use vote for points there as a variable??

http://rathena.org/board/files/file/2504-multi-currency-shop/

Link to comment
Share on other sites

7 answers to this question

Recommended Posts


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2370
  • Joined:  10/28/11
  • Last Seen:  

yes

edit here.

// Currency [ Item ID / Variable Name ]
  set @Currency$,"#CASHPOINTS";

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  166
  • Topics Per Day:  0.03
  • Content Count:  789
  • Reputation:   50
  • Joined:  04/16/12
  • Last Seen:  

i used jaypee's voteforpoints but seems i can't find the variable for the points here's the script of jaypee

//====================================================================================
//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
//====================================================================================

prontera,164,167,5 script VoteForPoints 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(7078,1,20,"Wrath of Valkyrie");
add_item(7086,1,20,"Emblem of Sun God");
add_item(7088,1,20,"Snow Crystal");
add_item(7090,1,20,"Ripple");
add_item(7083,1,20,"Spirit of Fish");
add_item(7076,1,20,"Wheel of Unknown");
add_item(7089,1,20,"Omen of Tempest");
add_item(7077,1,20,"Silver Ornament");
add_item(7227,1,30,"TCG");
add_item(13583,1,15,"Convex Mirror Box");
add_item(13543,1,2,"FCP Helm Scroll");
add_item(13544,1,2,"FCP Shield Scroll");
add_item(13545,1,2,"FCP Armor Scroll");
add_item(13546,1,2,"FCP Weapon Scroll");
add_item(13745,1,10,"Holy Armor Scroll Box");
add_item(13742,1,10,"Shadow Armor Scroll Box");
add_item(13829,1,5,"Resist Potions Box");



//Script Start
mes .npcname$;
mes "Hi! Do you want to exchange your vote points?:";
switch(select("Yes, I want to exchange my points:See 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 "Item ID:"+.@rItemID;
mes "Item Name: "+getitemname(.@rItemID);
mes "Item Quantity: "+.@rquantity+" pc(s).";
mes "Required Points: "+.@rpoints+" pt(s).";
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. ";
}
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(.@detail$ == "ItemID")
return @ItemID[.@key];
else if((.@detail$ == "Quantity") || (.@detail$ == "quantity"))
return @itemQ[.@key];
else if((.@detail$ == "Points") || (.@detail$ == "points"))
return @points[.@key];
else if((.@detail$ == "Category") || (.@detail$ == "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(.@selectedCat$ == @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;
}
}

Edited by Euphy
Codeboxed.
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2370
  • Joined:  10/28/11
  • Last Seen:  

query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+.@account_id+" LIMIT 1",.@points);

then it's stored in..

.@points

there is 1 way you can do it...

OnPCLoginEvent:
query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+getcharid(3)+" LIMIT 1",.@points);
#Vote_Points += .@points;
query_sql("UPDATE `cp_v4p_voters` SET `points`= 0 WHERE account_id="+getcharid(3)+" LIMIT 1" );
end;

and the vote point is stored inside

#Vote_Points

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  166
  • Topics Per Day:  0.03
  • Content Count:  789
  • Reputation:   50
  • Joined:  04/16/12
  • Last Seen:  

where to put that part on the script?

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10018
  • Reputation:   2370
  • Joined:  10/28/11
  • Last Seen:  

just add it inside the script .... or add as another script

refer Adding_a_Script

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  166
  • Topics Per Day:  0.03
  • Content Count:  789
  • Reputation:   50
  • Joined:  04/16/12
  • Last Seen:  

yeah i know that but the edited part you made where to insert that codes in the script?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  166
  • Topics Per Day:  0.03
  • Content Count:  789
  • Reputation:   50
  • Joined:  04/16/12
  • Last Seen:  

is this correct??

// 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 VPS_Shop -1,512:100


prontera,146,148,5 script Vote Shop 757,{
function ShopSettings;
function ValidateCost;
function CurrencyInfo;
function ClearData;
function ValueConvert;
function ErrorNotice;

query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+.@account_id+" LIMIT 1",.@points);

OnPCLoginEvent:
query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+getcharid(3)+" LIMIT 1",.@points);
#Vote_Points += .@points;
query_sql("UPDATE `cp_v4p_voters` SET `points`= 0 WHERE account_id="+getcharid(3)+" LIMIT 1" );
end;

mes "Each Shop from the Menu may purchase using ^FF0000Different Currency^000000.";
mes "^00FF00____________________________^000000";
mes "So,Which shop you would like to look at it";
next;
// Menu Selection
select("Vote Shop 1","Vote Shop 2");

ClearData();
ShopSettings( @menu );
npcshopitem "VPS_Shop",512,100;
npcshopdelitem "VPS_Shop",512;
for(set .@i,0; .@i < getarraysize( @ItemLists ); set .@i,.@i+1)
npcshopadditem "VPS_Shop",@ItemLists[.@i],@ItemCost[.@i];
mes "Okay...wait awhile";
mes "^00FF00____________________________^000000";
CurrencyInfo( @Currency$ );
mes "^00FF00____________________________^000000";
callshop "VPS_Shop",1;
npcshopattach "VPS_Shop";
end;


function ShopSettings {
switch( getarg(0) ){
Case 1:
// Currency [ Item ID / Variable Name ]
set @Currency$,"#Vote_Points";
// Item ID Lists
setarray @ItemLists[0],6153,7227;
// Item Price
setarray @ItemCost[0],100,1;
break;
Case 2:
// Currency [ Item ID / Variable Name ]
set @Currency$,"#Vote_Points";
// Item ID Lists
setarray @ItemLists[0],2306,2302,2303,2304,2305,2301;
// Item Price
setarray @ItemCost[0],2,2,3,4,5,6;
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;

OnInit:
waitingroom "Vote Shop",0;


}

Edited by Emistry
Please use [CODEBOX] or Attachments for long contents.
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...