[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.