їDуnde pongo el SpawnPlayer?
#1

Hola,

Tengo un problema al spawnear un jugador que va a loguearse. Mi base de datos ya tiene las tablas de las posiciones con sus coordenadas personalizadas pero da igual donde ponga la funciуn SpawnPlayer que no hace caso a la base de datos y aparece en el aire volando hacia arriba.

El flujo es el siguiente:

1. Dialog de login

2. Una vez accede al servidor carga la informaciуn:

2.1-Si accede bien desde el dialog:
Код:
mysql_format(mysql, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", playername);
mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid);
2.2-OnAccountLoad:
Код:
Player[playerid][Admin] = cache_get_field_content_int(0, "Admin");
Player[playerid][Money] = cache_get_field_content_int(0, "Money");
Player[playerid][posX] = cache_get_field_content_float(0, "PosX");
Player[playerid][posY] = cache_get_field_content_float(0, "PosY");
Player[playerid][posZ] = cache_get_field_content_float(0, "PosZ");
GivePlayerMoney(playerid, Player[playerid][Money]);
Un saludo, gracias.
Reply
#2

Antes de aplicar un SpawnPlayer utiliza SetSpawnInfo.

https://sampwiki.blast.hk/wiki/SetSpawnInfo
Reply
#3

Es verdad, Debes utilizar SetSpawnInfo antes de forzar el spawn de la persona "SpawnPlayer()", recuerda que si ya lo has spawneado antes no es necesario volverlo hacer: SetPlayerPos, SetPlayerFacingAngle.
Reply
#4

Gracias por la ayuda, aunque todavнa sigue sin funcionar, seguramente estй haciendo yo algo mal.

Explico como lo tengo:

El SetSpawnInfo lo tengo en OnPlayerSpawn

Код:
public OnPlayerSpawn(playerid)
{
    SetSpawnInfo( playerid, 0, 250, Player[playerid][posX], Player[playerid][posY], Player[playerid][posZ], Player[playerid][posA], 0, 0, 0, 0, 0, 0 );
    return true;
}
Y SpawnPlayer(playerid); lo tengo debajo del cargado de datos del jugador:

Код:
public OnAccountLoad(playerid) // Cargar datos del jugador
{
    Player[playerid][Admin] = cache_get_field_content_int(0, "Admin");
    Player[playerid][VIP] = cache_get_field_content_int(0, "VIP");
    Player[playerid][Money] = cache_get_field_content_int(0, "Money");
    Player[playerid][posX] = cache_get_field_content_float(0, "PosX");
    Player[playerid][posY] = cache_get_field_content_float(0, "PosY");
    Player[playerid][posZ] = cache_get_field_content_float(0, "PosZ");
    Player[playerid][posA] = cache_get_field_content_float(0, "PosA");

    GivePlayerMoney(playerid, Player[playerid][Money]);
    ClearChat(playerid);
    

    SpawnPlayer(playerid); // <-------
    
    new nombre[MAX_PLAYER_NAME], string[24+MAX_PLAYER_NAME];
    GetPlayerName(playerid, nombre, sizeof(nombre));
    format(string, sizeof(string), "Bienvenido a nuestro servidor %s.", nombre);
    SendClientMessage(playerid, COLOR_AZUL, string);
    SendClientMessage(playerid, -1, "Recuerda visitar en el foro las guнas y las normativas. (www.prueba.com).");
    return true;
}
Reply
#5

Es que el SetSpawnInfo, no se pone dentro del callback "OnPlayerSpawn", se coloca arriba de la funciуn "SpawnPlayer", por que le estб dando la especificaciones para que spawnee, es decir, el team, la skin, la posiciуn, la rotaciуn, etc. Lo que hace la funciуn "SpawnPlayer" es forzar el spawneo del jugador para evitar que tenga que elegir clase, en ese caso, llama el callback "OnPlayerSpawn".

Corrigelo asi:
PHP код:
public OnPlayerSpawn(playerid)
{
    return 
1;

PHP код:
public OnAccountLoad(playerid// Cargar datos del jugador
{
    
Player[playerid][Admin] = cache_get_field_content_int(0"Admin");
    
Player[playerid][VIP] = cache_get_field_content_int(0"VIP");
    
Player[playerid][Money] = cache_get_field_content_int(0"Money");
    
Player[playerid][posX] = cache_get_field_content_float(0"PosX");
    
Player[playerid][posY] = cache_get_field_content_float(0"PosY");
    
Player[playerid][posZ] = cache_get_field_content_float(0"PosZ");
    
Player[playerid][posA] = cache_get_field_content_float(0"PosA");
    
GivePlayerMoney(playeridPlayer[playerid][Money]);
    
ClearChat(playerid);
    
    
SetSpawnInfoplayerid0250Player[playerid][posX], Player[playerid][posY], Player[playerid][posZ], Player[playerid][posA], 00000);
    
//Adicionar interior y virtualworld
    
SpawnPlayer(playerid);
    
    new 
nombre[MAX_PLAYER_NAME], string[24+MAX_PLAYER_NAME];
    
GetPlayerName(playeridnombresizeof(nombre));
    
format(stringsizeof(string), "Bienvenido a nuestro servidor %s."nombre);
    
SendClientMessage(playeridCOLOR_AZULstring);
    
SendClientMessage(playerid, -1"Recuerda visitar en el foro las guнas y las normativas. (www.prueba.com).");
    return 
true;

Recuerda que debes tambiйn agregarle el interior: "SetPlayerInterior" y el virtualworld: "SetPlayerVirtualWorld"
Reply
#6

Como ya afirmaba antes, el problema era por mi culpa. Al final creo que estuvo bien desde el principio. El problema era este:

Код:
public OnPlayerRequestClass(playerid, classid)
{
    TogglePlayerSpectating(playerid, true);
    return 1;
}
No me peguйis por favor xD

Muchas gracias por la ayuda.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)