Jump to content
  • 0

Question

Posted

I would like to know what I did wrong in this npc
Fis a change to talk to him only 3 times a day is when he arrives 00:00 the player can talk to him again

Spoiler

arug_cas01,250,367,4    script    Premiador    99,{
    
    
    
    if(@falou == 3)goto naopode;
    
    OnClock0000:
    if(@falou > 0)goto reset;
    reset:
    set @falou,0;
    
    OnBackSub:
    mes @npc$;
    mes "Premiador 2.0";
    mes "Olá, "+strcharinfo(0)+"! Deseja pega sua Premiação?";
    switch(select("Sim.:Não obrigado.")) {
    case 1:
    getitem 20088,100;
    getitem 12914,10;
    getitem 14233,20;
    getitem 12919,100;
    getitem 20089,1000;
    getitem 13995,10;
    getitem 13534,50;
    getitem 12912,10;
    getitem 12906,10;
    getitem 12908,10;
    getitem 14004,10;
    next;
    getitem 20088,100;
    getitem 604,70;
    getitem 526,50;
    getitem 748,50;
    getitem 747,50;
    setarray .@ids,5398,5766,5497,5225,5374,5467,2202,686,2296,5377,5548,5107,5220;
    getitem .@ids[rand(0,getarraysize(.@ids)-1)],1;    
    
  set @falou,@falou+1;
    
    close;
    end;
    case 2:
    mes " Tudo bem então, te vejo em breve!"; close;
    close;
}

naopode:
next;
mes @npc$;
mes "Voce já falou 3x comigo hoje.";
mes "Volte amanhã";
close;
}

 

8 answers to this question

Recommended Posts

  • 0
Posted (edited)

Espero que te ajude a entender melhor o processo.

Spoiler

prontera,154,179,4	script	Premio Diário	69,{
	// Verifica se já pegou o prêmio 3x no dia
	if (#japegou >= .consec) {
		mes .npc$;
		mes "Voce já falou 3x comigo hoje.";
		mes "Volte amanhã";
		close;
	}
	mes .npc$;
	mes "Você deseja pegar seu prêmio?";
	next;
	switch(select("Sim:Não")){
		case 1:
			for(.@i = 0; .@i < getarraysize(.premio); .@i++) {
			getitem .premio[.@i],.quant[.@i];
			}
			#japegou++;
			end;
		case 2:
			mes .npc$;
			mes "Tudo bem, volte quando precisar";
			close;
	}

OnClock0001:
/*Deleta a váriavel #japegou do banco de dados, 
possibilitando que todos possam pegar o prêmio após às 00h. */
query_sql ("DELETE FROM `acc_reg_num` WHERE `key`='#japegou'");
end;
	
OnInit:
	.npc$ = "[Premiador]";					// Nome do NPC;
	.consec = 3;							// Número de vezes que o player poderá pegar o prêmio por dia;
	setarray .premio[0], 607, 608, 609;		// Itens que serão entregues;
	setarray .quant[0],   10,  10,  10;		// Quantidade de itens que serão entregues;
	end;
}

 

 

Edited by VX Play
  • 0
Posted
1 hour ago, josue2010 said:

não estou usado o atual estou usado um antigo com os comando "set"

Basta alterar então para o modo que seu emulador trabalha, não esqueça de alterar também a tabela que seu emulador usa para armazenar as #var.

  • 0
Posted (edited)

16763918_1033429693455765_1938204687_o.pMuito Obrigador pela ajuda, peguei algumas funçãos do script que você postou, consegui resolve aqui porém tenho que troca essa SQL que estou teno Problema com ela.

query_sql ("DELETE FROM `acc_reg_num` WHERE `key`='#ja_usou'");

Script

Spoiler

arug_cas01,250,367,4    script    Premiador    99,{
        
    if (ja_usou == 3) {
    mes @npc$;
    mes "Voce já falou 3x comigo hoje.";
    mes "Volte amanhã";
    close;
    }
    
    OnClock0001:
    /*Deleta a váriavel #ja_usou do banco de dados, 
    possibilitando que todos possam pegar o prêmio após às 00h. */
    query_sql ("DELETE FROM `acc_reg_num` WHERE `key`='#ja_usou'");
    
    OnBackSub:
    mes @npc$;
    mes "Premiador 2.0";
    mes "Olá, "+strcharinfo(0)+"! Deseja pega sua Premiação?";
    switch(select("Sim.:Não obrigado.")) {
    case 1:
    getitem 20088,100;
    getitem 12914,10;
    getitem 14233,20;
    getitem 12919,100;
    getitem 20089,1000;
    getitem 13995,10;
    getitem 13534,50;
    getitem 12912,10;
    getitem 12906,10;
    getitem 12908,10;
    getitem 14004,10;
    next;
    getitem 20088,100;
    getitem 604,70;
    getitem 526,50;
    getitem 748,50;
    getitem 747,50;
    setarray .@ids,5398,5766,5497,5225,5374,5467,2202,686,2296,5377,5548,5107,5220;
    getitem .@ids[rand(0,getarraysize(.@ids)-1)],1;    
    set ja_usou,ja_usou+1;
    close;
    case 2:
    mes " Tudo bem então, te vejo em breve!"; close;
    close;
}
}

 

Edited by josue2010
  • 0
Posted (edited)

Acho que você não entendeu o que eu falei no outro post.

Tabela: acc_reg_num, fica armazenado as variáveis permanentes de conta.

Tabela: char_reg_num, fica armazenado as variáveis permanentes de char.

Você está utilizando uma variável permanente de char:

ja_usou

Ela fica armazenada em char_reg_num.

 

Se você ler o erro no mapserver vai entender qual o problema. Ele está dizendo que a tabela acc_reg_num não existe, troque por char_reg_num e veja se no seu pma possui essa mesma tabela, se você utiliza o rAthena com certeza terá, caso não tenha importe os arquivos da pasta sql-files novamente.

Em relação a função que vai deletar utilize assim:

query_sql "DELETE FROM `char_reg_num` WHERE `key` = 'ja_pegou';

 

Se você for utilizar uma variável permanente de conta utilize #ja_pegou e troque no comando a tabela `char_reg_num` por `acc_reg_num` e o valor da key = '#ja_pegou';

 

Não testei, se tiver dado erro poste o mesmo.

Edited by Wenden
  • 0
Posted
arug_cas01,250,367,4    script    Premiador    99,{

    if ( falou >= 3 || falou_day == .today ) {
		mes "Voce já falou 3x comigo hoje.";
		mes "Volte amanhã";
	}
	else {
		mes "Premiador 2.0";
		mes "Olá, "+strcharinfo(0)+"! Deseja pega sua Premiação?";
		if (select( "Sim.","Não obrigado." ) == 1 ) {
			getitem 20088,100;
			getitem 12914,10;
			getitem 14233,20;
			getitem 12919,100;
			getitem 20089,1000;
			getitem 13995,10;
			getitem 13534,50;
			getitem 12912,10;
			getitem 12906,10;
			getitem 12908,10;
			getitem 14004,10;
			
			getitem 20088,100;
			getitem 604,70;
			getitem 526,50;
			getitem 748,50;
			getitem 747,50;
			getitem .ids[rand( .size )],1;  
			falou_day++;
			if ( falou % 3 == 0 ) {
				falou_day = .today;
			}
			mes "Done";
		}
		else {
			mes " Tudo bem então, te vejo em breve!";
		}
	}
	close;
	
	OnInit:
		.today = gettime(8);
		setarray .ids,5398,5766,5497,5225,5374,5467,2202,686,2296,5377,5548,5107,5220;
		.size = getarraysize( .ids );
		end;
		
	OnPCLoginEvent:
		if ( falou_day && falou_day != .today ) {
			falou = 0;
			falou_day = 0;
		}
		end;
}

you can try this.

 

  • Upvote 1

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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...