Jump to content

[NPC] Sistema vip. Duvida sobre vip free


Recommended Posts


  • Group:  Members
  • Topic Count:  8
  • Topics Per Day:  0.01
  • Content Count:  20
  • Reputation:   1
  • Joined:  10/24/20
  • Last Seen:  

Salve pessoal, estou usando esse npc para adicionar o vip, pois o emulador que estou usando é eAmod com rathena, porem é um emulador antigo e n tem suporte ao sistema vip original do rathena.  gostaria de saber, se alguém pode fazer o script de dias vip grats, abaixo segue o sistema que estou usando.

Spoiler

//  ___________________________________________________________________________________
// /                                                                                   \
// |                            __  __ _____ _      _____                              |
// |                           |  \/  |_   _| |    |  __ \                             |
// |                           | \  / | | | | |    | |  | |                            |
// |                           | |\/| | | | | |    | |  | |                            |
// |                           | |  | |_| |_| |____| |__| |                            |
// |                           |_|  |_|_____|______|_____/                             |
// |                                                                                   |
// | --------------------------------------------------------------------------------- |
// | Name: VIP System ( CONTROL )                                                      |
// | --------------------------------------------------------------------------------- |
// | Author: mild                                                                      |
// | --------------------------------------------------------------------------------- |
// | Description: VIP System ( CONTROL ),                                              |
// |              add VIP, remove VIP, Add new staff member and other.                 |
// | --------------------------------------------------------------------------------- |
// | Changelog:                                                                        |
// | 1.0 Started                              [mild]                                   |
// | 1.1 Added "See members banished"         [mild]                                   |
// | 1.2 Added "See VIP members"              [mild]                                   |
// | ALTER TABLE `login` ADD `dayVip` INT(11) NOT NULL DEFAULT '0';//                  |
// \__________________________________________________________________________________/
prontera, 155, 172, 4	script	VIP System#script	936,{

	// Script's configurations
	
		// Script's name
		set $nScript$, "[ VIP System ]";

	// VIP's configurations
	
		// Sale of VIP, 30 days.
		set @dVip1, 30;
		
		// Sale of VIP, 15 days.
		set @dVip2, 15;
		
		// Sale of VIP, 5 days.
		set @dVip3, 5;
		
		// Purchase price of the VIP of 30 days.
		set @pVip1, 20;

		// Purchase price of the VIP of 15 days.
		set @pVip2, 10;

		// Purchase price of the VIP of 5 days.
		set @pVip3, 5;

	if ( getgroupid() < 1 )
	{
		mes $nScript$;
		mes "Você não é VIP, deseja adquirir?";
		if (select ("- Yes:- No") == 1)
		{
			switch ( select ("- "+@dVip1+" days for ^FF0000"+@pVip1+"^000000 cash.:- "+@dVip2+" days for ^FF0000"+@pVip2+"^000000 cash.:- "+@dVip3+" days for ^FF0000"+@pVip3+"^000000 cash.:- Nothing.") )
			{
			case 1:
				if (#CASHPOINTS >= @pVip1)
				{
					mes $nScript$;
					mes "Your VIP will be activated.";
					close2;
					query_sql ("UPDATE `login` SET `group_id`='1',`dayVip`=`dayVip`+"+@dVip1+" WHERE `account_id`='"+ getcharid(3) +"'");
					set #CASHPOINTS,#CASHPOINTS-@pVip1;
					atcommand "@kick " + strcharinfo(0);
					end;
				}
				next;
				mes $nScript$;
				mes "Você não tem ^FF0000"+@pVip1+"^000000 Cash.";
				close;
			case 2:
				if (#CASHPOINTS >= @pVip2)
				{
					mes $nScript$;
					mes "Seu VIP será ativado.";
					close2;
					query_sql ("UPDATE `login` SET `group_id`='1',`dayVip`=`dayVip`+"+@dVip2+" WHERE `account_id`='"+ getcharid(3) +"'");
					set #CASHPOINTS,#CASHPOINTS-@pVip2;
					atcommand "@kick " + strcharinfo(0);
					end;
				}
				next;
				mes $nScript$;
				mes "Você não tem ^FF0000"+@pVip2+"^000000 Cash.";
				close;
			case 3:
				if (#CASHPOINTS >= @pVip3)
				{
					mes $nScript$;
					mes "Your VIP will be activated.";
					close2;
					query_sql ("UPDATE `login` SET `group_id`='1',`dayVip`=`dayVip`+"+@dVip3+" WHERE `account_id`='"+ getcharid(3) +"'");
					set #CASHPOINTS,#CASHPOINTS-@pVip3;
					atcommand "@kick " + strcharinfo(0);
					end;
				}
				next;
				mes $nScript$;
				mes "Você não tem ^FF0000"+@pVip3+"^000000 Cash.";
				close;
			case 4:
				mes $nScript$;
				mes "Okay, vejo você em breve.";
				close;
			}
		}
		next;
		mes $nScript$;
		mes "Okay, vejo você em breve.";
		close;
	} else if (getgroupid() == 1) {
		query_sql ("SELECT `dayVip` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'", @dayVip);
		mes $nScript$;
		mes "Olá "+strcharinfo(0);
		mes "Você tem ^FF0000"+@dayVip+"^000000 dias VIP";
		close;

	} else if ( getgroupid() == 99 ) {
		mes $nScript$;
		mes "Olá "+strcharinfo(0)+".";
		mes "O que você quer fazer?";
		switch ( select ( "- Add VIP.:- Add staff.:- Remove VIP.:- membros VIP:- Banir membro.:- Ver membros banidos.: -Nada." ) )
		{
		case 1:
			next;
			mes $nScript$;
			mes "Digite o login da conta que deseja adicionar dias VIP";
			input .@lAccount$;
			query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+.@lAccount$+"'",.@ExisAccount);
			if ( .@ExisAccount == 0 )
			{
				next;
				mes $nScript$;
				mes "Você não digitou o login correto.";
				close;
			}
			next;
			mes $nScript$;
			mes "Agora digite a quantidade de dias que deseja adicionar. "+.@lAccount$+".";
			input .@ammouVip;
			if ( .@ammouVip == 0 )
			{
				next;
				mes $nScript$;
				mes "Você digitou uma quantidade inválida.";
				close;
			}
			next;
			mes $nScript$;
			mes "Ok, vou adicionar o VIP";
			next;
			mes $nScript$;
			mes "Pronto, adicionei o VIP na conta ^FF0000"+.@lAccount$+"^000000 - Quantidade ^FF0000"+.@ammouVip+"^000000.";
			query_sql ("UPDATE `login` SET `group_id`='1',`dayVip`=`dayVip`+"+.@ammouVip+" WHERE `userid`='"+.@lAccount$+"'");
			close;
		case 2:
			next;
			mes $nScript$;
			mes "Escolha a posição que deseja adicionar à conta.";
			switch ( select ("- Administrator ^CD0000(99)^000000 :- Game Master ^CD0000(60)^000000 :- Game Helper ^CD0000(40)^000000 :- Other :- Nothing") )
			{
				case 1:
					next;
					mes $nScript$;
					mes "Digite a conta de login.";
					input .@lAccoGM$;
					query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+.@lAccoGM$+"'",.@NoGM);
					if ( .@NoGM == 0 )
					{
						next;
						mes $nScript$;
						mes "Essa conta não existe.";
						close;
					}
					mes $nScript$;
					mes "Vou adicionar a posição na conta.";
					query_sql ("UPDATE `login` SET `group_id`='99' WHERE `userid`='"+.@lAccoGM$+"'");
					next;
					mes $nScript$;
					mes "Pronto, adicionado!";
					close;
				case 2:
					next;
					mes $nScript$;
					mes "Digite a conta de login.";
					input .@lAccoGM$;
					query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+.@lAccoGM$+"'",.@NoGM);
					if ( .@NoGM == 0 )
					{
						next;
						mes $nScript$;
						mes "Essa conta não existe.";
						close;
					}
					mes $nScript$;
					mes "Vou adicionar a posição na conta.";
					query_sql ("UPDATE `login` SET `group_id`='60' WHERE `userid`='"+.@lAccoGM$+"'");
					next;
					mes $nScript$;
					mes "Pronto, adicionado";
					close;
				case 3:
					next;
					mes $nScript$;
					mes "Digite a conta de login.";
					input .@lAccoGM$;
					query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+.@lAccoGM$+"'",.@NoGM);
					if ( .@NoGM == 0 )
					{
						next;
						mes $nScript$;
						mes "Essa conta não existe.";
						close;
					}
					mes $nScript$;
					mes "Vou adicionar a posição na conta.";
					query_sql ("UPDATE `login` SET `group_id`='40' WHERE `userid`='"+.@lAccoGM$+"'");
					next;
					mes $nScript$;
					mes "Pronto, adicionado";
					close;
				case 4:
					next;
					mes $nScript$;
					mes "Digite a conta de login.";
					input .@lAccoGM$;
					query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+.@lAccoGM$+"'",.@NoGM);
					if ( .@NoGM == 0 )
					{
						next;
						mes $nScript$;
						mes "Essa conta não existe.";
						close;
					}
					mes $nScript$;
					mes "Agora, adiciona a posição que deseja.";
					input .@lGroup;
					next;
					mes $nScript$;
					mes "Vou adicionar a posição na conta.";
					query_sql ("UPDATE `login` SET `group_id`='"+.@lGroup+"' WHERE `userid`='"+.@lAccoGM$+"'");
					next;
					mes $nScript$;
					mes "Pronto, adicionado.";
					close;
				case 5:
					next;
					mes $nScript$;
					mes "Ok, adeus";
					close;
			}
		case 3:
			next;
			mes $nScript$;
			mes "Deseja remover VIP de alguma conta?";
			if ( select ("- Yes.:- No,") == 1 )
			{
				input @AccountBan$;
				query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+@AccountBan$+"'",.@NoExist);
				if (!.@NoExist)
				{
					next;
					mes $nScript$;
					mes "Essa conta não existe.";
					close;
				}
				next;
				mes $nScript$;
				mes "Digite a quantidade de dias que deseja remover.";
				next;
				input .@QAccountBan;
				mes $nScript$;
				mes "Eu vou remover."+.@QAccountBan+" - Account: "+@AccountBan$+".";
				next;
				mes $nScript$;
				mes "Você tem certeza?";
				if ( select ("- Yes:- No") == 1 )
				{
					next;
					mes $nScript$;
					mes "Ok, vou remover o VIP.";
					close2;
					query_sql ("UPDATE `login` SET `group_id`='1',`dayVip`=`dayVip`-"+.@QAccount+" WHERE `userid`='"+@AccountBan$+"'");
					end;
				}
				next;
				mes $nScript$;
				mes "Okay, Adeus.";
				close;
			}
			next;
			mes $nScript$;
			mes "Okay, Adeus.";
			close;
		case 4:
			next;
			query_sql("SELECT `userid` FROM `login` WHERE `group_id`=1",@nVIPs$); 
			for(set @v, 0; @v < getarraysize(@nVIPs$); set @v, @v+1)
			{
				mes @v+" - "+ @nVips$[@v];
			}
			close;
		case 5:
			next;
			mes $nScript$;
			mes "Deseja banir alguém?";
			if ( select ("- Yes.:- No.") == 1 )
			{
				next;
				mes $nScript$;
				mes "Digite a conta de login.";
				next;
				input @banM$;
				query_sql ("SELECT `account_id` FROM `login` WHERE `userid`='"+@banM$+"'",.@NoExis);
				if ( !.@NoExis )
				{
					next;
					mes $nScript$;
					mes "Essa conta não existe.";
					close;
				}
				next;
				mes $nScript$;
				mes "Tem certeza que deseja banir "+@banM$+"?";
				if ( select ("- Yes:- No") == 1 )
				{
					close2;
					atcommand "@kick " + @banM$;
					query_sql ("UPDATE `login` SET `state`='5' WHERE `userid`='"+@BanM$+"'");
					end;
				}
				next;
				mes $nScript$;
				mes "Okay, Adeus.";
				close;
			}
			next;
			mes $nScript$;
			mes "Okay, Adeus.";
			close;
		case 6:
			next;
			query_sql("SELECT `userid` FROM `login` WHERE `state`>=5",@nBan$); 
			for(set @a, 0; @a < getarraysize(@nBan$); set @a, @a+1)
			{
				mes @a+" - "+ @nBan$[@a];
			}
			close;
		case 7:
			next;
			mes $nScript$;
			mes "Okay, Adeus.";
			close;
		}
	}
}
-	script	SysVip#clock	-1,{

OnClock0001:
	query_sql ("UPDATE `login` SET `dayVip`=`dayVip`-1 WHERE `group_id`='1'");
	end;
OnClock0002:
	query_sql ("UPDATE `login` SET `group_id`='0' WHERE `dayVip`<='0' AND `group_id`='1'");
	end;
}
-	script	SysVip#onlogin	-1,{

OnPCLoginEvent:
	query_sql ("SELECT `dayVip` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'", .@ReSVIP);
	if(getgroupid() < 1)
	{
		dispbottom "Você não é VIP";
		end;
	} else if (getgroupid() == 1) {
		dispbottom "Olá "+strcharinfo(0)+" Você tem "+.@ReSVIP+" dias VIP.";
		end;
	} else
		end;
}

 

 

 

E tenho esse vip grats aqui. porem com outra tabela....  Porem estou com muita dificuldade de fazer ele funcionar...

Spoiler

//====================================
// ==Aqui a tabela do vip
//==ALTER TABLE `login` ADD `diasvip` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0';
//====================================


-	script	VIPGRATIS	-1,{

OnPCLoginEvent:
if(#japegou != 1){
mes "Bem-Vindo(a) ao Adventure! ";
mes "Você está recebendo agora 7 dias vip gratis.^000000.";
mes "Você será desconectado para que a operação tenha efeito. Basta digitar seu Login e sua senha normalmente e continuar a jogar";
close2;
query_sql "UPDATE `login` SET `group_id`='1',`diasvip`='5' WHERE `account_id` = '"+ getcharid(3) +"'";
set #japegou,1;
atcommand "@kick "+strcharinfo(0);
end;
}else{
end;
}
}


