SA-MP Forums Archive
[Ayuda] Codigo roto - 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: [Ayuda] Codigo roto (/showthread.php?tid=536213)



[Ayuda] Codigo roto - nilesk - 08.09.2014

Buenas, segъn ando viendo tengo este code

Код:
public OnPlayerText(playerid, text[])
{
  new string[128];
  format(string, sizeof(string), "%s", text);
  for (new i; i < 128; i++) {
    if (string[i] == '@') {
      if ((string[i + 1] > 47) && (string[i + 1] < 58)) {
      	new id = strval(string[i + 1]);
        if (id <= 500) {
   	  if (IsPlayerConnected(id)) {
            new menohraca[MAX_PLAYER_NAME];
	    GetPlayerName(id, menohraca, MAX_PLAYER_NAME);
	    new j = (i + 1);
	    while ((j < (i + 5)) && ((string[j] > 47) && (string[j] < 58)))
              j++;
	    strdel(string, i, j);
	    strins(string, menohraca, i, 128);
    	  } else {
	    SendClientMessage(playerid, 0xFF0000FF, "Introduzca la ID");
	    return 0;
	  }
        } else {
	  SendClientMessage(playerid, 0xFF0000FF, "Introduzca la ID");
	  return 0;
	}
      }
    }
  }
  SendPlayerMessageToAll(playerid, string);
  return 0;
}
Que es imposible de funcionar, llevo 1 hora intentando incorporarlo a mi GM (para mi canal de dudas "/n") y sinceramente no pude hacerlo funcionar, Quisiera saber si alguien podrнa ayudarme, El codigo de mi comando es:

Код:
	if(strcmp(cmd, "/newbie", true) == 0 || strcmp(cmd, "/n", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	        if(PlayerInfo[playerid][pMuted] == 1)
			{
				SendClientMessage(playerid, TEAM_CYAN_COLOR, "Usted no puede hablar, usted ha sido silenciado");
				return 1;
			}
		    if(nonewbie == 1)
		    {
                SendClientMessage(playerid, TEAM_CYAN_COLOR, "Canal Newbie Apagado.");
				return 1;
			}
			new length = strlen(cmdtext);
			while ((idx < length) && (cmdtext[idx] <= ' '))
			{
				idx++;
			}
			new offset = idx;
			new result[128];
			while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = cmdtext[idx];
				idx++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "Usa: (/n)ewbie [newbie chat]");
				return 1;
			}
		 	if(PlayerInfo[playerid][pHelper] == 0)
		 	{
			 	format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
		 	}
	   		else if(PlayerInfo[playerid][pHelper] == 1)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
	   		}
	   		else if(PlayerInfo[playerid][pHelper] == 2)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
	   		}
			else if(PlayerInfo[playerid][pHelper] == 3)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 4)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
 			else if(PlayerInfo[playerid][pHelper] == 5)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 6)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			SendClientMessageToAll(0xFF9900AA, string);
			new y, m, d;
			new h,mi,s;
			getdate(y,m,d);
			gettime(h,mi,s);
			format(string, sizeof(string), "[%d/%d/%d](%d:%d:%d) %s (newbie): (%s)",d,m,y,h,mi,s, sendername, result);
			ChatLog(string);
  }
		return 1;
	}
Espero que me puedan ayudar, ya que me ando volviendo loco.


PD: Si es que pude hacerlo funcionar, en pawno no me salto ningъn problema.. Cambiй el value "text" por "result" pero al entrar y intentar utilizarlo sale: "Unknown command" y no hace la funciуn.. E si no remuevo NADA del codigo no puedo hacerlo funcionar ya que crashea mi Pawno



Respuesta: [Ayuda] Codigo roto - [J]ulian - 08.09.2014

Todos esos if/else me parece que estбn de mбs ya que todos terminan dando el mismo formato.

їEl comando quй quieres que haga? Que sea para enviar una duda o para responder una duda (lo del rango "helper" me hace dudar).

їSobre OnPlayerText que es lo que quieres lograr?, їque al usar @ID se remplace por el nombre de la persona?


Re: [Ayuda] Codigo roto - nilesk - 08.09.2014

Claro, el objetivo es que al usar @ID se reemplaze con el Nombre del Jugador conectado con esa ID especificada, Mediante el canal de dudas (/n)


Respuesta: [Ayuda] Codigo roto - [J]ulian - 08.09.2014

Eso es lo que no entiendo. Si quieres que sea mediante /n por quй lo pones en OnPlayerText.

Pon todo el cуdigo que tengas de tu sistema de dudas y explica, detalladamente, como quieres que sea y te ayudo.


Re: [Ayuda] Codigo roto - nilesk - 08.09.2014

Bueno mirб, este es el script que yo encontre en un thread cerrado en "FilterScripts" hace un tiempo:
Код:
public OnPlayerText(playerid, text[])
{
  new string[128];
  format(string, sizeof(string), "%s", text);
  for (new i; i < 128; i++) {
    if (string[i] == '@') {
      if ((string[i + 1] > 47) && (string[i + 1] < 58)) {
      	new id = strval(string[i + 1]);
        if (id <= 500) {
   	  if (IsPlayerConnected(id)) {
            new menohraca[MAX_PLAYER_NAME];
	    GetPlayerName(id, menohraca, MAX_PLAYER_NAME);
	    new j = (i + 1);
	    while ((j < (i + 5)) && ((string[j] > 47) && (string[j] < 58)))
              j++;
	    strdel(string, i, j);
	    strins(string, menohraca, i, 128);
    	  } else {
	    SendClientMessage(playerid, 0xFF0000FF, "Introduzca la ID");
	    return 0;
	  }
        } else {
	  SendClientMessage(playerid, 0xFF0000FF, "Introduzca la ID");
	  return 0;
	}
      }
    }
  }
  SendPlayerMessageToAll(playerid, string);
  return 0;
}
Este es mi codigo de canal de dudas:
Код:
	if(strcmp(cmd, "/newbie", true) == 0 || strcmp(cmd, "/n", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	        if(PlayerInfo[playerid][pMuted] == 1)
			{
				SendClientMessage(playerid, TEAM_CYAN_COLOR, "Usted no puede hablar, usted ha sido silenciado");
				return 1;
			}
		    if(nonewbie == 1)
		    {
                SendClientMessage(playerid, TEAM_CYAN_COLOR, "Canal Newbie Apagado.");
				return 1;
			}
			new length = strlen(cmdtext);
			while ((idx < length) && (cmdtext[idx] <= ' '))
			{
				idx++;
			}
			new offset = idx;
			new result[128];
			while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = cmdtext[idx];
				idx++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "Usa: (/n)ewbie [newbie chat]");
				return 1;
			}
		 	if(PlayerInfo[playerid][pHelper] == 0)
		 	{
			 	format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
		 	}
	   		else if(PlayerInfo[playerid][pHelper] == 1)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
	   		}
	   		else if(PlayerInfo[playerid][pHelper] == 2)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
	   		}
			else if(PlayerInfo[playerid][pHelper] == 3)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 4)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
 			else if(PlayerInfo[playerid][pHelper] == 5)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 6)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: rango %s: %s", sendername, result);
			}
			SendClientMessageToAll(0xFF9900AA, string);
			new y, m, d;
			new h,mi,s;
			getdate(y,m,d);
			gettime(h,mi,s);
			format(string, sizeof(string), "[%d/%d/%d](%d:%d:%d) %s (newbie): (%s)",d,m,y,h,mi,s, sendername, result);
			ChatLog(string);
		}
		return 1;
	}
La idea del 1er script (@ID) es que al poner @ID en el canal de dudas (ej: /n @1 en LSPD.) salga en vez del @1 ej: @Roberto_Francis en LSPD. No se si me explico bien jaja, a veces soy medio dificil de entender



Respuesta: [Ayuda] Codigo roto - [J]ulian - 08.09.2014

Y cуmo quieres que sea el formato, es decir: ї"[Canal Dudas (/n)] rango 1: respuesta"?, їo tambiйn el nombre de quien usa "/n"?
(en el cуdigo que pusiste la rango no sale, sуlo el nombre y la respuesta)


Re: [Ayuda] Codigo roto - nilesk - 08.09.2014

Si eso lo se, el rango lo omitн yo mismo por eso puse "rango" jaja, osea lo unico que necesito es que salga ej: [Canal Dudas (/n)] Rango(Cosaqueyovoyaponer) Nombre de la persona: @Pepe_Alvarez (@1) En LV.


Respuesta: [Ayuda] Codigo roto - [J]ulian - 08.09.2014

No lo pude probar (tengo que crear muchas variables y no tengo ganas), pero asн deberнa funcionar:

pawn Код:
if(!strcmp(cmd, "/newbie", true) || !strcmp(cmd, "/n", true))
{
    if(IsPlayerConnected(playerid))
    {
        if(nonewbie) return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Canal Newbie Apagado.");
        if(!PlayerInfo[playerid][pMuted])
        {
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_GRAD2, "Usa: (/n)ewbie [newbie chat]");
                return 1;
            }
            new string[128], sendername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, sendername, MAX_PLAYER_NAME + 1);
            format(string, sizeof(string), "[Canal Dudas (/n)]: %s: %s", sendername, result);
            new pos = strfind(text, "@", true, 0);
            if(pos != -1)
            {
                new userid = strval(string[pos + 1]);
                if(userid != INVALID_PLAYER_ID && IsPlayerConnected(userid))
                {
                    new name[MAX_PLAYER_NAME];
                    pos += strlen(playername) + 2;
                    new sID[5], space;
                    valstr(sID, userid);
                    space = strlen(sID) + 1;
                    GetPlayerName(userid, name, MAX_PLAYER_NAME + 1);
                    strdel(string, pos, pos+space);
                    strins(string, name, pos, 128);
                    SendClientMessageToAll(0xFF9900AA, string);
                }
                else SendClientMessage(playerid, TEAM_CYAN_COLOR, "El usuario no estб conectado");
            }
            else SendClientMessageToAll(0xFF9900AA, string);
            new y, m, d;
            new h,mi,s;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(string, sizeof(string), "[%d/%d/%d](%d:%d:%d) %s (newbie): (%s)",d,m,y,h,mi,s, sendername, result);
            ChatLog(string);
        }
        else return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Usted no puede hablar, usted ha sido silenciado");
    }
    return 1;
}
Si falla algo me dices. Quizбs te de un error de que ya tienes creado "string" y "sendername", si es asн borra la linea:

pawn Код:
new string[128], sendername[MAX_PLAYER_NAME];
En el cуdigo que te pase.


Re: [Ayuda] Codigo roto - nilesk - 08.09.2014

Код:
C:\Users\Rodrigo\Desktop\(RPG)\gamemodes\Brison2.pwn(37463) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Rodrigo\Desktop\(RPG)\gamemodes\Brison2.pwn(37463) : warning 219: local variable "sendername" shadows a variable at a preceding level
C:\Users\Rodrigo\Desktop\(RPG)\gamemodes\Brison2.pwn(37466) : error 017: undefined symbol "text"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.
El comando lo dejй asi:

Код:
if(!strcmp(cmd, "/newbie", true) || !strcmp(cmd, "/n", true))
{
    if(IsPlayerConnected(playerid))
    {
        if(nonewbie) return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Canal Newbie Apagado.");
        if(!PlayerInfo[playerid][pMuted])
        {
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_GRAD2, "Usa: (/n)ewbie [newbie chat]");
                return 1;
            }
            if(PlayerInfo[playerid][pHelper] == 0)
		 	{
			 	format(string, sizeof(string), "[Canal Dudas (/n)]: Principiante %s: %s", sendername, result);
		 	}
	   		else if(PlayerInfo[playerid][pHelper] == 1)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: Ayudante %s: %s", sendername, result);
	   		}
	   		else if(PlayerInfo[playerid][pHelper] == 2)
	   		{
			   format(string, sizeof(string), "[Canal Dudas (/n)]: Moderador %s: %s", sendername, result);
	   		}
			else if(PlayerInfo[playerid][pHelper] == 3)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: Administrador %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 4)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: Colaborador %s: %s", sendername, result);
			}
 			else if(PlayerInfo[playerid][pHelper] == 5)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: Administrador General %s: %s", sendername, result);
			}
			else if(PlayerInfo[playerid][pHelper] == 6)
			{
				format(string, sizeof(string), "[Canal Dudas (/n)]: Encargado General %s: %s", sendername, result);
			}
            new string[128], sendername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, sendername, MAX_PLAYER_NAME + 1);
            format(string, sizeof(string), "[Canal Dudas (/n)]: %s: %s", sendername, result);
            new pos = strfind(text, "@", true, 0);
            if(pos != -1)
            {
                new userid = strval(string[pos + 1]);
                if(userid != INVALID_PLAYER_ID && IsPlayerConnected(userid))
                {
                    new name[MAX_PLAYER_NAME];
                    pos += strlen(playername) + 2;
                    new sID[5], space;
                    valstr(sID, userid);
                    space = strlen(sID) + 1;
                    GetPlayerName(userid, name, MAX_PLAYER_NAME + 1);
                    strdel(string, pos, pos+space);
                    strins(string, name, pos, 128);
                    SendClientMessageToAll(0xFF9900AA, string);
                }
                else SendClientMessage(playerid, TEAM_CYAN_COLOR, "El usuario no estб conectado");
            }
            else SendClientMessageToAll(0xFF9900AA, string);
            new y, m, d;
            new h,mi,s;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(string, sizeof(string), "[%d/%d/%d](%d:%d:%d) %s (newbie): (%s)",d,m,y,h,mi,s, sendername, result);
            ChatLog(string);
        }
        else return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Usted no puede hablar, usted ha sido silenciado");
    }
    return 1;
}



Respuesta: [Ayuda] Codigo roto - [J]ulian - 08.09.2014

pawn Код:
if(!strcmp(cmd, "/newbie", true) || !strcmp(cmd, "/n", true))
{
    if(IsPlayerConnected(playerid))
    {
        if(nonewbie) return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Canal Newbie Apagado.");
        if(!PlayerInfo[playerid][pMuted])
        {
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_GRAD2, "Usa: (/n)ewbie [newbie chat]");
                return 1;
            }
            if(PlayerInfo[playerid][pHelper] == 0)
            {
                format(string, sizeof(string), "[Canal Dudas (/n)]: Principiante %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 1)
            {
               format(string, sizeof(string), "[Canal Dudas (/n)]: Ayudante %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 2)
            {
               format(string, sizeof(string), "[Canal Dudas (/n)]: Moderador %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 3)
            {
                format(string, sizeof(string), "[Canal Dudas (/n)]: Administrador %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 4)
            {
                format(string, sizeof(string), "[Canal Dudas (/n)]: Colaborador %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 5)
            {
                format(string, sizeof(string), "[Canal Dudas (/n)]: Administrador General %s: %s", sendername, result);
            }
            else if(PlayerInfo[playerid][pHelper] == 6)
            {
                format(string, sizeof(string), "[Canal Dudas (/n)]: Encargado General %s: %s", sendername, result);
            }
            new pos = strfind(string, "@", true, 0);
            if(pos != -1)
            {
                new userid = strval(string[pos + 1]);
                if(userid != INVALID_PLAYER_ID && IsPlayerConnected(userid))
                {
                    new name[MAX_PLAYER_NAME];
                    pos += strlen(playername) + 2;
                    new sID[5], space;
                    valstr(sID, userid);
                    space = strlen(sID) + 1;
                    GetPlayerName(userid, name, MAX_PLAYER_NAME + 1);
                    strdel(string, pos, pos+space);
                    strins(string, name, pos, 128);
                    SendClientMessageToAll(0xFF9900AA, string);
                }
                else SendClientMessage(playerid, TEAM_CYAN_COLOR, "El usuario no estб conectado");
            }
            else SendClientMessageToAll(0xFF9900AA, string);
            new y, m, d;
            new h,mi,s;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(string, sizeof(string), "[%d/%d/%d](%d:%d:%d) %s (newbie): (%s)",d,m,y,h,mi,s, sendername, result);
            ChatLog(string);
        }
        else return SendClientMessage(playerid, TEAM_CYAN_COLOR, "Usted no puede hablar, usted ha sido silenciado");
    }
    return 1;
}
Asн deberнa funcionar.