їDуnde pongo el SpawnPlayer? -
Orei - 24.07.2015
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.
Re: їDуnde pongo el SpawnPlayer? -
Unrea1 - 24.07.2015
Antes de aplicar un SpawnPlayer utiliza SetSpawnInfo.
https://sampwiki.blast.hk/wiki/SetSpawnInfo
Re: їDуnde pongo el SpawnPlayer? -
TheMatius - 24.07.2015
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.
Re: їDуnde pongo el SpawnPlayer? -
Orei - 24.07.2015
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;
}
Re: їDуnde pongo el SpawnPlayer? -
TheMatius - 24.07.2015
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(playerid, Player[playerid][Money]);
ClearChat(playerid);
SetSpawnInfo( playerid, 0, 250, Player[playerid][posX], Player[playerid][posY], Player[playerid][posZ], Player[playerid][posA], 0, 0, 0, 0, 0, 0 );
//Adicionar interior y virtualworld
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;
}
Recuerda que debes tambiйn agregarle el interior: "SetPlayerInterior" y el virtualworld: "SetPlayerVirtualWorld"
Re: їDуnde pongo el SpawnPlayer? -
Orei - 24.07.2015
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.