OnPCLoginEvent:
if(getgmlvl () >= 1){
dispbottom "[Controle VIP]: Você ainda tem "+.@diasvip+" dia(s) de VIP.";


//========================================
//==Abaixo o controle dos dias vip
//========================================


-	script	contador vip	-1,{

OnPCLoginEvent:
query_sql "SELECT `diasvip` FROM `login` WHERE `account_id` = '"+ getcharid(3) +"'", .@diasvip;
if (.@diasvip > 0) && 
{
dispbottom "[Controle VIP]: Você ainda tem "+.@diasvip+" dia(s) de VIP.";
end;
}else{

OnPCLoginEvent:
query_sql "SELECT `diasvip` FROM `login` WHERE `account_id` = '"+ getcharid(3) +"'", .@diasvip;
if (.@diasvip <= 3)
{
dispbottom "[#ragnaMeta! Controle VIP]: O seu vip está acabando, você só tem mais "+.@diasvip+" dia(s) de VIP.";
dispbottom "[#ragnaMeta! Controle VIP]: Acesse ja o site www.ragnaMeta.net e saiba ja como fazer uma doação para continuar utilizando esta conta com os benefícios vip";
end;
}


OnClock0000:
query_sql "UPDATE `login` SET `diasvip`=`diasvip`-1 WHERE `group_id`>='1'";
end;
OnClock0000:
query_sql "UPDATE `login` SET `group_id`='0' WHERE `diasvip`<='0' AND `group_id`>='1'";
end;
}

//=========================================

 

 

Consegui fazer funcionar, mas agradeço se alguém conseguir optimizar esse npc =D

 

Spoiler

-	script	VIPGratis#K-1	-1,{

OnPcLoginEvent:
    if(GetGmLevel() >= 1) end;
    if(#vipmake == 0) {
mes "Bem-Vindo(a) ao servidor "+strcharinfo(0)+"";
mes "Voce acaba de ganhar 7 dias vip grátis.";
mes "Re-Logue para que ele seja ativado.";
query_sql "UPDATE `login` SET `group_id`='1',`dayVip`='7' WHERE `account_id` = '"+ getcharid(3) +"'";
set #vipmake,1;
close;
    }
    end;

}

// Diminuição dos VIPS
-	script	VIPGratis#K-2	-1,{
	end;

OnClock0001:
	query_sql "UPDATE `login` SET `dayVip`=`dayVip`-1 WHERE `group_id`='1'";
	end;

OnClock0002:
	query_sql "UPDATE `login` SET `group_id`='0' WHERE `dayVip`<='0' AND `group_id`='1'";
	end;
}

