Ü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 - krisk

Oldalak: 1 ... 139 140 [141] 142 143 ... 153
2101
SA-MP: Szerverfejlesztés / GRF | by Krisk & GameStar
« Dátum: 2010. június 20. - 20:06:26 »
Egy új nagxon hasznos funkcióval is bovülni fog a func.h, mégpedig a forplayers() funkcióval. Ez, ellentétben a sokak által használt for-os ciklusokkal ellentétben (1. példa) csak azokat az ID-ket nézi meg, amelyeket meghatározunk, és csak azokra a játékosokra érvényesít, amelyek kapcsolódva vannak (2. példa).
1. példa:
 
for( new i = 0; i < MAX_PLAYERS; i++ ) {
SendClientMessage(i,0xFFFFFF,\"Hülye vagy!\");
}
/* Kimenet:
* SendClientMessage(0,0xFFFFF,\"Hülye vagy!\");
* SendClientMessage(1,0xFFFFF,\"Hülye vagy!\");
* ....
* SendClientMessage(499,0xFFFFF,\"Hülye vagy!\");
*/

 
2. példa ( 2 játékosnál ) :
 
 
 forplayers(0,MAX_PLAYERS) {
  SendClientMessage(i,0xFFFFFF,\"Ez jobb!\");
 }
/* Kimenet:
* SendClientMessage(0,0xFFFFFF,\"Ez jobb!\");
* SendClientMessage(1,0xFFFFFF,\"Ez jobb!\");
* breaked // 3.
* ....
* breaked // 499.
*/

2102
SA-MP: Szerverfejlesztés / PlaySoundForAll
« Dátum: 2010. június 20. - 19:39:59 »
Tök mindegy meiket használod. Ha konstannsal használod:
 - Lassabb, mert végignézi az összes játékost 500-ig
 - Gyors, mert konstans.
Ha változót akkor:
 - Lassabb, mert változó.
 - Gyorsabb, mert nem nézi meg az összes játékost 500-ig.
Használjátok a foreach-ot, vagy írtam egy egyszerubbet.
 

#define forplayers(%1,%2) for ( new i = %1 ; i < %2 ; i++) if(IsPlayerConnected(i)

2103
SA-MP: Szerverfejlesztés / SnInfóPult
« Dátum: 2010. június 20. - 19:37:47 »
OFF: Hogyhogy?

2104
SA-MP: verziók / SA-MP 0.3b
« Dátum: 2010. június 20. - 10:39:18 »
Elvileg pluginban az lenne a jó, hogy lehet külön funkciókat írni ha valaki ismeri kicsit jobban az SCM-et, és a C++-t, pl akkor lehetne annyíi funkciója a SAMP-nak, mint az MTA-nak.

2105
Leírások/Útmutatók / PAWNO - Egyszerüsítsük kódunkat.
« Dátum: 2010. június 20. - 08:49:47 »
Bitmanipulációk hozzáadva

2106
Leírások/Útmutatók / Általános szerver konfiguráció.
« Dátum: 2010. június 20. - 08:49:23 »
Ne kezdj RP módba. Igaz is, de ha egy egyedi dolgot mutatsz, amit te magad írsz, akkor megismerés nélkül fogod tudni szerkeszteni.

2107
SA-MP: Szerverfejlesztés / SnAnims
« Dátum: 2010. június 19. - 19:46:05 »
Bocs, de elég gyökér lehetsz, ha csak azért vagy egy fórumon, hogy admin legyél.

2108
SA-MP: Szerverfejlesztés / GRF | by Krisk & GameStar
« Dátum: 2010. június 18. - 16:44:35 »
Lesznek ún. demo scriptek. A demó scriptek a GRF bizonyos könyvtárait használják, de limitáltak, mivel csak tesztelésre szólnak. Gamestar már jól halad a demó GM-mel, szóval úgy néz ki, kb hónap végére kész lesz a következo verzió.

2109
Stunt / AOA Remake
« Dátum: 2010. június 18. - 09:44:10 »
Egy puszit (de nem tolem) :D
Amúgy nagy meló a legjobb stunt vidit újraakoltni, de sikerülni fog :D

2110
Segítségkérés / Egy kérdés nem gta val kapcsolatban.
« Dátum: 2010. június 17. - 20:55:05 »
Double-facepalm.  :\'( :\'( :\'(
Valószínu kicsi a ramod, nézd meg jó-e a konfigod hogy futtasd az mw2-t.

2111
Stunt / AOA Remake
« Dátum: 2010. június 17. - 19:05:01 »
Nem tudok stuntolni, de a vágást szívesen vállalom.

2112
Leírások/Útmutatók / PAWNO - Egyszerüsítsük kódunkat.
« Dátum: 2010. június 16. - 22:30:20 »
State Machine:
Olvasgatva kicsit az angol fórumon megtaláltam, hogy a PAWNO támogatja az úgynevezett State Machine-t (vagy Autómatát, továbbiakban SM), ami engedélyezi, hogy bizonyos funkciókat külömbözo esetekben használjuk. Ezt a módszert használtam én is, a 3 scriptes szerveremen, és sokkal átláthatóbb lett a kód. Vegyünk egy példát.
 

#include <a_samp>
forward restart(); // deklaráljuk a prototípust
new RestartReason[1][1];
public OnGameModeInit() {
SetTimer(\"restart\",1000*60*10,false); // Majd egy timert
}
public restart() {
RestartReason[0][0] = 1;
SendRconCommand(\"gmx\");
}
public OnGameModeExit() {
if(RestartReason[0][0] == 1) {
 printf(\"A folyamatot a restarter szaktította meg\");
} else {
 printf(\"A folyamatot szimplán a felhasználó szaktította meg\");
}
}

 
Ez muködik. De ismerjük a mondást, attól, mert valami muködik, még nem biztos, hogy jó. Használjuk az SM-et:
 

#include <a_samp>
forward restart();
public OnGameModeInit() {
SetTimer(\"restart\",1000*60*10,false);
}
public OnRconCommand(cmd[])
{
 if(strcmp(cmd, \"gmx\", true) == 0) {
  state kilepes:gmx;
 }
 return 1;
}
public restart() {
state kilepes:restarter; // Létrehoztunk egy state machinet
OnGameModeExit();
}
public OnGameModeExit() <kilepes:restarter>
{
printf(\"A rendszert a restarter újraindította.\");
}
public OnGameModeExit() <kilepes:gmx>
{
printf(\"A rendszert a felhasznalo ujrainditotta.\");
}

 
Sokan mondják áá ez bonyorult, de nem, képzeljétek el azt, ami nálam fennált. Egy modom volt amibe 3 gm funkcióit surítettem össze. Hogy tudom a parancsokat, a timereiket egyesével kezelni? Ezzel.
A direktívának lehetnek kondíciói. Pl:
 

state (1 == 1) egyenlo:igen;
state (1 != 1) egyenlo:nem;

 
Vagy akár használhatjuk parancsként is.
 

state (!strcmp(cmdtext, \"/parancs\")) meghivva:igen;

 
A másik ilyen funkció az entry(); ami akkor hívódik meg, ha csak egy autómatás scritpeknél lefut az SM. Példa:
 

main() {
printf(\"Ez\");
state kiirat:igen;
printf(\"Funkcio\");
}
entry() <kiirat:igen> {
printf(\"Egy\");
}

 
Ez azt fogja kiírni: EzEgyFunkcio.
Ahogy láthatjuk, ez nagyon, és kicsi megoldás ezekre a problémákra.
Gyorsaság:
Vegyünk példának egy ciklust:
 

for ( new i = 0; i < MAX_PLAYERS; i++ )

 
Ez gyorsabb, mivel egy konstanst használnuk. De ha például:
 

for ( new i = 0; f = GetMaxPlayers(); i < f; i++)

 
Ez viszont - mivel több változót használnuk - lassabb.
Nézzünk egy szokásos hibát:
 

new Valamennyi = random(10);
printf(\"%d\",Valamennyi);

 
Mivel itt a valamennyit elobb deklaráltuk, ezért ez folyamatosan a meghatározott funkció névterében marad. Ha a funkcoó engedélyezi a paramétereket (a printf ilyen), akkor egyszeruen tegyük ezt:
 

printf(\"%d\",random(10));

 
Ebbol világosan kítunik, hogy a konstansok sokkal gyorsabbak, mint a változók!
Egy másik nagy hülyeség:
 

new var = 1;
if(var == 1) {
printf(\"Expression has..\");
} else {
printf(\"No effect\");
}

 
Gondolom mindenki látja mi a hiba. Elég lenne ennyi:
 

printf(\"%d\",1);

 
IEEE:
Sokan használnak érvénytelen értékeket ha nagy vagy ismeretlen számmal van dolguk. Ez azomban nem jó, mivel sokszor azt is meghaladhatja a számítás (pl ha egy távolság lekéronél írunk 10.000 -t elorfordulhat, hogy 10.001 egységre van, szóval érvénytelen lesz a kód). Erre tökéletes megoldás az alábbi három IEEE szabvány:
 

#define FLOAT_INFINITY     (Float:0x7F800000)
#define FLOAT_NEG_INFINITY (Float:0xFF800000)
#define FLOAT_NAN          (Float:0xFFFFFFFF)

 
Bemutatom egy egyszeru példán keresztül
 

public OnPlayerUpdate() {
new Float:Health;
if(!IsPlayerConnected(playerid)) {
 return FLOAT_NAN; // NaN - Nem szám. Tényleg nem. Majd meglátjátok.
} else if GetPlayerHealth(playerid,Health > 100) {
 SetPlayerHealth(playerid,FLOAT_INFINITY); // Ha több az élete mint 100, akkor örök életet kap.
} else {
 return 0; // Ha egyik sem, akkor 0 a visszatérési értékünk
}
}

 
A Not a Number nevu szám egy igen érdekes szám. Akármelyik számmal való összehasonlítása (beleértve önmagát is) hamis értékkel tér vissza. Pl:
 

if(FLOAT_NAN == FLOAT_NAN) { /* Ez nem fog lefutni, mivel a FLOAT_NAN nem egyenlo önmagával sem! */ }

 
Azomban pont ezt ki lehet játszani. Itt egy példa:
 

stock IsNotANumber(number) {
return(number != number) // Máshogy kifejezve: if(number != number) { return 1; } else { return 0; }
}

 
Ha a szám nem egyenlo önmagával, akkor az a NAN.
Egyenloség:
Vegyük példának a 0-t, számtalan felírási módja létezik:
 

5*0
((27 + 3) / 5) - 6)
0+0
0-0
\\0
0x00
0b00000000
0
false
!true
!változó
0.0
0.00000y

 
Ebbol kiindulva rájöhetünk egy másik gyakran elkövetett hibára. Ha a string üres, sokan így nézik meg:
 

if (strlen(string) == 0)
{
// a string üres
}

 
Ez azomban lassú, ha a string nem üres, ezért elég megnézni csak az ELSO karakterét a stringnek, hogy rájöjjünk, üres-e
 

if(str[0] == \'\\0\') {
// a string üres, mert az elso karaktere = 0
}

 
Vagy egy másik megoldás
 

if(!strlen[0]) {
// a string üres, mivel az elso karaktere nem létezik
}

 
Ezt természetesen az összes 0-s felírási móddal el lehet játszani az összes 0 felírási móddal.
Bitmanipuláció:
Gyorsabb mód a matematikai muveletek elvégzésére. Minden egyes eltolt bittel egyenesen artányosan kettot hozzáadunk a szám szorzatához.
<< 1 = *2
<< 2 = *4
<< 3 = *6
<< 4 = *8
A jobb shift pedig ugyanezt csinálja osztással
>>1 = /2
>>2 = /4
>>3 = /6
>>4 = /8
 

2*2 == 2 << 1
2/2 == 2 >> 1

 
Dimenziók fölösleges használata
Majd meglátjátok, mirol beszélek,. Itt egy tömb:
 

new Fegyverar[5] { 5000, 1, 600, 100, 5 };

 
Sokan azt hiszik, ha meg akarják tudni a fegyver ID-jét. kell hozzá egy plussz dimenzió:
 

new Fegyver[5][1]

 
De minek?! Egyszeruen fogod, és ezt csinálod:
 

new OtosIDJuFegyverAra = Fegyver[5];

 
És kész! Meg van oldva.
A tutorial bizonyos részeiben PAWNO tutorialokat, és IEEE szabványlistát használtam.

2113
Stunt / Stuntkvíz
« Dátum: 2010. június 16. - 20:16:44 »
Melyik videó kapta az Év SA Introja címet 2009-ben?

2114
Beszélgetés / Számoljunk angolul!
« Dátum: 2010. június 13. - 21:57:54 »
ninety-eight

2115
Játékok / BVE - Budapesti metró helyes vezetése
« Dátum: 2010. június 13. - 21:56:11 »
http://www.youtube.com/watch?v=rW5oqcvTbkk
GYiK a gykoknak:
Mire való az a fekete csík a síneken?
A hivatalos neve programszonyeg, ami az automatikus vonatvezeto berendezés (AVR) információinak szállítására, és a CMC / PA üzemmódban közlekedo szerelvényekhez való eljuttatására felel.
PA: Automatikus vonatvezetés A csík itt szabályozza a mögöttünk jövo metróhoz képestz a sebességet, a megállók helyét, ajtók nyithatóságot, éberségjelzo található benne. Ha megy, akkor cask a jó oldalon tudod kinyitni az ajtót, és egy gomb lenyomásával indul a metró.
CMC: Ellenorzött kézi vonatvezetés. Ez is az említett csíkot használja, ám itt a vezetonek csak utasításokat ad, pl: Csökkentse a sebességet, elrontotta a megállót, mennyivel ment túl, mennyit késett. Ám az éberségfigyselo mindegyiken megtalálható (Ezt a módot használja a BVE szimulátor is, kissebb-nagyobb külömbséggel).
CML: Kézi vonatvezetés. Ebben az esetben a jármu nem közöl semmilyen információt, teljesen a vezeto irányítja a vonatot.

Oldalak: 1 ... 139 140 [141] 142 143 ... 153
SimplePortal 2.3.7 © 2008-2024, SimplePortal