Jump to content
Sign in to follow this  
AnakinHEAD

SCRIPT NPC GUILD

Recommended Posts

Olá não sei se estou no topico certo ou coisa e talz . alguem poderia me dizer se é possivel fazer uma script que o npc invta diretamente para uma guilda . exemplo . eu começo agora no servidor . ai falo com npc de iniciantes e ele me da a guilda dos iniciantes criada por um outro char .

Share this post


Link to post
Share on other sites

Olha,

a parte lógica do NPC é simples de montar. Mas não sei se na pratica isso seria funcional. Acredito que teria que ter alguma intervenção na source para que o processo funciona-se.

o NPC propriamente dito ficaria assim:

prontera,150,150,4	script	Guild	80,{	if(getcharid(2) != 0) { mes "Você ja faz parte de um clã."; Close(); }		set .@idguild,1; // Aqui você coloca o ID do clã no qual você que os players ingressem.		mes "Você gostaria de entrar para o clã "+getguildname(.@idguild)+"?";	if(select("- Sim:- Não")==2) Close();		mes "Seja bem vindo! Basta relogar agora.";	query_sql "UPDATE `char` SET `guild_id`= '"+.@idguild+"' WHERE `char_id` = "+getcharid(0)+"";	query_sql "INSERT INTO `guild_member` VALUES ('"+.@idguild+"','"+getcharid(3)+"','"+getcharid(0)+"','"+getlook(1)+"','"+getlook(6)+"','"+Sex+"','"+Class+"','"+BaseLevel+"','0','0','1','19','"+strcharinfo(0)+"')";	atcommand "@reloadpcdb";	close();}

Se quiser testar e ver se funciona.

Ate fico curioso para saber o resultado.

Edited by Orce

Share this post


Link to post
Share on other sites

não funciono . sabe +/- o que eu deveria fazer para funcionar ?


tipo vo passar o que acontece o npc fala pra reloga que tudo certo ai eu relogo de boa . no php "guild member" consta que o player ta na guild,mais no jogo ele n entra .mais tipo eu adicionei um npc de guild point. mais n consigo entrar com esse char que o npc convidou

Share this post


Link to post
Share on other sites

Pesquisando aqui vi que o NPC não funciona pelo seguinte motivo,

o servidor tem um sistema de cache que salva todas as ações feitas no servidor para caso o personagem seja desconectado repentinamente. Quando o personagem loga novamente este sistema de chace do emulador verifica as alterações que foram feitas nas tabelas relacionadas a conta e as aplica. Para que o sistema funcione, terá que ser criado um modificação na source que faça esta alteração também no cache do emulador para quando o personagem relogar ele apareça na GUILDA. Vou tentar procurar algo na source mais já aviso que será um tiro no escuro porque não tenho tal nível de aprendizado para fazer tal alteração.

Edited by Orce

Share this post


Link to post
Share on other sites

caraca, to com o mesmo problema, mas no meu caso é com o grupo em vez da guild. Quero setar um grupo para um player mas não consigo, se eu seto no banco de dados não adianta pq fica guardado na cashe como o membro Orce disse ai em cima.

Galera se acharem a solução para isso postem ai, por favor.

grato

Share this post


Link to post
Share on other sites

Liver, respondi o seu tópico.

Quanto à este tópico, pode-se utilizar o mesmo script que postei no tópico do Lister, com uma pequena alteração:

BUILDIN_FUNC(partyinvitecharname)Para:BUILDIN_FUNC(guildinvitecharname)
if(sd->status.party_id == 0){Para:if(sd->status.guild_id == 0){
party_invite(sd,dstsd);Para:guild_invite(sd,dstsd);
BUILDIN_DEF(guildinvitecharname,"i"),Para:BUILDIN_DEF(guildinvitecharname,"i"),

Sendo que pelo que entendi do seu objetivo, você teria que de alguma forma usar o comando attachrid(); em alguém da Guild, que tivesse permissão para invitar o alvo.

  • Love 2

Share this post


Link to post
Share on other sites

Liver, respondi o seu tópico.

Quanto à este tópico, pode-se utilizar o mesmo script que postei no tópico do Lister, com uma pequena alteração:

BUILDIN_FUNC(partyinvitecharname)Para:BUILDIN_FUNC(guildinvitecharname)
if(sd->status.party_id == 0){Para:if(sd->status.guild_id == 0){
party_invite(sd,dstsd);Para:guild_invite(sd,dstsd);
BUILDIN_DEF(guildinvitecharname,"i"),Para:BUILDIN_DEF(guildinvitecharname,"i"),
Sendo que pelo que entendi do seu objetivo, você teria que de alguma forma usar o comando attachrid(); em alguém da Guild, que tivesse permissão para invitar o alvo.

Códigos interessantes, mas é melhor duplicar do que substituir.

Sobre a necessidade de utilizar attachrid() em algum rid com permissão de recrutamento, creio que não haja necessidade, apesar de não ter visto este comando que você postou, na source.

Share this post


Link to post
Share on other sites

Pois é Schrwaizer, é porque esse código é custom, eu criei para atender a uma necessidade minha.
O original foi criado para invitar para Partys, eu disse para ele substituir justamente oque for referente a party pelo de guild.
No caso, ele precisa de um Inviter (attachado ao script) e o alvo (definido pelo argumento do código).
Quando ele for invitar os aprendizes para a Guild de novatos, ele pode definir o argumento salvando o strcharinfo(0) do aprendizes em uma variavel para ser utilizada após o attachrid, mas quando for rodar o código ele precisaria attachar alguém que tivesse permissão para invitar na guild, e somente após isso rodar o código. Basicamente o script dele precisaria ficar assim:

set .alvo$, strcharinfo(0);

attachrid(ID com permissão para Invitar);

if(!getcharid(3)) end;
guildinvitecharname(.alvo$);

end;

Share this post


Link to post
Share on other sites

O ideal seria um comando em que não precisasse dar attach para não cair em situações de todos recruters off ou algo do tipo. Além de que verificar recruter on já dá um trabalho, imagino eu. Só para deixar claro, não estou desmerecendo o trabalho, estou apenas dizendo que se for possível criar um comando em que ponha o player direto na party/guild vai ser lindo. Provavelmente está guardado em algum lugar da source, já que as mudanças no banco de dados não foi suficiente.

w/e gj

Share this post


Link to post
Share on other sites

O ideal seria um comando em que não precisasse dar attach para não cair em situações de todos recruters off ou algo do tipo. Além de que verificar recruter on já dá um trabalho, imagino eu. Só para deixar claro, não estou desmerecendo o trabalho, estou apenas dizendo que se for possível criar um comando em que ponha o player direto na party/guild vai ser lindo. Provavelmente está guardado em algum lugar da source, já que as mudanças no banco de dados não foi suficiente.

w/e gj

Eu sou lindo então, porque acabei de criar este comando:

Em script.c, entre/após os comandos, adicione:

/** [Schrwaizer] ** Comando de script "guildinvite(<id da guild>);" ** 02/12/2014*/BUILDIN(guildinvite) {	TBL_PC* sd = script->rid2sd(st);	int gld_id;	int gm_id;	struct guild* gld;	int i;	if( sd == NULL ) {		return true;	}	gld_id = script_getnum(st, 2);	if( sd->status.guild_id > 0	 || sd->guild_invite > 0) {		script_pushint(st, 0);		return true;	 }		if( ( gld = guild->search(gld_id) ) != NULL ) {		gm_id = gld->member[0].char_id;		ARR_FIND( 0, gld->max_member, i, gld->member[i].account_id == 0 );		if( i == gld->max_member ) {			script_pushint(st, 0);		} else {			sd->guild_invite = gld_id;			sd->guild_invite_account = gm_id;						clif->guild_invite(sd, gld);			script_pushint(st, 1);		}	} else {		script_pushint(st, 0);	}	return true;}
E entre/após as definições de comando, adicione:

BUILDIN_DEF(guildinvite, "i"),

O comando foi testado e está funcionando com a versão atual do emulador (não darei suporte a versões antigas).

Talvez, caso não haja nenhum erro decorrente do código, esse script possa ser adicionado ao emulador oficial.

Uso em um script:

prontera,150,150,6    script    Recrutador    99,{if(guildinvite(1)) {    message strcharinfo(0), "Convite enviado com sucesso!"; //aparece o convite na tela do jogador} else {    message strcharinfo(0), "Ocorreu um erro ao tentar enviar um convite"; // o jogador provavelmente já tem clã ou já tem algum convite na tela}end;}

Observações:

1. O comando envia um convite para a tela do jogador, que pode ser recusado. Se quiserem posso fazer uma alteração para que o jogador seja adicionado a força em uma guild.

2. O uso do comando é guildinvite(<id da guild>); – retorna 1 se o convite foi enviado com sucesso e 0 se houve falha.

Edited by Schrwaizer
  • Love 3

Share this post


Link to post
Share on other sites

Como ficaria para invitar sem o player ter que confirmar (chamando direto)?

Share this post


Link to post
Share on other sites

Como ficaria para invitar sem o player ter que confirmar (chamando direto)?

Assim que eu chegar em casa vou editar o comando para adicionar um parâmetro opcional para forçar o jogador a entrar em um clã e dou edit aqui.

Share this post


Link to post
Share on other sites

Liver, respondi o seu tópico.

Quanto à este tópico, pode-se utilizar o mesmo script que postei no tópico do Lister, com uma pequena alteração:

BUILDIN_FUNC(partyinvitecharname)Para:BUILDIN_FUNC(guildinvitecharname)
if(sd->status.party_id == 0){Para:if(sd->status.guild_id == 0){
party_invite(sd,dstsd);Para:guild_invite(sd,dstsd);
BUILDIN_DEF(guildinvitecharname,"i"),Para:BUILDIN_DEF(guildinvitecharname,"i"),

Sendo que pelo que entendi do seu objetivo, você teria que de alguma forma usar o comando attachrid(); em alguém da Guild, que tivesse permissão para invitar o alvo.

Você substituindo sabe que a função ficará somente a mercê somente da guild, sim? Não é a melhor opção, se você bem quiser, fazendo uma modificação na source você pode fazer um snipp. reterente ao attachrid copiando as funções e customizando um comando.

Se quiser, posso fazer, or try. :rolleyes:

Share this post


Link to post
Share on other sites
Sign in to follow this  

Seja bem vindo ao Cronus-Emulator.
É sempre um prazer te-lo conosco.
Você pode visualizar nossas áreas de suporte para encontrar suas soluções sem a necessidade de se registrar!
Registrando em nossa comunidade, você poderá conhecer mais sobre nosso projeto, criar tópicos, responder tópicos existentes, baixar milhares de recursos em nosso sistema de downloads, participar de nossa comunidade, customizar seu perfil e muito mais... Se você já possui uma conta, faça seu login - ou crie uma conta. Também temos integração com Google+ e Facebook.

×
×
  • Create New...