// Relógio VIP
-	script	VIPGratis#K-3	-1,{
OnPCLoginEvent:
	if (getgroupid() < 1 || getgroupid() > 2) end;
	query_sql "SELECT `dayVip` FROM `login` WHERE `account_id` = '"+ getcharid(3) +"'", @dias;
	if (@dias[0] <= 5){
	dispbottom "[Controle VIP]";
	dispbottom "Você só tem "+@dias+" dia(s) de VIP restando,";
	dispbottom "Recarregue sua VIP e Ajude o Servidor !!!";
	end;
	}
	dispbottom "[Controle VIP]";
	dispbottom "Você ainda tem "+@dias+" dia(s) de VIP.";
	end;
}

 

 

Edited by Kassio Felix
Link to comment
Share on other sites

  • 2 years later...

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  14
  • Reputation:   4
  • Joined:  02/20/23
  • Last Seen:  

então, com base no seu npc eu criei a versão pro meu emulador
tive q trocar a variavel de vip pra vip_time pq é assim q tava no meu sql, em group id o padrao de vip é 5

tbm retirei a variavel no npc e utilizei uma variavel global pra dar o item uma vez por conta, ele também da rédeas e 10 pergaminhos de refino +8

como a base foi toda sua acho justo compartilhar: 

 

Quote

-    script    VIPGratis#K-1    -1,{

OnPcLoginEvent:
if( !#onetimeitem ){
    if(GetGmLevel() >= 1) end;
    if(#vipmake == 0) {
mes "Bem-Vindo(a) ao servidor "+strcharinfo(0)+"";
mes "Voce acaba de ganhar 7 dias vip grátis.";
mes "Re-Logue para que ele seja ativado.";
query_sql "UPDATE `login` SET `group_id`='5',`vip_time`='7' WHERE `account_id` = '"+ getcharid(3) +"'";
set #onetimeitem,1;
getitem 12622,1;
getitem 6233,10;
close;
    }
}
    end;

}

// Diminuição dos VIPS
-    script    VIPGratis#K-2    -1,{
    end;

OnClock0001:
    query_sql "UPDATE `login` SET `vip_time`=`vip_time`-1 WHERE `group_id`='5'";
    end;

OnClock0002:
    query_sql "UPDATE `login` SET `group_id`='0' WHERE `vip_time`<='0' AND `group_id`='5'";
    end;
}

 

// Relógio VIP - //essa parte não consegui fazer funcionar
-    script    VIPGratis#K-3    -1,{
OnPCLoginEvent:
    if (getgroupid() > 1 || getgroupid() < 5) end;
    query_sql "SELECT `vip_time` FROM `login` WHERE `account_id` = '"+ getcharid(3) +"'", @dias;
    if (@dias[0] <= 5){
    dispbottom "[Controle VIP]";
    dispbottom "Você só tem "+@dias+" dia(s) de VIP restando,";
    dispbottom "Recarregue sua VIP e Ajude o Servidor !!!";
    end;
    }
    dispbottom "[Controle VIP]";
    dispbottom "Você ainda tem "+@dias+" dia(s) de VIP.";
    end;
}
 


 

