简体   繁体   English

玩家生成错误

[英]Player Spawning Bug

When I run my game mode the player is supposed to spawn at the coordinates given in OnPlayerSpawn.当我运行我的游戏模式时,玩家应该在 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 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.这是 SA-MP 的一个问题,这就是它的工作方式。 The spawn data that is configured with AddPlayerClass (or SetSpawnInfo as well) is handled client side.使用 AddPlayerClass(或 SetSpawnInfo)配置的生成数据在客户端处理。 That means that the client will automatically spawn at the given co-ordinates passed to AddPlayerClass immediately with no server interaction.这意味着客户端将在传递给 AddPlayerClass 的给定坐标处自动生成,无需服务器交互。 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.您可以绕过此问题的一种方法是在 OnPlayerSpawn 中不使用 SetPlayerPos,您只需编辑您的 AddPlayerClass 函数调用以包含您希望玩家生成的坐标。

For example:例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM