How can i find the NPC for the VIP System?
- script vip -1,{
//*********************************************************************
// VIP System for eAthena servers Version 3.0
//*********************************************************************
// It allows you to boost experience and drop rate for players who donate
// for a specified amount of days.
// It makes use of account's GM Levels to specify the account type,
// by default values are these:
// - Account Level 0 = Non VIP Account
// - Account Level 1 = VIP Silver Account
// - Account Level 2 = VIP Gold Account
// - Account Level 3 = VIP Platinum Account
// all of them, of course, customizable ;).
// ¡Therefore, you can also set =atcommands= for every account level in
// [yourserver]/conf/atcommand_athena.conf ! Isn't that great?! :D
// In other words, VIP players can have access to more @commands than
// normal users if you want. This will add more value to the service.
//
// Add, List, Modify and Remove VIP accounts via whisper to this NPC.
// Manage VIP accounts in-game! Just whisper any text to the npc "vip"
// to access the VIP management menu.
//
// This script requires some database modifications for it to work,
// check them at the original post where I posted this script.
// URI:
//
// Created by: Victor H. Olvera (VicThor)
// If you like this, please donate to paypal:
[email protected]
// I'd really like to make more scripts like this, so help if you can!
//
// If you want any special modification or adaptation of this script,
// please! feel free to e-mail me at
[email protected] I'm $ure I can
// provide you with something according to your need$ :)
// Modify by
[email protected] or
[email protected] ====> compatible for both servers
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
//**************** VIP SYSTEM CONFIGURATION *************************
set $VIPs_SilverAccLevel,1; // Account Level assigned for VIP Silver *
set $VIPs_GoldAccLevel,2; // Account Level assigned for VIP Gold *
set $VIPs_PlatinumAccLevel,3; // Account Level assigned for VIP Platinum *
set $VIPs_SilverExpRate,50; // VIP Silver Exp Boost in % ( 1 = 1% ) *
set $VIPs_GoldExpRate,100; // VIP Gold Exp Boost in % ( 1 = 1% ) *
set $VIPs_PlatinumExpRate,150; // VIP Platinum Exp Boost in % ( 1 = 1% ) *
set $VIPs_SilverItemRate,10; // VIP Silver Item Drop Boost in % ( 1 = 1% ) *
set $VIPs_GoldItemRate,20; // VIP Gold Item Drop Boost in % ( 1 = 1% ) *
set $VIPs_PlatinumItemRate,30; // VIP Platinum Item Drop Boost in % ( 1 = 1%)*
set $VIPs_AdminGmLevel,99; // Define GM Level enabled to add, list and *
// remove VIP entries. Any GM with access le- *
// vel equal or higher than this will be able *
// to manage VIP Accounts. *
// ********************************************************************
//
// Actions and checks when player logs in about his/her account type status.
OnPCLoginEvent:
// Obtain account data
set
[email protected]$,query_sql("SELECT `account_type` FROM login WHERE `account_id` = "+getcharid(3)+";",
[email protected]$);
// First of all deACTIVEte all VIP benefits
sc_end sc_expboost;
sc_end sc_itemboost;
// If account type is PLATINUM
if (
[email protected]$ == "PLATINUM")
{
// Dialy Bonus WOIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ================================================================
if(#dailytimer < gettimetick(2)) {
announce "Here's your prize, you'll get another one after 24 hours.",bc_self,0x0099FF;
getitem 21001,1; //remove <id> and add your own ids for item
set #dailytimer,gettimetick(2) + 86400; //24 hours.
}
set
[email protected],query_sql("SELECT `status` FROM `vip_platinum` WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Get account type status
set
[email protected]$,query_sql("SELECT DATE_FORMAT(`end_date`, '%Y %m %d') FROM vip_platinum WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Get expiration date
if (gettimestr("%Y %m %d",21) >=
[email protected]$) // If current date is higher than expiration date...
{
// terminateVip function on line 430, removes player VIP entry from database table "vip_platinum"
callsub terminateVip,"vip_platinum",getcharid(3); goto L_displayInfo;
}
// If expiration date has not arrived yet, ACTIVEte VIP benefits.
else
{
sc_start sc_expboost,1000*60*60*24,$VIPs_PlatinumExpRate;
sc_start sc_itemboost,1000*60*60*24,$VIPs_PlatinumItemRate; goto L_displayInfo;
}
}
if (
[email protected]$ == "GOLD")
{
// Dialy Bonus WOIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ================================================================
if(#dailytimer < gettimetick(2)) {
announce "Here's your prize, you'll get another one after 24 hours.",bc_self,0x0099FF;
getitem 21001,1; //remove <id> and add your own ids for item
set #dailytimer,gettimetick(2) + 86400; //24 hours.
}
set
[email protected],query_sql("SELECT `status` FROM `vip_gold` WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener el estado de la cuenta
set
[email protected]$,query_sql("SELECT DATE_FORMAT(`end_date`, '%Y %m %d') FROM vip_gold WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener Fecha de expiración
if (gettimestr("%Y %m %d",21) >=
[email protected]$) // Si la fecha de HOY es mayor que la fecha de expiración...
{
// terminateVip function on line 430, removes player VIP entry from database table "vip_gold"
callsub terminateVip,"vip_gold",getcharid(3); goto L_displayInfo;
}
// If expiration date has not arrived yet, ACTIVEte VIP benefits.
else
{
sc_start sc_expboost,1000*60*60*24,$VIPs_GoldExpRate;
sc_start sc_itemboost,1000*60*60*24,$VIPs_GoldItemRate; goto L_displayInfo;
}
}
if (
[email protected]$ == "SILVER")
{
// Dialy Bonus WOIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ================================================================
if(#dailytimer < gettimetick(2)) {
announce "Here's your prize, you'll get another one after 24 hours.",bc_self,0x0099FF;
getitem 21001,1; //remove <id> and add your own ids for item
set #dailytimer,gettimetick(2) + 86400; //24 hours.
}
set
[email protected],query_sql("SELECT `status` FROM `vip_silver` WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener el estado de la cuenta
set
[email protected]$,query_sql("SELECT DATE_FORMAT(`end_date`, '%Y %m %d') FROM vip_silver WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener Fecha de expiración
if (gettimestr("%Y %m %d",21) >=
[email protected]$) // Si la fecha de HOY es mayor que la fecha de expiración...
{
// terminateVip function on line 430, removes player VIP entry from database table "vip_silver"
callsub terminateVip,"vip_silver",getcharid(3); goto L_displayInfo;
}
// If expiration date has not arrived yet, ACTIVEte VIP benefits.
else
{
sc_start sc_expboost,1000*60*60*24,$VIPs_SilverExpRate;
sc_start sc_itemboost,1000*60*60*24,$VIPs_SilverItemRate; goto L_displayInfo;
}
}
// If account type is normal, just display account type information.
if (
[email protected]$ == "NORMAL")
{
set
[email protected],query_sql("SELECT `status` FROM `vip_silver` WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener el estado de la cuenta
set
[email protected]$,query_sql("SELECT DATE_FORMAT(`end_date`, '%Y %M %d') FROM vip_silver WHERE `account_id` = "+getcharid(3)+";",
[email protected]$); // Obtener Fecha de expiración
goto L_displayInfo;
}
// Displays account type status on login on chat window.
L_displayInfo:
dispbottom "----------------------------------------------------------------------";
dispbottom "Account type: "
[email protected]$;
dispbottom "Status: "
[email protected]$;
dispbottom "Expiration date: "
[email protected]$;
dispbottom "----------------------------------------------------------------------";
end;
OnWhisperGlobal:
if ( getgmlevel() < 99 ) end;
On_gm:
set
[email protected]$,"[VIP System]";
mes
[email protected]$;
mes "Welcome, "+strcharinfo(0)+"!";
mes "¿What can I do for you today?";
next;
switch(select("VIP Silver Menu:VIP Gold Menu:VIP Platinum Menu:Quit"))
{
case 1: // VIP Silver
next;
mes
[email protected]$;
mes "[VIP SILVER]";
switch(select("Add/Extend Account:Delete Account:List Accounts:Back"))
{
case 1: // Add/Extend
mes "Type the Account Name";
mes "you wish to add.";
input
[email protected]$;
next;
mes
[email protected]$;
mes "[VIP SILVER]";
mes "Type the number of days you";
mes "wish to add to the account's VIP";
mes "status.";
next;
mes
[email protected]$;
mes "[VIP SILVER]";
input
[email protected];
// Fetch account's ID using the name of the account previously typed.
set
[email protected],query_sql("SELECT `account_id`FROM login WHERE `userid` = '"
[email protected]$+"';",
[email protected]);
mes "Identifying account: "
[email protected]$+".";
sleep2 rand(100,2000); // Looks like it's working on something :P
if (
[email protected]) // Let's verify if the entered account exists or GM is just high...
{
mes "ERROR: Couldn't find account.";
mes "Verify if you dind't make a typo.";
close;
}
else
{ // Now lets check if the account is already 'vip_silver'
set
[email protected],query_sql("SELECT `account_id` FROM vip_silver WHERE `account_id` = "
[email protected]+";",
[email protected]);
if (
[email protected] ==
[email protected]) // If the account is already VIP we will update instead of inserting a new entry.
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("UPDATE vip_silver SET end_date = DATE_ADD(end_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE vip_silver SET `status` = 'ACTIVE' WHERE account_id = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'SILVER' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" updated";
mes "successfuly!";
close;
}
else // If the account is not already a VIP Silver one, add a new entry.
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("INSERT INTO vip_silver (`account_id`,`account_name`,`start_date`,`end_date`,`status`) VALUES ("
[email protected]+",'"
[email protected]$+"','"+gettimestr("%Y-%m-%d",21)+"','"+gettimestr("%Y-%m-%d",21)+"','ACTIVE');");
sleep2 100;
query_sql("UPDATE vip_silver SET end_date = DATE_ADD(start_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE `login` SET `group_id` = 1 WHERE `account_id` = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'SILVER' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" added";
mes "successfuly!";
close;
}
}
close;
case 2: // Delete
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_silver LIMIT 0,127;",
[email protected]_1$); // query_sql can only display the first 128 lines of a table. This is so sad :(
if ( getarraysize(
[email protected]_1$) == 0 )
{
mes "There are currently no VIP";
mes "Silver accounts.";
close;
}
else
{
mes "Select the account you wish ";
mes "to remove from VIP system.";
set
[email protected]$, "1. "+
[email protected]_1$;
for (set
[email protected],1;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1 )
set
[email protected]$,
[email protected]$ +":"+ (
[email protected]+1) +". "+
[email protected]_1$[
[email protected]];
set
[email protected]$,
[email protected]$ +":Cancel";
next;
mes
[email protected]$;
mes "[VIP SILVER]";
set
[email protected], select(
[email protected]$) -1;
if (
[email protected] == getarraysize(
[email protected]_1$) ) { next; goto On_gm; }
mes "Are you sure you want to remove the account ";
mes
[email protected]_1$[
[email protected]] +" ?";
if ( select( "Yes:No" ) == 2 ) { next; goto On_gm; }
query_sql ("UPDATE `login` SET `group_id` = 0 WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
query_sql ("DELETE FROM vip_silver WHERE account_name = '"
[email protected]_1$[
[email protected]]+"';");
query_sql("ALTER TABLE vip_silver AUTO_INCREMENT = 1;");
query_sql("UPDATE `login` SET `account_type` = 'NORMAL' WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
mes "VIP Silver account successfuly deleted!.";
close;
}
close;
case 3: // List
mes "VIP Silver accounts list:";
// List up to 127 vip accounts
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_silver LIMIT 0, 127;",
[email protected]_1$);
for (set
[email protected],0;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1)
mes (
[email protected]+1)+". "
[email protected]_1$[
[email protected]]; // You may want to add a next; command and a new LIMIT 128,255 sentence, in case you need to store and display more than 128 VIP accounts.
close;
case 4: // Back
goto On_gm;
}
case 2: // Gold Menu
next;
mes
[email protected]$;
mes "[VIP GOLD]";
switch(select("Add/Extend Account:Delete Account:List Accounts:Back"))
{
case 1: // Add
mes "Type the Account Name";
mes "you wish to add.";
input
[email protected]$;
next;
mes
[email protected]$;
mes "[VIP GOLD]";
mes "Enter the amount of days you";
mes "want to add to this account";
mes "status.";
next;
mes
[email protected]$;
mes "[VIP GOLD]";
input
[email protected];
// Fetch account's ID using the name of the account previously typed.
set
[email protected],query_sql("SELECT `account_id`FROM login WHERE `userid` = '"
[email protected]$+"';",
[email protected]);
mes "Identificando Cuenta: "
[email protected]$+".";
sleep2 rand(100,2000);
if (
[email protected]) // Checks if account exists.
{
mes "ERROR: Couldn't find account.";
mes "Verify the account you typed";
close;
}
else
{ // Verify if account is already 'vip_gold'
set
[email protected],query_sql("SELECT `account_id` FROM vip_gold WHERE `account_id` = "
[email protected]+";",
[email protected]);
if (
[email protected] ==
[email protected]) // If it exists, update, not insert
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("UPDATE vip_gold SET end_date = DATE_ADD(end_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE vip_gold SET `status` = 'ACTIVE' WHERE account_id = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'GOLD' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" updated";
mes "successfuly!";
close;
}
else // If this account is not already 'vip_gold', add an entry.
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("INSERT INTO vip_gold (`account_id`,`account_name`,`start_date`,`end_date`,`status`) VALUES ("
[email protected]+",'"
[email protected]$+"','"+gettimestr("%Y-%m-%d",21)+"','"+gettimestr("%Y-%m-%d",21)+"','ACTIVE');");
sleep2 100;
query_sql("UPDATE vip_gold SET end_date = DATE_ADD(start_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE `login` SET `group_id` = 2 WHERE `account_id` = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'GOLD' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" updated";
mes "successfuly!";
close;
}
}
close;
case 2: // Delete
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_gold LIMIT 0,127;",
[email protected]_1$);
if ( getarraysize(
[email protected]_1$) == 0 )
{
mes "There are currently no VIP";
mes "accounts.";
close;
}
else
{
mes "Select the account you wish ";
mes "to remove from VIP system Gold.";
set
[email protected]$, "1. "+
[email protected]_1$;
for (set
[email protected],1;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1 )
set
[email protected]$,
[email protected]$ +":"+ (
[email protected]+1) +". "+
[email protected]_1$[
[email protected]];
set
[email protected]$,
[email protected]$ +":Cancel";
next;
mes
[email protected]$;
mes "[VIP GOLD]";
set
[email protected], select(
[email protected]$) -1;
if (
[email protected] == getarraysize(
[email protected]_1$) ) { next; goto On_gm; }
mes "Are you sure you want to remove the account ";
mes
[email protected]_1$[
[email protected]] +" ?";
if ( select( "Yes:No" ) == 2 ) { next; goto On_gm; }
query_sql ("UPDATE `login` SET `group_id` = 0 WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
query_sql ("DELETE FROM vip_gold WHERE account_name = '"
[email protected]_1$[
[email protected]]+"';");
query_sql("ALTER TABLE vip_gold AUTO_INCREMENT = 1;");
query_sql("UPDATE `login` SET `account_type` = 'NORMAL' WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
mes "VIP Gold account successfuly deleted!.";
close;
}
close;
case 3: // List
mes "List Accounts VIP Gold:";
// List only 128 accounts due to eAthena's limitations :( very sad indeed.
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_gold LIMIT 0,127;",
[email protected]_1$);
for (set
[email protected],0;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1)
mes (
[email protected]+1)+". "
[email protected]_1$[
[email protected]];
close;
case 4: // Back
goto On_gm;
}
case 3: // Menu VIP Platinum
next;
mes
[email protected]$;
mes "[VIP PLATINUM]";
switch(select("Add/Extend Account:Delete Account:List Accounts:Back"))
{
case 1: // Add
mes "Type the Account Name";
mes "you wish to add.";
input
[email protected]$;
next;
mes
[email protected]$;
mes "[VIP PLATINUM]";
mes "Enter the amount of days you";
mes "will add to this account's";
mes "status.";
next;
mes
[email protected]$;
mes "[VIP PLATINUM]";
input
[email protected];
// Fetch account's ID using the name of the account previously typed.
set
[email protected],query_sql("SELECT `account_id`FROM login WHERE `userid` = '"
[email protected]$+"';",
[email protected]);
mes "Identificando Cuenta: "
[email protected]$+".";
sleep2 rand(100,2000);
if (
[email protected]) // Checks if account exists
{
mes "ERROR: Couldn't find this account";
mes "Enter the account correctly";
close;
}
else
{ // Is this account a 'vip_platinum' already?
set
[email protected],query_sql("SELECT `account_id` FROM vip_platinum WHERE `account_id` = "
[email protected]+";",
[email protected]);
if (
[email protected] ==
[email protected]) // If this account is 'vip_platinum' update instead of insterting a new entry.
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("UPDATE vip_platinum SET end_date = DATE_ADD(end_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE vip_platinum SET `status` = 'ACTIVE' WHERE account_id = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'PLATINUM' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" updated";
mes "successfuly!";
close;
}
else // If it's not VIP already, insert a new entry
{
mes "Account ID: "
[email protected]+".";
sleep2 rand(100,850);
query_sql("INSERT INTO vip_platinum (`account_id`,`account_name`,`start_date`,`end_date`,`status`) VALUES ("
[email protected]+",'"
[email protected]$+"','"+gettimestr("%Y-%m-%d",21)+"','"+gettimestr("%Y-%m-%d",21)+"','ACTIVE');");
sleep2 100;
query_sql("UPDATE vip_platinum SET end_date = DATE_ADD(start_date, INTERVAL "
[email protected]+" DAY) WHERE account_id = "
[email protected]+";");
query_sql("UPDATE `login` SET `group_id` = 3 WHERE `account_id` = "
[email protected]+";");
query_sql("UPDATE login SET `account_type` = 'PLATINUM' WHERE account_id = "
[email protected]+";");
mes "Account "
[email protected]+" updated";
mes "successfuly!";
close;
}
}
close;
case 2: // Delete
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_platinum LIMIT 0,127;",
[email protected]_1$);
if ( getarraysize(
[email protected]_1$) == 0 )
{
mes "There are currently no VIP";
mes "Platinum accounts.";
close;
}
else
{
mes "Select the account you wish ";
mes "to remove from VIP system Platinum.";
set
[email protected]$, "1. "+
[email protected]_1$;
for (set
[email protected],1;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1 )
set
[email protected]$,
[email protected]$ +":"+ (
[email protected]+1) +". "+
[email protected]_1$[
[email protected]];
set
[email protected]$,
[email protected]$ +":Cancel";
next;
mes
[email protected]$;
mes "[VIP PLATINUM]";
set
[email protected], select(
[email protected]$) -1;
if (
[email protected] == getarraysize(
[email protected]_1$) ) { next; goto On_gm; }
mes "Are you sure you want to remove the account ";
mes
[email protected]_1$[
[email protected]] +" ?";
if ( select( "Yes:No" ) == 2 ) { next; goto On_gm; }
query_sql ("UPDATE `login` SET `group_id` = 0 WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
query_sql ("DELETE FROM vip_platinum WHERE account_name = '"
[email protected]_1$[
[email protected]]+"';");
query_sql("ALTER TABLE vip_platinum AUTO_INCREMENT = 1;");
query_sql("UPDATE `login` SET `account_type` = 'NORMAL' WHERE `userid` = '"
[email protected]_1$[
[email protected]]+"';");
mes "VIP Platinum account successfuly deleted!.";
close;
}
close;
case 3: // List
mes "List Accounts VIP Platinum:";
set
[email protected]_1$,query_sql("SELECT account_name FROM vip_platinum LIMIT 0,127;",
[email protected]_1$);
for (set
[email protected],0;
[email protected] < getarraysize(
[email protected]_1$); set
[email protected],
[email protected] + 1)
mes (
[email protected]+1)+". "
[email protected]_1$[
[email protected]];
close;
case 4: // Back
goto On_gm;
}
case 4: // Quit
close;
}
terminateVip: // This function removes any VIP status from the specified account
set
[email protected]$,getarg(0); // Table name
set
[email protected],getarg(1); // Account ID
query_sql("UPDATE `login` SET `group_id` = 0 WHERE account_id = "
[email protected]+";"); // Set account level to 0
query_sql("DELETE FROM "
[email protected]$+" WHERE account_id = '"
[email protected]+"';"); // Delete VIP table entry
query_sql("ALTER TABLE "
[email protected]$+" AUTO_INCREMENT = 1;"); // Tries to reset id count
query_sql("UPDATE `login` SET `account_type` = 'NORMAL' WHERE `account_id` = "
[email protected]+";"); // Set account type to "NORMAL" in 'login' table
goto L_displayInfo;
}