Edited by aoshinho
esqueci de falar que ele dá item, ótimo para npc inicial
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  14
  • Reputation:   4
  • Joined:  02/20/23
  • Last Seen:  

voltei aqui porque refiz o código com ajuda do ChatGPT e ele fez a gente parecer idiota reduzindo os dias manualmente e simplesmente criou um evento de SQL que faz isso em todo mundo todos os dias kkkkkkkkkk
segue código funcional e testado:

 

Quote

//===== rAthena Script =======================================
//= Auto SQL VIP 
//===== By: ==================================================
//= AoShinHo + ChatGPT
//===== Current Version: =====================================
//= 2.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Um NPC que quando você faz login a primeira vez em uma conta 
//= free2play te da 15 dias vip, rédeas e 10 pergaminhos de refino +8,
//= reduz automaticamente os dias de vip do jogador via SQL e 
//= quando os dias chegam em 0 ele troca o group_id pra 0 se você não for GM
//= através de um evento SQL
//= também avisa aos jogadores vip quando o vip deles está acabando
//===== Additional Comments: =================================
//= 1.0 revisado para uso geral. [AoShinHo]
//= 2.0 adicionado a segunda parte do script que faz o aviso [AoShinHo]
//============================================================

/* SQL table
DROP TABLE IF EXISTS `daily_vip_update`;

CREATE EVENT IF NOT EXISTS `daily_vip_update`
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
DO
UPDATE `login` SET `vip_time` = GREATEST(`vip_time` - 1, 0), `group_id` = IF(`vip_time` <= 0 AND `group_id` != 99, 0, `group_id`);
) ENGINE=MyISAM;
*/

-    script    VIPGratis#K-1    -1,{
    OnPcLoginEvent:
        if (!#onetimeitem) {
            if (getgroupid(getcharid(3)) <= 5) {
                mes "[AoShinRO]";
                mes "Bem-vindo ao nosso servidor! Aqui está um VIP gratuito para você usar durante 15 dias.";
                getitem 12622,1;
                getitem 6233,10;
                set #onetimeitem,1;
                query_sql "UPDATE `login` SET `group_id`='5',`vip_time`='15' WHERE `account_id` = '"+ getcharid(3) +"'";
                mes "Seu tempo VIP restante é de 15 dias.";
                close;
            }
        }
    OnInit:
    end;
}

-    script    VIPGratis#K-2    -1,{    
    OnInit:
    end;
    OnPcLoginEvent:
    set .@char_id, getcharid(3);
    query_sql( "SELECT `vip_time` FROM `login` WHERE `account_id` = '" + .@char_id + "'", .@vip_time);
    query_sql( "SELECT `group_id` FROM `login` WHERE `account_id` = '" + .@char_id + "'", .@gm_level);
        if (.@gm_level == 5 && .@vip_time > 0){
        if (.@vip_time <= 5) {
        mes "[AoShinRO]";
        mes "Seu tempo VIP restante é de " + .@vip_time + " dias.";
        mes "[AoShinRO]";
        mes "Considere pagar pelo VIP para ajudar o servidor e desbloquear mais recursos exclusivos.";
        } else {
        mes "[AoShinRO]";
        mes "Seu tempo VIP restante é de " + .@vip_time + " dias.";
        }
    }
end;
}


 

 

Edited by aoshinho
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
Reply to this topic...

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