Szerző Téma: Globális blokk létrehozása  (Megtekintve 2142 alkalommal)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Globális blokk létrehozása
« Dátum: 2013. október 05. - 19:23:45 »
0 Show voters
Sziasztok!
Eddig nem nagyon volt szükségem nagyobb globális blokkokra (így tudom a legjobban megfogalmazni), de most szükségem lesz rá. Mondom is miért. Nem akarom a dolgokat 100 helyen átírni, vagy hozzáadni, hanem csak egy helyen, amely mindenhol érvényes lesz. Próbálkoztam pár dolgokkal, de nem igen ment. Egy kicsit konkretizálva a dolgot, hogy esetleg meg is értsétek: egy paranccsal meghívnék egy véletlenszerû számot, amely az adott blokkból kikeresi, hogy mi van az adott számnál, majd pedig végrehajtja azt.
 
new Szam;
/parancs
{
      Szam = random(5);
      Blokk();
}

 
Ha a kapott szám 3, akkor esetleg így:
 

Blokk
{
      // .....
      case 3:
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 3-as szám.\");
      }
      case 4:
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 4-es szám.\");
      }
      case 5:
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 5-ös szám.\");
      }
}

 
Vagy így:
 

Blokk
{
      // ...
      if(Szam == 2)
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 2-es szám.\");
      }
      if(Szam == 3)
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 3-as szám.\");
      }
      if(Szam == 4)
      {
            SendClientMessage(playerid, COLOR_WHITE, \"Ez a 4-es szám.\");
      }
      // ...
}

 
Aztán ami benne van - a példában egy Client Message - lefut. Lehet, hogy nagyon egyszerûen megoldható az egész, sõt, szinte biztos vagyok benne, de az is lehet, hogy nem, amire nem igazán számítok. Az egyszerûsége ellenére én még nagyon kezdõ vagyok ezen a téren, mivel nem volt szükségem rá, ezért hozzátok fordultam. Ritkán írok ide, de aki többször olvasta a kérdéseimet, észrevehette, hogy olyan téren kérdezek, ahol még kezdõ vagyok. És ezen zöldfülûségemet le is írtam minden témában, ahogy itt is :D Na szóval számítok a segítségetekre! Remélem gyors választ (akár ma) kapok.
Üdvözlettel: Dfoglalo
« Utoljára szerkesztve: 2013. október 06. - 08:38:28 írta Dfoglalo »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #1 Dátum: 2013. október 05. - 19:47:56 »
0 Show voters
Nem akarom a dolgokat 100 helyen átírni, vagy hozzáadni, hanem csak egy helyen, amely mindenhol érvényes lesz[/quote]
mire gondolsz?
 
Eddig nem nagyon volt szükségem nagyobb globális tömbökre (így tudom a legjobban megfogalmazni)[/quote]
 
Egy kicsit konkretizálva a dolgot, hogy esetleg meg is értsétek: egy paranccsal meghívnék egy véletlenszerû számot, amely az adott tömbbõl kikeresi, hogy mi van az adott számnál, majd pedig végrehajtja azt.[/quote]
 
    Tomb
    {
          // .....
          case 3:
          {
                SendClientMessage(playerid, COLOR_WHITE, \"Ez a 3-as szám.\");
          }
          case 4:
          {
                SendClientMessage(playerid, COLOR_WHITE, \"Ez a 4-es szám.\");
          }
          case 5:
          {
                SendClientMessage(playerid, COLOR_WHITE, \"Ez a 5-ös szám.\");
          }
    }
[/quote]
Szerintem te nem a tömbre gondoltál hanem a függvényre de még mindig nem értem mire szeretnéd ezt használni, ha publikus akkor bõvebben kifejthetnéd mire kellene neked ez. Tömbben adatot tárolunk.
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Globális blokk létrehozása
« Válasz #2 Dátum: 2013. október 05. - 19:53:06 »
+1 Show voters
#include <a_samp>
new
szoveg[][] =
{
{ \"null\" },
{ \"egy\" },
{ \"kettõ\" },
{ \"három\" },
{ \"négy\" },
{ \"öt\" }
};
public OnFilterScriptInit()
{
for(new i; i < 10; i++) // Teszt for ciklus.
{
printf(\"A véletlen kapott szám : %s\", szoveg[ random(sizeof(szoveg)) ]);
}
return 1;
}

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #3 Dátum: 2013. október 05. - 19:57:30 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1380995586\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43394\" data-ipsquote-contentclass=\"forums_Topic

#include <a_samp>
new
szoveg[][] =
{
{ \"null\" },
{ \"egy\" },
{ \"kettõ\" },
{ \"három\" },
{ \"négy\" },
{ \"öt\" }
};
public OnFilterScriptInit()
{
for(new i; i < 10; i++) // Teszt for ciklus.
{
printf(\"A véletlen kapott szám : %s\", szoveg[ random(sizeof(szoveg)) ]);
}
return 1;
}

 

szerintem nem erre gondolt :)
 
egy paranccsal meghívnék egy véletlenszerû számot, amely az adott tömbbõl kikeresi, hogy mi van az adott számnál, majd pedig végrehajtja azt.[/quote]
 
Aztán ami benne van - a példában egy Client Message - lefut.[/quote]
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Globális blokk létrehozása
« Válasz #4 Dátum: 2013. október 05. - 20:01:43 »
0 Show voters
Válaszom Kovacs_Richard hozzászólására
Bocsánat, blokk. Nem tömb. Az már csak jó :D És nem függvény kéne, azokból már írtam eleget, és azok mûködtek is. Itt arról van szó, hogy van egy parancs, ami a Szam változó értékét beállítja egy random számra. És ha például a 3-as jön ki, akkor kiírja hogy a 3-as szám jött ki. Ezt könnyen meg lehet oldani parancson belül. Azonban én ezt úgy szeretném megoldani, hogy valahol a módban létrehozok egy blokkot, amelyben leírom ezeket a lehetõségeket, hogy mi történjen 1-nél, 2-nál, 3-nál, stb. És ha pl. a random(10)-nél 3 jön ki, akkor a 3-asnál lévõ dolgokat hajtsa végre. Vagy ha 2-es jön ki, akkora 2-es dolgait - csak hogy ne mindig a 3-as szám példájával éljek. Egyébként kijelölne egy CP-t, ahová el kell menni, meg kiírna pár szöveget. De ezt helyettesíthetem a példámban egy sima kis Client Messageval, vagy ha úgy tetszik, egy még egyszerûbb print-el is. Lényegtelen mire kell, csak sikerüljön egy ilyen külsõ, mindenhol, nem csak egy adott parancsnál használható -> globális adathalmazt létrehoznom. Ez kicsit olyan, mintha egy adatbázisból kérdeznénk le egy tábla adott sorát, és az ott lévõ rekordok adatait írnánk ki. Csak itt pawn nyelven, egy játékmódban. Remélem így már érthetõ. :)


Válaszom zsolesszka hozzászólására
Na valami ilyesmire gondoltam. Ilyet már használtam egy egyszerû kis véletlenszerû CP-ket kidobó úttisztító munkánál, azonban itt nem csak ennyirõl van szó. Legelõször egyébként erre gondoltam, de nem tudtam, hogyan oldható meg ezzel, hogy kiírjon 6 db Client Messaget, lerakjon egy CP-t, átállítsa két változó értékét, stb.


Válaszom Kovacs_Richard hozzászólására
Közben megint írtál. Nincs idõm elküldeni a választ, és már ír is valaki :D Hát tényleg nem pont arra gondoltam (lásd feljebb) de arra már gondoltam. És szerintem azzal nem nagyon megoldható. És én ezt a \"véletlenszerû számnál lévõ dolog végrehajtása\" elvemet szeretném mindenképpen alkalmazni, lehetõleg egy egyszerû kis if-el. Amely egyszerû megoldás lenne, és meg is oldható. Fõleg parancson belül, az fél perc alatt megvan. Csak ugye ezt mindenhol szeretném használni a módon belül, és nem szeretném mindenhol egyesével átírni a dolgokat (pl. valamit még hozzá kell adnom a 4-es számnál lévõ dolgokhoz, és akkor egy néhány száz helyen hozzá kéne adnom a szükséges dolgokat).

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #5 Dátum: 2013. október 05. - 20:09:05 »
+1 Show voters
valami ilyesmire gondoltál?
 
public GlobalisFunkcio(playerid,functionid)
{
switch(functionid)
{
    case 0:
    {
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SetPlayerSkin(playerid,0);
    }
    case 1:
    {
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SetPlayerSkin(playerid,0);
    }
    case 2:
    {
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SetPlayerColor(playerid,COLOR);
    }
    case 3:
    {
        SendClientMessage(playerid,COLOR,\"Valami Üzenet\");
        SetPlayerColor(playerid,COLOR);
        SetPlayerSkin(playerid,3);
    }
    // ...
}
return 1;
}

 

GlobalisFunkcio(playerid,random(4));
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Globális blokk létrehozása
« Válasz #6 Dátum: 2013. október 05. - 20:11:16 »
0 Show voters
Igen. Próbálkoztam publical is, de ahhoz meg pláne nem értek. Függvényt még tudok létrehozni, de blokkot már nem. És mi alkotna blokkot? Egy public Valami. Csak nem tudom, hogyan kell létrehozni, és használni.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #7 Dátum: 2013. október 05. - 20:14:52 »
+1 Show voters
ez a példa egy függvény
ott a példa az alapján megtudod csinálni
csak erre még szükséged lesz a mód / script elején:
 
forward GlobalisFunkcio(playerid,functionid);

 
am az aláírásomban vannak wikis linkek amik elmagyarázzák az alapokat...ajánlom figyelmedbe ha elég hozzá az angol tudásod
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Globális blokk létrehozása
« Válasz #8 Dátum: 2013. október 05. - 20:20:40 »
0 Show voters
És csak most döbbenek rá. Már rengetegszer gyártottam ilyet: a timereknél. Angol tudásom pedig van bõven, amúgy rendszeresen a wikit böngészem. Onnan tanultam meg az egészet. Már amennyit tudok. És ezek szerint blokkot is csináltam már, a timereknél, amelyekre az imént döbbentem rá :D Amit írtál, az egyszerû, és logikus, valamint az alapján el is tudok indulni, ráadásul olyan, amilyet én is szerettem volna létrehozni. A témát még NEM zárom le, mert még ezzel kapcsolatban szükségem lehet a segítségetekre, valamint aki még szeretne bármiféle megoldást adni a dologra, azt szeretettel várom - a segítségével együtt.

Globális blokk létrehozása
« Válasz #9 Dátum: 2013. október 05. - 20:38:42 »
+1 Show voters
Nincs kedvem végig olvasni az egészet, de a fenti példát ki lehet egészíteni több adattal is.
És nem feltétlen szükség public funkció, hacsak nem SetTimer-rel akarod meghívni.
Mivel nem tudom mit szeretnél létrehozni ezért írtam egy újabb változatot hátha valami ilyesmire gondoltál:
 
#include <a_samp>
enum
blabla
{
str1[128],
str2[128],
str3[128],
str4[128],
cp,
Float:akarmi
};
 
new
sokvalami [] [blabla] =
{
{ \"elsõ szöveg\", \"második szöveg\", \"harmadik\", \"negyedik\", 12, 0.3456 },
{ \"dselsõ szöveg\", \"msdsásodik szöveg\", \"hsdarmadik\", \"negyedik dsdas\", 342, 23.3456 },
{ \"dselsdsõ sdsadzöveg\", \"msdsásodik szösdsaveg\", \"hsdarmdsadadik\", \"negysdsdedik dsdas\", 342, 623.3456 }
};
new
data = 3;   // Sajnos enum típusú adat tömbnél pawn-ban nem mûködik megfelelõen a sizeof így meg kell adni egy változóba az adatsorok számát.
 
stock // Ha nem SetTimerrel hívod meg akkor jó a stock is.
teszt(dat)
{
printf(\"%s\", sokvalami[dat][str1]);
printf(\"%s\", sokvalami[dat][str2]);
printf(\"%s\", sokvalami[dat][str3]);
printf(\"%s\", sokvalami[dat][str4]);
printf(\"%d\", sokvalami[dat][cp]);
printf(\"%f\", sokvalami[dat][akarmi]);
}
public OnFilterScriptInit()
{
for(new i; i < 10; i++) // Teszt for ciklus.
{
teszt(random(data));
}
return 1;
}

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Globális blokk létrehozása
« Válasz #10 Dátum: 2013. október 05. - 20:47:32 »
0 Show voters
Zsolesszka, a Te megoldásod sem rossz, csakhogy feleslegesen túlbonyolított. Inkább néhány koordinátára, vagy pár adatra jó a te megoldásod, nem pedig arra, amit én szeretnék. És nem Timerrel akarom meghívni a dolgokat, de attól még a public-os, és case-es megoldás tökéletesen bevált. Köszönöm szépen a te segítségedet is zsolesszka, habár most nem használom fel :)

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #11 Dátum: 2013. október 05. - 20:50:55 »
0 Show voters
sokvalami [3] [blabla]

 
így már visszaadja a sizeof a 3 értéket :)
 
És nem feltétlen szükség public funkció, hacsak nem SetTimer-rel akarod meghívni.[/quote]
igaz :) én mondjuk csak publicot használok mivel én küldõ scriptekben is meghívom a függvényeimet :)
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Globális blokk létrehozása
« Válasz #12 Dátum: 2013. október 05. - 20:58:07 »
0 Show voters
Épp ez az hogy nem tudni hogy te mit szeretnél létrehozni és emiatt nem lehet írni megfelelõt, egyébként ennél egyszerûbben nem tudod megírni mint ahogy leírtam.
A for ciklus az egészben csak teszt jelleggel szerepel.
A lényege a következõ:
Van egy adattömb melyet kedvedre lehet bõvíteni adattal.
Van egy eljárás mely végre hajtja ez esetben kiírja az adattömb adatait külön sorban.
És persze egyetlen egy sorral a for ciklusban meghívásra kerül az egész.
adat tömb: sokvalami[][blabla]
eljárás : stock teszt(adatsorszam)
és a használat:  teszt(2); 
Ennél egyszerûbben nem lehet létrehozni. :D
@Kovacs_Richard
Jó tudni, csak én lusta vagyok megadni mert nincs kedvem számolgatni az adatsorokat ezért a fordítóra bízom a meghatározását. :D

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Globális blokk létrehozása
« Válasz #13 Dátum: 2013. október 05. - 21:02:50 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1380999487\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43394\" data-ipsquote-contentclass=\"forums_Topic
Jó tudni, csak én lusta vagyok megadni mert nincs kedvem számolgatni az adatsorokat ezért a fordítóra bízom a meghatározását. :D
 

new data = 3;

 
hogy is van ez? :D :P
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Globális blokk létrehozása
« Válasz #14 Dátum: 2013. október 05. - 21:10:59 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1380999770\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"43394\" data-ipsquote-contentclass=\"forums_Topic


Jó tudni, csak én lusta vagyok megadni mert nincs kedvem számolgatni az adatsorokat ezért a fordítóra bízom a meghatározását. :D
 

new data = 3;

 
hogy is van ez? :D :P
 
[/quote]
Ja köss bele persze, én a több száz soros adatsorokra gondoltam nem egy pár soros példára. :D
@Dfoglalo
Átírtam a példát kicsit érthetõbbre számodra hátha látod benne azt amit szeretnél:
 
#include <a_samp>
enum
blabla
{
str1[128],
str2[128],
str3[128],
str4[128],
money,
Float:health
};
new
sokvalami[3][blabla] =
{
{ \"elsõ szöveg\", \"második szöveg\", \"harmadik\", \"negyedik\", 12, 0.3456 },
{ \"dselsõ szöveg\", \"msdsásodik szöveg\", \"hsdarmadik\", \"negyedik dsdas\", 342, 23.3456 },
{ \"dselsdsõ sdsadzöveg\", \"msdsásodik szösdsaveg\", \"hsdarmdsadadik\", \"negysdsdedik dsdas\", 342, 623.3456 }
};
new
adatsorokszama = sizeof(sokvalami);
stock // Ha nem SetTimerrel hívod meg akkor jó a stock is.
teszt(playerid, adatsorszam)
{
SendClientMessage(playerid, -1, sokvalami[adatsorszam][str1]);
SendClientMessage(playerid, -1, sokvalami[adatsorszam][str2]);
SendClientMessage(playerid, -1, sokvalami[adatsorszam][str3]);
SendClientMessage(playerid, -1, sokvalami[adatsorszam][str4]);
GivePlayerMoney(playerid, sokvalami[adatsorszam][money]);
SetPlayerHealth(playerid, sokvalami[adatsorszam][health]);
}
public OnPlayerSpawn(playerid)
{
teszt(playerid, random(adatsorokszama)); // Egyetlen egy sorral meghívhatod bárhol, az adatokat meg kedvedre bõvítheted az adattömbben és nem kell átírni sehol semmilyen más adatot.
return 1;
}

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal