Szerző Téma: Ciklusok, illetve dialog.  (Megtekintve 1210 alkalommal)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Ciklusok, illetve dialog.
« Dátum: 2012. szeptember 10. - 18:53:23 »
0 Show voters
Sziasztok! Sajnos nem értek a ciklusokhoz :wall:, ezért kérném a segítségeteket. A módomban készítek egy olyan parancsot, hogy /leader. Ez elõhoz egy dialogot. Tagfelvétel, Elõléptetés, Kirúgás. Ezek a pontok kellenek. A tagfelvétel már meg van. Viszont az elõléptetést úgy szeretném, hogyha rákattint a leader, akkor a frakcióban lévõ játékosokról hozzon elõ egy dialogot. Ezután jön egy input dialog, aminél be kell írja a játékos rangját. A kirúgást ebbõl kifolyólag megtudnám oldani.
Változók:
playerInfo[playerid][LeaderWork] (az 1-essel csináld, az a mentõ, a többit megoldom magamtól)
playerInfo[playerid][LeaderRang]
Aki tud segíteni, annak elõreis köszi!
« Utoljára szerkesztve: 2012. szeptember 10. - 19:18:08 írta doboka98 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Ciklusok, illetve dialog.
« Válasz #1 Dátum: 2012. szeptember 10. - 20:28:28 »
0 Show voters
a játékos rang az string ( szöveg ) vagy integer ( egész szám ) akar lenni?
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Ciklusok, illetve dialog.
« Válasz #2 Dátum: 2012. szeptember 10. - 20:29:34 »
0 Show voters
integer. tudom mi az :D

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Ciklusok, illetve dialog.
« Válasz #3 Dátum: 2012. szeptember 10. - 20:37:46 »
0 Show voters
akkor nem lenne megfelelõbb oda is lista? és a rang neveket tárolod már tömbben vagy mindig amikor szüksége van rájuk \'leírod\' ?
tehát mondjuk:
 
