GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: M1A1 - 2014. Október 18. - 19:11:39

Cím: SCMR 1.2
Írta: M1A1 - 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;
}
Cím: SCMR 1.2
Írta: blackdog476 - 2014. Október 18. - 22:26:13
Tetszik. Írd ki a készítõt, valamint rossz helyre nyitottad.
Cím: SCMR 1.2
Írta: Dfoglalo - 2014. Október 18. - 22:55:14
[gmod]A moderálás nem a te dolgod, Nukerdog. A készítõ pedig õ, ezt ki is írta. Amennyiben mégsem így lenne, bizonyítékkal lehet ezt megcáfolni. Valamint rossz helyre sem nyitotta.[/gmod]
Cím: SCMR 1.2
Írta: M1A1 - 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.
Cím: SCMR 1.2
Írta: KovaNovik - 2014. Október 19. - 09:29:55
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?
Cím: SCMR 1.2
Írta: M1A1 - 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...
Cím: SCMR 1.2
Írta: KovaNovik - 2014. Október 19. - 14:42:28
Futtasd le 10000-szer és úgy mérd.
Cím: SCMR 1.2
Írta: M1A1 - 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:
Cím: SCMR 1.2
Írta: KovaNovik - 2014. Október 20. - 07:06:55
Nem tudom. Ugyanazzal a szöveggel futtasd le az scmexel is ugyanannyiszor.
Mondjuk szerintem nem fontos ennyire a gyorsaság, mert akár a negyedik karakternél is lehet az a space.
Cím: SCMR 1.2
Írta: M1A1 - 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.
Cím: SCMR 1.2
Írta: Sramm - 2014. Október 23. - 10:21:34
Teljesen felesleges a gyorsasag, itt elhanyagolhato.
Cím: SCMR 1.2
Írta: DrAkE - 2014. Október 23. - 12:07:15
Maga a kód lehetne optimalizáltabb, meg sokkal kisebb is. Túl van bonyolítva, sokkal egyszerűbb módon is meglehet írni.
Gyorsaság meg nem számít ilyen dolognál, nem gondolom hogy van, aki 1000x kiíratja az üzeneteket :D
Cím: SCMR 1.2
Írta: Csabesz - 2014. Október 23. - 13:51:44
Idézetet írta: DrAkE date=1414058835\" 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.
Cím: SCMR 1.2
Írta: M1A1 - 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.
Cím: SCMR 1.2
Írta: Dani99 - 2014. December 31. - 21:26:44
Szerintem nem lett rossz.