Szerző Téma: [TUT]Csapatba lépés változókkal, csapattagszámlálás  (Megtekintve 2842 alkalommal)

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Dátum: 2012. július 16. - 14:11:26 »
0 Show voters
Sziasztok! Még nem láttam ehhez hasonló témát, szóval gondoltam, hogy nyitok egyet. Elnézést, ha már van! Ez kezdõknek szerintem jól jöhet.
Szóval. Az a_samp és a zcmd (nem muszáj) függvénykönyvtárakra lesz szükségünk
 
#include <a_samp>
#include <zcmd>
#define DIALOG_MELYIK 1
new csapat1[MAX_PLAYERS];
new csapat2[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, \"Melyik csapatban akarsz lenni?\", \"Csapat1\\nCsapat2\", \"Választ\", \"Kilép\");
return 1;
}
public OnFilterScriptInit()
{
return 1;
}
new count = 0;
new countt = 0;
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid = 1)
    {
if(!response)
{
Kick(playerid);
}
if(listitem == 0)
{
    csapat1[playerid] = 1;
count++;
}
if(listitem == 1)
{
csapat2[playerid] = 1;
countt++;
}
        }
return 1;
}

 
Nézzük a magyarázatot:
 
#include <a_samp>
#include <zcmd>

 
Ezeket be kell írnunk a gamemod/filterscript elejére, ha használni akarjuk, a benne létrehozott függvényeket, callback-eket.
 
#define DIALOG_MELYIK 1

 
definiáljuk azt a dialogot, ami a belépéskor megkérdezi a játékostól, hogy melyik csapatban szeretne lenni. Én a DIALOG_MELYIK nevet adtam neki, és az egyes azonosítót. Átírhatjátok, csak az a lényeg, hogy a DIALOGOK AZONOSÍTÓJA NE EGYEZZEN SOSEM!
 
new csapat1[MAX_PLAYERS];
new csapat2[MAX_PLAYERS];

 
Itt hozzuk létre a változókat. Ezeket nagyon egyszerû használni. A nevében is benne van mit lehet vele csinálni. Az értékét lehet változtatni, mivel az értéke változó. (true == 1, false == 0) Itt létrehoztam a csapat1 és a csapat2 nevû változót, ami az összes online játékosra vonatkozik! Erre késõbb visszatérünk
 
public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, \"Melyik csapatban akarsz lenni?\", \"Csapat1\\nCsapat2\", \"Választ\", \"Kilép\");
return 1;
}

 
Ha a játékos belép a szerverre, akkor megjeleníti neki az egyes azonosítójú dialogot, aminek a címe: Melyik csapatban akarsz lenni? és a két választható lehetõség: Csapat1, Csapat2, A két gomb pedig: Választ, és Kilép
 
new count = 0;
new countt = 0;

 
Ez létrehozza a számlálókat. A count nevû számláló az egyes csapatban lévõ tagokat számolja, a countt nevû számláló pedig a 2.-es csapatban lévõket. De ugye itt még semmit sem számlál, mivel itt csak a nullás értéket adtunk neki :)
 
 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(!response)
        {
                Kick(playerid);
        }

 
Ha a játékos bezárja a dialogot, a mi esetünkben a \"Kilép\" gombra nyom, akkor kickeli a rendszer.
 
if(listitem == 0)
        {
            csapat1[playerid] = 1;
                count++;
               
        }
        if(listitem == 1)
        {
                csapat2[playerid] = 1;
                countt++;
        }
        return 1;
}

 
Nézzük szétbontva
 
if(listitem == 0)
        {
            csapat1[playerid] = 1;
                count++;
               
        }

 
Ha azt választja, a dialogban, hogy csapat1, akkor a változó értéke egy, vagyis true lesz. És a count nevû számlálóhoz hozzáadódik egy!
 
if(listitem == 1)
        {
                csapat2[playerid] = 1;
                countt++;
        }

 
Ha azt választja a dialogban, hogy csapat2, akkor a változó értéke 1, vagyis true lesz. És a countt nevû számlálóhoz hozzáadódik egy!
Körülbelül ennyi lenne, remélem érthetõ voltam. Ha hibát észleltek akkor jelezzétek!
Ha szeretnétek, hogy hozzáírjam, a csapatból kilépést, stb. parancsokat meg mindent akkor jelezzétek. Most csak ennyihez volt kedvem! Sziasztok!
« Utoljára szerkesztve: 2012. július 16. - 16:45:38 írta zeteni »

Nem elérhető instant

  • 2778
  • ZzzzzZ
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #1 Dátum: 2012. július 16. - 14:31:00 »
0 Show voters
Szép leírás de 1 valamit nem látok a dialogresponse alatt még hozzá ezt :
 

if(dialogid == 1)
{
//stb...

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #2 Dátum: 2012. július 16. - 16:44:25 »
0 Show voters
Köszi, hogy szóltál! Kijavítom.

[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #3 Dátum: 2012. július 17. - 11:08:48 »
0 Show voters
Jó lett bár vannak benne pontatlanságok.
PL a te csapat változóidnak nem csak true ès false értéke van, hanem több millió szám is lehet.
És felesleges oda 2 változó, amikor elég lenne oda 1 is 3 definiált értékkel. (NOT_TEAM,TEAM1,TEAM2)
Kilépéskor meg nem vonja le a csapatszámlálóból a pontokat.

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #4 Dátum: 2012. július 17. - 11:10:50 »
0 Show voters
Köszi a tanácsot.
 
Ha szeretnétek, hogy hozzáírjam, a csapatból kilépést, stb. parancsokat meg mindent akkor jelezzétek. Most csak ennyihez volt kedvem! Sziasztok![/quote]
Ezt arra értettem! :D

Nem elérhető Norby

  • 1575
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #5 Dátum: 2012. július 17. - 16:48:39 »
0 Show voters
Jó lett, bár a count változót csinálhattad volna így is.
 
new count[2];
count[0]++;
count[1]++;

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #6 Dátum: 2012. július 17. - 21:23:34 »
0 Show voters
igazad van, de nekem régen ha használtam, még mikor kezdõ voltam, mindig hibát írt, és nem tudta mire, és mivel azt hittem hogy arra, ezért azóta nem nagyon használom, azért kösz a tanácsot, hasznos lehet, ha lusta vagy kettõ new-t írni :D

Nem elérhető Gabor..

  • 1883
  • Gabor..
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #7 Dátum: 2012. július 17. - 21:27:45 »
0 Show voters
Idézetet írta: zeteni date=1342553014\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24481\" data-ipsquote-contentclass=\"forums_Topic
igazad van, de nekem régen ha használtam, még mikor kezdõ voltam, mindig hibát írt, és nem tudta mire, és mivel azt hittem hogy arra, ezért azóta nem nagyon használom, azért kösz a tanácsot, hasznos lehet, ha lusta vagy kettõ new-t írni :D
 
Nem csak lustaság ellen van. :D A Te általad írt több memóriát használ, mivel két tárolót nyit 1 cellával, a tömb változó meg egyet nyit, 2 cellával( Jelen esetben ), bit-re pontosan nem tudom melyik eszik többet.
Am jó lett.
« Utoljára szerkesztve: 2012. július 17. - 21:29:17 írta Gabor.. »

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #8 Dátum: 2012. július 17. - 21:29:44 »
0 Show voters
Köszi, tanácsok megfogadva! :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #9 Dátum: 2012. július 17. - 21:44:56 »
0 Show voters
1cella = 4bájt(32bit).
Tehét, new asd, dsa az 8 bájt, de a new asd[2] is ugyanúgy 8 bájt, úgyhogy tökmindegy..

Nem elérhető Gabor..

  • 1883
  • Gabor..
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #10 Dátum: 2012. július 17. - 22:01:57 »
0 Show voters
Idézetet írta: kurta999 date=1342554296\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24481\" data-ipsquote-contentclass=\"forums_Topic
1cella = 4bájt(32bit).
Tehét, new asd, dsa az 8 bájt, de a new asd[2] is ugyanúgy 8 bájt, úgyhogy tökmindegy..
 
Akkor bocsi, pedig azt hittem jót mondok. :D Bár így mostmár végig gondolva, tényleg ugyan az, így, hogy mostmár ismerem 1 cella méretét bájtban, bitben. :D
« Utoljára szerkesztve: 2012. július 17. - 22:04:47 írta Gabor.. »

Kovacs_Bela

  • Vendég
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #11 Dátum: 2012. augusztus 15. - 15:39:50 »
0 Show voters
minek definiálod a dialog ID-t ha sehol sem a definálást használod? :D
ezt félretéve amúgy szép. grat :)

[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #12 Dátum: 2012. szeptember 11. - 20:15:58 »
0 Show voters
Szia!
Engem nagyon érdekelne hogy mondjuk nem a játékos dönti el hanem mondjuk a gép, hogy kiegyenlítse a csapatokat.
Esetleg beletudnád írni ezt a verziót is, mert ha az összes játékos egy team deathmatch-be ugyan azt a csapatot válassza az nem tuti :D

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #13 Dátum: 2012. szeptember 12. - 22:47:18 »
0 Show voters
Hmmm.... Már visszavonultam scriptelés terén de ez felkeltette a figyelmem. Majd lehet megpróbálom megvalósítani.

Kovacs_Bela

  • Vendég
[TUT]Csapatba lépés változókkal, csapattagszámlálás
« Válasz #14 Dátum: 2012. szeptember 12. - 23:15:02 »
0 Show voters
tesztként
 

new bool:dmben[MAX_PLAYERS];
CMD:dm(playerid)
{
    if(dmben[playerid] == true) return SendClientMessage(playerid,-1,\"Elõször lépj ki! /exitdm\");
    if(count < countt) //ha a csapat1be kevesebben vannak mint a csapat2-be
    {
        csapat1[playerid] = 1;
        count++;
        SendClientMessage(playerid,-1,\"Te automatikusan átkerültél az 1-es csapatba!\");
    }
    else if(countt < count) {
        csapat2[playerid] = 1;
        countt++;
        SendClientMessage(playerid,-1,\"Te automatikusan átkerültél az 2-es csapatba!\");
    }
    else if(count == countt) {
        new randnum = random(1);
        if(randnum == 0)
        {
            csapat1[playerid] = 1;
            count++;
            SendClientMessage(playerid,-1,\"Te véletlenszerûen átkerültél az 1-es csapatba!\");
        }
        else if(randnum == 1)
        {
            csapat2[playerid] = 1;
            countt++;
            SendClientMessage(playerid,-1,\"Te véletlenszerûen átkerültél az 2-es csapatba!\");
        }
    }
    dmben[playerid] = true;
    return 1;
}
CMD:exitdm(playerid)
{
    if(dmben[playerid] == false) return SendClientMessage(playerid,-1, \"DM-ben kell lenned, hogy ki tudj lépni!\");
    if(csapat1[playerid] == 1) {
        csapat1[playerid] = 0;
    }
    else if(csapat2[playerid] == 0) {
        csapat2[playerid] = 0;
    }
    dmben[playerid] = false;
return 1;
}

 
 :laugh:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal