Una pequeсa ayuda :)?
#1

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
Reply
#2

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
Reply
#3

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;}
Reply
#4

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

#define prueba SendClientMessage
Reply
#6

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.
Reply
#7

Muchas gracias . Eso era lo que necestaba.
Reply
#8

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); 
Reply
#9

Hola seсor heisemberg. Gracias por su ayuda
Reply
#10

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.
Reply
#11

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;
}
Reply
#12

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;
}
Reply
#13

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;

Reply
#14

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
Reply
#15

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

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?
Reply
#17

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.
Reply
#18

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);
Reply
#19

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);
Reply
#20

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;
}
Reply


Forum Jump:


Users browsing this thread: 7 Guest(s)