Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[Pradedantiesiems] Spawn vietos nustatymas.


popa11

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4941 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Pirmiausia susikurkime kelis kintamuosius (jei kas nežino, tai juos rašom kur nors viršuj script'o):

Kodas: Pasirinkti visus

new Menu:spawnmenu, SpawnMiestas[MAX_PLAYERS] = 0, Pasirinkes[MAX_PLAYERS] = 0;

new Float:SFspawn[][] =

{

{-2741.8357,-307.6227,7.1875,323.2097},

{-1982.8606,123.6209,27.6875,91.9674},

{-2629.7646,1399.1682,7.0994,179.6782},

{-2521.7021,-9.3868,25.6172,269.2690},

{-2226.0269,287.7180,35.3203,358.8598},

{-1617.7167,676.1683,7.1875,182.1616}

};

new Float:LVspawn[][] =

{

{1602.1853,2129.8384,11.3235,276.7891},

{1956.3428,1342.8120,15.3746,272.2612},

{2381.1404,2160.4924,10.8197,177.2982},

{2275.7312,2426.4211,10.8203,178.0312},

{1652.4705,2713.2720,10.8203,358.8170},

{2022.9034,1916.3994,12.3395,270.3379}

};

Pasistengsiu paaiškinti ką jie reiškia.

1. spawnmenu bus mūsų meniu pavadinimas.

2. SpawnMiestas bus mūsų pasirinktas miestas.

3. Pasirinkes. Šį kintamąjį sunkoka paaiškint.. Jei žaidėjas tik ką prisijungė, bet dar nebuvo pasirinkes spawn miesto, tai jį iškart nuteleportuos į jo pasirinktą miestą. O jei jau buvo pasirinkęs, tai pakeis SpawnMiesto nustatymus į kitą miestą ir jus spawnins tik po mirties. (Tikiuosi supratot).

4.SFspawn ir LVspawn yra spawn vietų koordinatės. (Jos yra ištrauktos iš mano GM, tad tikrai čia yra tų miestų koordinatės).

Toliau kuriame spawn meniu:

Kodas: Pasirinkti visus

public OnGameModeInit()

{

spawnmenu = CreateMenu("Spawn", 3, 100.0, 100.0, 150.0, 150.0);

AddMenuItem(spawnmenu, 0, "SanFierro" );

AddMenuItem(spawnmenu, 0, "LasVenturas" );

return 1;

}

Kodas: Pasirinkti visus

public OnPlayerSelectedMenuRow(playerid, row)

{

new Menu:CurrentMenu = GetPlayerMenu(playerid);

if(CurrentMenu == spawnmenu)

{

switch(row)

{

case 0:

{

if(Pasirinkes[playerid] == 0)//SF

{

new iRandom = random(sizeof(SFspawn));

SetPlayerPos(playerid, SFspawn[iRandom][0], SFspawn[iRandom][1], SFspawn[iRandom][2]);

SetPlayerFacingAngle(playerid, SFspawn[iRandom][3]);

}

else if(Pasirinkes[playerid] == 1)

{

SendClientMessage(playerid, zalia, "* Po mirties atsirasi SanFierro mieste");

}

SpawnMiestas[playerid] = 1;

Pasirinkes[playerid] = 1;

TogglePlayerControllable(playerid,1);

}

case 1:

{

if(Pasirinkes[playerid] == 0)//LV

{

new iRandom2 = random(sizeof(LVspawn));

SetPlayerPos(playerid, LVspawn[iRandom2][0], LVspawn[iRandom2][1], LVspawn[iRandom2][2]);

SetPlayerFacingAngle(playerid, LVspawn[iRandom2][3]);

}

else if(Pasirinkes[playerid] == 1)

{

SendClientMessage(playerid, zalia, "* Po mirties atsirasi LasVenturas mieste");

}

SpawnMiestas[playerid] = 2;

Pasirinkes[playerid] = 1;

TogglePlayerControllable(playerid,1);

}

}

}

return 1;

}

Štai taip turi atrodyti mūsų meniu. Čia manau nelabai yra ką ir aiškinti. :)

Taip pat, jei netyčia rinkdamiesi miestą paspaustume ENTER, reikia, jog mus "atfreezintų". Tad rašome tai:

Kodas: Pasirinkti visus

public OnPlayerExitedMenu(playerid)

{

new Menu:CurrentMenu = GetPlayerMenu(playerid);

if(CurrentMenu == spawnmenu)

{

TogglePlayerControllable(playerid, 1);

}

return 1;

}

Galima rašyti tiesiog TogglePlayerControllable(playerid, 1);, tačiau kas dirba su daugiau meniu, vėliau bus tai naudinga. Bet čia jau kaip jūs norit.. Taigi.. Su meniu kaip ir baigta, na, o dabar reikia kažkaip žaidėją spawninti.. Ar ne? Taigi rašome šitai:

Kodas: Pasirinkti visus

public OnPlayerSpawn(playerid)

{

SetPlayerPos(playerid,-2546.9119,2337.7886,4.9826);

SetPlayerFacingAngle(playerid, 180.8692);

if(SpawnMiestas[playerid] == 0)

{

ShowMenuForPlayer(spawnmenu, playerid);

TogglePlayerControllable(playerid,0);

}

if(SpawnMiestas[playerid] == 1)

{

new iRandom = random(sizeof(SFspawn));

SetPlayerPos(playerid, SFspawn[iRandom][0], SFspawn[iRandom][1], SFspawn[iRandom][2]);

SetPlayerFacingAngle(playerid, SFspawn[iRandom][3]);

}

else if(SpawnMiestas[playerid] == 2)

{

new iRandom2 = random(sizeof(LVspawn));

SetPlayerPos(playerid, LVspawn[iRandom2][0], LVspawn[iRandom2][1], LVspawn[iRandom2][2]);

SetPlayerFacingAngle(playerid, LVspawn[iRandom2][3]);

}

return 1;

}

Kaip pastebėjot, aš sukūriau dar vieną poziciją, kurioje patį pirmą kartą žaidėją pastato, kol jis nepasirinko miesto.. Kam aš tai dariau? Tam, jei žaidėjas netyčia paspaustų ENTER, tai jo nenumestų iš belekur į belekur, nes dažniausia jei nenurodai vietos, žaidėjas kabo kažkur viršuj. Tos pozicijos galima ir nerašyti.. Čia jau kaip jūs norit. Dabar kaip matot, jei žaidėjas nepasirinkes spawnvietos (spawnvieta = 0), tai jam parodo meniu. Jei pasirinkes 1, tai spawnintu į SF, o jei pasirinkes 2, tai LV. Na, o dabar dar vienas dalykas:

Kodas: Pasirinkti visus

public OnPlayerConnect(playerid)

{

SpawnMiestas[playerid] = 0;

Pasirinkes[playerid] = 0;

return 1;

}

Abu kintamuosius nustatome į 0, jog prisijungus iš naujo, vėl pasirodytų meniu ir galėtume pasirinkti kur spawnintis. Liko paskutinis dalykas:

Kodas: Pasirinkti visus

public OnPlayerCommandText(playerid, cmdtext[])

{

if (strcmp("/miestas", cmdtext, true, 10) == 0)

{

ShowMenuForPlayer(spawnmenu, playerid);

TogglePlayerControllable(playerid, 0);

return 1;

}

return 0;

}

Tai komanda, kuri parodo meniu, jog duotų vėl pasirinkti miestą.

Štai ir viskas. Jei iškilo neaiškumų ar kas nors nesigauna, klauskit šitoje temoje. Stengsimės padėti. :)

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4941 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...