yagami005

Alterações nesse NPC de indicações

2 posts neste tópico

Olá pessoal tudo blz? este NPC é de autoria do ComeTower do cronus, porem ele tem alguns problemas, e se possível gostaria que alguém corrigi-se, o sistema em si funciona perfeitamente faz a contagem do tempo direitinho e tudo mais primeiramente vou explicar o que é o NPC e o que ele faz:

Descrição

Um sistema no qual o jogador 'x', ao fazer login pela primeira vez no servidor recebe um codigo 'z'. Ao passar o código para seu amigo 'y', este o digita em um NPC fazendo com que seja computado que o jogador 'x' recomendou o servidor ao jogador 'y'.

Benefícios ao jogador 'y':

nenhum

Benefícios ao jogador 'x':

A cada hora que o jogador 'y' ficar online, ele recebe uma quandidade 'q' de pontos.

 

Problemas que gostaria de solucionar para o npc ficar perfeito:

Gostaria de mudar a forma como o código é entregue pois o código é muito simples tipo 1,2,3,4. Gostaria de algo como 50001,50002,50003 algo assim.

O outro problema é que o NPC permite que você indique a si mesmo, assim você ganha pontos sem indicar ninguém o que tira a utilidade do npc.

se alguém souber como resolver isso seria Otimo é um excelente NPC e pode ajudar muito quem utilizar a atrair novos jogadores e manter os mesmos online.

 

Scrips do NPC:

 

 

 

// Tabela SQL
/*

ALTER TABLE `login` ADD `myfriendcodect` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `usedfriendcodect` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `indicadosct` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `pontosamigosct` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `cashentregarct` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `cashviagmct` INT( 11 ) NOT NULL DEFAULT '0';

ALTER TABLE `login` ADD `pontosamigosct2` INT( 11 ) NOT NULL DEFAULT '0';

*/

