Üzenetek megjelenítése

Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.


Üzenetek - Zsolesszka

Oldalak: 1 ... 131 132 [133] 134 135 136
1981
Leírások/Útmutatók / Automata reklám script készítése
« Dátum: 2011. március 28. - 19:34:33 »
Idézetet írta: ChuckNorris date=1301327569\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7173\" data-ipsquote-contentclass=\"forums_Topic
Ennyi,a leírás csakis elméleti,mivel nem teszteltem le a gyakorlatban, nem tudom mûködik-e.(Fórumban írtam)
Hozzáadhatunk vagy elvehetünk híreket,semmi mást nem kell módosítani,viszont az utolsó hír után nem kell vesszõ,a többi után igen.
 
Építõ jellegû kritika következik:
A leírás szép és jó de ha van annyi idõd hogy elkészíts egy ilyen leírást akkor legalább mûködõképes formában tennéd.
Nekem volt pár percem letesztelni és már elsõ ránézésre is a léptetés funkció hibás.
Ugye 3 darab hirdetés van aminek az indexe 0, 1, és 2.
A sizeof érték darabszámot ad vissza ami 3 ebben az esetben.
 

new cReklam[][] =
{
   \"Pulyka nem Tyúk húsleves csak 40 000 Ft. a LIDL-ben!\", // index: 0
   \"Akciós FA termékeink: Rozsdamentes acél házikó,most csak 200 000 000 000 000 Ft!\", // index: 1
   \"Csodálatos STRAND helyek kiadók!Érdeklõdnia CÁPA VESZÉLY-t jelzõ tábla mellet a bódéban!\" // index: 2
};
printf(\"sizeof érték: %d\", sizeof(cReklam));
// eredmény: sizeof érték: 3

 
És most jön a léptetésre írt kód:
Ugye csak 0 1 2 indexen szerepel hirdetés tehát már eleve 2-nél nagyobb értéke nem lehet az indexként használt \"cReklamStatus\" változónak.
 

if(cReklamStatus > sizeof(cReklam))  // index nagyobb-e mint 3

 
Itt viszont azt vizsgálod hogy az indexként használt cReklamStatus értéke nagyobb-e mint 3 (ugye sizeof érték), de 3 se lehet, 3 darab hirdetés esetében, mert az indexelés 0-val kezdõdik.
Persze azt gondolná az ember hogy akkor egyszerû a megoldás.
Nem 3 ra kell vizsgálni hanem egyel kisebbre hogy ne legyen 2-nél nagyobb
 

if(cReklamStatus > sizeof(cReklam) - 1)  // index nagyobb-e mint 2

 
De te tovább nézve a dolgot így oldottad meg:
 

if(cReklamStatus > sizeof(cReklam) - 1)
cReklamStatus = 0;
else cReklamStatus++;

 
Most akkor azt gondolnánk helyesen tettük hogy azt vizsgáljuk nagyobb-e mint 2 az indexünk \"cReklamStatus\"
Mivan akkor ha az indexünk értéke 2?
Persze 2 nem nagyobb mint 2, így jön az else utáni rész, amivel máris megnöveltük az értékét 3-ra, amit szeretnénk elkerülni.
Szerintem elég lesz ennyi ha elolvasom lehet én se értem amit leírtam, kijavítottam a funkciót íme:
 

public cReklamozas()
{
   if(cReklamStatus >= sizeof(cReklam) - 1)
      cReklamStatus = 0;
   else cReklamStatus++;
   return SendClientMessageToAll(0,cReklam[cReklamStatus]);
}

 
Szándékosan nem írtam át másmilyen logikai menetre, maradjon az általad elképzelt folyamat.
Viszont a reklám szövegeken jót nevettem.  :D

1982
SA-MP: Szerverfejlesztés / Csak magyarok
« Dátum: 2011. március 28. - 18:09:10 »
Idézetet írta: Iceaac date=1301326228\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7097\" data-ipsquote-contentclass=\"forums_Topic


ChuckNorris Edition:
http://pastebin.com/dVxP7sNV
Nem teszteltem.
 
// Ha true dialog jelenik meg,ha true akkor kickelve lesz

 
 ;D
 
[/quote]
 
new bool:dialog = true; // Ha true dialog jelenik meg,ha true akkor kickelve lesz[/quote]
Ezen én is rágódtam egy darabig mit is akar jelenteni,
de erre a következtetésre jutottam:
Ha a dialog típusú változónak true értéket adunk akkor egy dialog panel jelenik azoknak akik nem magyarországi IP-rõl csatlakoznak, ha false értéket adunk akkor a nem Magyarországi IP-rõl csatlakozókat kickeli automatikusan.
(Ez aztán a vendég szeretet, szegény vakarhatja a fejét ugyan miért lett kidobva.)

1983
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 27. - 20:50:05 »
Jó ötlet, majd lehet szánok arra is egy kis idõt, jó kis elfoglaltság lesz az is. :amazed:

1984
Segítségkérés / mi a jó szerver titka?
« Dátum: 2011. március 27. - 20:46:57 »
Hát amit én tapasztalok le kell szedni egy rakás filterscriptet meg valami rp módot és csak annyi tudás kell hogy elindítsd, már jönnek is a playerek.
Nem számít hogy akad minden nem az a lényeg megy és kész admin jogot adsz mindenkinek és már ott is ülnek a nap 24 órájából 25-öt a gép elõtt.
Valakinek olvastam sigjét:
A legkevesebb játékos azon a szerveren van amelyikben a legtöbb munka fekszik.
Sajnos ez így van :(

1985
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 27. - 17:58:52 »
Idézetet írta: Jex date=1301240944\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7086\" data-ipsquote-contentclass=\"forums_Topic
nem vágom, hol hagytam le az = jelet?
és mi az a (value & 0b1)?
 


for(new i = 3; i<val;i+=2)
for(new i = 3; i<=val;i+=2)

 
Bitenkénti és össze hasonlítás.
Binary kódként minden páratlan szám elsõ bitje 1.
Itt egy szemléltetõ példa:
 

for(new i; i < 100; i++)
{
printf(\"Binary: %b | %d\", i, i);
}

 
(Egyébként hibáztam nem teszteltem negatív értékre javítva vannak.)

1986
Segítségkérés / ütés anim
« Dátum: 2011. március 27. - 17:41:24 »
Légy kreatív csak azt tudom mondani.
http://wiki.sa-mp.com/wiki/GetPlayerAnimationIndex
Az ott látható kódot szépen bemásolod a a módodba igen az OnPlayerUpdate részt,
felmész a szerveredre kiválasztasz egy harci stílust elkezdesz ütni vágni (játékban lehetõleg) és szépen kiírja épp melyik animációt játsza le, innen már menni fog szerintem.

1987
SA-MP: Szerverfejlesztés / HasDuplicateValues
« Dátum: 2011. március 27. - 17:13:32 »
Fõ topic
Ez a funkció egy adott karakterlánc, számsorozat egyes elemeit hasonlítja össze szerepel-e benne duplán ugyanolyan érték.
Ha van egy egyezés a vissza térés értéke \"true\".
(Igazából a lottóscriptben használtam annak ellenõrzésére ne lehessen megadni egyforma nyerõszámokat.)
 

stock
    HasDuplicateValues(array[], size = sizeof array)
{
    for(new f = 0; f < size - 1; f++)
        for(new c = f + 1; c < size; c++)
            if(array[f] == array[c])
                return true;
    return false;
}

 
És a példa:
 

new
arr[] = { 21, 34, 45, 15, 56, 123, 34, 67 },
arr2[] = { 21, 34, 45, 56, 123, 36, 67 },
arr3[] = { 2, 5, 34, 56, 332, 67, 32, 43, 6554, 1234, 542},
arr4[] = { 4, 8, 10, 12, 3, -45, -78, 45, -78, 90},
arr5[] = { \'x\', \'d\', \'s\', \'e\', \'t\', \'r\', \'o\', 67, 23, \'r\'};
printf(\"Duplicate value in array?  %s\",  (HasDuplicateValues(arr))?(\"Yes\"):(\"No\"));
printf(\"Duplicate value in array?  %s\",  (HasDuplicateValues(arr2))?(\"Yes\"):(\"No\"));
printf(\"Duplicate value in array?  %s\",  (HasDuplicateValues(arr3))?(\"Yes\"):(\"No\"));
printf(\"Duplicate value in array?  %s\",  (HasDuplicateValues(arr4))?(\"Yes\"):(\"No\"));
printf(\"Duplicate value in array?  %s\",  (HasDuplicateValues(arr5))?(\"Yes\"):(\"No\"));
/*
[17:23:20] Duplicate value in array?  Yes
[17:23:20] Duplicate value in array?  No
[17:23:20] Duplicate value in array?  No
[17:23:20] Duplicate value in array?  Yes
[17:23:20] Duplicate value in array?  Yes
*/

 
Alap elve a következõ:
Az elsõ cella tartalmát hasonlítja össze a többi celláéval, majd a másodikét és így tovább, ez egy 10 cellás folyamatsorozatot próbál ábrázolni:
 

  • == [1],[2],[3],[4],[5],[6],[7],[8],[9]
  • [1] == [2],[3],[4],[5],[6],[7],[8],[9]
    [2] == [3],[4],[5],[6],[7],[8],[9]
    [3] == [4],[5],[6],[7],[8],[9]
    [4] == [5],[6],[7],[8],[9]
    [5] == [6],[7],[8],[9]
    [6] == [7],[8],[9]
    [7] == [8],[9]
    [8] == [9]

1988
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 27. - 15:57:48 »
Idézetet írta: Jex date=1301181803\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7086\" data-ipsquote-contentclass=\"forums_Topic
õõ akkor valamit elírtam.. igazából csak ilyen hatalmas számokra teszteltem xD majd holnap még kitalálok valamit.
edit:
 

stock IsPrime2(value)
{
    if(value < 2) return false;
if(value == 2) return true;
if(value % 2 == 0) return false;
new Float:val = floatsqroot(value);
for(new i = 3; i<val;i+=2)
{
    if(value % i == 0) return false;
}
return true;
}

 
ez a leggyorsabb amit írni tudtam.
 
Szép egy apró jel maradt csak le = és máris megfelelõen mûködik. Biztos te is ezt az értéket kaptad 78665.
Kösz Jex sokat segítettél és persze a hivatalos fórumon Nero_3D is írt egy változatot.
Így talán eddig amit elértünk ez a leggyorsabb változat:
 

stock
IsPrime(value)
{
if(value < 2 || value & 0b1 == 0)
return(value == 2);
new
i = 3,
Float:val = floatsqroot(value);
for( ; i <= val; i++, i++)
if((value % i) == 0)
   return false;
return true;
}

 

[2011.03.27 18:32:33] Prímszámteszt count: 78498 | time: 5188ms[/quote]

1989
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 27. - 00:17:44 »
Nem rossz elképzelés csak valami hiba van benne túl sok igaz értékkel tér vissza,
a teszt egyszerû amivel ellenõrzöm csak megszámolom mennyi igaz értékkel tér vissza és ha többi verzióval egyezik a szám akkor megfelelõen mûködik.
 
[2011.03.27 00:12:18] Prímszám teszt count: 78498 | time: 7421ms
[2011.03.27 00:13:04] Prímszám teszt count: 123494 | time: 10840ms
[/quote]
Itt látható hogy jóval több mint 78498.
De az ötlet nem rossz. Köszi.
Itt a tesztelésre írt kód:
 

#define LOOP 1000000
new
count,
st = GetTickCount();
for(new i; i < LOOP; i++)
{
if(IsPrime(i))
{
   count++;
}
}
printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);
count = 0;
st = GetTickCount();
for(new i; i < LOOP; i++)
{
if(IsPrime2(i))
{
   count++;
}
}
printf(\"Prímszám teszt count: %d | time: %dms\", count, GetTickCount() - st);

1990
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 27. - 00:00:21 »
Idézetet írta: Arnold_Alexander date=1301155830\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7086\" data-ipsquote-contentclass=\"forums_Topic
én ezekbõl sajnos egy szót nemértek de sebaj majd megtanulom ezeket is xD am f***án néz ki
 
Köszi én se tudtam róla sok mindent pár napja.
Újabb verzió.
Kiderült hogy while ciklusban bármilyen egyéb függvény használat lassú, így kitettem a floatsqroot -ot egy újabb változóba, így még gyorsabban fut le a kód, 1 millió növekvõ ismétlõdésnél mérve.

1991
SA-MP: Szerverfejlesztés / Csak magyarok
« Dátum: 2011. március 26. - 20:50:41 »
Szép szép de én kicsit hiányosnak találom nézd át újra mert szerintem egy igen igen lényeges rész hiányzik innen.
Talán ez lenne az?

1992
Segítségkérés / szerver parancs
« Dátum: 2011. március 26. - 17:30:18 »
Idézetet írta: straY\' date=1301154925\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7076\" data-ipsquote-contentclass=\"forums_Topic
@DareDevil: Filterscriptek is bezavarhatnak. Azoknál is állítsd át a visszatérési értéket 0-ról 1-re.
@Zsoleszka: MAX_PLAYERS helyett használd a GetMaxPlayers() -t. Mivel a MAX_PLAYERS értéke 500, míg a GetMaxPlayers-é csak annyi ahány férõhelyes a szerver.
http://wiki.sa-mp.com/wiki/GetMaxPlayers
 
Köszi.
Ez így van ha megfelelõen van használva, persze ez függ attól is épp mennyi a slot mert lehet 400 slotnál már nem gyorsabb a GetMaxPlayers mint a MAX_PLAYERS, persze ez attól is függ épp hogy használod ciklus utasításokban az imént említett funkciót.
Én maradok ennél az eljárásnál, ha nem gond:
 

#undef MAX_PLAYERS
#define MAX_PLAYERS 50 // mivel ennyi a jelenlegi számomra, -unkra bérelt szerveren a slotok száma.

1993
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 26. - 17:03:46 »
Idézetet írta: Jex date=1301155035\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7086\" data-ipsquote-contentclass=\"forums_Topic
igazából az elsõ rész, hogy ++i, vagy i++ az tényleg mindegy. a másik viszont már nem :D de mondom, c++-ban szinte felesleges ilyen gyorsítással próbálkoznod, inkább lassítás lesz belõle... ajánlanám esetleg a funkcionális nyelveket, ott tényleg maximális gyorsaságot érhetsz el :D
 
Sok esetben nem mindegy igaz pawn nyelv nem nagyon tesz különbséget ++i;  i++;  között de while ciklusnál már néha különbség van benne.
És ahogy most van már eleve 2-õvel kezdi ellenõrizni az oszthatóságot.
És valóban érdekes a belinkelt oldal elfog tartani egy darabig míg értelmezem.
Köszi még egyszer.
Na átolvastam kicsit. Szóval az oszthatóság vizsgálatból ki kell venni minden prímszám többszörösét, viszont megvalósítani nem lesz könnyû, vagy túl bonyolult lesz a kód ami nem gyorsabb hanem egyes esetekben még lassabb is lesz, vagy be kell iktatni egy határt melyik számtól gyorsabb a mostani mint a bonyolultabb verzió.
El leszek vele egy darabig. ;D

1994
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 26. - 16:55:06 »
Idézetet írta: Epsilon date=1301154419\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7086\" data-ipsquote-contentclass=\"forums_Topic


if(value < 2) return false;

 
Tudtommal az 1 prímszám.
 
[/quote]
Én nem tudom hogy  az 1 prímszám lenne wikin 2-vel kezdõdik.
http://hu.wikipedia.org/wiki/Pr%C3%ADmsz%C3%A1mok
Kösz jex próbálkozok még gyorsabb verziót írni ezen leírás alapján, egy kis idõbe is telik mire értelmezem, de megvannak az okai mit miért csináltam mivel a tesztek mást mutatnak, mûködõképesség terén.

1995
SA-MP: Szerverfejlesztés / IsPrime
« Dátum: 2011. március 26. - 15:17:02 »
Hát nem tudom mennyire hasznos egy funkció de leírom itt is érdekességnek jó lesz.
A lényege egy megadott számról eldönteni prímszám avagy sem.
Eredeti kezdeti topic: http://forum.sa-mp.com/showpost.php?p=1136560&postcount=1841 [FeK]DraKiNs írta.
Egy php ból merített prímszám ellenõrzõ funkció. (szerintem kiválasztotta a legbonyolultabbat) >:D
Mivel ezt én kicsit túl bonyolultnak találtam, így némi kutatás és tesztelés után, írtam egy-két változatot, köszönet érte az interneten megtalálható leírások készítõinek.
A leggyorsabb változat amit eddig elértem az ez lenne:
 

stock
IIsPrime(value)
{
if(value < 2) return false;
if(value == 2) return true;
new
Float:value2 = floatsqroot(value);
new
i = 1;
while(i++ < value2)
{
if(value % i == 0)
   return false;
if(i > 4) i++;
}
return true;
}

 
Ha valakinek akadna gyorsabb verzió, örömmel venném ha láthatnám. (csak tanulás végett)
Sikerült egy kis gyorsabb lefutást eszközölni e sor beírásával:
 

if(i > 4) i++;

 
Íme az eredmény amit mértem a két verzió közt 1 millió ismétlõdésnél.
 
[2011.03.26 20:04:18] Prímszám teszt count: 78498 | time: 10153ms // újabb prímszám ellenõrzõ
[2011.03.26 20:04:36] Prímszám teszt count: 78498 | time: 17491ms
[/quote]
Igaz most már tudom hogy kellene ellenõrizni de megvalósítani az már kicsit nehezebb.
Az oszthatóságot csak prím számokkal kellene vizsgálni, úgy lehetne elérni a leggyorsabb ellenõrzést.
Újabb gyorsabb verzió kiderült hogy while funkcióban a flootsqroot eléggé lassú:
 
[2011.03.26 23:49:18] Prímszám teszt count: 78498 | time: 7362ms[/quote]
Ez szintén 1 millió ismétlõdésnél mért idõ.
Újabb fejlesztés köszönet érte Jex_nek és a hivatalos forumon Nero_3D nek is az általa írt verziónak.
Így talán eddig amit elértünk ez a leggyorsabb változat:
 

stock
IsPrime(value)
{
if(value < 2 || value & 0b1 == 0)
return(value == 2);
new
i = 3,
Float:val = floatsqroot(value);
for( ; i <= val; i++, i++)
if((value % i) == 0)
   return false;
return true;
}

 

[2011.03.27 18:32:33] Prímszámteszt count: 78498 | time: 5188ms[/quote]

Oldalak: 1 ... 131 132 [133] 134 135 136
SimplePortal 2.3.7 © 2008-2024, SimplePortal