Entre para seguir isso  
Seguidores 0
HD Scripts

[RESOLVIDO] Somando valores na source

15 posts neste tópico

Resolvido, pode fechar o tópico.

Editado por HD Scripts
resolvido
0

Compartilhar este post


Link para o post
Compartilhar em outros sites
31 minutos atrás, HD Scripts disse:

Gente, me deparei com uma situação complexa (no meu ver).

Como eu faço pra somar os valores e printar na tela?


	parametro 1 = "texto";
	parametro 2 = "texto";
	parametro 3 = "texto";
	somatotal = parametro 1 + parametro 2 + parametro 3;

	printar_na_tela(somatotal);

 

Existe como fazer isso na forma que o emulador lê?

Obrigado

Uma dúvida, no caso de valores do tipo texto (string) você não soma, você iria concatenar os valores, juntando o valor que cada variável possui... seria isso ?

 

@Edi: da uma olhada: http://www.devfuria.com.br/logica-de-programacao/strings-concatenar/

Editado por Hyroshima
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, mas como eu transformo o comando "concatenar" pra linguagem do emulador?

Obrigado

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
sprintf

Na real ele não funciona no emulador né

#edit

To tentando assim, mas não vinga '-'

	char param1[] = "texto1";
	char param3[] = "texto2";
	//nullpo_retr(-1, sd);
	strcat(param1, message);
	strcat(param3,".txt");
	//char resultado[] = "param1, message, param3";

 

Editado por HD Scripts
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei algo no atcommand.c:

 

bool msg_config_read(const char *cfg_name, bool allow_override) {
	int msg_number;
	char line[1024], w1[1024], w2[1024];
	FILE *fp;
	static int called = 1;

	nullpo_retr(false, cfg_name);
	if ((fp = fopen(cfg_name, "r")) == NULL) {
		ShowError("Arquivo de mensagem nao encontrado: %s\n", cfg_name);
		return false;
	}

	if( !atcommand->max_message_table )
		atcommand->expand_message_table();

	while(fgets(line, sizeof(line), fp)) {
		if (line[0] == '/' && line[1] == '/')
			continue;
		if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2)
			continue;

		if (strcmpi(w1, "import") == 0) {
			atcommand->msg_read(w2, true);
		} else {
			msg_number = atoi(w1);
			if (msg_number >= 0 && msg_number < MAX_MSG) {
				if (atcommand->msg_table[0][msg_number] != NULL) {
					if (!allow_override) {
						ShowError("Mensagem duplicada: ID '%d' ja esta sendo usado por '%s'. Mensagem '%s' foi ignorada.\n",
						          msg_number, w2, atcommand->msg_table[0][msg_number]);
						continue;
					}
					aFree(atcommand->msg_table[0][msg_number]);
				}
				/* this could easily become consecutive memory like get_str() and save the malloc overhead for over 1k calls [Ind] */
				atcommand->msg_table[0][msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));
				strcpy(atcommand->msg_table[0][msg_number],w2);
			}
		}
	}
Citar

if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2)

 

aqui pelo que parece concatenar, mas é feito com a leitura as msg  ( Reads Message Data ) kk eu tenho bem pouco conhecimento ainda pq (pouco tempo pra muita coisa ^^)

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não funciona...

Eu só precisava somar os valores de param1 + message + param3;

Que no final, ficasse visualmente assim 

somar(param1,message,param3);

printar(somar);

Digamos que ficaria assim:

somar("teste1",message,"teste2");

printar(teste1messageteste2);

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, HD Scripts disse:

Cara, não funciona...

Eu só precisava somar os valores de param1 + message + param3;

Que no final, ficasse visualmente assim 


somar(param1,message,param3);

printar(somar);

Digamos que ficaria assim:


somar("teste1",message,"teste2");

printar(teste1messageteste2);

 

Olá 

Você está fazendo esse código na src? em qual arquivo exatamente/ skill.c ?

Se você quer printar essa mensagem no console (saída no mapserver)
vc pode usar

		printf("Mensagem no console do emulador"); 


Se quer printar a mensagem dentro do game, no chat, você pode usar:

			char output[128];
			sprintf(output, "Sua mensagem aqui na cor vernmelha!");
			clif->messagecolor_self(sd->fd, COLOR_RED, output);	

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, HD Scripts disse:

@Tio Akima, em atcommand.c

Segue o script em si


ACMD_FUNC(npc)
{
	char param1[] = "npc/personalizados/meusnpcs/";
	char param3[] = ".txt";
	char resultado[] = param1, param3;
	//nullpo_retr(-1, sd);
	//strcat(param1, message);
	//char *resultado(param1, message, param3);
	sscanf(resultado, "%49[^:]: %49[^\r]", param1, message, param3);
 
    if( !message || !*message){ // checks message
		clif_displaymessage(fd, "Favor digitar o nome de um NPC (uso: @npc <nome_do_script>).");
        return 0;
	}

	npc_parsesrcfile(resultado);
	clif_displaymessage(fd, msg_txt(262)); // Carregado
    return 0;
}

O que eu quero fazer é: um comando que carrega 1 script por completo.

Por ex: eu tenho um arquivo .txt dentro da pasta personalizados... Quero carregar esse arquivo sem ter que digitar @loadnpc npc/personalizados/arquivo,txt

Tentei usar a base de vários comandos, mas não achei a solução.

Quero apenas digitar @npc arquivo


Acho que entendi hahah
pelo rumo que tava tomando o post, achei que você queria só exibir mensagens na tela (ou no console)

Bom, você pode tentar fazer o seguinte (seguindo a lógica do que você quer)

ACMD_FUNC(npc)
{    
                struct npc_data* nd;
                nullpo_retr(-1, sd);
                char nome_script;

				memset(nome_script, '\0', sizeof(nome_script));   // armazenar oque o plyer digitou na variavel  "nome_script"
                
                nd = npc->name2id("nome_script"); //Seleciona o script a ser executado (nome do script deve ser igual ao conteudo do parâmetro)

                if (nd){
                
                    script->run(nd->u.scr.script, 0, sd->bl.id, nd->bl.id); //Executa o Script
                
                } else {
                    char output[128];
                    sprintf(output, "Não foi possível realizar esta ação!");
                    clif->messagecolor_self(sd->fd, COLOR_RED, output);    
                }
                
            }
                break;  

Você pode trocar o script->run()  por script->reload(nd)

Acredito que a lógica é por ai

@EDIT - melhorou, acho.
 

Editado por Tio Akima
0

Compartilhar este post


Link para o post
Compartilhar em outros sites
50 minutos atrás, HD Scripts disse:

Veja como eu deixei:

 

  Ocultar conteúdo

 

598c7f49e8915_Semttulo.thumb.jpg.db6344652f276ed6a399b4e45f894d6a.jpg

 

 

Mesmo assim, consta esses erros no map-server

 

HD tem algumas coisas que está estranho... algo errado nao está certo, rs
como por exemplo a declaração em cima, tenta por ACMD

aqui ó, testa esse daqui

ACMD(npc) {     
	char npcname[NAME_LENGTH+1];
	struct npc_data *nd;  
	
		memset(npcname, '\0', sizeof(npcname));   // armazenar oque o plyer digitou na variavel  "npcname"
           
		if (!*message || sscanf(message, "%23[^\n]", npcname) < 1) {
				clif->message(fd, msg_fd(fd,1129)); // Please enter a NPC name (usage: @npc <NPC_name>).
				return false;
		}

			nd = npc->name2id(npcname); //Seleciona o script a ser executado (nome do script deve ser igual ao conteudo do parâmetro)

        if (nd){
                
             npc->reload(nd);   
			clif->message(fd, msg_fd(fd,100)); // Scripts carregado
                
         } else {
                   
			clif->message(fd, msg_fd(fd,111)); // Este NPC não existe
			return false;
         }
				
       return true; 
 }

 

compilei aqui e rodou! veja se da ok ai

@EDIT tenta agora @HD Scripts

 

Editado por Tio Akima
1

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, HD Scripts disse:

ACMD_FUNC(npc)
{
	char npcname[NAME_LENGTH+1];
	struct npc_data *nd;  
	
		memset(npcname, '\0', sizeof(npcname));   // armazenar oque o plyer digitou na variavel  "nome_script"
           
		if (!*message || sscanf(message, "%23[^\n]", npcname) < 1) {
				clif_displaymessage(fd, "Favor digitar o nome de um NPC (uso: @npc <nome_do_script>).");
				return false;
		}

		nd = npc_name2id(npcname); //Seleciona o script a ser executado (nome do script deve ser igual ao conteudo do parâmetro)

        if(!nd){
            script_reload(nd); //carrega o Script
			clif_displaymessage(fd, "Script carregado.");
         } else {
			clif_displaymessage(fd, "Esse script não existe.");
			return false;
         }

       return true; 
}

 

Dessa forma compila, não da erro de map-sever, mas não carrega nada...

OBS: eu to adaptando ao meu emulador

#edit

o comando "script_reload(nd);" da erro dizendo "too many arguments in function call" e não deixa compilar

Desculpe HD, erro meu
Troca o comando "script_reload(nd);"  pelo npc->reload(nd); 

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
Entre para seguir isso  
Seguidores 0