[PROBLEMA] Lag Inmenso al SPAWNEAR
#1

Hola. Bueno me derigo a ustedes con el siguiente problema:
Resulta que estoy haciendo un gamemode desde 0. Ya tengo algunas cosas echas. Pero al momento de testear el servidor. Me tira un lag inmenso al SPAWNEAR.
pawn Код:
public OnPlayerSpawn(playerid)
{
    SetTimerEx("Zonas",1000,true,"i",playerid);
//  CheckearColores(playerid);
    SetPlayerVirtualWorld(playerid,0);
    new archivo[128];
    format(archivo, 128, "/Usuarios/%s.ini", pNick(playerid));
    if(dini_Int(archivo, "Spawn") == 1) //Solo SF
    {
        new Random = random(sizeof(SpawnSanFiero));
        SetPlayerPos(playerid, SpawnSanFiero[Random][0], SpawnSanFiero[Random][1], SpawnSanFiero[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnSanFiero[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 3) //Solo LV
    {
        new Random = random(sizeof(SpawnLasVenturas));
        SetPlayerPos(playerid, SpawnLasVenturas[Random][0], SpawnLasVenturas[Random][1], SpawnLasVenturas[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLasVenturas[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 0) //TODOS
    {
        new Random = random(sizeof(SpawnTODOS));
        SetPlayerPos(playerid, SpawnTODOS[Random][0], SpawnTODOS[Random][1], SpawnTODOS[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnTODOS[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 2)  //Solo LS
    {
        new Random = random(sizeof(SpawnLosSantos));
        SetPlayerPos(playerid, SpawnLosSantos[Random][0], SpawnLosSantos[Random][1], SpawnLosSantos[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLosSantos[Random][3]);
    }
    SetPlayerSkin(playerid,dini_Int(archivo, "Skin"));
    if(dini_Int(archivo, "Donador") == 1) SetPlayerArmour(playerid,100);
    Informacion[playerid][Admin] = dini_Int(archivo, "Admin") ;
    Informacion[playerid][Banco] = dini_Int(archivo,"Banco");
    return 1;
}
Ese es el OnPlayerSpawn. Yo no encontrй nada raro. Y no sй porquй pasa ese lag.
Ojala me puedan ayudar.
Reply
#2

Prueba de esta manera:

pawn Код:
public OnPlayerSpawn(playerid)
{
    SetTimerEx("Zonas", 1000, 0, "i", playerid);
//  CheckearColores(playerid);
    SetPlayerVirtualWorld(playerid,0);
    new archivo[128];
    format(archivo, 128, "/Usuarios/%s.ini", pNick(playerid));
    if(dini_Exists(archivo))
    {
    if(dini_Int(archivo, "Spawn") == 1) //Solo SF
    {
        new Random = random(sizeof(SpawnSanFiero));
        SetPlayerPos(playerid, SpawnSanFiero[Random][0], SpawnSanFiero[Random][1], SpawnSanFiero[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnSanFiero[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 3) //Solo LV
    {
        new Random = random(sizeof(SpawnLasVenturas));
        SetPlayerPos(playerid, SpawnLasVenturas[Random][0], SpawnLasVenturas[Random][1], SpawnLasVenturas[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLasVenturas[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 0) //TODOS
    {
        new Random = random(sizeof(SpawnTODOS));
        SetPlayerPos(playerid, SpawnTODOS[Random][0], SpawnTODOS[Random][1], SpawnTODOS[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnTODOS[Random][3]);
    }
    if(dini_Int(archivo, "Spawn") == 2)  //Solo LS
    {
        new Random = random(sizeof(SpawnLosSantos));
        SetPlayerPos(playerid, SpawnLosSantos[Random][0], SpawnLosSantos[Random][1], SpawnLosSantos[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLosSantos[Random][3]);
    }
    SetPlayerSkin(playerid,dini_Int(archivo, "Skin"));
    if(dini_Int(archivo, "Donador") == 1) SetPlayerArmour(playerid,100);
    Informacion[playerid][Admin] = dini_Int(archivo, "Admin") ;
    Informacion[playerid][Banco] = dini_Int(archivo,"Banco");
    }
    return 1;
}
Espero q te funcione.
Reply
#3

Has probado quitando todo el codigo en dini ?
Reply
#4

Quote:
Originally Posted by Jovanny
Посмотреть сообщение
Has probado quitando todo el codigo en dini ?
Yo le iva a decir que quite todo lo de dini y lo arme un Enum etc...

y que checkee como de esta manera:

if(PlayerInfo[playerid][Spawn] == 1)

y lo de dini que arme una callback aparte y al logear o yoqse se carguen los datos y todo eso...
Reply
#5

Lo puse con un enum. Pero sigue pasando el lag.
pawn Код:
public OnPlayerSpawn(playerid)
{
    SetTimerEx("Zonas", 1000, 0, "i", playerid);
//  CheckearColores(playerid);
    SetPlayerVirtualWorld(playerid,0);
    new archivo[128];
    format(archivo, 128, "/Usuarios/%s.ini", pNick(playerid));
    if(Informacion[playerid][Spawn] == 1) //Solo SF
    {
        new Random = random(sizeof(SpawnSanFiero));
        SetPlayerPos(playerid, SpawnSanFiero[Random][0], SpawnSanFiero[Random][1], SpawnSanFiero[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnSanFiero[Random][3]);
    }
    if(Informacion[playerid][Spawn] == 3) //Solo LV
    {
        new Random = random(sizeof(SpawnLasVenturas));
        SetPlayerPos(playerid, SpawnLasVenturas[Random][0], SpawnLasVenturas[Random][1], SpawnLasVenturas[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLasVenturas[Random][3]);
    }
    if(Informacion[playerid][Spawn] == 0) //TODOS
    {
        new Random = random(sizeof(SpawnTODOS));
        SetPlayerPos(playerid, SpawnTODOS[Random][0], SpawnTODOS[Random][1], SpawnTODOS[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnTODOS[Random][3]);
    }
    if(Informacion[playerid][Spawn] == 2)  //Solo LS
    {
        new Random = random(sizeof(SpawnLosSantos));
        SetPlayerPos(playerid, SpawnLosSantos[Random][0], SpawnLosSantos[Random][1], SpawnLosSantos[Random][2]);
        SetPlayerFacingAngle(playerid, SpawnLosSantos[Random][3]);
    }
    SetPlayerSkin(playerid,dini_Int(archivo, "Skin"));
    if(dini_Int(archivo, "Donador") == 1) SetPlayerArmour(playerid,100);
    Informacion[playerid][Admin] = dini_Int(archivo, "Admin") ;
    Informacion[playerid][Banco] = dini_Int(archivo,"Banco");
    return 1;
}
--
Cuando cierro el server, me sale que no responde. (Ese cuadro de 'Finalizar ahora'). Si dejo ese mensaje la consola se cierra en unos 20-25 segundos.
--
Me di cuenta. De que el lag comienza unos 10 segundos
--
Asн que voy a poner tambiйn el OnPlayerConnect.
pawn Код:
public OnPlayerConnect(playerid)
{
    if( !strcmp( pNick(playerid), "Santo_Felipe") )
    {
        SendClientMessage(playerid,0xFF0000FF,"Este no es el RP");
        SetPlayerName(playerid,"Santofelipe");
    }
    new archivo[128];
    format(archivo, 128, "/Usuarios/%s.ini", pNick(playerid));
    if (!dini_Exists(archivo))
    {
        new rstring[256];
        format(rstring,256,"{FFFFFF}Bienvenido {3294FF}a {FFFF34}'%s'\n\n Tu cuenta {00FF00}%s {FF0000}no{FFFFFF} estб registrada!\n\nIngresa {E5FFFF}una {C8F3FF}contraseсa {96F3FF}para{64F3FF} registrarte:",GetServerHostName(),pNick(playerid));
        ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_PASSWORD,"Registro", rstring, "Registrar", "Cancelar");
    }
    if (dini_Exists(archivo))
    {
        new lstring[256];
        if(dini_Int(archivo, "Idioma") == 0)
        {
            format(lstring,256,"{FFFFFF}Esta cuenta {00FF00}%s {FFFFFF}ya estб registrada \n\n {E5FFFF}Ingresa {C8F3FF}para {96F3FF}poder {64F3FF}entrar {32FDFF}al{00FDFF} servidor:",pNick(playerid));
            ShowPlayerDialog(playerid,LogIn,DIALOG_STYLE_PASSWORD,"Ingreso de cuenta",lstring,"Ingresar","Salir");
            SetPlayerSkin(playerid,Informacion[playerid][Skin]);
        }
        if(dini_Int(archivo, "Idioma") == 1)
        {
            format(lstring,256,"{FFFFFF}This account {00FF00}%s {FFFFFF}is curently registred \n\n {E5FFFF}Put {C8F3FF}the {96F3FF}pasword {64F3FF}to {32FDFF}login{00FDFF} at the server:",pNick(playerid));
            ShowPlayerDialog(playerid,LogIn,DIALOG_STYLE_PASSWORD,"Login",lstring,"Login","Exit");
            SetPlayerSkin(playerid,Informacion[playerid][Skin]);
        }
    }
    if(CountIP(GetIP(playerid)) >= 6) return BanAll(playerid), 0;
    MAX_PLAYERS_ = playerid > MAX_PLAYERS_ ? playerid : GetHighestID(),
    npc[playerid] = bool:IsPlayerNPC(playerid),
    vars[playerid] = SetTimerEx("BSS",2500,false,"i",playerid),
    warns[playerid] = 0;
    Informacion[playerid][Registrado] = 0;
    Informacion[playerid][Ingresado] = 0;
    Informacion[playerid][Spawn] = 0;
    Informacion[playerid][hrs] = 0;
    Informacion[playerid][secs] = 0;
    Informacion[playerid][mins] = 0;
    Informacion[playerid][congelado] = 0;
    Informacion[playerid][Servicio] = 0;
    Informacion[playerid][Dinero] = 0;
    Informacion[playerid][Admin] = 0;
    Informacion[playerid][Carcel] = 0;
    Informacion[playerid][Mute] = 0;
    Informacion[playerid][Wanted] = 0;
    Informacion[playerid][Idioma] = 0;
    Informacion[playerid][Donador] = 0;
    Informacion[playerid][Dios] = 0;
    new dinero = dini_Int(archivo, "Dinero");
    GivePlayerMoney(playerid,dinero);
    Informacion[playerid][Spawn] = dini_Int(archivo, "Spawn");
    return 1;
}
Reply
#6

Bueno. Resulta que he estado investigado un poco.
Y encontrй que cuando inicio el servidor. Ocupa un entre 0% y 10% (No pasa del 10%)
Eso es normal. Ahora, cuando alguien entra al servidor. Sube a un 100%
Alguna idea de por quй pasa eso?
Reply
#7

Coloca lo que tienes en la callback OnPlayerConnect en algun otro gm vacio y te fijas si de ahi viene el lag o de la callback OnPlayerSpawn.
Reply
#8

Solucionado.
-
Estaba haciendo lo que habнa dicho @digman y me di cuenta que habнa un public que era llamado cada 40ms. y actualizaba la cuenta del usuario. Lo saquй y se soluciono!.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)