Jump to content
  • 0

VIP Script


Bringer

Question


  • Group:  Members
  • Topic Count:  162
  • Topics Per Day:  0.04
  • Content Count:  745
  • Reputation:   47
  • Joined:  03/12/14
  • Last Seen:  

ERROR : 14194300_1032571996859283_202107036_n.pn

//eAthena Version 2
prontera,150,150,5	script	VIP system	56,{
function statusvip;
function expirevip;
function mainmenu;
function showlist;
function deletevip;
function addvip;

	mes .npc_Name$;
	query_sql "SELECT `account_type` FROM login WHERE `account_id` = "+ getcharid(3), .@acc_Type$;
	while( .@i < 3 && !compare(.@acc_Type$,.type_name$[.@i]) ) set .@i, .@i +1;
	if( .@i == 3 )
		mes "Hello "+ strcharinfo(0) +" you have an normal account. Get an "+ getitemname( .item_premium_b ) +", "+ getitemname( .item_premium_s ) +", "+ getitemname( .item_premium_g ) +" to get a premium account.";
	else {
		set .@expiration_Date$, statusvip( .type_name$[.@i], .@i +1, 1 );
		mes "Hello "+ strcharinfo(0) +" you have an "+ .type_name$[.@i] +" and it will expire in "+ .@expiration_Date$;
	}
	goto L_player;

OnWhisperGlobal:
	if ( getgmlevel() < 99 ) end;
L_main:
	mes .npc_Name$;
	mes "Welcome, "+ strcharinfo(0) +"!";
	mes "What can I do for you today?";
L_player:
	next;
	set .@s, select( ( getgmlevel() < 99 ? "" : "VIP bronze Menu" ), ( getgmlevel() < 99 ? "" : "VIP silver Menu" ), ( getgmlevel() < 99 ? "" : "VIP gold Menu" ),
			( ( countitem( .item_premium_b ) || countitem( .item_premium_s ) || countitem( .item_premium_g ) ) && .up_npc ? "Upgrade my account" : "" ), "Quit" ) -1;
	if ( .@s == 4 ) close;
	else if( .@s == 3 ) {
		setarray .@rank$, "b", "s", "g";
		set .@menu, (prompt("Bronze:Silver:Gold")-1);
		callfunc "VIP_upgrade", 7, getd(".item_premium_"+.@rank$[.@menu]), .@menu;
	}
	set .@a$, "[VIP "+ .type_name$[.@s] +"]";

	next;
	mes .npc_Name$;
	mes .@a$;
	// if( getgmlevel() < 99 ) {
		// set .@sub_s, select( "List Accounts", "Cancel" );
		// if( .@sub_s == 2 ) close;
		// mainmenu( .@sub_s +2, .@s );
	// }
	next;
	set .@sub_s, select( "Add/Extend Account", "Delete Account", "List Accounts", "Back" );
	if ( .@sub_s == 4 || mainmenu( .@sub_s, .@s, .@a$ ) ) goto L_main;

// Setting
// -------
OnInit:
	set .npc_Name$,"[VIP System v4.0]";

	set .bronze_AccLvl, 1;		// VIP bronze Account Level
	set .silver_AccLvl, 2;		// 	   silver
	set .gold_AccLvl, 3;		// 	   gold

	set .bronze_ExpRate, 25;	// VIP bronze Exp Boost in % ( 1 = 1% )
	set .silver_ExpRate, 50;	// 	   silver
	set .gold_ExpRate, 100;		//	   gold

	set .bronze_ItemRate, 0;	// VIP bronze Item Drop Boost in % ( 1 = 1% )
	set .silver_ItemRate, 5;	//	 silver
	set .gold_ItemRate, 10;		//	 gold

	set .item_premium_b, 501; // ID item to upgrade your account to bronze
	set .item_premium_s, 502; // ID item to upgrade your account to silver
	set .item_premium_g, 503; // ID item to upgrade your account to gold
	set .fcp, 0;			// fcp for gold vip ? (0 : no) / (1 : yes)
	set .up_npc, 1;				// player can upgrade to npc if items required 0 : no
	setarray .type_name$, "bronze", "silver", "gold" ;
	end;

// On login
// --------
OnPCLoginEvent:
	query_sql "SELECT `account_type` FROM login WHERE `account_id` = "+ getcharid(3), .@acc_Type$;
	while( .@i < 3 && !compare(.@acc_Type$,.type_name$[.@i]) ) set .@i, .@i +1;
	if( .@i == 3 ) end;
	sc_end sc_expboost;	
	sc_end sc_itemboost;
	set .@expiration_Date$, statusvip( .type_name$[.@i], .@i, 0 );
	dispbottom "----------------------------------------------------------------------";
	dispbottom "Account type:		 "+ .@acc_Type$;
	dispbottom "Expiration date: "+ .@expiration_Date$;
	dispbottom "----------------------------------------------------------------------";
	end;

// Check the VIP status ; bonus VIP
// --------------------------------
function statusvip {
	query_sql "SELECT `status` FROM `vip_"+ getarg(0) +"` WHERE `account_id` = "+ getcharid(3), .@vip_Status$ ;
	query_sql "SELECT DATE_FORMAT(`end_date`, '%Y%m%d') FROM `vip_"+ getarg(0) +"` WHERE `account_id` = "+ getcharid(3), .@expiration_Date$ ;
	query_sql "SELECT CURDATE() + 0;", .@current_Date$ ;
	if( getarg(2) ) return .@expiration_Date$;
	if ( atoi(.@current_Date$) >= atoi(.@expiration_Date$) )
		expirevip( "vip_"+ getarg(0), getcharid(3) );
	else {
		set .@time, 3600 * 60 * 1000;
		set .@it_Rate, getd( "."+ getarg(0) +"_ItemRate" );
		set .@exp_rate, getd( "."+ getarg(0) +"_ExpRate" );
		if( .@exp_rate )
			sc_start sc_expboost, .@time, .@exp_rate;
		if( .@it_Rate )
			sc_start sc_itemboost, .@time, .@it_Rate;
		if( getarg(1) == 2 && .fcp ) {
			sc_start SC_CP_WEAPON, .@time, 5;
			sc_start SC_CP_SHIELD, .@time, 5;
			sc_start SC_CP_ARMOR, .@time, 5;
			sc_start SC_CP_HELM, .@time, 5;
		}
	}
	return .@expiration_Date$;
}

// VIP expire : updates tables
// ---------------------------
function expirevip {
	set .@T_Name$, getarg(0);
	set .@acc_Id, getarg(1);
	query_sql "UPDATE `login` SET `level` = 0, `account_type` = 'NORMAL' WHERE account_id = "+ .@acc_Id;
	query_sql "DELETE FROM "+ .@T_Name$ +" WHERE account_id = "+ .@acc_Id;
	query_sql "ALTER TABLE "+ .@T_Name$ +" AUTO_INCREMENT = 1";
	sc_end SC_CP_WEAPON;
	sc_end SC_CP_SHIELD;
	sc_end SC_CP_ARMOR;
	sc_end SC_CP_HELM;
	dispbottom "Your VIP expire.";
	end;
}

function mainmenu {
	switch( getarg(0) ) {
		case 1: addvip( getarg(1), getarg(2) ); break;
		case 2: deletevip( getarg(1), getarg(2) ); break;
		case 3: showlist( getarg(1) );
	}
	return 1;
}

function addvip {
	set .@s, getarg(0);
	set .@a$, getarg(1);

	mes .npc_Name$;
	mes .@a$;
	mes "Type the Account Name";
	mes "you wish to add.";
	input .@acc_Name$;
	next;

	mes .npc_Name$;
	mes .@a$;
	query_sql "SELECT `account_id` FROM login WHERE `userid` = '"+ escape_sql( .@acc_Name$ )+"'", .@acc_Id ;
	mes "Identifying account: "+ .@acc_Name$ +".";
	sleep2 500;
	if ( !.@acc_Id ) {
		mes "ERROR: Couldn't find account.";
		mes "Verify if you dind't make a typo.";
		close;
	}

	mes .npc_Name$;
	mes .@a$;
	mes "Type the number of days you";
	mes "wish to add to the account's VIP";
	mes "status.";
	next;

	while( input( .@Days, 1, 999 ) != 0 ) {
		mes .npc_Name$;
		mes .@a$;
		mes "Put a number between 1 and 999.";
		next;
	}
	mes .npc_Name$;
	mes .@a$;
	query_sql "SELECT `account_id` FROM vip_"+ .type_name$[.@s] +" WHERE `account_id` = "+ .@acc_Id, .@vip_accid;
	if ( .@vip_accid == .@acc_Id ) {
		mes "Account ID: "+ .@vip_accid +".";
		sleep2 500;
		query_sql "UPDATE vip_"+ .type_name$[.@s] +" SET end_date = DATE_ADD(end_date, INTERVAL "+ .@Days +" DAY), `status` = 'ACTIVE' WHERE account_id = "+.@vip_accid;
		query_sql "UPDATE login SET `account_type` = '"+ .type_name$[.@s] +"' WHERE account_id = "+ .@vip_accid;
		mes "Account "+ .@acc_Id +" added successfully!";
	}
	else {
		mes "Account ID: "+ .@acc_Id +".";
		sleep2 500;
		query_sql "INSERT INTO vip_"+ .type_name$[.@s] +" (`account_id`,`account_name`,`start_date`,`end_date`,`status`) VALUES ("+.@acc_Id+",'"+ escape_sql( .@acc_Name$ ) +"',CURDATE(),CURDATE(),'ACTIVE')";
		sleep2 100;
		query_sql "UPDATE vip_"+ .type_name$[.@s] +" SET end_date = DATE_ADD(start_date, INTERVAL "+ .@Days +" DAY) WHERE account_id = "+.@acc_Id;
		query_sql "UPDATE `login` SET `level` = "+ getd( "."+ .type_name$[.@s] +"_AccLvl" ) +", `account_type` = '"+ .type_name$[.@s] +"' WHERE `account_id` = "+.@acc_Id;
		mes "Account "+ .@acc_Id +" added successfully!";
	}
	close;
}

function deletevip {
	set .@s, getarg(0);
	set .@a$, getarg(1);
	set .@size, query_sql( "SELECT account_name,`account_id`  FROM vip_"+ .type_name$[.@s] +" LIMIT 127", .@List$, .@acc_id );
		mes .npc_Name$;
		mes .@a$;
	if ( .@size == 0 )
		mes "There are currently no VIP "+ .type_name$[.@s] +" accounts.";
	else {
		mes "Select the account you wish ";
		mes "to remove from VIP system.";
		
		set .@j$, "1. "+ .@List$;
		for ( set .@i, 1; .@i < .@size; set .@i, .@i + 1 )
			set .@j$, .@j$ +":"+ ( .@i +1 ) +". "+ .@List$[.@i];
		set .@j$, .@j$ +":Cancel";
		next;

		mes .npc_Name$;
		mes .@a$;
		set .@menu_del, select( .@j$ ) -1;
		if ( .@menu_del == .@size ) {
			next;
			return;
		}
		mes "Are you sure you want to remove the account ";
		mes .@List$[ .@menu_del ] +" ?";
		if ( select( "Yes", "No" ) -1 ) {
			next;
			return;
		}
		query_sql "UPDATE `login` SET `level` = 0, `account_type` = 'NORMAL' WHERE `account_id` = '"+ .@acc_id +"'";
		query_sql "DELETE FROM vip_"+ .type_name$[.@s] +" WHERE account_id = "+ .@acc_id;
		query_sql "ALTER TABLE vip_"+ .type_name$[.@s] +" AUTO_INCREMENT = 1";
		mes "VIP "+ .type_name$[.@s] +" account successfully deleted!.";
	}
	close;
}

function showlist {
	set .@s, getarg(0);
	mes .npc_Name$;
	mes "VIP "+ .type_name$[.@s] +" accounts list:";
	set .@size, query_sql( "SELECT account_name FROM vip_"+ .type_name$[.@s] +" LIMIT 127", .@List$ );
	if( .@size == 0 ) {
		mes "The list is empty.";
		close;
	}
	for ( set .@i, 0; .@i < .@size; set .@i, .@i + 1 )
		mes ( .@i +1 )+". "+ .@List$[ .@i ];
	close;
}
}

