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

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

Šioje pamokoje parodysiu kaip sukurti sa-mp serveriui laikrodį, kuris rodo tik laiką. Ilgai netempsiu gumos, važiuojam!

 

 

Taigi visų pirma mums reikia susikurti textdraw kintamajį. Modifikacijos viršuje rašome šį kodą:
 

new text:laikrodistd; //textdraw kintamasis

 

 

Taip pat mums reikia susikurt forward'ą bei define'ą timeriui(Jo prireiks vėliau). Prie kitų define rašom šį kodą:

#define f_public:%0(%1) 	forward %0(%1);		public %0(%1)

 

 

Toliau mums reikės sukurti stock'ą, kuris užkraus visus textdraw. Tarp kitų stock'ų dedam šį kodą:

stock loadtextdraw()
{
	laikrodistd = TextDrawCreate(575.000122, 24.888891, "14:00");
	TextDrawLetterSize(laikrodistd, 0.468333, 1.579259);
	TextDrawAlignment(laikrodistd, 1);
	TextDrawColor(laikrodistd, -1);
	TextDrawSetShadow(laikrodistd, 0);
	TextDrawSetOutline(laikrodistd, 1);
	TextDrawBackgroundColor(laikrodistd, 51);
	TextDrawFont(laikrodistd, 3);
	TextDrawSetProportional(laikrodistd, 1);

	return 1;
}

 

 

sukurtą stock'ą prirašom prie ongamemodeinit public'o. Kodas turi atrodyti štai taip:

public OnGameModeInit()
{
  loadtextdraw();
  
  return 1;
}

 

 

Tada sukuriame stock'ą, kuris užkraus laikrodį. Kodas atrodo štai taip:

stock LoadClock(playerid)
{
	PlayerTextDrawShow(playerid, laikrodistd);

	return 1;
}

 

 

Norint užkrauti laikrodį, į OnPlayerSpawn public'ą pridedam "LoadClok(playerid);" Kodas turi atrodyti taip:

public OnPlayerSpawn(playerid)
{
  LoadClock(playerid);

  return 1;
}

 

 

Dabar sukuriame timer'į, kuris atnaujins laikrodį kas sekundę. Timerį kuriam į OnGamemodeInit public'ą. Kodas turi atrodyti taip:

public OnGameModeInit()
{
  loadtextdraw();
  SetTimer("settime",				1000, true);
  
  return 1;
}

 

 

Tada jau su sukurtu forward'u sukuriame f_public, kuris bus vykdomas, kas 1 sekundę. Kodas turi atrodyti taip:

f_public: settime()
{
	for(new p; p <= GetPlayerPoolSize(); p++)
	{
		new String[256], hours, minutes;

		gettime(hours, minutes);


		format(String, sizeof String, "%s%d:%s%d", (hours < 10) ? ("0") : (""), hours, (minutes < 10) ? ("0") : (""), minutes);
		PlayerTextDrawSetString(p, laikrodistd, String);
	}

	return 1;
}

 

 

Na ir vuolia! Turim veikiantį laikrodį. Radus klaidų praneškit, stengsiuosi pataisyt. Taip pat labai nesmerkit kadangi tai pirma mano pamoka :)

image.png.5dab060877d50a2051622549675eccc1.png

1. Sekundinis timeris nėra reikalingas, kadangi laikrodyje neatvaizduoji sekundžių, taip pat eini per visus žaidėjus neefektyviai.
2. Norint pereiti per visus žaidėjus, naudok foreach arba for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) , taip išvengsi per naują kviečiamo kintamojo (j).

3. Gali naudoti global textdrawą, taip išvengsi ciklo, kuris eina per žaidėjus.

 

Nenaudinga pamoka, nes sulipdytas kodas ir net pats nesupranti ką darai.

Web Development.

28 minutes prieš, mariusqw parašė:

1. Sekundinis timeris nėra reikalingas, kadangi laikrodyje neatvaizduoji sekundžių, taip pat eini per visus žaidėjus neefektyviai.
2. Norint pereiti per visus žaidėjus, naudok foreach arba for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) , taip išvengsi per naują kviečiamo kintamojo (j).

3. Gali naudoti global textdrawą, taip išvengsi ciklo, kuris eina per žaidėjus.

 

Nenaudinga pamoka, nes sulipdytas kodas ir net pats nesupranti ką darai.

new String[256], hours, minutes;
gettime(hours, minutes);

+ šitie turėtų būti už ciklo ribų. Masinė optimizacijos klaida.
(redaguota)

Kodėl sukuri globalų textdraw, bet naudoji žaidėjo textdraw funkcijas kaip "PlayerTextDrawShow"?

 

Kam bereikalingos f-jos ir daug kodo eilučių kaip "

stock LoadClock(playerid)

kai galima tiesiog tą vieną eilutę kurią įkiši į bereikalingą stocką įdėt ?

 

Paskui vėl gi, bereikalo eini per ciklą, kai nori suformatuot globalų textdrawą ir vėl naudoji žaidėjo textdraw funkcijas globaliam textdraw'ui, netgi nesubuildintu, mestu klaidas 

PlayerTextDrawSetString

 

ir taipogi dėl šito "

new text:laikrodistd;

mestu klaidą nes Text apibūdinimas turi būt iš didžiosios raidės.

 

 

Ir tokias f-jas, kurios neraikalauja ciklo apibūdinimu kaip

gettime(hours, minutes);

gali aktyvuot prieš ciklą, kad mažiau apkrautum serverio resursus

Redaguota , nario Hoonz

„Life is too short to remove usb safely“


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

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

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

Skelbimai



×
×
  • Sukurti naują...