Peršokti į turinį

Spawn vietos nustatymas


Nartu

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5086 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

Taigi, pradėkim. Šioje pamokoje paaiškinsiu kaip padaryti, jog tik prisijungus į serverį pasirodytų meniu ir duotų pasirinkti miestą, kuriame po mirties vėl atsirasit. Pirmiausia susikurkime kelis kintamuosius (jei kas nežino, tai juos rašom kur nors viršuj script'o):

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.

public OnGameModeInit()

{

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

AddMenuItem(spawnmenu, 0, "SanFierro" );

AddMenuItem(spawnmenu, 0, "LasVenturas" );

return 1;

}

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 ir mūsų meniu. Kaip matot if(pasirinkes 0) tai iškart nukelia į tą miestą, kurį pasirinkome, o jei pasirinkes=1, tada tik po mirties. Ir taip pat nustato mūsų kintamuosius į 1. Tačiau, spawnmiestą į 1 nustato, jei miestas SF, o jei LV nustato į 2, jog serveris žinotų į kurį miestą spawnint. (Pievą čia parašiau, bet kažką reikėjo paaiškint ;D)

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

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:

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 didieji mūsų forumo scripter'iai pastebėjo, 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:

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:

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ą.

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5086 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ą...