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

Oldalak: 1 [2] 3 4 ... 26
16
Segítségkérés / tárgy hozzá adás majd elvétele![javítva]
« Dátum: 2013. augusztus 26. - 02:11:53 »
több féleképpen meg lehet oldani. A legjobb megoldás talán az hogyha.
minden tárgynak egy tömb de nem bool változó hanem rendes változó mivel lehet hogy valahol szükség van arra hogy több tárgyad is lehessen.
Mivel látom nemigazán vagy képbe a programtervezéssel.
A lényeg hogy minden elgondolást helyettesítünk valamivel.
Vascsõ (ha nem objectre gondoltál hanem csak vascsõ azt kész): Vascsõ nincs a pawnba ^^ ezért kell valamivel helyettesíteni mi lesz az? Hát egy változó.
A változó egy számot tárol. Több típusa van. Pawnban nem túl bonyolult van
bool: ez lehet igaz és hamis értékû.  létrehozni így lehet: new bool:Valtozo;
Float: Ez a nem egész szám (Float jelentése Lebegés ami a Lebegõpontos számábrázolásból jött ilyen pl 5.25 vagy -6.973) létrehozni így lehet: new Float:Valtozo;
int aminek nincs elõtagja ez az egész szám  létrehozni így lehet: new Valtozo;
Ebbõl a háromból lehet olyat létrehozni hogy tömb.
A tömb sok változó egymás mellett amiken belül úgynevezett indexekkel határozzuk meg azt hogy konkrétan melyik változót akarjuk használni a sokból a tömbön belül.
(sok helyen ezért van a for ciklusokban i változó ez az index rövidítése) nah erre példa: new Tomb[MAX_PLAYERS]; ez egy tömb lesz mivel nem raktunk elé elõtagot így egész szám és a MAX_PLAYERS meg megadja hány elemû a tömb. általában ez 500 ha nem definiálod újra a MAX_PLAYERS-t
Na most térjünk vissza a vascsõre.
hogy akarod? lehessen több belõle egy játékosnál vagy ne.
Ha azt akarod lehessen több. Melyik változótipus tûnik a legmegfelelõbbnek? Nyilván az int.
Így létrehozunk egy tömböt pl:
 
new Vascso[MAX_PLAYERS];

 
Mi kell még? Kellmég valami ahol meg tudja venni a vascsövet. pawnba ültetve az elképzelést. A változó értékét módosítani tudja.
legyen ez most a példa egyszerüsége kedvééért egy parancs
 
CMD:vascso(playerid,params[])
{
        Vascso[playerid]++; //ezzel növeltem a vascsõ tömb adott játékosára vonatkozó változót egyel.
        SendClientMessage(playerid,-1,\"Vettél egy csövet. Ingyen mivel most ez csak egy példa.\");
        return 1;
}

 
na mi hiányzik még az elgondolásból? a /leüt parancs feltételezem objectet akarsz létrehozni neki.
Most el kell döntened hogy pontosan mit is szeretnél.
Egy játékos egyszerre max egy csövet üthessen le és kilépéskor eltünjön? //ez technikailag a legegyszerûbb
Egy játékos akár több csövet is leüthessen de legyen egy felsõ határa ennek pl játékosonként max 10 //ez már bonyolultabb valamivel de nem sokkal
Egy játékos akárhány csövet le tudjon ütni felsõ határ nélkül //itt már bonyolodik a helyzet be jön a képbe a GVar plugin
Ha az elõzõ háromból választottál már csak azt kell eldöntened hogy akarod e hogy ezek kilépés után megmaradjanak e.
Mert ha nem akarod hogy megmaradjanak mindent elég csak a játékos ID re tárolni mivel a kilépésig folyamatosan hozzá lehet rendelni az objectet a játékoshoz. hiszen tudod hogy az X objectet a playerid játékos rakta le.
Ha el akarod öket menteni akkor dönthetsz hogy hozzá akarod e rendelni ezeket a játékoshoz vagy nem.
Tehát tudni akarod hogy a fa melletti csövet Józsi ütötte le vagy lényegtelen.
Itt viszont már el érkeztünk oda hogy kelleni fog vagy valami fájlrendszer vagy mysql ami szerintem egyenlõre sok lenne.
Feltételezem a legegyszerûbb megoldást
Egy játékos egyszerre csak egy csövet üthet le és az kilépéskor eltünik.
így kell egy Tömb ami tárolja az object id-jét
 
new LerakottCso[MAX_PLAYERS];

 
és maga a leut parancs:
 
CMD:leut(playerid,params[])
{
if(LerakottCso[playerid]) return SendClientMessage(playerid,-1,\"Hiba: Már leraktál egy csövet\");
if(!Vascso[playerid]) return SendClientMessage(playerid,-1,\"Hiba: Nincs csöved.\");
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
LerakottCso[playerid] = CreateObject(/*stb stb ezt gondolom megoldod, az X,Y,Z koordinátára létrehozod az objectet*/);
Vascso[playerid]--;//Csökkentjük egyel a változó értékét.
return 1;
}

 
Ezután már csak kilépésnél törölni kell ha van OnPlayerDisconnect alatt:
 
if(LerakottCso[playerid]){
DestroyObject(LerakottCso[playerid]);
LerakottCso[playerid] = 0;//ha törölted az objectet mindig 0-zni kell az értéket különben a késöbbiekben a scripted ugy hiszi majd hogy még mindig létezik az object ez meg kavarodást okozhat.
Vascso[playerid] = 0;//nullázzuk a játékos vascsöveit.
}

 
Ha többet is le akarsz ütni egyszerre. Szimulálni kell játékosonként mondjuk egy 10 elemû listát amit a legegyszerûbben úgy tudsz megtenni hogy:
hozzá adunk a LerakottCso tömbhöz még egy dimenziót így lesz:
 
new LerakottCso[MAX_PLAYERS][10];

 
ilyen kis számoknál nem nagyon számít még az optimalizáltság ezért nem bonyolodnék bele abba hogy sorba legyenek rendezve az elemek a tömb elejére.
Na most a következõ probléma amibe beleütközhetsz hogyaz object létrehozásánál (/lerak parancsnál) honnan tudjam melyik indexre rakjam az objectet a 10bõl?
erre írunk egy külön függvényt:
 
stock UresLerakottCsoID(playerid)
{
for(new i; i < 10; i++)
{
if(LerakottCso[playerid] == 0) return i;
}
return -1;
}

 
Így a parancs annyiban változik hogy:
 
CMD:leut(playerid,params[])
{
if(!Vascso[playerid]) return SendClientMessage(playerid,-1,\"Hiba: Nincs csöved.\");
new szabadcsoid = UresLerakottCsoID(playerid);
if(szabadcsoid == -1) return SendClientMessage(playerid,-1,\"Hiba: Elérted a maximálisan lerakható csövek számát\");
Vascso[playerid]--;//csökkentettem a változó értékét egyel.
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
LerakottCso[playerid] = CreateObject(/*stb stb*/);
}

 
Kilépésnél pedig:
 
if(LerakottCso[playerid]){
for(new i; i < 10; i++)
{
if(LerakottCso[playerid])
{
DestroyObject(LerakottCso[playerid]);
LerakottCso[playerid] = 0;
}
}
}
Vascso[playerid] = 0;//nullázzuk a játékos vascsöveit.

 

Dupla hozzászólás automatikusan összefûzve. ( 2013. augusztus 26. - 02:38:10 )

bocsi hogy sz*rul vannak a tabulátorok nem volt kedvem pawnba megírni.

17
Segítségkérés / code átírás!
« Dátum: 2013. augusztus 26. - 01:57:00 »
A 21. tõl a 27. sor ig ami van azt töröld ki
 
Kick(playerid);
new nev[MAX_PLAYER_NAME];
GetPlayerName(playerid, nev, sizeof(nev));
format(string, sizeof(string), \"%s kilett rúgva a rendszer által | Oka: Nem tudta az admin jelszót!\", nev);
ABroadCast(COLOR_LIGHTRED, string, 1);
format(string, sizeof(string), \"%s kilett rúgva a rendszer által | Oka: Nem tudta az admin jelszót!\", nev);
LoOoG(string);

 
A 20. sorba meg meg tudod adni mit írjon ki ha elrontja a jelszót pl:
 
SendClientMessage(playerid, COLOR_LIGHTRED, \"Elrontottad a jelszót.\");

18
be tudod másolni esetleg a kódot? egyébként a mysql_affected_rows nak mûködnie kéne ha a THREAD callbackban hívod meg. a \"No Active Cache\" akkor szokott elõjönni amikor egy olyan funkcióban hívsz meg cache függvényt ami nem egy mysql query bõl való visszatéréskor hívódik meg. de ha mégsem errõl lenne szó és bugos a függvény amit kétlek, insertnél muszáj hogy tudd hány sort illesztettél be, mert az a query létrehozásánál látszik
pl itt 1:
 
INSERT INTO tabla (adat1,adat2) VALUES (16,18)

 
Itt meg 2:
 
INSERT INTO tabla (adat1,adat2) VALUES, (16,18),(20,22)

 
vagy még ha egy ciklus is hozza létre a query-t és nem elõre meg van írva pl
 
      format(query, sizeof(query), \"INSERT INTO tabla (`adat1`,`adat2`) VALUES \");
new adat1 = 16;
new adat2 = 18;
new insertcount = 5;
for(new i; i < insertcount; i++)
{
   format(query, sizeof(query), \"%s(%d,%d),\",largequery,adat1,adat2);
}
query[strlen(query)-1] = EOS;

 
még itt is tudnod kell, vagy ha a ciklus egy while ciklus, akkor meg egy változót növelsz minden sor beillesztésénél. más lehetõséget nemigen tudok elképzelni

19
Segítségkérés / Lehetséges Object random mozgatása egy téren?
« Dátum: 2013. augusztus 18. - 01:55:59 »
Fogod a négy koordinátát berakod egy tömbbe aztán lesz egy függvény ami elindítja a mozgást (move object random az egyik pozícióra) aztán OnObjectMoved nel újra meghívod az elõzõ object mozgató függvényt (nyilván ha az objectid egyezik)

20
Te magad írtad hogy updatezel EGY sort miért csodálkozol mikor eggyel tér vissza a függvény?

21
Segítségkérés / Több MySQL lekérdezés egy táblából
« Dátum: 2013. augusztus 17. - 20:13:21 »
lefelejtettem a zárójeleket bocsi
 
(SELECT * FROM `tabla` WHERE pont = 1 ORDER BY RAND() LIMIT 15) UNION ALL (SELECT * FROM `tabla` WHERE pont = 2  ORDER BY RAND() LIMIT 5)

22
Segítségkérés / Több MySQL lekérdezés egy táblából
« Dátum: 2013. augusztus 17. - 19:22:04 »
SELECT * FROM `tabla` WHERE pont = 1 ORDER BY RAND() LIMIT 15 UNION ALL SELECT * FROM `tabla` WHERE pont = 2 ORDER BY RAND() LIMIT 5

 
Az union egymás mögé rak két táblát aminek azonos mezõszáma van jelen esetben ez a két tábla a két select utasítás (mivel minden select utasítás egy táblázatot ad eredményül)

23
Segítségkérés / Szerveren lévõ kocsik lekérése
« Dátum: 2013. augusztus 13. - 23:26:29 »
hát inkább 60 másodperces alá de ezt irtam is

24
Segítségkérés / Jármû színének és paintjobjának lekérése
« Dátum: 2013. augusztus 13. - 22:51:52 »
Kurta írt egy nagyon hasznos kis includet
http://sampforum.hu/index.php?topic=10051.0

25
Segítségkérés / Sztringet hex értékké való alakítás
« Dátum: 2013. augusztus 13. - 22:48:56 »
mondjuk így:
 
stock RGB( red, green, blue, alpha )
{
/*  Combines a color and returns it, so it can be used in functions.
    @red:           Amount of red color.
    @green:         Amount of green color.
    @blue:          Amount of blue color.
    @alpha:         Amount of alpha transparency.
-Returns:
A integer with the combined color.
*/
return (red * 16777216) + (green * 65536) + (blue * 256) + alpha;
}
stock strhex(string[])
{
new Param[8];
new red[3], green[3], blue[3], alpha[3];
sscanf(params,\"s[8]\",Param);
format(red, sizeof(red), \"%c%c\", Param, Param[1]);
    format(green, sizeof(green), \"%c%c\", Param[2], Param[3]);
    format(blue, sizeof(blue), \"%c%c\", Param[4], Param[5]);
    if(Param[6] != \'\\0\') format(alpha, sizeof(alpha), \"%c%c\", Param[6], Param[7]);
else alpha = \"FF\";
return = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
}

 
A kód egy részét Zamaroht textdraw editorábol vettem.

26
Segítségkérés / Engedélyezett karakterek(betû)
« Dátum: 2013. augusztus 13. - 22:29:09 »
new const EnglishAlphabet[36] = { //Engedélyezett karakterek, a mód elejére rakd
\'q\',\'w\',\'e\',\'r\',\'t\',\'z\',\'u\',\'i\',
\'o\',\'p\',\'a\',\'s\',\'d\',\'f\',\'g\',\'h\',
\'j\',\'k\',\'l\',\'y\',\'x\',\'c\',\'v\',\'b\',\'n\',\'m\',
\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\'};
stock IsThereNonEnglishLetter(const string[],size = sizeof(string))//Függvény ami 1-el tér vissza ha van benne nem megengedett karakter, 0-val ha nincs
{
new character[2];//Egyetlen karakter stringként mivel strfind-nél csak string-et tudsz berakni ami jelen esetben a karakter utánna pedig a string vége vagyis EOS (End Of String) karakter
for(new i = 0; i < size; i++)
{
    if(string == EOS) break;//Ha elérjük az ellenõrzött stringnek a végét megszakítjuk a ciklust így a függvény 0-val fog visszatérni.
    character[0] = string;
    character[1] = EOS;
if(strfind(EnglishAlphabet,character,true) == -1)
{
   return 1;
}
}
return 0;
}

 
Gyors megírtam egyet ez biztos hogy mûködik.
Egyébként még egy lehetõségnek felvetném hogy alakítsd át az ékezetes karaktereket az angol megfelelõjére
 

new const accentlist[][2] = {
{\'á\',\'a\'},
{\'é\',\'e\'},
{\'í\',\'i\'},
{\'ó\',\'o\'},
{\'ö\',\'o\'},
{\'õ\',\'o\'},
{\'ú\',\'u\'},
{\'ü\',\'u\'},
{\'û\',\'u\'},
{\'Á\',\'A\'},
{\'É\',\'E\'},
{\'Í\',\'I\'},
{\'Ó\',\'O\'},
{\'Ö\',\'O\'},
{\'Õ\',\'O\'},
{\'Ú\',\'U\'},
{\'Ü\',\'U\'},
{\'Û\',\'U\'}
};
 
stock ConvertToNonAccent(const string[],dest[],size = sizeof(dest))
{
new character[2];
new i = 0;
for(; i < size-1; i++)
{
    if(string == EOS) break;
    character[0] = string;
    character[1] = EOS;
if(strfind(TeleportCharacters,character,true) == -1)
{
   for(new c; c < sizeof(accentlist); c++)
   {
       if(character[0] == accentlist[c][0]) dest = accentlist[c][1];
   }
}
else
{
     dest = string;
}
}
dest[i+1] = EOS;
}

27
Segítségkérés / Szerveren lévõ kocsik lekérése
« Dátum: 2013. augusztus 13. - 22:23:15 »
new Vehicles[MAX_VEHICLES];

 
Mindig amikor létrehozol egy kocsit átállitasz a vehicleid index-el egy tömb változót vagy GVar változó értékét 1-re pl Vehicles[vehicleid-1] = true;
amikor törlöd a kocsit Vehicles[vehicleid] = false;
és bizonyos idöközönként lefuttatsz egy loop ot ami törli az összes olyan jármûvet ami mellett a Vehicles[vehicleid-1] értéke false (A -1 azért kell mert a jármûvek azonosítói 1-tõl kezdõdnek nem 0-tól)
 
for(new i; i < MAX_VEHICLES; i++)
{
        if(!Vehicles) DestroyVehicle(i+1);
}

 
Hogy mennyire lassú? Viszonylag lassú, de hatásos az is biztos. Viszont arra ügyelni kell hogy ha scriptben hozunk létre játmûveket, akkor ott nem tudjuk a tömbnek az értékét módosítani a módban, maximum CallRemoteFunction-al tudnánk trükközni, de ha ilyen eset van akkor ajánlott a GV ar plugint használni, viszont a GV ar viszonylag lassabb mint a tömb. Bocsi ha kicsit össze vissza van az egész, azért remélem valamit sikerült megérteni belõle.
Hogy mennyi idõközönként csináld ezt? Hát semmi képp sem javasolnám egy percnél kisebb idõközönként.

28
Pluginok és Programok / Fixchars IV
« Dátum: 2013. augusztus 03. - 21:09:00 »
new chlist[][0]={
\"¨\",\"‘\",\"ö\",\"Ö\",
    \"¬\",\"\",\"ü\",\"Ü\",
\"¦\",\"¬\",\"ó\",\"Ó\",
\"§\",\"\",\"õ\",\"Õ\",
\"ª\",\"“\",\"ú\",\"Ú\",
\"¾\",\"‡\",\"é\",\"É\",
\"˜\",\"\",\"á\",\"Á\",
\"«\",\"·\",\"û\",\"Û\",
\"¢\",\"‹\",\"í\",\"Í\"
};
stock FixGameString(const string[])
{
new index,
    dest[256];
strmid(dest, string, 0, strlen(string), sizeof dest);
for(index = 0; index < strlen(dest); index++)
{
for(new idx = 0; idx < sizeof(chlist); idx++)
{
    if(dest[index] == chlist[idx][0])
    {
        dest[index] = chlist[idx-2][0];
   }
}
}
return dest;
}

 
Ez mintha pontosan ugyanazt tudná.
Mivel jobb a plugin mint ez?

29
Segítségkérés / textdraw leírást nem tlaálom
« Dátum: 2013. augusztus 03. - 10:17:30 »
Az egy elég régi megoldás és senki sem használja.
A legtöbben már ezt használják.
http://forum.sa-mp.com/showthread.php?t=290640

30
Segítségkérés / Random kérdéssor MySql-bõl
« Dátum: 2013. július 31. - 21:15:22 »
Nem okoskodásként de ez így szerintem visszatérhet azonos kérdésekkel, ha pont véletlen ugyanazok a számok sorsolódnak ki.
Így 100% hogy nem lesz két egyforma:
 
SELECT DISTINCT * FROM `tablename` ORDER BY RAND() LIMIT 20

Oldalak: 1 [2] 3 4 ... 26
SimplePortal 2.3.7 © 2008-2024, SimplePortal