new Ranks[MAX_FACTIONS][MAX_RANKS] =
{
    {\"Gyakornok\",\"Orvos\",\"Sebész\"....},
    {\"Kadét\",\"Õrmester\"....}
}

 
vagy:
 
if(playerInfo[playerid][LeaderWork] == 1)
{
    if(playerInfo[playerid][LeaderRang] == 1) { rank = \"Gyakornok\"; }
    else if(playerInfo[playerid][LeaderRang] == 2) { rank = \"Orvos\"; }
}
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Ciklusok, illetve dialog.
« Válasz #4 Dátum: 2012. szeptember 10. - 20:40:33 »
0 Show voters
Nem egészen erre gondoltam. Nekem csak az kéne, hogy elõhoz egy list dialogot a frakciótagokról, és ha rákattintok valamelyikre, akkor utána kérje a rang számát, ami meghatározza értelemszerûen a rangját.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Ciklusok, illetve dialog.
« Válasz #5 Dátum: 2012. szeptember 10. - 20:50:25 »
0 Show voters
csak ugye elõre meghatározott rangok vannak, ezért érné meg listából kiválasztani és nem beírni a számát...
mondjuk így nézne ki egy dialog:
1 Rang1
2 Rang2
3 Rang3
4 Rang4
5 Rang5
...
és mondjuk jelölni is lehetne valamilyen szinnel hogy a játékos milyen rangban van, szerintem akkor lenne értelme a szöveg beíráshoz ha ténylegesen a rang szövegét tudná a leader megválasztani vele, de ha neked úgy kell akkor megcsinálhatom olyanra :) csak szerintem a lista jobb megoldás lenne mivel a rangokat nem tudja megváltoztatni
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Ciklusok, illetve dialog.
« Válasz #6 Dátum: 2012. szeptember 10. - 20:52:33 »
0 Show voters
Igazad van, megtudnád így csinálni? A rangokat írd be így, én majd átírom.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Ciklusok, illetve dialog.
« Válasz #7 Dátum: 2012. szeptember 10. - 23:18:30 »
0 Show voters
ezt a kódot próbáld meg, nem teszteltem ezért várom a visszajelzéseket :)
am lehet megérné TAB-nál a kattintós megoldás
csak sajnos lehet probléma hogy kiválasztja a játékos aztán lelép és a helyére más jön fel...mind2 kódnál de az is orvosolható...
 
#define MAX_RANKS      (7)
#define MAX_FACTIONS   (5)
#define DIALOG_LEADER   (1357)
#define DIALOG_PLAYER   (1358)
#define DIALOG_RANK      (1359)
#define PD_OUT_OF_FACTIONS  (0)
#define PD_IN_THE_FACTION   (1)
#define COLOR_RED   0xFFAAAAFF
new Ranks[MAX_FACTIONS][MAX_RANKS][16] = // Rangok
{
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"}, // Mentõk
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"}
};
new DFunc[MAX_PLAYERS] = -1; // Dialog Funckció
new DID[MAX_PLAYERS][50]; // 50 list item azonosító
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_LEADER:
{
    if(!response) { return 1; }
    DFunc[playerid] = listitem;
    if(listitem == 0)
    { PlayerDialog(playerid,PD_OUT_OF_FACTIONS); }
    else if(dialogid == 1 || dialogid == 2)
    { PlayerDialog(playerid,PD_IN_THE_FACTION); }
    return 1;
}
case DIALOG_PLAYER:
{
    if(!response) { return 1; }
    if(DFunc[playerid] == 0) // inv
    {
      // inv funkció //
      // pl: PlayerInvPlayer(playerid,DID[listitem]);
      }
    else if(DFunc[playerid] == 1) // rang
    {
        ShowPlayerRanks(DID[playerid][listitem],playerid); // ki rangját, kinek
    }
    else if(DFunc[playerid] == 2) // kick
    {
      // kick funkció //
      // pl: PlayerKickPlayer(playerid,DID[playerid][listitem]);
    }
    DFunc[playerid] = -1;
    return 1;
}
case DIALOG_RANK:
{
    playerInfo[DFunc[playerid]][LeaderRang] = listitem;
    // szövegek
    DFunc[playerid] = -1;
    return 1;
}
}
return 0;
}
public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,\"/leader\",true))
{
    if(playerInfo[playerid][LeaderRang] < 7) { SendClientMessage(playerid,COLOR_RED,\"Nem vagy leader !\"); return 1; }
ShowPlayerDialog(playerid,DIALOG_LEADER,DIALOG_STYLE_LIST,\"Leader funkciók:\",\"Tagfelvétel\\nElõléptetés\\nKirúgás\",\"Ok\",\"Mégse\");
}
return 0;
}
forward PlayerDialog(playerid,type);
public PlayerDialog(playerid,type)
{
    new s,str[512],name[MAX_PLAYER_NAME]; // str cella száma max Slot*MAX_PLAYER_NAME legyen ha mondjuk 50 slotos a szerver akkor 50*24=1200
switch(type)
{
    case PD_OUT_OF_FACTIONS:
    {
        for(new i; i < GetMaxPlayers(); i++)
        { // ha azt szeretnéd hogy a játékos magát ne lássa akkor ezt is írd be: || playerid == i
            if(!IsPlayerConnected(i) || playerInfo[LeaderWork] < 0) { continue; }
      DID[playerid] = i;
      GetPlayerName(i,name,MAX_PLAYER_NAME);
      if(!s) { format(str,sizeof(str),\"%s\",name); } else { format(str,sizeof(str),\"%s\\n%s\",str,name); }
      s++;
   }
    }
    case PD_IN_THE_FACTION:
    {
        for(new i; i < GetMaxPlayers(); i++)
        { // ha azt szeretnéd hogy a játékos magát ne lássa akkor ezt is írd be: || playerid == i
            if(!IsPlayerConnected(i) || playerInfo[playerid][LeaderWork] != playerInfo[LeaderWork]) { continue; }
      DID[playerid] = i;
      GetPlayerName(i,name,MAX_PLAYER_NAME);
      if(!s) { format(str,sizeof(str),\"%s\",name); } else { format(str,sizeof(str),\"%s\\n%s\",str,name); }
      s++;
   }
    }
    default: { SendClientMessage(playerid,COLOR_RED,\"Hibás játékos listázás !\"); return 1; }
}
ShowPlayerDialog(playerid,DIALOG_PLAYER,DIALOG_STYLE_LIST,\"Játékosok:\",str,\"Ok\",\"Mégse\");
return 1;
}
forward ShowPlayerRanks(playerid,forplayerid);
public ShowPlayerRanks(playerid,forplayerid)
{
    if(playerInfo[forplayerid][LeaderRang] < 7) { SendClientMessage(forplayerid,COLOR_RED,\"Nem vagy leader !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] == 0) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakcióban !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] != playerInfo[forplayerid][LeaderWork]) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakciódban !\"); return 1; }
//
new rstr[32],rsstr[128];
DFunc[forplayerid] = playerid;
GetPlayerName(playerid,rstr,MAX_PLAYER_NAME); strins(rstr,\" rangja:\",strlen(rstr),32);
for(new i; i < MAX_RANKS; i++)
{
    if(!i) { format(rsstr,64,\"%d. %s\",i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
    else { format(rsstr,64,\"%s\\n%d. %s\",rsstr,i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
}
//
ShowPlayerDialog(forplayerid,DIALOG_RANK,DIALOG_STYLE_LIST,rstr,rsstr,\"Ok\",\"Mégse\");
return 1;
}

 
DID 1. cella indexét nem adtam meg, javítva
Kick Dialog Func átírva 2-esre
visszatérési értékek dialognál
« Utoljára szerkesztve: 2012. szeptember 11. - 09:49:30 írta Kovacs_Richard »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Ciklusok, illetve dialog.
« Válasz #8 Dátum: 2012. szeptember 11. - 08:00:11 »
0 Show voters
hát nemtudom, beraktam, errorozott, demivel nem értettem sokat ebbõl, nem is próbáltam kijavítani, de azért kösz. vagy lehet én raktam be rosszul? :S

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 11. - 09:01:34 )

Köszi, mostmár csak 1 error. expected token: \"]\", but found \",\"
erre: new str[2][32,128];
« Utoljára szerkesztve: 2012. szeptember 11. - 09:01:35 írta doboka98 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Ciklusok, illetve dialog.
« Válasz #9 Dátum: 2012. szeptember 11. - 09:25:14 »
+1 Show voters
forward ShowPlayerRanks(playerid,forplayerid);
public ShowPlayerRanks(playerid,forplayerid)
{
    if(playerInfo[forplayerid][LeaderRang] < 7) { SendClientMessage(forplayerid,COLOR_RED,\"Nem vagy leader !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] == 0) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakcióban !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] != playerInfo[forplayerid][LeaderWork]) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakciódban !\"); return 1; }
//
new rstr[32],rsstr[128];
DFunc[forplayerid] = playerid;
GetPlayerName(playerid,rstr,MAX_PLAYER_NAME); strins(rstr,\" rangja:\",strlen(rstr),32);
for(new i; i < MAX_RANKS; i++)
{
    if(!i) { format(rsstr,64,\"%d. %s\",i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
    else { format(rsstr,64,\"%s\\n%d. %s\",rsstr,i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
}
//
ShowPlayerDialog(forplayerid,DIALOG_RANK,DIALOG_STYLE_LIST,rstr,rsstr,\"Ok\",\"Mégse\");
return 1;
}

 
ezzel írd felül

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 11. - 10:40:48 )

végleges kód:
 
#define MAX_RANKS      (7)
#define MAX_FACTIONS   (5)
#define DIALOG_LEADER   (1357)
#define DIALOG_PLAYER   (1358)
#define DIALOG_RANK      (1359)
#define PD_OUT_OF_FACTIONS  (0)
#define PD_IN_THE_FACTION   (1)
#define COLOR_RED   0xFFAAAAFF
new Ranks[MAX_FACTIONS][MAX_RANKS][16] = // Rangok
{
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"}, // Mentõk
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"},
{\"Rang1\",\"Rang2\",\"Rang3\",\"Rang4\",\"Rang5\",\"Rang6\",\"Rang7\"}
};
new DFunc[MAX_PLAYERS] = -1; // Dialog Funckció
new DID[MAX_PLAYERS][50]; // 50 list item azonosító
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_LEADER:
{
    if(!response) { return 1; }
    DFunc[playerid] = listitem;
    if(listitem == 0)
    { PlayerDialog(playerid,PD_OUT_OF_FACTIONS); }
    else if(listitem == 1 || listitem == 2)
    { PlayerDialog(playerid,PD_IN_THE_FACTION); }
    return 1;
}
case DIALOG_PLAYER:
{
    if(!response) { return 1; }
    if(DFunc[playerid] == 0) // inv
    {
      // inv funkció //
      // pl: PlayerInvPlayer(playerid,DID[listitem]);
      }
    else if(DFunc[playerid] == 1) // rang
    {
        ShowPlayerRanks(DID[playerid][listitem],playerid); // ki rangját, kinek
        return 1;
    }
    else if(DFunc[playerid] == 2) // kick
    {
      // kick funkció //
      // pl: PlayerKickPlayer(playerid,DID[playerid][listitem]);
    }
    DFunc[playerid] = -1;
    return 1;
}
case DIALOG_RANK:
{
   playerInfo[DFunc[playerid]][LeaderRang] = listitem;
    // szövegek
    DFunc[playerid] = -1;
    return 1;
}
}
return 0;
}
public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,\"/leader\",true))
{
    if(playerInfo[playerid][LeaderRang] < 6) { SendClientMessage(playerid,COLOR_RED,\"Nem vagy leader !\"); return 1; }
ShowPlayerDialog(playerid,DIALOG_LEADER,DIALOG_STYLE_LIST,\"Leader funkciók:\",\"Tagfelvétel\\nElõléptetés\\nKirúgás\",\"Ok\",\"Mégse\");
}
return 0;
}
forward PlayerDialog(playerid,type);
public PlayerDialog(playerid,type)
{
    new s,str[512],name[MAX_PLAYER_NAME]; // str cella száma max Slot*MAX_PLAYER_NAME legyen ha mondjuk 50 slotos a szerver akkor 50*24=1200
switch(type)
{
    case PD_OUT_OF_FACTIONS:
    {
        for(new i; i < GetMaxPlayers(); i++)
        { // ha azt szeretnéd hogy a játékos magát ne lássa akkor ezt is írd be: || playerid == i
            if(!IsPlayerConnected(i) || playerInfo[LeaderWork] > 0) { continue; }
      DID[playerid] = i;
      GetPlayerName(i,name,MAX_PLAYER_NAME);
      if(!s) { format(str,sizeof(str),\"%s\",name); } else { format(str,sizeof(str),\"%s\\n%s\",str,name); }
      s++;
   }
    }
    case PD_IN_THE_FACTION:
    {
        for(new i; i < GetMaxPlayers(); i++)
        { // ha azt szeretnéd hogy a játékos magát ne lássa akkor ezt is írd be: || playerid == i
            if(!IsPlayerConnected(i) || playerInfo[playerid][LeaderWork] != playerInfo[LeaderWork]) { continue; }
      DID[playerid] = i;
      GetPlayerName(i,name,MAX_PLAYER_NAME);
      if(!s) { format(str,sizeof(str),\"%s\",name); } else { format(str,sizeof(str),\"%s\\n%s\",str,name); }
      s++;
   }
    }
    default: { SendClientMessage(playerid,COLOR_RED,\"Hibás játékos listázás !\"); return 1; }
}
ShowPlayerDialog(playerid,DIALOG_PLAYER,DIALOG_STYLE_LIST,\"Játékosok:\",str,\"Ok\",\"Mégse\");
return 1;
}
forward ShowPlayerRanks(playerid,forplayerid);
public ShowPlayerRanks(playerid,forplayerid)
{
    if(playerInfo[forplayerid][LeaderRang] < 6) { SendClientMessage(forplayerid,COLOR_RED,\"Nem vagy leader !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] == 0) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakcióban !\"); return 1; }
else if(playerInfo[playerid][LeaderWork] != playerInfo[forplayerid][LeaderWork]) { SendClientMessage(forplayerid,COLOR_RED,\"Ez a játékos nincs frakciódban !\"); return 1; }
//
new rstr[32],rsstr[128];
DFunc[forplayerid] = playerid;
GetPlayerName(playerid,rstr,MAX_PLAYER_NAME); strins(rstr,\" rangja:\",strlen(rstr),32);
for(new i; i < MAX_RANKS; i++)
{
    if(!i) { format(rsstr,64,\"%d. %s\",i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
    else { format(rsstr,64,\"%s\\n%d. %s\",rsstr,i,Ranks[playerInfo[forplayerid][LeaderWork]-1]); }
}
//
ShowPlayerDialog(forplayerid,DIALOG_RANK,DIALOG_STYLE_LIST,rstr,rsstr,\"Ok\",\"Mégse\");
return 1;
}
« Utoljára szerkesztve: 2012. szeptember 11. - 10:40:48 írta Kovacs_Richard »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal