2

ゲーム モードを実行すると、プレイヤーは OnPlayerSpawn で指定された座標でスポーンすることになっています。それは完全に機能しますが、「スポーン」ボタンを押すと、画面が点滅し、プレーヤーがデフォルトのサンプ座標 (エレベーターのある小さな場所) に表示され、正しい位置にスポーンされます。そのフラッシュを修正するにはどうすればよいですか?

これまでのところ、ここですべてを試しました。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;
}
4

1 に答える 1

1

これは SA-MP の問題であり、まさにそれが機能する方法です。AddPlayerClass (または SetSpawnInfo も) で構成されたスポーン データは、クライアント側で処理されます。つまり、クライアントは、サーバーとのやり取りなしで、AddPlayerClass に渡された特定の座標で即座に自動的にスポーンします。ただし、サーバーがプレイヤーがリスポーンしたことを検出するまでに、上記で指定したコードを実行します。

これをバイパスできる 1 つの方法は、OnPlayerSpawn で SetPlayerPos を使用する代わりに、AddPlayerClass 関数呼び出しを編集して、プレイヤーがスポーンする座標を含めることです。

例えば:

AddPlayerClass(210, 1280.5247,-813.6929,83.6532, 269.1425, 24, 123123, 25, 123123, 34, 123123);
于 2014-01-22T20:24:15.867 に答える