Jump to content
  • 0

NPC rewarding


josue2010

Question


  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   0
  • Joined:  02/15/17
  • Last Seen:  

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;
}

 

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  30
  • Topics Per Day:  0.01
  • Content Count:  149
  • Reputation:   36
  • Joined:  04/01/13
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   0
  • Joined:  02/15/17
  • Last Seen:  

16777125_1033216550143746_113093045_o.pnEsta dano um erro na linha 14

 

 

Edited by josue2010
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  30
  • Topics Per Day:  0.01
  • Content Count:  149
  • Reputation:   36
  • Joined:  04/01/13
  • Last Seen:  

Qual emulador está usando?

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   0
  • Joined:  02/15/17
  • Last Seen:  

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

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  30
  • Topics Per Day:  0.01
  • Content Count:  149
  • Reputation:   36
  • Joined:  04/01/13
  • Last Seen:  

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.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   0
  • Joined:  02/15/17
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  4
  • Reputation:   1
  • Joined:  11/29/16
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

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

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