Ü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 ... 17 18 [19] 20 21 ... 136
271
Segítségkérés / Else if ág pontosan, hogyan is müködik?
« Dátum: 2013. július 11. - 22:17:39 »
Gyakorlatilag arról van szó hogy egyetlen egy utasítás fog megtörténni egyszeri lefutás alkalmával:
Próbáld ki mit csinál a következõ kód:
 
   new
rand = 5;
//
if(0 < rand)       printf(\"1 rand értéke : %d\", rand);
else if(1 < rand)   printf(\"2 rand értéke : %d\", rand);
else if(2 < rand)   printf(\"3 rand értéke : %d\", rand);
else if(3 < rand)   printf(\"4 rand értéke : %d\", rand);
else if(4 < rand)   printf(\"5 rand értéke : %d\", rand);
else          printf(\"6 rand értéke : %d\", rand);
//
if(0 < rand)   printf(\"_1 rand értéke : %d\", rand);
if(1 < rand)   printf(\"_2 rand értéke : %d\", rand);
if(2 < rand)   printf(\"_3 rand értéke : %d\", rand);
if(3 < rand)   printf(\"_4 rand értéke : %d\", rand);
if(4 < rand)   printf(\"_5 rand értéke : %d\", rand);
else      printf(\"_6 rand értéke : %d\", rand);
//

 
Akik nem értik az else if használatát azok általában return utasításokkal szakítják meg a kód tovább futását lásd a fenti posztot, az else if szerkezetnél nincs szükség közbensõ return utasításra.
Mûködése megegyezik a switch case utasításokkal:
 
   new
rand = random(10);
switch(rand)
{
case 0: printf(\"0 rand értéke : %d\", rand);
case 1: printf(\"1 rand értéke : %d\", rand);
case 2: printf(\"2 rand értéke : %d\", rand);
case 3: printf(\"3 rand értéke : %d\", rand);
case 4: printf(\"4 rand értéke : %d\", rand);
default: printf(\"Egyik else if illetve ez esetben case résznek se felelt meg a véletlenszerû érték: %d\", rand); // A default egyezik meg az else if szerkezetben a legutolsó sima else részhez, mikor semmilyen feltétel nem felelt meg akkor fut le az utána írt rész.
}
// Ugyanez else if szerkezetben:
if(rand == 0)      printf(\"0 rand értéke : %d\", rand);
else if(rand == 1)   printf(\"1 rand értéke : %d\", rand);
else if(rand == 2)   printf(\"2 rand értéke : %d\", rand);
else if(rand == 3)   printf(\"3 rand értéke : %d\", rand);
else if(rand == 4)   printf(\"4 rand értéke : %d\", rand);
else          printf(\"Egyik else if illetve ez esetben case résznek se felelt meg a véletlenszerû érték: %d\", rand); // A default egyezik meg az else if szerkezetben a legutolsó sima else részhez, mikor semmilyen feltétel nem felelt meg akkor fut le az utána írt rész.

272
Segítségkérés / For és a while ciklus, akkor pontosan, hogy is müködik?
« Dátum: 2013. július 10. - 22:12:44 »
Jogos az észrevétel.
Kis javításra szorul annak a leírásnak ezen részei, majd krisk-nek ha lesz egy kis ideje biztosan javítani fogja.  :D
Páratlant csak akkor fogja kiírni ha az i értéke kezdésnek 1, majd az i változót 2-esével növeljük ennek szintén lehet pár megoldása:
 
   for(new i = 1; i < 20; i += 2) 
{
printf(\"Csak a páratlan számok fognak látszódni 1-20-as sorozatban: %d\", i);
}

 

   for(new i = 1; i < 20; i++, i++) 
{
printf(\"Csak a páratlan számok fognak látszódni 1-20-as sorozatban: %d\", i);
}

 
És igen, csak addig futnak amíg a feltétel igaz.

273
Segítségkérés / változón belüli összes paraméterre vonatkozóan...
« Dátum: 2013. július 10. - 12:42:13 »
Ezt nem így szokás megadni mindig a játékos változó van elõbb, tehát így:
 
new WorkDuty[MAX_PLAYERS][MAX_WORKS];

 
Gondolom egy játékosnak több munka is lehet ezért kell neked az újabb MAX_WORKS tömb, ezt mondjuk bit mûveletekkel egyszerûbb létrehozni.
De maradjunk ennél.
Ha ezt úgy hozod létre ahogy fentebb leírtam akkor egy újabb változóval egyszerûen nullára tudod állítani az összes értéket mégpedig így:
 
new set_null[MAX_WORKS];
WorkDuty[playerid] = set_null;

274
Segítségkérés / Véletlenszerû alapértelmezett érték sscanf-ban
« Dátum: 2013. július 08. - 18:42:49 »
Csak úgy tudod hogy utána leellenõrzöd hogy a color1 iletve a color2 értéke minusz egy maradt-e. Ha igen akkor nem történt érték meghatározás és beállíthatod random értéket.
 
if(sscanf(params, \"k<vehicle>D(-1)D(-1)\", vehid, color1, color2)) return Send..
if(color1 == -1) color1 = random(255);
if(color2 == -1) color2 = random(255);

275
Segítségkérés / Symbol error
« Dátum: 2013. július 08. - 15:59:27 »
Mert már lehetséges hogy egy úgynevezett plugin által kínált eljárással próbálod betenni az objecteket, konkrétan streamer plugin. ( CreateDynamicObject(..)
Ahhoz már a függvénykönyvtárra is szükség van (streamer.inc fájl a /pawno/include mappában és a mód tetején szerepelni kell hogy #include <streamer>.
Kezdõ vagy, kezd az elején.  :D
Az alap samp eljárásokat megtalálod már az említett helyen ../pawno/include mappa. Az ott lévõ fájlokat átnézve láthatod milyen eljárásokat alkalmazhatsz a módod megírásához.
Ezeken felül a különbözõ pluginok által kínált lehetõségeket is felhasználhatod, de ahhoz már tudnod kell mit és hova kell írni hogy utána feltudjad használni õket, meg persze ki is kell tapasztalni hogy mi a bánatra is valóak az új funkciók, de elõtte az alap samp dolgokat se ártana megismerni.  ;D

276
Segítségkérés / Symbol error
« Dátum: 2013. július 08. - 14:57:21 »
Mert copy paste módszerrel nem fog menni, fõleg kezdõként. :D
Kezd az alapoknál, parancs íráshoz:
http://wiki.sa-mp.com/wiki/OnPlayerCommandText
http://wiki.sa-mp.com/wiki/Strtok

277
Segítségkérés / Kiterjesztett kirajzolódási távolság
« Dátum: 2013. július 07. - 20:48:42 »
Egyelõre ne foglalkozz vele, majd ha az összes objectedet átírtad CreateDynamicObject ill. CreateDynamicObjectEx-re, és a probléma továbbra is fenn áll, akkor a látótávolság növelése csak rontani fog a helyzeten.
Ha a probléma továbbra is fenn marad akkor egyszerûen túl mapolt a szervered azokon a helyeken ahol nehezen jelennek meg az objectek.
Játék közben nyomd le az F5 gombot és tartsd lenyomva keress egy olyan adatsort hogy RWObjects ha ott az érték tartósan 999 vagy 1000 akkor bizony túl van mapolva az adott terület, azokon a helyeken a streamer nem tudja ellátni normálisan a feladatát, gondolom nem tudod ezért leírom hogy a streamer plugin a játékosok helyzetéhez viszonyítva hozza létre illetve törli az objecteket, ahogy mozdul a játékos és elhagyja az objecteket a megjelenítési távolságon kívül akkor törli az adott játékosnak azokat az objecteket ahogy közelít másik felé úgy hozza létre õket, ezzel éri el hogy látszólagosan túl lehet lépni az 1000-es limitet amit valójában sosem tesz meg.
Ezért fontos hogy csak CreateDynamicObject-tel hozd létre õket, mivel azokat folyamatosan tudja törölni illetve létrehozni a játékosok pozíciójához képest.
Ha alap CreateObjecttel hozod létre akkor csökkented az 1000 limitet.
Példaként ha létrehozol 800 darab CreateObjectet akkor a streamer pluginnak csak 200 darab szabad slotja marad amin dolgozhat, ami valójában nagyon kevés.
Mivel a CreateObject és a többi hasonló függvény állandóan létrehozva tartja az objektumokat még akkor is ha képletesen 100 km-re van tõle a játékos és nem is látja azokat.

278
Segítségkérés / Kiterjesztett kirajzolódási távolság
« Dátum: 2013. július 07. - 19:28:24 »
Pont ez az egyik hiba forrás, ne használj CreateObject se CreateObjectEx funkciót, mert azok global objectek és csökkentik az egy idõben egy helyen megjeleníthetõ objectek maximális számát ami ugye 1000 jelenleg.
Csak a streamer plugin által kínált CreateDynamicObject illetve a CreateDynamicObjectEx-et használd. Amúgy ez utóbbinál állíthatod a láthatóság távolságát is (Float:drawdistance = 0.0).

279
Segítségkérés / Kiterjesztett kirajzolódási távolság
« Dátum: 2013. július 07. - 19:21:33 »
Használsz alap sima CreateObject funkciót is?

280
Segítségkérés / 3DText ID Format
« Dátum: 2013. július 07. - 08:04:56 »
format(str, sizeof(str), \"3DText ID: %i\", _:ddtext);

281
Segítségkérés / MySQL felhasználó létezik-e?
« Dátum: 2013. július 05. - 19:48:27 »
mysql_store_result();
        if(mysql_num_rows() > 0)
        {
                van=1;
        }
        else
        {
                van=0;
        }
mysql_free_result();

282
SA-MP: Szerverfejlesztés / GetPercentForValue
« Dátum: 2013. július 05. - 08:44:42 »
Érdekes egy kód bár sok hasznát nem látom sa-mp terén, ez inkább egy kis százalékszámítás általános iskola 3. 4. osztály. :D
De ha már lebegõpontos értékkel tér vissza, akkor használhatod a Float: elõtagot az eljárás elõtt, és ki lehet venni a plusz egy változó használatát is:
 
Float:GetPercentForValue(Float:maxvalue, Float:value)
        return value / (maxvalue / 100);

283
Segítségkérés / MySQL
« Dátum: 2013. július 03. - 21:56:14 »
De azt jelenti, csak hogy a samp SQLite verziója .db kiterjesztést használ adatbázisoknál ezért a DB kifejezés leginkább arra vonatkozik. (database.file vagyis DB fájl) ( ha nem hiszed nézd meg a windows mit ír ki típusként a fentebb szereplõ példában a ../scriptfiles/users.db fájlnál)
Mysql-nél sehol nincs ilyen rövidítés használva az egyszerûen, mysql adatbázis.

284
Segítségkérés / MySQL
« Dátum: 2013. július 02. - 22:27:50 »
Ez alap sa-mp.
Hát akkor nem kellene ezt írni:
 
Abban tudnál segíteni, hogy kiolvasok DB-bõl egy sort \"SELECT * FROM accounts WHERE password=\'1234\'\"[/quote]
Edit:
Amúgy mire gondoltál akkor?

285
Segítségkérés / MySQL
« Dátum: 2013. július 02. - 22:22:44 »
A * jelöli hogy minden adattal vissza térjen amennyi adatsorban a feltételeknek egyezést talál.
Játékos regisztrációs adatnál két dolgot szokás megadni feltételnek mégpedig a felhasználó nevet illetve a jelszót.
 
SELECT * FROM accounts WHERE name=\'anorennia\' AND password=\'1234\'

 
Ez minden olyan sorral visszatért ahol a felhasználó név és a jelszó megegyezik, ez igaz általában egyetlen egy sor, nem részletezem miért, erre te magad is rájössz.
Na mivel régóta nem írtam db adatkezelést, így biztos lesz mit alakítani rajt de mûködését talán megérted belõle:
 
#include <a_samp>
#define FILTERSCRIPT
#include <zcmd>
new
DB:USERDB;
enum
enum_pInfo
{
Money,
Score,
Float:Health
};
new
PlayerInfo[MAX_PLAYERS][enum_pInfo];
public
OnFilterScriptInit( )
{
    USERDB = db_open(\"users.db\"); // Adatbázis megnyítása
//  Arra figyelj hogy csak egy adatsort hozz létre ugyanazzal a felhasználó névvel illetve jelszóval!!!!!
//   db_query(USERDB, \"CREATE TABLE `accounts` (name TEXT, pass TEXT, Money NUMERIC, Score NUMERIC, Health FLOAT)\");  // Adattábla szerkezet létrehozás
//   db_query(USERDB, \"INSERT INTO `accounts` (name, pass, Money, Score, Health) VALUES (\'anorennia\', \'1234\', 3500, 201, 80.65)\"); // Egyetlen adatsor beszúrása
// Teszt:
cmd_login(0, \"1234\");
 
return 1;
}
public
OnFilterScriptExit()
{
db_close(USERDB);
return 1;
}
CMD:login(playerid, params[])
{
if(isnull(params)) SendClientMessage(playerid, -1, \"Használat: /login password\");
else
{
new
   string[128],
   DBResult:qresult;
//      GetPlayerName(playerid, string, 128);
string = \"anorennia\";
printf(\"Felhasználó név:%s  Jelszó:%s\", string, params);
format(string, sizeof string, \"SELECT * FROM accounts WHERE name=\'%s\' AND pass=\'%s\'\", string, params);
qresult = db_query(USERDB, string);
 
if(db_num_rows(qresult) == 1) // Ellenõrzés létezik-e adatsor
{
   db_get_field_assoc(qresult, \"Money\", string, 128);
   PlayerInfo[playerid][Money] = strval(string);
   db_get_field_assoc(qresult, \"Score\", string, 128);
   PlayerInfo[playerid][score] = strval(string);
   db_get_field_assoc(qresult, \"Health\", string, 128);
   PlayerInfo[playerid][Health] = floatstr(string);
   print(\" \");
   printf(\"DB teszt: Money: %d, Score: %d Health: %f\", PlayerInfo[playerid][Money], PlayerInfo[playerid][score], PlayerInfo[playerid][Health]);
   print(\" \");
} else {
   print(\"Nincs ilyen adatsor\");
//         SendClientMessage(playerid, -1, \"Nem vagy regisztrálva, vagy rossz jelszót adtál meg\");
}
db_free_result(qresult);
}
return 1;
}

Oldalak: 1 ... 17 18 [19] 20 21 ... 136
SimplePortal 2.3.7 © 2008-2024, SimplePortal