Szerző Téma: parancs szintaktika  (Megtekintve 1238 alkalommal)

parancs szintaktika
« Dátum: 2016. Május 16. - 21:59:27 »
0 Show voters
Helló Helló Sziasztok!
Nos, a következőben problémával fordulok felétek.
No, van egy parancs (pl.) /label [create /del/edit]
No mármost, ha beírom, hogy  /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]
A következő képp gondolkoztam:
 
CMD:label(playerid, params[])
{
if(JatekosInfo[playerid][Admin] >= 3)
{
    new szString[128], lText[256], lColor, testLOS, lDD;
if(sscanf(params, \"s[128]\", szString)) return SendClientMessage( playerid, -1, \"Használat: /label [create/edit/delete]\");
if(!strcmp(szString, \"create\", true))
{
   if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD)) return SendClientMessage( playerid, -1, \"Használat: /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]\");
   new Float:pX, Float:pY, Float:pZ, pVW;
   GetPlayerPos(playerid, pX, pY, pZ);
   pVW = GetPlayerVirtualWorld(playerid);
   Create3DTextLabel(lText, lColor, pX, pY, pZ, lDD, pVW, testLOS);
}
} else    SendClientMessage(playerid, -1, \"Ismeretlen parancs!\");
return 1;
}

 
Ez addig jó, hogy kiírja a felépitést de ha kitöltöm akkor halottnak tűnik az egész mindenség.

parancs szintaktika
« Válasz #1 Dátum: 2016. Május 18. - 16:33:30 »
0 Show voters
Create3DTextLabel(lText, lColor, pX, pY, pZ, lDD, pVW, testLOS);

 
lColor = pl. 0xFFFFFFAA sima változóba nem tudod berakni. (tapasztalat)

parancs szintaktika
« Válasz #2 Dátum: 2016. Május 18. - 17:14:06 »
0 Show voters
Ühmm. Köszönöm a figyelmeztetést!
Az alap problémára nincsen valami tipped?

parancs szintaktika
« Válasz #3 Dátum: 2016. Május 18. - 21:05:14 »
0 Show voters
Akkor tisztázzuk a problémád az ha lerakod akkor nem jelenik meg semmi?
Alap koncepció rossz, lásd használj 2 dimenzius tömböt:
 
enum E_Labelek
{
   lID,
   lText[128],
   Float:pX,
   Float:pY,
   Float:pZ,
   lDD,
   pVW,
   testLOS,
   Text3D:lLabel,
   bool:lVan
};
new Labelek[MAX_LABELEK][E_Labelek];

 
Mivel a labelek, gangzona, játékos, színeket nem tudod megadni így előre bekell definiálni lásd:
 

stock Szinek(szin)
{
   new szinkod;
    switch(szin)
    {
          case 1: szinkod = 0xFFFFFFAA;
          /* és így tovább*/
    }
    return szinkod;
}

 
Gondolom be is akarod tölteni a labeleket mysqlból vagy diniből, ami az lID-re alapul ha létrehozol egy új labelt akkor az lID növekszik eggyel, ellenőrző kód:
 
stock UJLabelID()
{
    new id = -1;
     for(new x = 0; x < MAX_LABELEK;x++)
     {
          if(Labelek
  • [lVan] == true) continue;

          if(Labelek
  • [lVan] == false)

               id = x, break;
     }
     return id;
}

 
Ez áltál újra tudod írni a parancsot!
« Utoljára szerkesztve: 2016. Május 18. - 21:07:39 írta Brian Harris »

parancs szintaktika
« Válasz #4 Dátum: 2016. Május 19. - 17:20:30 »
0 Show voters
Igen... Én és a fogalmazás :D
No az a probléma, hogy van a parancs /label [create /del/edit] és mikor beírom, hogy /label create. Nomármost, a returnt azaz
 
if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD)) return SendClientMessage( playerid, -1, \"Használat: /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]\");

 
De miután kitöltöm a kért adatokat halott az egész és nem csinál semmit sem. Azt, hogy lehet megoldani, hogy egy paranccsal tudja több parancsot helyettesíteni? 

parancs szintaktika
« Válasz #5 Dátum: 2016. Május 19. - 17:33:27 »
0 Show voters
CMD:setlabel(playerid, params[]) return cmd_label(playerid, params);

 
itt a /setlabel fogja ugyanazt csinálni mint a /label parancs, remélem erre gondoltál.

parancs szintaktika
« Válasz #6 Dátum: 2016. Május 19. - 18:27:14 »
0 Show voters
Idézetet írta: Zsifon date=1463671230\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60442\" data-ipsquote-contentclass=\"forums_Topic
Igen... Én és a fogalmazás :D
No az a probléma, hogy van a parancs /label [create /del/edit] és mikor beírom, hogy /label create. Nomármost, a returnt azaz
 
if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD)) return SendClientMessage( playerid, -1, \"Használat: /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]\");

 
De miután kitöltöm a kért adatokat halott az egész és nem csinál semmit sem. Azt, hogy lehet megoldani, hogy egy paranccsal tudja több parancsot helyettesíteni?
 
Ezt:
 
if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD))

 
erre cseréld ki:
 
if(sscanf(params, \"{s[128]}s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD))

 
Lásd: sscanf kihagyás módszere

parancs szintaktika
« Válasz #7 Dátum: 2016. Május 20. - 18:52:04 »
0 Show voters
Idézetet írta: zsoolt997 date=1463675234\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"60442\" data-ipsquote-contentclass=\"forums_Topic


Igen... Én és a fogalmazás :D
No az a probléma, hogy van a parancs /label [create /del/edit] és mikor beírom, hogy /label create. Nomármost, a returnt azaz
 
if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD)) return SendClientMessage( playerid, -1, \"Használat: /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]\");

 
De miután kitöltöm a kért adatokat halott az egész és nem csinál semmit sem. Azt, hogy lehet megoldani, hogy egy paranccsal tudja több parancsot helyettesíteni?
 
Ezt:
 
if(sscanf(params, \"s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD))

 
erre cseréld ki:
 
if(sscanf(params, \"{s[128]}s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD))

 
Lásd: sscanf kihagyás módszere
 
[/quote]
Ezzel sem működik a rendszer.

parancs szintaktika
« Válasz #8 Dátum: 2016. Május 20. - 19:39:47 »
0 Show voters
CMD:label(playerid, params[])
{
new szString[10], lText[256], lColor, testLOS, lDD;
if(isnull(params))
return SendClientMessage( playerid, -1, \"Hasznalat: /label [create/edit/delete]\");
sscanf(params, \"s[10]{}\", szString);
if(!strcmp(szString, \"create\", true))
{
if(sscanf(params, \"{s[10]}s[265]xD(40)D(1)\",lText, lColor, testLOS, lDD)) return SendClientMessage( playerid, -1, \"Hasznalat: /label create [szöveg] [szín (hexa)] [Látótáv (opco)] [Átvilágítés (0 / 1 opci)]\");
new Float:pX, Float:pY, Float:pZ, pVW;
GetPlayerPos(playerid, pX, pY, pZ);
pVW = GetPlayerVirtualWorld(playerid);
Create3DTextLabel(lText, lColor, pX, pY, pZ, lDD, pVW, testLOS);
}
return 1;
}

 
Tesztelve.
Ja és felesleges használni ekkora stringet egy legfeljebb 6 karakterből álló karakterláncak.. Memória pazarlás...  :wall:

parancs szintaktika
« Válasz #9 Dátum: 2016. Május 21. - 15:44:49 »
0 Show voters
Köszönöm szépen a megoldást :).
Ne félj a mod nem valami memória barát :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal