Zaključano
Ednostaven Matematika SIS
12,149
pregleda
86
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
pre 5 godina
XACK wrote on August 12, 2020, 11:43 am:
Toliko ste usrali kod sa stilom da ne radi uopste, lik je objavio simple system sa timerom koji radi, a ja sam ispravio sve sto nije radilo uz decent stil.
Nerazuman si, to je to. Ne može čovek ništa da ti objasni...
pre 5 godina
Evo kada već svi pišu bespotrebne primere "Kako najbolje i najlepše napisati kod" (i kako forsirati svoj stil na druge bez razloga jer svako ima svoj stil) haj i ja da napišem jedan u modularnom duhu 😄
#include
#if defined MATH_TIMER_INTERVAL
#undef MATH_TIMER_INTERVAL
#endif
#define MATH_TIMER_INTERVAL (5) // Minutes
static gResult;
static bool: gMathActive;
forward Math_Timer();
forward OnCorrectMathAnswer(playerid);
// -
// Api
// -
stock ReturnMathQuizResult()
{
return gResult;
}
stock bool:IsMathActive()
{
return gMathActive;
}
stock bool:IsMathAnswer(const buffer[])
{
if (!IsMathActive)
return false;
if (strval(buffer) == ReturnMathQuizResult())
return true;
return false;
}
stock ToggleMathActive(bool: toggle)
{
return (gMathActive = toggle);
}
stock StartMathQuiz()
{
new
buffer,
num
;
gResult = (num = random(200)) + (num = random(200)) - (num = random(200));
ToggleMathActive(true);
format(buffer, sizeof(buffer), "{FFFFFF}: Vnesete go gResultot od izrazot %d+%d-%d i dobivate 10000$!", num, num, num);
SendClientMessageToAll(-1, buffer);
}
// -
// Callbacks
// -
public OnFilterScriptInit()
{
SetTimer("Math_Timer", MATH_TIMER_INTERVAL * 60000, true);
return 1;
}
public Math_Timer()
{
StartMathQuiz();
return 1;
}
public OnPlayerText(playerid, text[])
{
if(IsMathAnswer(text))
{
CallLocalFunction("OnCorrectMathAnswer", "d", playerid);
return 0;
}
return 1;
}
public OnCorrectMathAnswer(playerid)
{
new pName, buffer;
GetPlayerName(playerid, pName, sizeof(pName));
format(buffer, sizeof(buffer), "{FFFFFF}: Tocniot odgovor na zadacata bese: %d", gResult);
SendClientMessageToAll(-1, buffer);
format(buffer, sizeof(buffer), "{FFFFFF}: Igracot %s prv go pogodi tocniot gResult i osvoi 1000$.", pName);
SendClientMessageToAll(-1, buffer);
GivePlayerMoney(playerid, 1000);
ToggleMathActive(false);
return;
}
pre 5 godina
Da ispravim gore, zaboravio sam ()
stock bool:IsMathAnswer(const buffer[])
{
if (!IsMathActive())
return false;
if (strval(buffer) == ReturnMathQuizResult())
return true;
return false;
}
pre 5 godina
#if defined MATH_TIMER_INTERVAL
#undef MATH_TIMER_INTERVAL
#endif
Ako neko vec ima definisano nesto slicno poremetices mu sistem, a on nece znati da je to promenjeno, dakle - bespotrebno.
CallLocalFunction("OnCorrectMathAnswer", "d", playerid);
Bespotrebno, dovoljan je normalan call, ovaj je retardiran.
new pName
Umesto ovoga mozes koristiti 'buffer', btw ako koristis ovo: + 1 na MAX_PLAYER_NAME ide u slucaju da ime ima maksimalan broj karaktera
sizeof(pName));
takodje bespotrebno, po defaultu ce uzeti tu duzinu.
Cekamo jos i plugin verziju da slucajno ne ostanemo uskraceni i za to 😄
pre 5 godina
XACK wrote on August 12, 2020, 1:33 pm:
#if defined MATH_TIMER_INTERVAL
#undef MATH_TIMER_INTERVAL
#endif
Ako neko vec ima definisano nesto slicno poremetices mu sistem, a on nece znati da je to promenjeno, dakle - bespotrebno.
CallLocalFunction("OnCorrectMathAnswer", "d", playerid);
Bespotrebno, dovoljan je normalan call, ovaj je retardiran.
new pName
Umesto ovoga mozes koristiti 'buffer', btw ako koristis ovo: + 1 na MAX_PLAYER_NAME ide u slucaju da ime ima maksimalan broj karaktera
sizeof(pName));
takodje bespotrebno, po defaultu ce uzeti tu duzinu.
Cekamo jos i plugin verziju da slucajno ne ostanemo uskraceni i za to 😄
Uopšte nisam menjao kod nego stil druže...
Ali evo da odgovorimo na sve to 🙂
#if defined MATH_TIMER_INTERVAL
#undef MATH_TIMER_INTERVAL
#endifRekao sam da pišem modularno, samim tim će definicija već biti iskorištena tamo gde treba i neće ništa poremetiti jer jer to pre-compiler
CallLocalFunction("OnCorrectMathAnswer", "d", playerid);M O D U L A R A N kod koji verovatno nikada nisi pisao niti video.
Quote
Packages
A Package is a folder containing one or more Modules.
Each isolated unit of functionality should be a package. Packages should communicate via events or exported functions. A package emits an event with CallLocalFunction to signal to other packages that something happened. A package may also export functions. Here, export simply means "to make available". static should be used to indicate a function only used within the immediate module.
A Package is a folder containing one or more Modules.
Each isolated unit of functionality should be a package. Packages should communicate via events or exported functions. A package emits an event with CallLocalFunction to signal to other packages that something happened. A package may also export functions. Here, export simply means "to make available". static should be used to indicate a function only used within the immediate module.
Quote
Umesto ovoga mozes koristiti 'buffer', btw ako koristis ovo: + 1 na MAX_PLAYER_NAME ide u slucaju da ime ima maksimalan broj karaktera
Poprilično sam siguran da niti jedan balkanac ne koristi ime duže od 18 karaktera, naravno + 1 svakako treba dodati, ja sam samo preimenovao varijablu, nisam bilo šta prčkao oko nje
Quote
sizeof(pName));
takodje bespotrebno, po defaultu ce uzeti tu duzinu.
Da, svesni smo toga, ali ostavljam to zbog urednosti jer se meni lično tako sviđa, ne zna svako da je default sizeof svakako, ništa neudi što tu stoji, meni se lično ne sviđa da GetPlayerName ima samo 2 parametra jer je sizeof pre-compiler pa ne škodi ništa da se doda
Kažem ovo sve je MOJ STIL a o STILu se ne diskutuje dok ne utiče na same perofrmanse servera.
Da sam ja pisao ovaj sistem, pre svega uopšte ne bih imao ovoliko retardirane evente i ovako simple matematiku nego bi znakovi +-/* bili random 😄
Poslednji odgovor koji pišem na ovu temu, nemoj džaba da se umaraš da odgovaraš
pre 5 godina
Rekao sam ti da je bespotrebno, ali ti ne slusas.
Prvo, #ifdef - jednostavno nije potrebno da bude tu.
calllocalfunc, u dokumentaciji pise "should be", ali posto ti nisi u 2020. godini onda nikom nista, normal call je bolji i pouzdaniji.
buffer sam ti rekao da koristis umesto pName, jer ne moras praviti bezveze dve varijable kad mozes iskoristiti jednu za sve.
sizeof nije pre-compiler vec je operator
Prvo, #ifdef - jednostavno nije potrebno da bude tu.
calllocalfunc, u dokumentaciji pise "should be", ali posto ti nisi u 2020. godini onda nikom nista, normal call je bolji i pouzdaniji.
buffer sam ti rekao da koristis umesto pName, jer ne moras praviti bezveze dve varijable kad mozes iskoristiti jednu za sve.
sizeof nije pre-compiler vec je operator
pre 5 godina
XACK wrote on August 12, 2020, 1:59 pm:
Rekao sam ti da je bespotrebno, ali ti ne slusas.
Prvo, #ifdef - jednostavno nije potrebno da bude tu.
calllocalfunc, u dokumentaciji pise "should be", ali posto ti nisi u 2020. godini onda nikom nista, normal call je bolji i pouzdaniji.
buffer sam ti rekao da koristis umesto pName, jer ne moras praviti bezveze dve varijable kad mozes iskoristiti jednu za sve.
sizeof nije pre-compiler vec je operator
Prvo, #ifdef - jednostavno nije potrebno da bude tu.
calllocalfunc, u dokumentaciji pise "should be", ali posto ti nisi u 2020. godini onda nikom nista, normal call je bolji i pouzdaniji.
buffer sam ti rekao da koristis umesto pName, jer ne moras praviti bezveze dve varijable kad mozes iskoristiti jednu za sve.
sizeof nije pre-compiler vec je operator
Druže Southclaws tako poziva call-ove, Y_Less tako poziva call-ove, y_inline tako signalizira evente, jel se ti bodeš?
I to je napisano u 2019oj godini, tako da molim te 🙂
Imaš i call function(); (koja je opet wrapper za CallLocalFunction) opciju koju ja koristim jer koristim _ALS_DO
#ifdef je stvar ukusa stvarno, nigde ne piše da mora, ja tako pišem jer eto ide gas
A što se buffer-a tiče to nisam video uopšte 😄
I sizeof() ne utiče ne perforamanse server jer se uopšte ne poziva u toku runtime-a što ga čini pre-compiler ili ti preprocessor-om, dešava se u toku kompilacije jer string/array uvek imaju fiksiranu veličinu kada pre-compiler pređe preko nje, čak i kada je u pitanju string []
Evo, ovo sam pronašao prvom google pretargom...
Quote
Also it's good to know that sizeof is a compiler directive, so it's not a function (unlike strlen for example). That implies you cannot use it on arrays with a size that's not known at compile-time (function arguments mostly).
That's why functions which write into arrays also need the size of the array passed seperately (like format).
That's why functions which write into arrays also need the size of the array passed seperately (like format).
pre 5 godina
XACK wrote on August 12, 2020, 2:13 pm:
to sto koristi neko ko je malo pametniji od tebe ne znaci da je bolje
sto se tice sizeofa slazem se
sad se vrati na alhemicara, mogao si i odatle da pises
sto se tice sizeofa slazem se
sad se vrati na alhemicara, mogao si i odatle da pises
Pravim mini-accove za slučaj da me banuju 😛
I da, zbog dizajna kada radiš modularno je jedini pravilni način da signaliziraš pozivanje funkcije je CLF, pokušaj nekada da kreiraš modularan gamemode, onako da ti se omakne da izađeš iz pećine 😉
pre 5 godina
King of the Jungle wrote on August 12, 2020, 2:14 pm:
Pravim mini-accove za slučaj da me banuju 😛
I da, zbog dizajna kada radiš modularno je jedini pravilni način da signaliziraš pozivanje funkcije je CLF, pokušaj nekada da kreiraš modularan gamemode, onako da ti se omakne da izađeš iz pećine 😉
I da, zbog dizajna kada radiš modularno je jedini pravilni način da signaliziraš pozivanje funkcije je CLF, pokušaj nekada da kreiraš modularan gamemode, onako da ti se omakne da izađeš iz pećine 😉
i normalnim pozivom signaliziras pozivanje funkcije koje je takodje i brze nego si ti naucio samo za clf, ali zasto bi se to koristilo kada jelte ne mora.
pre 5 godina
XACK wrote on August 12, 2020, 9:53 am:
Totalno odudarate od koncepta koji je ovaj covek odradio.
Dzaba vam rad na drugaciji nacin ako ne pratite sta i kako radite.
Ako je filterskripta onda se po tom formatu i radi, callback break nedostaje, bespotrebne inicijalizacije, bespotrebno includanje sscanfa, da ne nabrajam dalje.
Dzaba vam rad na drugaciji nacin ako ne pratite sta i kako radite.
Ako je filterskripta onda se po tom formatu i radi, callback break nedostaje, bespotrebne inicijalizacije, bespotrebno includanje sscanfa, da ne nabrajam dalje.
#define FILTERSCRIPT
/*
@Dependencies
*/
#include
#include
/*
@Configuration
*/
#define MATH_TEST_AUTOTIME (15)
#define MATH_TEST_AUTOREWARD (5000)
/*
@Data
*/
enum E_MATH_TEST
{
m_result,
m_reward,
bool: m_active
};
new MathTest;
/*
@Prototypes
*/
forward MathTest_Auto();
stock MathTest_Start(reward);
/*
@Native callbacks
*/
public OnFilterScriptInit()
{
SetTimer("MathTest_Auto", 60000 * MATH_TEST_AUTOTIME, true);
return 1;
}
public OnPlayerText(playerid, text[])
{
if(MathTest)
{
if(strval(text) == MathTest)
{
new tmpString;
GetPlayerName(playerid, tmpString);
format(
tmpString, sizeof tmpString,
": %s je prvi dao tacan odgovor (rezultat: %d | nagrada: %d$)",
tmpString, MathTest, MathTest
);
SendClientMessageToAll(-1, tmpString);
GivePlayerMoney(playerid, MathTest);
MathTest = false;
MathTest =
MathTest = 0;
return 0;
}
}
return 1;
}
/*
@Function bodies
*/
stock MathTest_Start(reward)
{
if(reward < 0)
{
return 0;
}
new
tmpString,
num;
MathTest = (num = random(100)) + (num = random(100)) - (num = random(100));
MathTest = reward;
MathTest = true;
format(
tmpString, sizeof tmpString,
": Izracunajte (%d+%d-%d), nagrada iznosi %d$.",
num, num, num, MathTest
);
SendClientMessageToAll(-1, tmpString);
return 1;
}
public MathTest_Auto()
{
MathTest_Start(MATH_TEST_AUTOREWARD);
return 1;
}
/*
@gÑєєη ∂αу area
*/
CMD:math(playerid, const params[])
{
if(!IsPlayerAdmin(playerid))
{
return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");
}
if(isnull(params))
{
return SendClientMessage(playerid, -1, ": /math .");
}
MathTest_Start(strval(params));
return 1;
}
Alright, my bad što nisam napravio kao FS - jer uopće ni nisam išao za time već sam htio pokazati momku kako i na koji način bi bilo bolje da piše kod. Što se tiče bespotrebnog inc. sscanf2-a upravu si, nisam uopće išao za time s' obzirom da god. dana nisam napisao pawn kod. Ostalo što si rekao ne pije ti vodu, jer jedino što si ti napravio je c/p ono moje i samo dodao da se math-test preko timer-a sam poziva i promijenio si poruke u SCM-ovima. Bezveze kompliciraš na ovakvim stvarima, svatko ima svoj stil pisanja koda što ne znači da je moj bolji od tvoga, jer na kraju i moj i tvoj kod radi istu funkciju.
pre 5 godina
XACK wrote on August 12, 2020, 2:22 pm:
i normalnim pozivom signaliziras pozivanje funkcije koje je takodje i brze nego si ti naucio samo za clf, ali zasto bi se to koristilo kada jelte ne mora.
Ti očigledno ne razumeš pojam modularno programiranje?
Pacakage treba da bude independent, funckija iz CallLocalFunction može a i ne mora da postoji u onom momentu kada compileaš dok direct call odmah vrati error ako funkcija ne postoji...
Znači možeš a i ne moraš da koristiš taj event(callback) 🙂
Takođe CallLocalFunction NE MORA da zna ime callback-a dok direktno pozivanje mora, mnogo je korisno u zavisnosti šta kreiraš 😄
Znači ovako izbegavamo undefined symbol error i potpuno je dinamično manageovanje u toku samog runtime-a
Na primer možeš da kreiraš 4 callback-a koja mogu biti called samo jednom na nekom mestu i onda samo uradiš CallLocalFunction 😄
I to da je brže, jeste na 1.000.000 poziva, nemoj da overkilluješ stvari bespotrebno 🙂
pre 5 godina
L3o wrote on August 12, 2020, 2:26 pm:
Alright, my bad što nisam napravio kao FS - jer uopće ni nisam išao za time već sam htio pokazati momku kako i na koji način bi bilo bolje da piše kod. Što se tiče bespotrebnog inc. sscanf2-a upravu si, nisam uopće išao za time s' obzirom da god. dana nisam napisao pawn kod. Ostalo što si rekao ne pije ti vodu, jer jedino što si ti napravio je c/p ono moje i samo dodao da se math-test preko timer-a sam poziva i promijenio si poruke u SCM-ovima. Bezveze kompliciraš na ovakvim stvarima, svatko ima svoj stil pisanja koda što ne znači da je moj bolji od tvoga, jer na kraju i moj i tvoj kod radi istu funkciju.
ma jebo stil vise, gledaj kod malo
King of the Jungle wrote on August 12, 2020, 2:30 pm:
Ti očigledno ne razumeš pojam modularno programiranje?
Pacakage treba da bude independent, funckija iz CallLocalFunction može a i ne mora da postoji u onom momentu kada compileaš dok direct call odmah vrati error ako funkcija ne postoji...
Znači možeš a i ne moraš da koristiš taj event(callback) 🙂
Takođe CallLocalFunction NE MORA da zna ime callback-a dok direktno pozivanje mora, mnogo je korisno u zavisnosti šta kreiraš 😄
Znači ovako izbegavamo undefined symbol error i potpuno je dinamično manageovanje u toku samog runtime-a
Na primer možeš da kreiraš 4 callback-a koja mogu biti called samo jednom na nekom mestu i onda samo uradiš CallLocalFunction 😄
I to da je brže, jeste na 1.000.000 poziva, nemoj da overkilluješ stvari bespotrebno 🙂
Pacakage treba da bude independent, funckija iz CallLocalFunction može a i ne mora da postoji u onom momentu kada compileaš dok direct call odmah vrati error ako funkcija ne postoji...
Znači možeš a i ne moraš da koristiš taj event(callback) 🙂
Takođe CallLocalFunction NE MORA da zna ime callback-a dok direktno pozivanje mora, mnogo je korisno u zavisnosti šta kreiraš 😄
Znači ovako izbegavamo undefined symbol error i potpuno je dinamično manageovanje u toku samog runtime-a
Na primer možeš da kreiraš 4 callback-a koja mogu biti called samo jednom na nekom mestu i onda samo uradiš CallLocalFunction 😄
I to da je brže, jeste na 1.000.000 poziva, nemoj da overkilluješ stvari bespotrebno 🙂
tako gubis mogucnost boljeg testiranja, ocigledno je da si video kako se "modularno" radi samo u pawnu, izadji malo pred terasu.
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava