简体   繁体   中英

Player Spawning Bug

When I run my game mode the player is supposed to spawn at the coordinates given in OnPlayerSpawn. Its works perfectly but after I press the "Spawn" button the screen flashes showing my player at the default samp coordinates(the little place with the elevators) and then spawns to the correct position. How can I fix that flash?

Tried everything here so far. http://forum.sa-mp.com/showthread.php?t=480083

    public OnGameModeInit()
{
    SetGameModeText("Closed Beta");
    AddPlayerClass(210, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(230, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(38, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(53, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(134, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(170, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);
    AddPlayerClass(177, 1958.3783, 1343.1572, 15.3746, 269.1425, 24, 123123, 25, 123123, 34, 123123);

    //Create some nrg's
    AddStaticVehicle(522,1293.4578,-831.7721,82.7060,2.2115,8,164);
    AddStaticVehicle(522,1291.4998,-832.0693,82.7150,0.9063,1,89);
    AddStaticVehicle(522,1289.1138,-832.2216,82.7144,1.8299,20,0);
    AddStaticVehicle(522,1286.9045,-832.1899,82.7124,357.0424,150,49);
    AddStaticVehicle(522,1283.9424,-832.0230,82.7132,1.8036,200,78);

    AddStaticVehicle(411,1242.7148,-805.3672,83.8677,178.3237,1,0); // infernous
    AddStaticVehicle(451,1248.9519,-805.4118,83.8476,178.6428,0,1); // turismo
    AddStaticVehicle(541,1255.2100,-804.8454,83.7656,184.1492,1,0); // bullet

    //Create the textdraw for welcoming the player
    gWelcome = TextDrawCreate(320.0, 240.0, "Welcome to Uuri's Mapping Server!");
    TextDrawSetShadow(gWelcome, 3);
    TextDrawSetOutline(gWelcome, 2);
    TextDrawFont(gWelcome, 3);
    TextDrawBoxColor(gWelcome, 0x003333FF);
    TextDrawAlignment(gWelcome, 2);

    //Use the running animations I like
    UsePlayerPedAnims();
    return 1;
}

public OnPlayerConnect(playerid)
{
    //Show the player the welcome textdraw
    TextDrawShowForPlayer(playerid, gWelcome);

    //Send a client message to all players on the current player connecting.
    new name[MAX_PLAYER_NAME];
    new string[128];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "%s has connected to the server!", name);
    SendClientMessageToAll(LIGHT_GREEN, string);

    return 1;

}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 2000.5919,1527.3319,14.6172);
    SetPlayerCameraPos(playerid, 2000.6874,1528.9332,14.6223);
    SetPlayerCameraLookAt(playerid, 2000.5919,1527.3319,14.6172);
    SetPlayerFacingAngle(playerid, 358.2982);

    return 1;
}

public OnPlayerSpawn(playerid)
{
    //Hide the textdraw when the player spawns
    TextDrawHideForPlayer(playerid, gWelcome);

    //Print a client message to all players when a player spawns
    new name[MAX_PLAYER_NAME];
    new string [128];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "%s has spawned!", name);
    SendClientMessageToAll(LIGHT_GREEN, string);

    //Set the players coordinates to spawn; put camera behind player
    SetPlayerPos(playerid, 1280.5247,-813.6929,83.6532);
    SetCameraBehindPlayer(playerid);
    SetPlayerFacingAngle(playerid, 180.0);
    return 1;
}

This is an issue with SA-MP and is just the way it works. The spawn data that is configured with AddPlayerClass (or SetSpawnInfo as well) is handled client side. That means that the client will automatically spawn at the given co-ordinates passed to AddPlayerClass immediately with no server interaction. By the time the server does however detect that the player has respawned it will execute the code that you have specified on them above.

One way that you can bypass this is instead of using SetPlayerPos in OnPlayerSpawn, you can just edit your AddPlayerClass function calls to include the co-ordinates that you wish the player to spawn at.

For example:

AddPlayerClass(210, 1280.5247,-813.6929,83.6532, 269.1425, 24, 123123, 25, 123123, 34, 123123);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

Related Question Tag mismatch player health
Related Tags
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM