Szerző Téma: OndialogRespone Kérdés  (Megtekintve 1042 alkalommal)

OndialogRespone Kérdés
« Dátum: 2018. Február 16. - 13:15:09 »
0
Hali készitettem egy táska rendszert csak ugye van hogy ki listáza hogy pl Jogsi, Szendvics
 
Nah a lényeg ha rá kattol akkor használ,eldob,átad és ezt dialogba hogy birnám megoldani hogy pl ha jogsit választom akkor átadja a másiknak vagy eldobja val
 

   if(dialogid == 0531)
{
    if(!response) return 1;
        if(listitem == 0) // MG
        {
            ShowPlayerDialog(playerid, 0532, DIALOG_STYLE_LIST, \"Táskád Tartalma\", \"Használ\\nÁtad\\nEldob\\n\", \"Kiválaszt\", \"Mégsem\");
   }
}
if(dialogid == 0532)
{
    if(!response) return 1;
        if(listitem == 0) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha használja a tárgyat\");
   }
    if(listitem == 1) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha átadja\");
   }
    if(listitem == 2) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha átadja\");
   }
}

 
 
« Utoljára szerkesztve: 2018. Február 26. - 16:20:30 írta xXCsucsuXx »

OndialogRespone Kérdés
« Válasz #1 Dátum: 2018. Február 24. - 13:37:01 »
+1
Amikor rákattintasz, 0531-es dialogban valamelyik listitemre, akkor azt elmented egy változóba. A listitem értékét az inputtext adja vissza LIST_DIALOG esetén is. Tehát:
 

// Kód elején
new Player_CurrentItem[MAX_PLAYERS][32];
// Ha dialognál - 0531
if(!response) return 1;
else
{
     format(Player_CurrentItem[playerid],32,\"%s\",inputtext); // Így elmented a változóba a rákkattintott érték nevét.
    ShowPlayerDialog(...........,\"Használat/nÁtadás/nEldobás\");
}
// Másik dialog a kezelései - 0532
if(listitem == 0) // Használat
{
if(!strcmp(Player_CurrentItem[playerid],\"Kenyér\"))
        SetPlayerHealth(playerid,50);
        pInfo[playerid][Kenyer]--;
}

 
Nagyjából így néz ki a dolog. Lényeg, hogy azt az elemet elmented egy változóba, majd használatnál feltételsz szabsz ki rá, hogy ha egyenlő kenyér akkor ez történik stb.
 
 
 
Viszont, Tárgy névre hivatkozni nem a legoptimálisabb döntés, hiszen ha például megváltoztatod a nevét, akkor mindenhol megkell változtatnod a módban.
 
Ezért ID-re hivatkozni jobb, lehet mivel az állandó lesz, míg a név változhat.
 
 
 
Illetve, ez elég statikus inventory rendszernek tűnik, tehát kötött, majd ha jobban belejössz, akkor ajánlatos inkább dinamikusabb inventory rendszert készíteni.
 
Viszont ebben az állapotában is, hogy dialogos már jobb mint ami a szerverek 95%-án van :D
 
Csak így tovább, ha segítség kell irj nyugodtan!

OndialogRespone Kérdés
« Válasz #2 Dátum: 2018. Február 25. - 15:38:43 »
0
Köszönöm szépen sikerült megoldanom! De lassan áttérek az sqlre gyorsabb a feldolgozás! :)

OndialogRespone Kérdés
« Válasz #3 Dátum: 2018. Február 25. - 16:21:27 »
0
Nah szóval ki probáltam élesbe és annyi gondom lenne hogy pl a szendvics 0 értékre jön ki és ha pl a jogsi jön ki 0 értékre listenbe akkor mivan? esetleg egy ciklusal meglehet oldani röviden?
 
    
 

   if(listitem == 0 && pInfo[playerid][pKaja] >= 1) // Használat
        {
        if(!strcmp(Player_CurrentItem[playerid],\"Szendvics\"))
        SetPlayerHealth(playerid,50);
          pInfo[playerid][pKaja]--;
        }
        if(listitem == 0 && pInfo[playerid][pKaja] >= 0) // Használat
        {
        if(!strcmp(Player_CurrentItem[playerid],\"Jogsi\"))
        SetPlayerHealth(playerid,0);
          pInfo[playerid][pJogsi]--;
        }
    }

 
 

OndialogRespone Kérdés
« Válasz #4 Dátum: 2018. Február 25. - 16:46:27 »
+1
Nem igazán értem a problémádat.
 
Miután rákattint egy itemre, pl. Jogsi, azt elmented a változóba amit fentebb írtam. Ekkore megjön neki egy dialog, amiben \"Használat\\Átadás\\Eldobás\" van, nem?
 
Amit küldtél kódot, ott a list itemet fölösleges 2x vagy többször is kiírni.
 

if(listitem == 0)
{
if(!strcmp(Player_CurrentItem[playerid],\"Kenyér\"))
   SetPlayerHealth(playerid,50);
   pInfo[playerid][Kenyer]--;

if(!strcmp(Player_CurrentItem[playerid],\"Kötszer\"))
   SetPlayerHealth(playerid,20);
   pInfo[playerid][Kotszer]--;

if(!strcmp(Player_CurrentItem[playerid],\"Jogsi\"))
   SendClientMessage(\"Jogosítvány: Érvényes\");
}

 
Csak logikusan kell belegondolni. Mindegy, melyik tárgyra kattint rá, mivel ha rákattint akkor a változót egyből felül fogja írni neked. Utána pedig 3 választási lehetőséged van vagy amennyit megadsz, hogy használod-e/átadod stb. Hogyha, használni akarod. Ami mindenféleképpen 0 lesz mivel ha elsőnek írod akkor 0. Akkor meghívódik az a kód amit itt leírtam.
 
Ha MySQL-be írod ott is ugyan ez lesz, csak a mentés/betöltés lesz dinamikusabb.
 
Nem tudom a szendviccsel mi a problémád, eléggé furcsán fogalmaztad meg. Szóval várom a választ :D

OndialogRespone Kérdés
« Válasz #5 Dátum: 2018. Február 25. - 18:35:19 »
0
semmi kicsit felre ertelmeztem :D de mostmar tiszta :D koszi

OndialogRespone Kérdés
« Válasz #6 Dátum: 2018. Február 26. - 16:27:26 »
0
Idézetet írta: xXCsucsuXx date=1518783309


   
      Hali készitettem egy táska rendszert csak ugye van hogy ki listáza hogy pl Jogsi, Szendvics
   
   
      Nah a lényeg ha rá kattol akkor használ,eldob,átad és ezt dialogba hogy birnám megoldani hogy pl ha jogsit választom akkor átadja a másiknak vagy eldobja valaki tud segiteni?
   
   

CMD:taska(playerid,params[])
{
          new szendvics = pInfo[playerid][pKaja], pia = pInfo[playerid][pPia], fu = pInfo[playerid][pFCigi], koko = pInfo[playerid][pCocain], jogsi = pInfo[playerid][pJogsi], cigi = pInfo[playerid][pCigi], deagle = pInfo[playerid][pDeagle], colt = pInfo[playerid][pColt],
          shotgun = pInfo[playerid][pShotgun], baseball = pInfo[playerid][pBasseball], mati = pInfo[playerid][pMati], mobile = pInfo[playerid][pMobile];
        new str[1024];
        str[0] = EOS;
        format(str, sizeof(str), \"{2ccdfd}Mennyiség\\t\\tTárgy\\n{FFFFFF}\");
        if(szendvics != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tSzendvics\\n\", str, szendvics);
        if(pia != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tInnivaló\\n\", str, pia);
        if(fu != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tFüves Cigi\\n\", str, fu);
        if(koko != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tCocain\\n\", str, koko);
        if(jogsi != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tSzemélyi Jogosítvány\\n\", str, jogsi);
        if(cigi != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tCigaretta\\n\", str, cigi);
        if(deagle != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tDesert Deagle\\n\", str, deagle);
        if(colt != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tColt\\n\", str, colt);
        if(shotgun != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tSörétes Shotgun\\n\", str, shotgun);
        if(baseball != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tBaseball ütő\\n\", str, baseball);
        if(mati != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tVas\\n\", str, mati);
        if(mobile != 0) format(str, sizeof(str), \"%s%d\\t\\t\\tTelefon\\n\", str, mobile);
        cmd_me(playerid, \" Megnézi a táskája tartalmát.\");
        ShowPlayerDialog(playerid, 0531,DIALOG_STYLE_LIST,\"Táskád Tartalma\",str,\"Kiválaszt\",\"Kilépés\");
        return 1 ;
}

   

   if(dialogid == 0531)
{
    if(!response) return 1;
        if(listitem == 0) // MG
        {
            ShowPlayerDialog(playerid, 0532, DIALOG_STYLE_LIST, \"Táskád Tartalma\", \"Használ\\nÁtad\\nEldob\\n\", \"Kiválaszt\", \"Mégsem\");
   }
}
if(dialogid == 0532)
{
    if(!response) return 1;
        if(listitem == 0) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha használja a tárgyat\");
   }
    if(listitem == 1) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha átadja\");
   }
    if(listitem == 2) // MG
        {
            SendClientMessage(playerid,FEHER,\"Ez van ha átadja\");
   }
}

   
       
   

Idézetet írta: Naretev date=1519573587


   
      Nem igazán értem a problémádat.
   
   
      Miután rákattint egy itemre, pl. Jogsi, azt elmented a változóba amit fentebb írtam. Ekkore megjön neki egy dialog, amiben \"Használat\\Átadás\\Eldobás\" van, nem?
   
   
      Amit küldtél kódot, ott a list itemet fölösleges 2x vagy többször is kiírni.
   
   

if(listitem == 0)
{
if(!strcmp(Player_CurrentItem[playerid],\"Kenyér\"))
   SetPlayerHealth(playerid,50);
   pInfo[playerid][Kenyer]--;

if(!strcmp(Player_CurrentItem[playerid],\"Kötszer\"))
   SetPlayerHealth(playerid,20);
   pInfo[playerid][Kotszer]--;

if(!strcmp(Player_CurrentItem[playerid],\"Jogsi\"))
   SendClientMessage(\"Jogosítvány: Érvényes\");
}

   
      Csak logikusan kell belegondolni. Mindegy, melyik tárgyra kattint rá, mivel ha rákattint akkor a változót egyből felül fogja írni neked. Utána pedig 3 választási lehetőséged van vagy amennyit megadsz, hogy használod-e/átadod stb. Hogyha, használni akarod. Ami mindenféleképpen 0 lesz mivel ha elsőnek írod akkor 0. Akkor meghívódik az a kód amit itt leírtam.
   
   
      Ha MySQL-be írod ott is ugyan ez lesz, csak a mentés/betöltés lesz dinamikusabb.
   
   
      Nem tudom a szendviccsel mi a problémád, eléggé furcsán fogalmaztad meg. Szóval várom a választ :D
   


esetleg rövidebben hogy van e nála cucc hogy birnám megoldani?
 
    if (pInfo[playerid][pKaja] >= 1) // Használat
        if(!strcmp(Player_CurrentItem[playerid],\"Szendvics\"))

OndialogRespone Kérdés
« Válasz #7 Dátum: 2018. Február 26. - 17:39:56 »
0

if(!strcmp(Player_CurrentItem[playerid],\"Szendvics\") && pInfo[playerid][pKaja] >= 1)

 
Egy sorba írod a kettőt? Azt hiszem, erre gondoltál :D
 
Ha nem akkor, viszont nem lehet megoldani, ez a legrövidebb mód, hogy legalább ez a 2 feltétel teljesüljön, hogy van-e nála kaja, illetve, hogy annak a neve pl. Szendvics.

OndialogRespone Kérdés
« Válasz #8 Dátum: 2018. Február 27. - 16:00:04 »
0
NAh szóval van egy kis baki :D Egyszere lefut mind a 2 amelyik re rá kattolok ez miért van 
 
a szendvicset is megeszi meg az inivalót is :D egyszerre 
 

    if(dialogid == 0532)
    {
         if(!response) return 1;
        if(listitem == 0)
        {
          if(!strcmp(Player_CurrentItem[playerid],\"Szendvics\") && pInfo[playerid][pKaja] >= 1)
        SetPlayerHealth(playerid,50);
        pInfo[playerid][pKaja]--;
        cmd_me(playerid, \" evett egy szendvicset.\" );
        }
        if(!strcmp(Player_CurrentItem[playerid],\"Innivaló\") && pInfo[playerid][pPia] >= 1)
        SetPlayerHealth(playerid,20);
        pInfo[playerid][pPia]--;
        cmd_me(playerid, \" megivott valamit.\" );
}
    if(Beloggolt[playerid] == 1) Ment(playerid);
    return 0;
}

 
 

OndialogRespone Kérdés
« Válasz #9 Dátum: 2018. Február 27. - 20:11:43 »
0
If-nél ha nem egy utasítás van hanem több, akkor kapcsos zárójel kell. Tehát az if(!strcmp- után kapcsos zárójelbe legyen a többi. Én csak azért írtam úgy, mert nem akartam vele bajlódni.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal