Stock problem
#1

Код:
stock Scm(playerid, color, const message[], {Float,_}:...)
{
	new string[356];
	format(string, 356, const message, {Float,_}:...);
	SendClientMessage(playerid, -1, string);
}
i want to make a stock like this but i get errors
ex usage:
Код:
new name[24];
	GetPlayerName(playerid, name, sizeof(name));
	Scm(playerid, -1, "%s(%d) blabla", name, playerid);
Код:
C:\Users\Admin\Desktop\SERVER\gamemodes\s.pwn(42) : error 029: invalid expression, assumed zero
C:\Users\Admin\Desktop\SERVER\gamemodes\s.pwn(42) : warning 215: expression has no effect
C:\Users\Admin\Desktop\SERVER\gamemodes\s.pwn(42) : error 017: undefined symbol "Float"
C:\Users\Admin\Desktop\SERVER\gamemodes\s.pwn(42) : error 029: invalid expression, assumed zero
C:\Users\Admin\Desktop\SERVER\gamemodes\s.pwn(42) : fatal error 107: too many error messages on one line
Reply
#2

Everybody would wish to be that simple but without #emit, you can't get it working.

PHP код:
// By Nero_3D
SCM(playeridcolorform[], {Float_}: ...)
{
    
#pragma unused form
    
static
        
tmp[145];
    new
        
t1 playerid,
        
t2 color;
    const
        
n4 = -4,
        
n16 = -16,
        
size sizeof tmp;
    
#emit stack 28
    #emit push.c size
    #emit push.c tmp
    #emit stack n4
    #emit sysreq.c format
    #emit stack n16
    
return SendClientMessage(t1t2tmp);

Reply
#3

I have a version of SCMF:
PHP код:
SCMF(playeridcolor, const msg[], va_args<>)
{
    static
        
string[145];
    
va_format(stringsizeof(string), msgva_start<3>);
    return 
SendClientMessage(playeridcolorstring);

One with EMIT like Konstantinos published :
PHP код:
// ! Credit to the original author !
SCMF(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);

For SendClientMessageToAll.
PHP код:
#define                     SCMFTA(%1,%2,%3)                         do{new _str[190]; format(_str,150,%2,%3); SendClientMessageToAll(%1,_str);}while(FALSE) 
Reply
#4

Thats a stock or what?
Can you tell me the final result
Reply
#5

Do you know what is a stock function ?
Also, please, read this : https://sampforum.blast.hk/showthread.php?tid=570635
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)