SA-MP Forums Archive
Una pequeсa ayuda :)? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Una pequeсa ayuda :)? (/showthread.php?tid=639373)



Una pequeсa ayuda :)? - SmileJack - 16.08.2017

Alguien podria decirme como puedo realizar esto, digamos que creo un stock

Код:
stock prueba(playerid, color, mensaje)
{
SendClientMessage(playerid, color, mensaje);
}
Y por ejemplo lo pueda usar de esta manera

Код:
CMD:test(playerid, params[])
{
prueba(playerid, COLOR_ROJO, "Hola wapo");
return 1;
}
O algo por el estilo, seria genia si me pudieran decir como lo podria hacer, gracias


Respuesta: Una pequeсa ayuda :)? - Z0MBERTH - 16.08.2017

khe

Код:
stock SoyPuto(playerid, puto[]) {
    SendClientMessage(playerid, COLOR_PUTO, puto);
}

COMMAND:puteria(playerid, params[]) {
    if(!params[0])
        SendClientMessage(playerid, -1, #Escribe tu puteria);

    SoyPuto(playerid, params);
    return true;
}
toy en droga we


Re: Una pequeсa ayuda :)? - FlaNy - 16.08.2017

Ha que te refieres exactamente?

Код:
stock Test(playerid, puto[]) {

SendClientMessage(playerid, COLOR_PUTO, puto);}
Код:
CMD:test(playerid, params[]) {

 if(!params[0])
 SendClientMessage(playerid, -1, #Escribe tu puteria);

Test(playerid, #Texto); //cambia ah tu gusto
return 1;}



Re: Una pequeсa ayuda :)? - SmileJack - 16.08.2017

De hecho no entendieron. Miren, queria crear como 'un nuevo' SendClientMesaage


Respuesta: Una pequeсa ayuda :)? - adri1 - 16.08.2017

#define prueba SendClientMessage


Re: Una pequeсa ayuda :)? - Toroi - 16.08.2017

No necesitas usar el keyword stock de manera obligatoria si no tienes idea para que sirve.

Si necesitas cumplir alguna otra funciуn al usar el SendClientMessage, si, puedes hacerlo exactamente como lo planteaste en el primer post

Код:
MensajeNuevo(playerid,color,mensaje[])
{
    SendClientMessage(playerid,color,mensaje);
    // cualquier otro codigo aparte
    return 1;
}
uso:

Код:
MensajeNuevo(playerid,-1,"string aqui");
Si solo quieres cambiarle el nombre a la funciуn, como dijo adri1 en el anterior post.


Re: Una pequeсa ayuda :)? - SmileJack - 16.08.2017

Muchas gracias . Eso era lo que necestaba.


Re: Una pequeсa ayuda :)? - pabloalber84ban - 16.08.2017

Ahorrate eso y usa defines, que es mas practico y rapido que un stock:
PHP код:
#define prueba SendClientMessage 
O puedes usar esta funcion que hace que puedas enviar mensajes con parametros sin usar format:
PHP код:
stock Mensaje(playerid,color,fstring[],{Float_}:...) 

   new 
n=(numargs()-3)*4
   if(
n
   { 
      new 
message[128],arg_start,arg_end
      
#emit CONST.alt                fstring 
      #emit LCTRL                    5 
      #emit ADD 
      #emit STOR.S.pri               arg_start 
      #emit LOAD.S.alt               n 
      #emit ADD 
      #emit STOR.S.pri               arg_end 
      
do 
      { 
         
#emit LOAD.I 
         #emit PUSH.pri 
         
arg_end-=4
         
#emit LOAD.S.pri           arg_end 
      

      while(
arg_end>arg_start); 
      
#emit PUSH.S                   fstring 
      #emit PUSH.C                   255 
      #emit PUSH.ADR                 message 
      
n+=4*3
      
#emit PUSH.S                   n 
      #emit SYSREQ.C                 format 
      
n+=4
      
#emit LCTRL                    4 
      #emit LOAD.S.alt               n 
      #emit ADD 
      #emit SCTRL                    4 
      
return SCM(playerid,color,message); 
   } 
   else return 
SCM(playerid,color,fstring); 

//------------------------------------------------------------------------------------------------ 
stock SCM(playeridcolormsg[]) 

    return 
SendClientMessage(playeridcolormsg); 

Ejemplo:
PHP код:
Mensaje(playerid, -1"Wea parametro %d %d",  12); 



Re: Una pequeсa ayuda :)? - SmileJack - 16.08.2017

Hola seсor heisemberg. Gracias por su ayuda


Re: Una pequeсa ayuda :)? - SmileJack - 16.08.2017

Perdonen por reactivar el tema, pero me surgieron algunos problemas. Lo que pasa es que, esto fue lo que hize

Код:
new Float:X, Float:Y, Float:Z;

stock GetObjectDistanceFromPlayer(playerid, objectid, color, mensaje[])
{
	GetObjectPos(objectid, X, Y, Z);
	new Float:distancia = GetPlayerDistanceFromPoint(playerid, X, Y, Z), mensaje[254];
	format(mensaje, sizeof(mensaje), "%0.2f", distancia);
	SendClientMessage(playerid, color, mensaje);
	return 1;
}
Pero lo que deseo hacer, es que por ejemplo el usuario utilize
Код:
GetObjectDistanceFromPlayer(playerid, objecto[0], COLOR_PUTO, "Estas a -distancia- de tu destino");
Y no se.. Magicamente el "-distancia- sea remplazado por el "%0.2f" y pueda realizar su funciуn, enserio esto me esta volviendo un poco loco.


Respuesta: Una pequeсa ayuda :)? - hotspicytaco - 17.08.2017

Si no te molesta evitar reinventar la rueda, puedes usar str_replace de la libreria strlib de Slice (github)

Code:
stock GetObjectDistanceFromPlayer(playerid, objectid, color, mensaje[])
{
	new Float:X, Float:Y, Float:Z;
	GetObjectPos(objectid, X, Y, Z);

	new Float:distancia = GetPlayerDistanceFromPoint(playerid, X, Y, Z);
        
        new msjDistancia[8];
        format(msjDistancia, sizeof(msjDistancia), "%0.2f", distancia);

    	str_replace(message, "-distancia-", msjDistancia);
	
	SendClientMessage(playerid, color, mensaje);
	return 1;
}



Re: Una pequeсa ayuda :)? - SmileJack - 17.08.2017

Bueno, no se si realmente funciono, me arrojo este warning, pero igualmente solo enviaba el mensaje, y fuera de eso no salia la "distancia", simplemente un espacio

Code:
C:\Users\JONATAN\Desktop\Outbreak Roleplay\pawno\include\ODFP.inc(13) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Warning.
Code:
CMD:dis(playerid, params[])
{
	GetObjectDistanceFromPlayer(playerid, objeto[0], -1, "Estas a -distancia- de tu destino");
	return 1;
}



Re: Respuesta: Una pequeсa ayuda :)? - Swankeh - 17.08.2017

Prueba asн
PHP Code:
stock GetObjectDistanceFromPlayer(playeridobjectidcolormensaje[])
{
        new 
Float:XFloat:YFloat:Z;
        
GetObjectPos(objectidXYZ);
        new 
Float:distancia GetPlayerDistanceFromPoint(playeridXYZ);   
        new 
msjDistancia[8];
        
format(msjDistanciasizeof(msjDistancia), "%0.2f"distancia);
        new 
mensajefinal[124];
        
format(mensajefinalsizeof(mensajefinal), "%s",str_replace("-distancia-"msjDistanciamensaje);//Cambie de lugar las variables, segъn yo asн tienen que estar acomodadas y asн tendrнa s que almacenar el mensaje.
        
SendClientMessage(playeridcolormensajefinal);//Enviamos el mensaje al jugador con todo y el formato.
    
return 1;




Respuesta: Re: Una pequeсa ayuda :)? - adri1 - 17.08.2017

Quote:
Originally Posted by SmileJack
View Post
Bueno, no se si realmente funciono, me arrojo este warning, pero igualmente solo enviaba el mensaje, y fuera de eso no salia la "distancia", simplemente un espacio

Code:
C:\Users\JONATAN\Desktop\Outbreak Roleplay\pawno\include\ODFP.inc(13) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Warning.
Code:
CMD:dis(playerid, params[])
{
	GetObjectDistanceFromPlayer(playerid, objeto[0], -1, "Estas a -distancia- de tu destino");
	return 1;
}
tan dificil es poner %f? no te recomiendo eso


Re: Una pequeсa ayuda :)? - SmileJack - 17.08.2017

Tenia otras cosas en mente, pero creo que eso sera lo mejor.


Re: Una pequeсa ayuda :)? - Miguel - 17.08.2017

Quote:
Originally Posted by SmileJack
View Post
Code:
C:\Users\JONATAN\Desktop\Outbreak Roleplay\pawno\include\ODFP.inc(13) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Warning.
Esa advertencia dice mucho mбs de lo que crees. Te estб indicando que no pudo determinar el tamaсo de la variable que colocaste dentro del sizeof. Si ese sizeof estб dentro de una funciуn que maneje cadenas de caracteres (como format, por ejemplo), harнa que la cadena resultante del formato quede vacнa.

Eso explicarнa por quй estбs obteniendo un espacio en vez de la distancia. їLa soluciуn? Revisar lo que estбs colocando en el sizeof.

sizeof determina la cantidad de celdas de una variable. En el caso de las cadenas de caracteres, determina su longitud mбxima (contando el caracter nulo). Por ejemplo, si tienes new x[31] y llamas a sizeof (x), su resultado serнa 31, ya que x tiene 31 celdas.

Si mal no recuerdo, al utilizar sizeof sobre un arreglo que proviene de los parбmetros de una funciуn, el compilador se queja. їEs ese tu caso?


Re: Una pequeсa ayuda :)? - SmileJack - 17.08.2017

Quote:
Originally Posted by Miguel
View Post
Esa advertencia dice mucho mбs de lo que crees. Te estб indicando que no pudo determinar el tamaсo de la variable que colocaste dentro del sizeof. Si ese sizeof estб dentro de una funciуn que maneje cadenas de caracteres (como format, por ejemplo), harнa que la cadena resultante del formato quede vacнa.

Eso explicarнa por quй estбs obteniendo un espacio en vez de la distancia. їLa soluciуn? Revisar lo que estбs colocando en el sizeof.

sizeof determina la cantidad de celdas de una variable. En el caso de las cadenas de caracteres, determina su longitud mбxima (contando el caracter nulo). Por ejemplo, si tienes new x[31] y llamas a sizeof (x), su resultado serнa 31, ya que x tiene 31 celdas.

Si mal no recuerdo, al utilizar sizeof sobre un arreglo que proviene de los parбmetros de una funciуn, el compilador se queja. їEs ese tu caso?
De hecho, al ponerlo asн

Code:
format(msjDistancia, sizeof(msjDistancia), "%0.2f", distancia);
Me envia el warning, pero si lo hago sin el sizeof me manda un error.


Re: Una pequeсa ayuda :)? - Miguel - 18.08.2017

Quote:
Originally Posted by SmileJack
View Post
De hecho, al ponerlo asн

Code:
format(msjDistancia, sizeof(msjDistancia), "%0.2f", distancia);
Me envia el warning, pero si lo hago sin el sizeof me manda un error.
їEs msjDistancia un parбmetro de la funciуn que contiene ese cуdigo? De cualquier forma, podrнas sustituir ese sizeof(msjDistancia) por el tamaсo de msjDistancia (escrito). Por ejemplo, si msjDistancia tuviera 8 celdas:
Code:
format(msjDistancia, 8, "%0.2f", distancia);



Re: Una pequeсa ayuda :)? - SmileJack - 18.08.2017

Hmm no lo se, hay algo un poco extraсo en el codigo

Code:
C:\Users\JONATAN\Desktop\Outbreak Roleplay\pawno\include\ODFP.inc(13) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Warning.
Code:
    strreplace(mensaje, "-distancia-", msjDistancia);



Respuesta: Una pequeсa ayuda :)? - hotspicytaco - 18.08.2017

Miguel tiene razуn. Una soluciуn comъn es agregar otro parametro para el tamaсo del mensaje.

Code:
stock GetObjectDistanceFromPlayer(playerid, objectid, color, mensaje[], tamano = sizeof(mensaje))
{
	new Float:X, Float:Y, Float:Z;
	GetObjectPos(objectid, X, Y, Z);

	new Float:distancia = GetPlayerDistanceFromPoint(playerid, X, Y, Z);
        
        new msjDistancia[8];
        format(msjDistancia, sizeof(msjDistancia), "%0.2f", distancia);

    	str_replace(message, "-distancia-", msjDistancia, .maxlength = tamano);
	
	SendClientMessage(playerid, color, mensaje);
	return 1;
}