// Upgrade via itemscript
// ----------------------
/*
callfunc( "VIP_upgrade", 7, 12703, 0 );
getarg(2) :
	0 = up to bronze
	1 = up to silver
	2 = up to gold
*/
function	script	VIP_upgrade	{
	if( select( "^777777~ Upgrade my account", "~ Not today^000000" ) -1 ) close;
	set .@acc_id, getcharid(3) ;
	setarray .@type_name$, "bronze", "silver", "gold" ;
	set .@bronze_AccLvl, 1;		// VIP bronze Account Level
	set .@silver_AccLvl, 2;		// 	   silver
	set .@gold_AccLvl, 3;		// 	   gold

	query_sql "SELECT `userid`, `account_type` FROM `login` WHERE `account_id` = '"+ .@acc_id +"'", .@user_id$, .@acc_type$;
	while( .@i < 3 && !compare(.@acc_Type$,.@type_name$[.@i]) ) set .@i, .@i +1;
	
	dispbottom ""+.@i+">="+getarg(2);

	if ( .@i == 2 || ( .@i >= getarg(2) && .@i != 3 ) ) {
		dispbottom "Your can't upgrade your account.";
		close;
	}
	
	if(!countitem(getarg(1))) {
		message strcharinfo(0), "You don't have any "+getarg(1)+"(s).";
		close;
	}
	
	else if( .@i != 3 ) {
		query_sql "DELETE FROM vip_"+ .@type_name$[.@i] +" WHERE account_id = '"+ .@acc_id +"'";
		query_sql "ALTER TABLE vip_"+ .@type_name$[.@i] +" AUTO_INCREMENT = 1";
	}
	query_sql "INSERT INTO vip_"+ .@type_name$[ getarg(2) ] +" (`account_id`,`account_name`,`start_date`,`end_date`,`status`) VALUES ("+ .@acc_id +",'"+ escape_sql( .@user_id$ ) +"', CURDATE(), ( DATE_ADD(CURDATE(), INTERVAL "+ getarg(0) +" DAY) ), 'ACTIVE') ";
	query_sql "UPDATE `login` SET `level` = "+ getd( ".@"+ .@type_name$[ getarg(2) ] +"_AccLvl" ) +", `account_type` = '"+ .@type_name$[getarg(2)] +"' WHERE `account_id` = '"+ .@acc_id +"'";
	query_sql "SELECT DATE_FORMAT(`end_date`, '%Y %M %d') FROM vip_"+ .@type_name$[ getarg(2) ] +" WHERE `account_id` = '"+ .@acc_id +"'", .@exp_Date$;
	message strcharinfo(0), "Account updated. Expiration : "+ .@exp_Date$;
	delitem getarg(1), 1;
	message strcharinfo(0), "You must relog.";
	close2;
	sleep2 4000;
	if( playerattached() )
		atcommand "@kick "+ strcharinfo(0);
	end;
}

