A lusta scripterek biztosan örülni fognak neki :D
Van benne valami. :D
Amúgy hasznos script.
Egy apró észrevétel ilyen funkciókat így is lehet írni de ez tényleg csak egy apróság.
stock IsValidMapIconID(mapicon)
{
if(mapicon > 1 && mapicon < 63)
{
return 1;
}
return 0;
}
Helyett:
stock IsValidMapIconID(mapicon)
return(mapicon > 1 && mapicon < 63);
Kicsit gyorsabb mivel kimarad egy (if) feltétel vizsgálat.
És még gyorsabb lehet egyes esetekben ha || logikai vagy operator van használva, ez akkor igaz ha nagyobb a mapicon értéke mint 62 jelen esetben.
stock IsValidMapIconID(mapicon)
return(!(mapicon > 62 || mapicon < 2));
|| és a && operátorok között nincs sebességbeli különbség. Ebben az esetben az utóbbi megoldás lassít is, hiszen + tagadó operátor is van...
Az ilyen esetekben, mikor az alsó és a felsõ határ megvan egy értéknél (és kivétel sincs) ajánlatos az alábbi módon megoldani:
stock bool: IsValidMapIconID(mapicon) return(64 > mapicon > 1);
Ezenkívül a felsõ határ nem 62 (ahogy a te funkciód megállapította,hanem 64 (ahogy az enyém állapította meg).
Ugyanígy az alsó határ sem 2, hanem 1;
Írd felül a régi funkciót az újjal, a hibák elkerülésére.
Azt viszont nem értem miért írtál jármûlementõt, mikor ott van az alap?
Jha én a határokat a scriptbõl néztem nem az volt a lényeg. :D
|| és a && operátorok között nincs sebességbeli különbség.
Ezzel kicsit vitatkoznék, igaz lehet hogy köztük nincs sebességbeli különbség de ha egy konkrét példán vizsgáljuk meg mûködésüket, már más eredményt kapunk.
|| logikai vagy operator használatakor ha az egyik feltétel igaz akkor igaz (true) értéket kapunk
&& logikai és operator használatakor ha mind a kettõ feltétel igaz csak abban ez esetben kapunk igaz(true) értéket
Megpróbálok egy ugyanolyan feltétel vizsgálatot írni hogy igaz legyen mindkét állítás logikai és, logikai vagy operatorral nehogy visszatérési érték különbözõsége miatt legyen a sebesség különbség.
Íme a két vizsgálandó feltétel, t = 1-el.
if(t > 0 || t > 0) test++; // logikai vagy
if(t > 0 && t > 0) test++; // logikai és
És a teszt:
new
t = 1, // ki kellett ide tennem változóba mert reklamált a pawn fordító ha így próbáltam if(1 > 0 || 1 > 0) test++;
starttime = GetTickCount(),
test;
for(new i; i < 1000000; i++)
{
if(t > 0 || t > 0) test++;
}
printf(\"Logikai vagy || operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 && t > 0) test++;
}
printf(\"Logikai és && operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 || t > 0) test++;
}
printf(\"2 Logikai vagy || operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 && t > 0) test++;
}
printf(\"2 Logikai és && operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
Kétszer futtattam le a tesztet egymás után és az eredmény ez lett:
[20:39:35] Logikai vagy || operator test. time: 55, count: 1000000
[20:39:35] Logikai és && operator test. time: 179, count: 1000000
[20:39:35] 2 Logikai vagy || operator test. time: 60, count: 1000000
[20:39:35] 2 Logikai és && operator test. time: 144, count: 1000000
Igaz ez 1 millió ismétlõdés esetén mérhetõ,
de mibõl is adódik akkor ez a sebesség különbség?
A válasz egyszerû mint írtam az elején logikai || vagy feltétel vizsgálatkor ha az egyik feltétel igaz true értéket kapunk. Ismétlem, elég ha az egyik igaz, true a visszatérési érték!
Persze a vizsgálatot direkt úgy írtam hogy már az elsõ vizsgálat igaz legyen,
if(1 > 0 || 1 > 0) test++; // logikai vagy
[/quote]
ebbõl az következik hogy || logikai vagy operator használatkor ha a legelsõ feltétel vizsgálat igaz
(mivel 1 nagyobb 0 nál) a másodikat már nem vizsgálja meg.
Van másik szembetûnõbb vizsgálat erre a célra, megírom azt is, amint lesz egy kis idõm.
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Íme meg is írtam.
// Elsõ feltétel hamis a második már igaz.
// És lehet próbálgatni > < váltogatással.
if(1 < printf(\"Elsõ feltétel..\") || 1 > printf(\"Második feltétel..\") || 1 > printf(\"Harmadik feltétel..\") || 1 > printf(\"Negyedik feltétel..\"))
{
printf(\"Íme ez lenne a logikai vagy || láthatóbb vizsgálata\");
}