Jump to content
  • 0

pomoc Return ve vytvořeném publicu


ForestCZE

Dotaz

Zdravím, chtěl bych objasnit jednu věc. Když si vytvořím libovolný public - Kdy v něm dát return 1; a kdy ne?

 

Vždycky jsem měl za to, že pokud je obsah publicu vyvolán SetTimerem, tak tam return být nemá a pokud je zavolán třeba v příkazu, tak tam return patří.

 

Koukám na nějaké návody a všímám si, že je to asi obráceně, než jsem si celou dobu myslel :d Tak jak to tedy je? Díky moc za objasnění :)

Link to comment
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

return je jenom návratová hodnota. Teoreticky když vytváříš funkce tak nemusíš mít u žádných. Většina callbacků ale v SAMP má význam v návratové hodnotě (např OnPlayerCommandText). Ve většině případů je 1 jako success a 0 jako fail. Jedná se v podstatě o výsledek té funkce.

Link to comment
Share on other sites

  • 0

return je jenom návratová hodnota. Teoreticky když vytváříš funkce tak nemusíš mít u žádných. Většina callbacků ale v SAMP má význam v návratové hodnotě (např OnPlayerCommandText). Ve většině případů je 1 jako success a 0 jako fail. Jedná se v podstatě o výsledek té funkce.

 

Neptám se na funkce, ale na publicy a každý public daný od SA-MP má return 1 popřípadě 0, tak proto se ptám, jestli i můj vytvořený public musí mít return a kdy.

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Neptám se na funkce, ale na publicy a každý public daný od SA-MP má return 1 popřípadě 0, tak proto se ptám, jestli i můj vytvořený public musí mít return a kdy.

Je to funkce, public ti akorát určuje, že je to funkce veřejná. To jen pro upřesnění (má to své vlastnosti, ale o tom jindy).

 

Teď k tomu tvému returnu. Jak řekl HighPrint, návratovou hodnotu to mít nemusí (je to funkce ꜛ), je to jen čistě na tobě. Nativní SA:MP publicy/callbacky (říkej si tomu, jak chceš) mohou mít u konkrétního returnu specifickou funkci. U tebou definovaných to ale záleží jen na tobě, na tom, jak to budeš používat. Klidně nám ukaž příklad, kde to potřebuješ vědět, my ti řekneme. :) Každopádně tohle všechno bude fungovat a nehodí ti to chybu:

forward Neco();

public Neco() //verze bez returnu
{
    print("Bla bla.");
}

public Neco() //verze s returnem, ale bez návratové hodnoty
{
    print("Bla bla.");
    return;
}

public Neco() //verze s returnem i návratovou hodnotou
{
    print("Bla bla.");
    return 1;
}
Link to comment
Share on other sites

  • 0

 

Je to funkce, public ti akorát určuje, že je to funkce veřejná. To jen pro upřesnění (má to své vlastnosti, ale o tom jindy).

 

Teď k tomu tvému returnu. Jak řekl HighPrint, návratovou hodnotu to mít nemusí (je to funkce ꜛ), je to jen čistě na tobě. Nativní SA:MP publicy/callbacky (říkej si tomu, jak chceš) mohou mít u konkrétního returnu specifickou funkci. U tebou definovaných to ale záleží jen na tobě, na tom, jak to budeš používat. Klidně nám ukaž příklad, kde to potřebuješ vědět, my ti řekneme. :) Každopádně tohle všechno bude fungovat a nehodí ti to chybu:

forward Neco();

public Neco() //verze bez returnu
{
    print("Bla bla.");
}

public Neco() //verze s returnem, ale bez návratové hodnoty
{
    print("Bla bla.");
    return;
}

public Neco() //verze s returnem i návratovou hodnotou
{
    print("Bla bla.");
    return 1;
}

 

Jo, pravda je to funkce :d

 

A ten příklad třeba:

public UkazPenize()
{
	for(new all; all < MAX_PLAYERS; all++){
		if(IsPlayerConnected(all)){
			SetPlayerScore(all, GetPlayerMoney(all));
		}
	}
}
Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

To bude asi ta, kterou časuješ (SetTimer), u tohoto nepotřebuješ návratovou hodnotu – půjde to tak, jak to máš.

Link to comment
Share on other sites

  • 0

To bude asi ta, kterou časuješ (SetTimer), u tohoto nepotřebuješ návratovou hodnotu – půjde to tak, jak to máš.

 

Tak kdy je tedy potřeba?

 

Třeba tady je TuT na Fuel System a je tam public timer_fuel_lower() a public timer_refuel(playerid)

 

Ten první má return a druhý ne, tak jako já to nechápu :d

Link to comment
Share on other sites

  • 0
  • Globální moderátor

Když chceš u toho něco zjistit, například jestli se funkce provedla v pořádku nebo ne. V timerech nemáš šanci to zjistit, např.

 

public foo(a,B){

      return a + b;

}

 

 

new bar = foo(9,5);

 

print(bar); // bar == 14

 

A teď si představ složitější výpočty, které nechceš mít nacpané do jednoho místa ať už z důvodu práce ve větším projektu nebo kvůli přehlednějšímu kódu / častému využití nebo nechceš z toho mít dlouhou nudličku. Asi nejčastějším v pawn co s čím se setkáš je PlayerName. Nikoho nebaví furt dokola psát new name[24]; GetPlayerName... atp.,  

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

A teď si představ složitější výpočty, které nechceš mít nacpané do jednoho místa ať už z důvodu práce ve větším projektu nebo kvůli přehlednějšímu kódu / častému využití nebo nechceš z toho mít dlouhou nudličku. Asi nejčastějším v pawn co s čím se setkáš je PlayerName. Nikoho nebaví furt dokola psát new name[24]; GetPlayerName... atp.,

PlayerName nebyl v tomto případě, kdy se bavíme o publicu, zrovna nejšťastnější příklad, vezmeme-li v úvahu, že public nemůže vracet řetězce/pole. Já vím, na co jsi narážel, ale aby ho to nemátlo. :d

Link to comment
Share on other sites

  • 0

return tam cpes vzdycky, kdyz potrebujes aby ti funkce neco vracela, ovsem kdyz ji volas timerem, tak returt nepotrebujes vubec, protoze to nevracis nikam. Ovsem kdyz vsude budes vsude nakonec cpat return, tak to nicemu nevadi.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...