// 12703,Holy_Egg_2,Holy Egg,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc( "VIP_upgrade", 7, 12703, 0 ); /* 7 days, item ID to delete */ },{},{}
// 12703,Holy_Egg_2,Holy Egg,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc( "VIP_upgrade", 7, 12703, 1 ); /* 7 days, item ID to delete */ },{},{}
// 12703,Holy_Egg_2,Holy Egg,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc( "VIP_upgrade", 7, 12703, 2 ); /* 7 days, item ID to delete */ },{},{}
CREATE TABLE IF NOT EXISTS `vip_bronze` (
  `account_id` int(11) unsigned NOT NULL default '0',
  `account_name` varchar(255) NOT NULL default 'NULL',
  `start_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `end_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `status` varchar(255) NOT NULL DEFAULT 'NULL',
  PRIMARY KEY  (`account_id`)
) ENGINE=MyISAM;

CREATE TABLE IF NOT EXISTS `vip_silver` (
  `account_id` int(11) unsigned NOT NULL default '0',
  `account_name` varchar(255) NOT NULL default 'NULL',
  `start_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `end_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `status` varchar(255) NOT NULL DEFAULT 'NULL',
  PRIMARY KEY  (`account_id`)
) ENGINE=MyISAM;

CREATE TABLE IF NOT EXISTS `vip_gold` (
  `account_id` int(11) unsigned NOT NULL default '0',
  `account_name` varchar(255) NOT NULL default 'NULL',
  `start_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `end_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `status` varchar(255) NOT NULL DEFAULT 'NULL',
  PRIMARY KEY  (`account_id`)
) ENGINE=MyISAM;

ALTER table `login` add column account_type varchar(255) NOT NULL default 'NULL' after `birthdate`, add index (account_type);

UPDATE `login` SET `account_type` = 'NULL';
TRUNCATE `vip_bronze`;
TRUNCATE `vip_gold`;
TRUNCATE `vip_silver`;
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  16
  • Reputation:   2
  • Joined:  12/16/11
  • Last Seen:  

if you are using notepad++ (recommended) probabbly you are using any kind of unparsable characterset for the rathena reading scripts, so, install it and open your script and follow this instructions:

 

Sin_t_tulo.jpg

 

 I hope it helps you

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...