hoivart

Skill com Callfunc?

15 posts neste tópico

9 horas atrás, SyncMaster disse:

Sim, modificando a skill na source para ela ler o script. O comando é run_script.

Obrigado pela resposta, Sync. Já foi de grande ajuda, porém, não sei editar/adicionar quase nada na source. Poderia me dar um exemplo?
Pesquisando, encontrei com isto:
 

 struct npc_data *nd; 
				nd = npc_name2id("npc_name");
				if( nd == NULL ) break;
				run_script(nd->u.scr.script, 0, sd->bl.id, nd->bl.id); //run_script está aqui, mas não consegui entender pra pegar de base :/
				return 0;
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daqui pra frente não posso ajudar, pois estaria mandando sistemas do meu servidor. E parte não é de minha autoria, e sim de pessoas que contribuíram para o servidor, então mesmo se quisesse, não tenho permissão de mandar.

Editado por SyncMaster
0

Compartilhar este post


Link para o post
Compartilhar em outros sites
34 minutos atrás, SyncMaster disse:

Daqui pra frente não posso ajudar, pois estaria mandando sistemas do meu servidor. E parte não é de minha autoria, e sim de pessoas que contribuíram para o servidor, então mesmo se quisesse, não tenho permissão de mandar.

Nossa mãe, que prosinha.... kkkkkkkkkkkkkkk

Então vamos revelar o segredo Mister M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (Voz do Sid Moreira).
 

    struct npc_data* nd;
    nullpo_retr(-1, sd);
 
    nd = npc_name2id("NomeNPC");
    if( nd == NULL )
        return false;

    run_script(nd->u.scr.script, 0, sd->bl.id, fake_nd->bl.id);
    return true;

O senhor dos SORTILÉGIOS. (Voz do Sid Moreira com tesão)

Ai seria legal você compartilhar mais a sua ideia para sabermos o que realmente você quer.

 

Bjos.

Editado por Orce
2

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, SyncMaster disse:

Daqui pra frente não posso ajudar, pois estaria mandando sistemas do meu servidor. E parte não é de minha autoria, e sim de pessoas que contribuíram para o servidor, então mesmo se quisesse, não tenho permissão de mandar.

Obrigado da mesma maneira.

 

2 horas atrás, Orce disse:

Nossa mãe, que prosinha.... kkkkkkkkkkkkkkk

Então vamos revelar o segredo Mister M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (Voz do Sid Moreira).
 


    struct npc_data* nd;
    nullpo_retr(-1, sd);
 
    nd = npc_name2id("NomeNPC");
    if( nd == NULL )
        return false;

    run_script(nd->u.scr.script, 0, sd->bl.id, fake_nd->bl.id);
    return true;

O senhor dos SORTILÉGIOS. (Voz do Sid Moreira com tesão)

Ai seria legal você compartilhar mais a sua ideia para sabermos o que realmente você quer.

 

Bjos.

Obrigado, campeão. Eu não tinha prestado atenção neste npc_name2id, o que eu precisava era executar um script por uma habilidade mesmo, eu estava utilizando este callfunc como um item e agora vou alterar para uma habilidade, testei em uma aleatória e funcionou, enfim, obrigado.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Orce disse:

Nossa mãe, que prosinha.... kkkkkkkkkkkkkkk

Então vamos revelar o segredo Mister M!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (Voz do Sid Moreira).
O senhor dos SORTILÉGIOS. (Voz do Sid Moreira com tesão)

Ai seria legal você compartilhar mais a sua ideia para sabermos o que realmente você quer.

 

Bjos.

Deixava o moço perceber que "npc_name" era o nome do NPC.  Já tinha o negócio praticamente completo. Sou mais levar a pessoa a aprender e conseguir do que dar na mão.

jigsaw-3083931.jpg

 

Editado por SyncMaster
1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, SyncMaster disse:

Deixava o moço perceber que "npc_name" era o nome do NPC.  Já tinha o negócio praticamente completo. Sou mais levar a pessoa a aprender e conseguir do que dar na mão.

 

 

Eu havia percebido este npc_name. Só não imaginei que seria algo tão fácil. Passou pela minha cabeça que seria algo mais difícil, que teria de alterar em um outro arquivo, sei lá... Ele não me deu de bandeja, Sync. Explicou qual linha eu tinha que alterar e o ensinamento do rapaz é por meio da explicação, existe vários meios para a instrução de uma única coisa. Sua arrogância é só na escrita ou é assim o tempo inteiro?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

de terça a sexta das 9:00 as 23:50. Fechado para almoço das 11:50 as 12:40. 

Sim, existem vários meios de ensinar, um deles é mostrar o caminho, ou o comando, e permitir que a pessoa tenha uma palavra chave para pesquisar em todo o conteúdo de 4 fóruns ótimos foruns diferentes. O outro é dar a mão e levar até o final, se eu sou arrogante por mostrar o caminho então sou mesmo. Não vou continuar respondendo aqui porque o tópico já foi respondido e o fórum não é para isso.

Editado por SyncMaster
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkkkkkk 

calma gente...

Mals @SyncMaster por atrapalhar a brincadeira rs. 

@hoivart o menino @SyncMaster só estava brincando.

Que bom que conseguiu dar uma solução apenas com esta exibição de código.  Nem sempre alguem tem lógica para fazer algo apenas informando as linhas.

Vlw.

1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi! Quando vou compilar com este código encontro os seguintes erros:

1>..\src\map\skill.c(6459): warning C4013: 'npc_name2id' undefined; assuming extern returning int
1>..\src\map\skill.c(6459): warning C4047: '=' : 'npc_data *' differs in levels of indirection from 'int'
1>..\src\map\skill.c(6463): warning C4013: 'run_script' undefined; assuming extern returning int

 

Parece que tudo isso é causado pela falta de 'int'.

Também encontrei um erro ao usar 

 run_script(nd->u.scr.script, 0, sd->bl.id, fake_nd->bl.id);

Ao invés de:

Citar

run_script(nd->u.scr.script, 0, sd->bl.id, nd->bl.id);

Como resolver? Obrigado!

@Edit

 Estou recebendo também o erro

Citar

map_freeblock_timer: block_free_lock(1) invalido.

ao tentar usar a skill com autocast. É algo relacionado aos warnings que recebi ao compilar?

 

Editado por Vermillion
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

	struct npc_data *nd;
	
	nd = npc->name2id("teste01");
	if( nd == NULL )
		return false;
	
	script->run(nd->u.scr.script, 0, sd->bl.id, nd->bl.id); //Executa o Script						
	return true;

esse aqui foi o NPC que usei como teste:

-	script	teste01	-1,{

	announce "Orc Azul é baleira?",bc_all;
	end;
}

 

2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Edit

Funcionou perfeitamente! Muito obrigado @Orce!

Mas esse aqui persiste:

Citar

map_freeblock_timer: block_free_lock(1) invalido.

Se não tiver como resolver, paciência, já que é uma função com poucas chances de ser executada e o erro não tem implicado em nada.

Editado por Vermillion
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em que parte da src você esta colocando este código. Poderia ser mais especifico?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou criando uma skill assim:

Citar

case NPC_OREEVENT:
        {
            struct npc_data *nd;
    
            nd = npc->name2id("oremine");
            if( nd == NULL )
            return false;
    
            script->run(nd->u.scr.script, 0, sd->bl.id, nd->bl.id); //Executa o Script                        
            return true;
        }
            break;

Coloquei ela no skill.c e a skill está funcionando perfeitamente, só que recebo essa mensagem toda vez que ela é chamada. Mas provavelmente o erro deve vir de eu usar ela com bonus3 bAutoSpell na item_db, criando um item que chame o script do npc usando a skill para attach o player em um npc dando autoattacks(criei um SC_ para fazer com que o NPC ao ser chamado faça o player para de atacar). Tentei fazer isso com o bonus AutoBonus, mas não funcionou de jeito nenhum.

Editado por Vermillion
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