-    script    controlefriendcode    -1,{

OnPCLoginEvent:

if(#viewd) end;

set #viewd,1;

set $friendcodes,$friendcodes+1;

query_sql ("UPDATE `login` SET `myfriendcodect` = '"+$friendcodes+"' WHERE `account_id` = '"+getcharid(3)+"'");

dispbottom "Seu código de convite é :"+$friendcodes;

end;

}

prontera,150,146,5    script    Gerente de Indicacoes    123,{

//= Configurações =

set @limite,2; //Máximo de amigos que podem ser indicados

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

mes "[^FF9900"+strnpcinfo(1)+"^000000]";

mes "Olá, o que deseja?";

switch(select("Ver meu código:Inserir código de um amigo:Como funciona?:Nada")){

case 1:

query_sql ("SELECT `myfriendcodect` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@codigo);

mes "Seu código é: "[email protected];

close;

case 2:

query_sql ("SELECT `usedfriendcodect` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@codigo);

if(@codigo > 0){

mes "Você já utilizou um código";

close;

}

mes "Digite o código do amigo que te indicou:";

input @z;

query_sql ("SELECT `indicadosct` FROM `login` WHERE `myfriendcodect` = '"[email protected]+"'",@q);

if(@q >= @limite){

mes "Seu amigo já atingiu o limite de "[email protected]+" indicações";

close;

}

set @q,@q+1;

query_sql ("UPDATE `login` SET `indicadosct` = '"[email protected]+"' WHERE `myfriendcodect` = '"[email protected]+"'");

query_sql ("UPDATE `login` SET `usedfriendcodect` = '"[email protected]+"' WHERE `account_id` = '"+getcharid(3)+"'");

mes "Prontinho";

close;

case 3:

mes "Ao fazer seu primeiro login no servidor, você receberá um código, e este deve ser passado para seus amigos antes de entrarem no servidor.";

mes "Para cada hora que o amigo que inseiu seu código ficar online, você receberá um ponto e se seu amigo fizer doações, você será recompensado";

close;

case 4:

mes "Volte quando desejar algo.";

close;

}

}

-    script    controleamigoon    -1,{

OnPCLoginEvent:

goto Contador;

Contador:

freeloop(1);

sleep2 60000;

if(checkvending()) goto Contador;

query_sql ("SELECT `usedfriendcodect`,`pontosamigosct2` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@am,@az);

query_sql ("SELECT `account_id` FROM `login` WHERE `myfriendcodect` = '"[email protected]+"'",.ax);

if(@az == 59){

set .am2$,strcharinfo(0);

set .am,getcharid(3);

query_sql ("UPDATE `login` SET `pontosamigosct` = `pontosamigosct` + 1 WHERE `myfriendcodect` = '"[email protected]+"'");

query_sql ("UPDATE `login` SET `pontosamigosct2` = '0' WHERE `account_id` = '"+getcharid(3)+"'");

if(attachrid(.ax)){

dispbottom "O jogador "+.am2$+" ficou online por uma hora e você recebeu um ponto de amigo.";

attachrid(.am);

}

goto Contador;

}

query_sql ("UPDATE `login` SET `pontosamigosct2` = `pontosamigosct2` + 1 WHERE `account_id` = '"+getcharid(3)+"'");

goto Contador;

}

prontera,150,150,5    script    Troca de Pontos    123,{

//= Configurações =

//== Itens ==

setarray @aa[0],1234,1235,1236; //Ids

setarray @ab[0],1,2,3; //Quantidade

setarray @ac[0],1,2,3; //Preço

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

mes "[^FF9900"+strnpcinfo(1)+"^000000]";

mes "O que deseja?";

if(select("Trocar meus pontos:Nada") == 2) close;

query_sql ("SELECT `pontosamigosct` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@amg);

mes "Você possui "[email protected]+" pontos.";

mes "E eu possuo estes itens:";

set [email protected]$,"";

for(set @i,0; @i < getarraysize(@aa); set @i,@i+1) set [email protected]$, [email protected]$ +getitemname(@aa[@i])+" x "[email protected][@i]+" = "[email protected][@i]+" pontos:";

set [email protected]$, [email protected]$+"Nada";

select([email protected]$);

if(@menu == (getarraysize(@aa)+1))close;

mes "Quantas vezes deseja realizar a operação?";

input [email protected];

if(@amg < (@ac[@menu - 1]*[email protected])){

mes "Você não possui pontos o suficiente.";

close;

}

set @amg,@amg - (@ac[@menu - 1]*[email protected]);

query_sql ("UPDATE `login` SET `pontosamigosct` = '"[email protected]+"' WHERE `account_id` = '"+getcharid(3)+"'");

getitem @aa[@menu - 1],(@ab[@menu-1]*[email protected]);

mes "Pronto, divirta-se.";

close;

}

-    script    controlecash    -1,{

//= Configurações =

set @p,10; //Porcentagem de ROPs que jogador recebe se o amigo que ele indicou fizer doações

//Para evitar problemas, utilize múltiplos de 100 para doações (não obrigatório, apenas recomendado)

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

OnPCLoginEvent:

query_sql ("SELECT `cashentregarct` , `cashviagmct` , `usedfriendcodect` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@x,@y,@z);

if(@x == 0 && @y == 0)end;

set #CASHPOINTS,#[email protected][email protected];

set @y,(@y*@p)/100;

query_sql ("UPDATE `login` SET `cashentregarct` = '0' , `cashviagmct` = '0' WHERE `account_id` = '"+getcharid(3)+"'");

query_sql ("UPDATE `login` SET `cashentregarct` = `cashentregarct` + "[email protected]+" WHERE `myfriendcodect` = '"[email protected]+"'");

end;

}

 

 

Editado por yagami005
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou vendo aqui...

na questão de gerar um código da para usar um rand e fazer ele gerar um código maior mas, da para fazer o sistema pegar o ID da conta do jogador. 

esta parte aqui é a que gera o código:

	if(#viewd) end;
	set #viewd,1;
	set $friendcodes,$friendcodes+1;
	query_sql ("UPDATE `login` SET `myfriendcodect` = '"+$friendcodes+"' WHERE `account_id` = '"+getcharid(3)+"'");
	dispbottom "Seu código de convite é :"+$friendcodes;
	end;

poderia fazer o sistema passar o ID da conta do cara para ficar ate mais fácil de você gerenciar quem pegou quem não pegou... e uma vez que a ID da conta é unica.

daria para deixar assim:

	if(!viewd)
	{
		set #viewd,1;
		query_sql ("UPDATE `login` SET `myfriendcodect` = '"+getcharid(3)+"' WHERE `account_id` = '"+getcharid(3)+"'");
		dispbottom "Seu código de convite é :"+getcharid(3);
	}
	end;

@edit

Agora que vi a condição aqui para não deixar indicar sua própria conta. Basta add uma verificação de conta baseando-se no código de indicação. Como vai ser usado o id da conta como código (Isso se seguir a minha ideia acima mas da para fazer também com qualquer outro código) de indicação basta fazer o sistema verificar se o código de indicação bate com o id da conta se bater encerra.

Na case 2 do NPCGerente de Indicacoes esta assim:

	mes "Digite o código do amigo que te indicou:";
	input @z;
	query_sql ("SELECT `indicadosct` FROM `login` WHERE `myfriendcodect` = '"+@z+"'",@q);
	if(@q >= @limite){
	mes "Seu amigo já atingiu o limite de "+@limite+" indicações";
	close;

você simplesmente pode deixar assim:

	if(@z == getcharid(3))
	{
		mes "^FF0000CÓDIGO INVÁLIDO^000000";
		mes "Infelismente você não pode indicar a si mesmo.";
		close;
	}

	mes "Digite o código do amigo que te indicou:";
	input @z;
	query_sql ("SELECT `indicadosct` FROM `login` WHERE `myfriendcodect` = '"+@z+"'",@q);
	if(@q >= @limite){
	mes "Seu amigo já atingiu o limite de "+@limite+" indicações";
	close;

Claro que isso só vai funcionar se você usar o ID da conta como código de indicação. Agora se você usar outra forma de gerar este código, basta fazer uma consulta sql no código que o cara digitou, pegar o ida da conta desse código e comprar com o id da conta de quem esta digitando.

Editado por Orce
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora