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

Oldalak: 1 [2] 3
16
Segítségkérés / SSCANF probléma
« Dátum: 2014. november 09. - 13:30:51 »
Írd meg valahogy így:
 
new id, tevekenyseg[128];
if(!sscanf(params, \"is[129]\"))
{
   if(!strcmp(tevekenyseg, \"név\")
   {
      new nev[128];
      if(sscanf(params, \"{is[129]}s[129]\", nev)) Msg(playerid, \"Használat: /... ... ... ...\");
      //...
   }
}
else Msg(playerid, COLOR_..., \"Használat: /... ... ...\");

 
Gyorsan írtam, lehet benne hiba. Sok sikert!
Szerk.:
A \"{}\" specifikátorral azt jelzed, hogy arra a részre nincs szükséged.

17
SA-MP: Szerverfejlesztés / MySQL adatok beolvasása mezõ név szerint(cache)
« Dátum: 2014. november 09. - 13:01:46 »
Egész jó, viszont van benne egy-két hiba(legalábbis ránézésre):
A \"vissza\" nevű változó pl. felesleges(kivéve a string lekérdezést), mert egy sima return-el meg lehet oldani, bár végülis így is jó...
A fordító tag mismatch-re fog figyelmeztetni ennél return-kor:
 
stock PlayerGetFloat(...)
//Add meg a visszatérési érték típusát is...:
stock Float:PlayerGetFloat(...)

 
Itt pedig szerintem rájössz magad is a hibára:
 
vissza = cache_get_row(0,i,vissza);

18
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 23. - 13:58:04 »
Idézetet írta: CasHiis date=1414065104\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51039\" data-ipsquote-contentclass=\"forums_Topic


Maga a kód lehetne optimalizáltabb, meg sokkal kisebb is. Túl van bonyolítva, sokkal egyszerűbb módon is meglehet írni.
 
+1
Nevettem, mikor megláttam ezt a megoldást  :D Az én 10 soros megoldásomhoz képest elég bonyolult.
 
[/quote]
:D Hát.. Van még mit tanulnom...
Majd átgondolom az egészet. Egyenlőre nem igen érek rá..
Szerk.:
FRISSÍTVE!
Kód újraírva, most optimalizáltabb.
Szerk2.:
FRISSÍTVE!
Megint újraírtam a kódot, most mégkevésbé optimalizálatlan és bonyolult.

19
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 20. - 22:24:18 »
Sebességkülönbség hozzáadva.
Az SCMR 20 tick-el lassabb, de szerintem ez viszonylag nem sok.

20
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 20. - 00:24:39 »
Idézetet írta: kzyn date=1413722548\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51039\" data-ipsquote-contentclass=\"forums_Topic
Futtasd le 10000-szer és úgy mérd.
 
Rendben, köszi.
Köszönöm a pluszt!
FRISSÍTVE!
Kis optimizáció. Most már nem 0-tól járja végig a szövegrészeket(aminek nem volt értelme), hanem sorhossz-15 -től.
Időt mérek mindjárt...
Szerk.:
10000-szer meghívva 287 tick telik el. Ez lassúnak számít? :hmmm:

21
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 19. - 09:45:47 »
Idézetet írta: kzyn date=1413703795\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51039\" data-ipsquote-contentclass=\"forums_Topic
Ha még a színkódokat is megtalálja ({,} karakterek) akkor lesz az igazi bár így is többet tud mint az SCMEX.
Sebességet mértél?
 
Sebességet még nem mértem, de mindjárt mérek.
Lehet hogy még továbbírom majd, hogy a színkódokkal is foglalkozzon, ha lesz annyi erõm és idõm... (suli)
Szerk.:
Megmértem a sebességét. Az eredmény 0-lett GetTickCount()-al. Gondoltam ez lehetetlen, így megnéztem gettime()-al is, de így is 0 lett. Ez valós érték lehet, vagy rosszul mértem volna?

Dupla hozzászólás automatikusan összefûzve. ( [time]2014. Október 19. 10:39:21[/time] )

FRISSÍTVE!
Észrevettem, hogy isnull-t használok a definiálása nélkül...

22
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 19. - 09:16:54 »
Idézetet írta: Nukerdog date=1413663973\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51039\" data-ipsquote-contentclass=\"forums_Topic
Tetszik. Írd ki a készítõt, valamint rossz helyre nyitottad.
 
A készítõ én vagyok, és jó helyre nyitottam. :)
Mibõl gondoltad, hogy nem én írtam? Alapból mindenkinek angolul kéne írni a scripteket(változóneveket, kommentelést, stb...), hogy más nyelvûek is könnyen tudják módosítani/átlátni, csak a többséget ez nem érdekli.

23
SA-MP: Szerverfejlesztés / SCMR 1.2
« Dátum: 2014. október 18. - 19:11:39 »
SCMR
 
Leírás:
Ez egy szövegdaraboló függvénykönyvtár, mely \"lecseréli\" az alap SendClientMessage és SendClientMessageToAll függvényeket. SCMEX-tõl abban különbözik, hogy ez a space karaktereknél \"szedi szét\" a szövegeket. Nem nagy dolog, de gondoltam valakinek hasznos lehet. A fórumon nem találtam publikálva ilyent, ezért készítettem.
Mûködés(röviden):
Az elõre megadott max sorhosszúságok elõtt a megadott max szóhosszúságig lévõ utolsó space karakternél fejez be egy sort. Ha a szóhosszon belül nincs space karakter, akkor a maximum hossz után kezdõdik az új sor, azaz kettévágja az ott lévõ szót(vagy bármit, ami ott van).
Használat:
A használata nem nehezebb az SCMEX-énél. Az a_samp függvénykönyvtár után kell be include-olnunk.
A maximum sorhosszúság alapértelmezetten 128 karakter, a szóhosszúság 15 karakter. Az alap érték egy define-al, egy alkalmi érték a függvény paramétereiben megadható.
Define:
 
#define _SCMR_MAX_SIZE 110
#define _SCMR_MAX_WORD_SIZE 24

 
Fontos, hogy ezeket a függvénykönyvtár include-olása elõtt kell definiálni. Az _SCMR_MAX_SIZE értékének 64 és 144 között kell lennie; az _SCMR_MAX_WORD_SIZE értékének kisebbnek kell lennie, mint a max méret és nagyobbnak, mint 15, különben a fordító figyelmeztet.
Paraméterlista:
 
SCMR(const playerid, const color, const text[], const maxSize = _SCMR_MAX_SIZE, const maxWSize = _SCMR_MAX_WORD_SIZE)
SCMTAR(const color, const text[], const maxSize = _SCMR_MAX_SIZE, const maxWSize = _SCMR_MAX_WORD_SIZE)

 
Kép:
\"width=500\"screen.png?dl=1\"
[/img]
A képen látható teszt kódja:



SendClientMessageToAll(COLOR_GREEN, \"Az M1 Abrams amerikai harckocsi, amely az Amerikai Egyesült Államok Hadseregének és Tengerészgyalogságának fő típusa. 1980-ban állították szolgálatba, három fő változatát rendszeresítették (M1, M1A1, M1A2). Névadója Creighton Abrams tábornok, aki az Egyesült Államok hadseregének vezérkari főnöke és a 37. Páncélos Ezred parancsnoka volt. Az M1 Abrams az M60 Patton és az M48A5 típusokat váltotta le. Ennek ellenére nem vonták ki valamennyi M60A3...\");

 
Forrás: Wikipédia
 
Fontos:
Amennyiben a megadott hosszúság elõtt a max szóhosszig nincs space, de a végén egy színkód van, a színkódot is kettévághatja!
Letöltés:
<a href=\"https://www.dropbox.com/s/t8gk67pzbyusx03/SCMR.inc?dl=1\">Dropbox</a>
 
//------------------------------------------------------------------------------
// By: M1A1
//------------------------------------------------------------------------------
#if defined _SCMR_included
#endinput
#elseif !defined _samp_included
#error Please include a_samp before SCMR!
#endif
#if !defined _SCMR_MAX_SIZE
#define _SCMR_MAX_SIZE 128
#else
#assert _SCMR_MAX_SIZE <= 144 && _SCMR_MAX_SIZE >= 64
#endif
#if !defined _SCMR_MAX_WORD_SIZE
#define _SCMR_MAX_WORD_SIZE 15
#else
#assert _SCMR_MAX_WORD_SIZE < _SCMR_MAX_SIZE && _SCMR_MAX_WORD_SIZE >= 15
#endif
#define _SCMR_included
stock SCMR(const playerid, const color, const message[], const maxSize = _SCMR_MAX_SIZE, const maxWSize = _SCMR_MAX_WORD_SIZE)
{
new from = 0;
if(strlen(message) < maxSize)
{
return SendClientMessage(playerid, color, message);
}
do
{
new length = maxSize - 1;
for(new i = 0; i < maxWSize; i++)
{
   if(message[(from + length) - i] == \' \')
   {
      if(i != 0) length -= i - 1;
      break;
   }
}
if(from + length > strlen(message)) SendClientMessage(playerid, color, SCMR_getStrPart(message, from + 1, strlen(message)));
else SendClientMessage(playerid, color, SCMR_getStrPart(message, from, from + length));
from += length;
}
while(from < strlen(message) - 1);
return 1;
}
stock SCMTAR(const color, const message[], const maxSize = _SCMR_MAX_SIZE, const maxWSize = _SCMR_MAX_WORD_SIZE)
{
new from = 0;
if(strlen(message) < maxSize)
{
return SendClientMessageToAll(color, message);
}
do
{
new length = maxSize - 1;
for(new i = 0; i < maxWSize; i++)
{
   if(message[(from + length) - i] == \' \')
   {
      if(i != 0) length -= i - 1;
      break;
   }
}
if(from + length > strlen(message)) SendClientMessageToAll(color, SCMR_getStrPart(message, from + 1, strlen(message)));
else SendClientMessageToAll(color, SCMR_getStrPart(message, from, from + length));
from += length;
}
while(from < strlen(message) - 1);
return 1;
}
#if defined _ALS_SendClientMessage
    #undef SendClientMessage
#else
    #define _ALS_SendClientMessage
#endif
#define SendClientMessage SCMR
#if defined _ALS_SendClientMessageToAll
    #undef SendClientMessageToAll
#else
    #define _ALS_SendClientMessageToAll
#endif
#define SendClientMessageToAll SCMTAR
stock SCMR_getStrPart(const string[], const start, const end)
{
new tmp[144];
strmid(tmp, string, start, end);
return tmp;
}

24
Segítségkérés / Random szám generátor,ugyanaz a szám
« Dátum: 2014. szeptember 24. - 17:14:10 »
Idézetet írta: krisk date=1411500616\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50719\" data-ipsquote-contentclass=\"forums_Topic
Ha meg egy listából szeretnéd, akkor nem nagyon lehet mást csinálni, mint végignézni a lista összes elemét, hogy egyezik-e a generált értékkel.
 

25
Segítségkérés / Melyik a gyorsabb és takarékosabb megoldás Dinihez?
« Dátum: 2014. augusztus 28. - 16:58:50 »
PVar-t használva a folyamatos lekéregetést ki lehet küszöbölni:
 
stock file(playerid)
{
    if(!GetPVarType(playerid, \"PlayerFile\")) //Ha nem létezik a változó, akkor létrehozzuk
    {
        new file[200];
        format(file, sizeof(file), \"Jatekosok/%s.txt\",Nev(playerid));
        SetPVarString(playerid, \"PlayerFile\", pFile);
        return file;
    }
    else //Ellenkezõ esetben visszatérünk vele
    {
        new pFile[200];
        GetPVarString(playerid, \"PlayerFile\", pFile, sizeof(pFile));
        return pFile;
    }
}

 
Ugyan ezt megírod a stock Nev-nél is.
Elnézést, ha valamit rosszul írtam..
Szerk.:
Elvileg ha referenciaként adod át a playerid-t, akkor is valamivel gyorsabb lesz, mert így nem fog másolatot készíteni a paraméterül átadott változóról, hanem a már meglévõt használja. Vagy valami ilyesmi, pontosan nem tudom.. (Bocs ha rosszul tudom) Ja és ha már úgysem módosítod az értékét, add át konstansként:
 
stock file(const &playerid)

 
Szerk.2:
Ha nem globálisan (filterscriptek között is) használod az függvényt, akkor divkn megoldása talán jobb is, mint ahogy én írtam..

26
Segítségkérés / Mentés
« Dátum: 2014. augusztus 28. - 16:49:27 »
A format-al a neve mellé formázod, hogy \"LDatum\" pl.
 
new dateKey[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(dateKey, sizeof(dateKey), \"%s_LDatum\", name); //LDatum = Lejárati Dátum
dini_Set(file, dakeKey, \"2014.10.03.11.32\"); //ÉÉÉÉ.HH.NN.ÓÓ.PP

 
Ez kb. így fog kinézni:
Aranka = false
Aranka_LDatum = \"2014.08.31.15.42\"
Józsi = false
Józsi_LDatum = \"2014.10.03.11.32\"
Béla = true
Józsi_LDatum = \"2014.11.02.11.52\"
Lekérdezésnél pedig pl. sscanf-el a dátumot szétszeded, stb.. Az elvet leírtam, a többit ki tudod találni ;)

27
Kösz az ötletet!
Ez eddig miért nem jutott eszembe?... :D

28
Sziasztok!
Lenne egy problémám. Elkezdtem szétszedni a módomat filterscriptekbe, mert reményeim szerint így sokkal átláthatóbb lesz, stb.. Létrehoztam egy inc fájlt is, amiben defináltam a gyakran használt kisebb függvényeket/eljárásokat/konstansokat. Ez eddig mind szép és jó, de azzal a problémával szembesültem, hogyha filterscriptbõl hívok meg egy eljárást, aminek paraméterül ékezetes betût is megadnék, akkor az ékezetes karakter helyett furcsa dolgokat ír ki..
.inc fájlban:
 
stock me(const &playerid, const text[])
{
new msg[128];
format(msg, sizeof(msg), \"* %s %s\", pName(playerid), text);
SendClientMessage(playerid, COLOR_LIGHTBLUE, msg);
sendRangedMessage(playerid, SAY_RANGE, COLOR_LIGHTBLUE, msg);
return 1;
}

 
A filterscriptemben:
 
me(playerid, \"egy állomással elõrébb tekerte a rádiót\");

 
Hát ez így néz ki:
\"sa-mp-000.png\"
A módban rendesen mûködik, csak filterscriptben nem..
Nem tudtok erre valami megoldást?
Elõre is köszönöm a segítséget!

29
Segítségkérés / Mentés
« Dátum: 2014. augusztus 28. - 00:15:13 »
Nem-nem.. :) Te értesz félre engem.
INI fájlkezelésnél vannak ugye a kulcsok, melyeknek értékük van/lehet. A példádban te létrehozol egy \"name\" kulcsot, és ebbe szeretnéd belementeni a játékos neveket, de ez így nem jó, mert több egy nevet viselõ kulcs nem lehet.
Gondoljuk át egy kicsit. Mi lenne akkor, ha a játékosok nevét kulcsként írnánk ki a fájlba, és ezeknek az értéke egy boolean lenne. Azaz bannolva van-e, vagy nincs az adott játékos. Én így írtam.
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
dini_BoolSet(file, name, false); //Ezt a részt bejelentkezés után írd. Hozzáadja a játékost a fájlhoz alap false értékkel.

 
Bejelentkezés elõtt pedig ellenõrizd hogy a játékos bannolva van-e:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
if(!!dini_Bool(file, name)) //Rákeresünk a nevére kulcsként. Ha az érték igaz, kickeljük, mert bannolva van
{
     Kick(playerid);
     //stb..
}

 
Így a fájl így fog kinézni, ha mondjuk Bélát bannoltad:
Aranka = false
Józsi = false
Béla = true

30
Segítségkérés / Mentés
« Dátum: 2014. augusztus 27. - 21:16:41 »
Pl.:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
dini_BoolSet(file, name, false);

 
Ha bannolod, akkor true-ra módosítod az értékét. Mikor a játékos csatlakozik, akkor meg lekéred, hogy bannolva van-e. Ha igen, akkor kiírod neki, hogy bannolva vagy, és kickeled.
Lekérdezés:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
if(!!dini_Bool(file, name))
{
     Kick(playerid);
     //stb..
}

 
Remélem nem írtam el semmit. Sok sikert!

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