SA:MP - Pawno - [TUT] Ako na menu Roman Lipka | 22.08.2008
na menu je potrebne vediet o tychto publikoch/prikazoch:
Public OnPlayerSelectedMenuRow(playerid, row) sa spusti vtedy, ked hrac stlaci shift pocas zapnuteho nejakeho menu (teda ked vybral nejaky riadok s id "row")
Tento public vracia hodnoty playerid (id hraca, ktory "aktivoval" tento publik) a row (cislo riadku aktivneho menu - prvy riadok ma hodnotu 0)
Public OnPlayerSelectedMenuRow(playerid, row) sa spusti vtedy, ked hrac stlaci shift pocas zapnuteho nejakeho menu (teda ked vybral nejaky riadok s id "row")
Tento public vracia hodnoty playerid (id hraca, ktory "aktivoval" tento publik) a row (cislo riadku aktivneho menu - prvy riadok ma hodnotu 0)
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
{
return 1;
}
Public OnPlayerExitedMenu(playerid) sa spusti vtedy, ked hrac stlaci enter pocas zapnuteho nejakeho menu (teda ked chce odist z menu)
kedze medzi ( ) ma iba playerid, vracia iba tuto hodnotu ( id hraca, ktory "aktivoval" tento publik)
kedze medzi ( ) ma iba playerid, vracia iba tuto hodnotu ( id hraca, ktory "aktivoval" tento publik)
public OnPlayerExitedMenu(playerid)
{
return 1;
}
{
return 1;
}
POZOR: V mode nemozu byt 2 publici s rovnakym nazvom!
Kazde menu moze mat svoje id, toto id sa moze priradit Menu:premennej, ktora musi byt takto zadefinovana:
new Menu:Menu1;
Na zistenie id aktualneho mena otvoreneho urcitemu hracovi sa pouziva prikaz Menu:GetPlayerMenu(playerid);.
Menu1=GetPlayerMenu(playerid);
Prikaz CreateMenu(nazov[], pocetstlpcov, Float:polohaX, Float:polohaY, Float:sirka1stlpca, Float:sirka2stlpca); sa pouziva na vytvorenie menu (zakladu). Tento prikaz vracia hodnotu > id ( Napr. Menu1=CreateMenu(... a tym Menu1 ma hodnotu rovnajucej id vytvoreneho mena), za nazov[] sa dosadzuje bud nejaky "string" (radova premenna) alebo rovno "text" (funguju v nom atributy ~r~, ~g~, ~b~, ~w~, ~y~, ~p~ ... na zmenu farby), za pocetstlpcov sa dosadzuje bud obycajna premenna alebo pocet cislo(pocet stlpcov), za polohaX bud premennu typu Float alebo cislo, ktore udava polohu mena na X osi, polohaY to iste ako polohaX ibaze na Y-osi, za sirka1stlpca bud premennu "Float" alebo cislo udavajuce sirku prveho stlpca v menu ...
Menu1 = CreateMenu("text", 1, 150.0, 150.0, 150.0, 0);
Prikaz DestroyMenu(Menu:menuid); sa pouziva na znicenie menu.
Do zatvorky sa prida bud Menu:premenna (vyjadrujuca id urciteho menu) alebo cislo (neprakticke).
DestroyMenu(Menu1);
prikaz SetMenuColumnHeader(Menu:menuid, stlpec, nazov[]); prida stlpec do menu. Za menuid sa dava id urciteho menu, kde chcete pridat ten stlpec. Za stlpec sa dava id stlpca, ktore bude mat pri pridavani riadkov. A za nazov[] sa dava nazov, napr. "cena".
SetMenuColumnHeader(Menu1, 0, "cena");
prikaz AddMenuItem(Menu:menuid, stlpec, text[]); sa pouziva na pridanie riadka (tlacitka) do urciteho menu a stlpca. Za stlpec sa dava cislo stlpca, v ktorom ma byt riadok (ak menu ma iba jeden stlpec, tak tam ma byt 0). A za text[] sa pise bud string[] alebo "text" ktory sa zobrazi na tom riadku.
AddMenuItem(Menu1, 0, "teleport");
prikaz ShowMenuForPlayer(Menu:menuid, idhraca); sa pouziva na zobrazenie menu pre urciteho hraca.Tento prikaz je dolezity, bez neho ziadny hrac neuvidi vytvorene menu.Za idhraca sa zadava id hraca, ktoremu sa ma urcite menu s menuid zobrazit.
ShowMenuForPlayer(Menu1, playerid);
prikaz HideMenuForPlayer(Menu:menuid, idhraca); je vlastne opakom prikazu ShowMenuForPlayer, teda skrije urcite menu urcitemu hracovi.
HideMenuForPlayer(Menu1, playerid);
Prikaz IsValidMenu(Menu:menuid); vracia hodnotu podla toho, ci urcite menu existuje. Tento prikaz je dost dolezity v tom, aby sa nahodou neprekrizovali hracovi 2 menu (pretoze ak bude hrac mat 2 menu, hra mu moze padat).
if(IsValidMenu(Menu1)) // prikazy sa vykonaju ak zadane menu existuje
alebo
if(!IsValidMenu(Menu1)) // prikazy sa vykonaju ak zadane menu neexistuje
POZOR: Nemozu byt vytvorene jednemu hracovi 2 menu naraz!
Priklad
Je vela sposobov, ako vytvorit menu, tu je zopar moznosti v tomto jednom systeme:
Tento system objavil programmator Magor a je podla mna najlepsi ako len moze byt...
forward vytvorhlavnemenu(playerid);
forward vytvorprvemenu(playerid);
forward vytvordruhemenu(playerid);
forward vytvorprvemenu(playerid);
forward vytvordruhemenu(playerid);
new Menu:hlavnemenu;
new Menu:prvemenu;
new Menu:druhemenu;
new Menu:prvemenu;
new Menu:druhemenu;
public vytvorhlavnemenu(playerid)
{
new Menu:current;
TogglePlayerControllable(playerid, 0);
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(hlavnemenu))
{
ShowMenuForPlayer(hlavnemenu, playerid);
return 1;
}
hlavnemenu=CreateMenu("~r~menu",1, 20.0, 150.5, 100.0, 0.0);
AddMenuItem(hlavnemenu, 0, "PrveMenu");
AddMenuItem(hlavnemenu, 0, "DruheMenu");
AddMenuItem(hlavnemenu, 0, "Zrusit");
ShowMenuForPlayer(hlavnemenu, playerid);
return 1;
}
public vytvorprvemenu(playerid)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(prvemenu))
{
ShowMenuForPlayer(prvemenu, playerid);
return 1;
}
prvemenu=CreateMenu("~b~prve~w~ menu",2, 20.0, 150.5, 70.0, 0.0);
SetMenuColumnHeader(prvemenu, 0, "~r~kupit");
SetMenuColumnHeader(prvemenu, 1, "~g~cena");
AddMenuItem(prvemenu, 0, "Tec9");
AddMenuItem(prvemenu, 1, "500$");
AddMenuItem(prvemenu, 0, "Spat");
AddMenuItem(prvemenu, 1, "zadarmo");
ShowMenuForPlayer(prvemenu, playerid);
return 1;
}
public vytvordruhemenu(playerid)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(druhemenu))
{
ShowMenuForPlayer(druhemenu, playerid);
return 1;
}
druhemenu=CreateMenu("~b~druhe~w~ menu",1,20.0,150.5,170.0,0.0);
AddMenuItem(druhemenu, 0, "Piratska Lod");
AddMenuItem(druhemenu, 0, "Wang cars");
AddMenuItem(druhemenu, 0, "US Bank Tower");
AddMenuItem(druhemenu, 0, "hora Chilliad");
AddMenuItem(druhemenu, 0, "Spat");
ShowMenuForPlayer(druhemenu, playerid);
return 1;
}
{
new Menu:current;
TogglePlayerControllable(playerid, 0);
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(hlavnemenu))
{
ShowMenuForPlayer(hlavnemenu, playerid);
return 1;
}
hlavnemenu=CreateMenu("~r~menu",1, 20.0, 150.5, 100.0, 0.0);
AddMenuItem(hlavnemenu, 0, "PrveMenu");
AddMenuItem(hlavnemenu, 0, "DruheMenu");
AddMenuItem(hlavnemenu, 0, "Zrusit");
ShowMenuForPlayer(hlavnemenu, playerid);
return 1;
}
public vytvorprvemenu(playerid)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(prvemenu))
{
ShowMenuForPlayer(prvemenu, playerid);
return 1;
}
prvemenu=CreateMenu("~b~prve~w~ menu",2, 20.0, 150.5, 70.0, 0.0);
SetMenuColumnHeader(prvemenu, 0, "~r~kupit");
SetMenuColumnHeader(prvemenu, 1, "~g~cena");
AddMenuItem(prvemenu, 0, "Tec9");
AddMenuItem(prvemenu, 1, "500$");
AddMenuItem(prvemenu, 0, "Spat");
AddMenuItem(prvemenu, 1, "zadarmo");
ShowMenuForPlayer(prvemenu, playerid);
return 1;
}
public vytvordruhemenu(playerid)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(IsValidMenu(current)) HideMenuForPlayer(current, playerid);
if(IsValidMenu(druhemenu))
{
ShowMenuForPlayer(druhemenu, playerid);
return 1;
}
druhemenu=CreateMenu("~b~druhe~w~ menu",1,20.0,150.5,170.0,0.0);
AddMenuItem(druhemenu, 0, "Piratska Lod");
AddMenuItem(druhemenu, 0, "Wang cars");
AddMenuItem(druhemenu, 0, "US Bank Tower");
AddMenuItem(druhemenu, 0, "hora Chilliad");
AddMenuItem(druhemenu, 0, "Spat");
ShowMenuForPlayer(druhemenu, playerid);
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(current == hlavnemenu)
{
switch(row)
{
case 0: vytvorprvemenu(playerid);
case 1: vytvordruhemenu(playerid);
case 2: TogglePlayerControllable(playerid, 1);
}
return 1;
}
if(current == prvemenu)
{
switch(row)
{
case 0: {
GivePlayerMoney(playerid, 0-500);
GivePlayerWeapon(playerid, 32, 100);
vytvorprvemenu(playerid);
}
case 1: vytvorhlavnemenu(playerid);
}
return 1;
}
if(current == druhemenu)
{
if(row!=4){
if(row==0)SetPlayerPos(playerid,2025.1257,1545.0879,10.3481);
if(row==1)SetPlayerPos(playerid,-1980.8552,253.6175,35.3494);
if(row==2)SetPlayerPos(playerid,1540.3540,-1359.2543,329.4631);
if(row==3)SetPlayerPos(playerid,-2235.8953,-1735.8722,480.7959);
TogglePlayerControllable(playerid, 1);}
else vytvorhlavnemenu(playerid);
return 1;
}
return 1;
}
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(current == hlavnemenu)
{
switch(row)
{
case 0: vytvorprvemenu(playerid);
case 1: vytvordruhemenu(playerid);
case 2: TogglePlayerControllable(playerid, 1);
}
return 1;
}
if(current == prvemenu)
{
switch(row)
{
case 0: {
GivePlayerMoney(playerid, 0-500);
GivePlayerWeapon(playerid, 32, 100);
vytvorprvemenu(playerid);
}
case 1: vytvorhlavnemenu(playerid);
}
return 1;
}
if(current == druhemenu)
{
if(row!=4){
if(row==0)SetPlayerPos(playerid,2025.1257,1545.0879,10.3481);
if(row==1)SetPlayerPos(playerid,-1980.8552,253.6175,35.3494);
if(row==2)SetPlayerPos(playerid,1540.3540,-1359.2543,329.4631);
if(row==3)SetPlayerPos(playerid,-2235.8953,-1735.8722,480.7959);
TogglePlayerControllable(playerid, 1);}
else vytvorhlavnemenu(playerid);
return 1;
}
return 1;
}
public OnPlayerExitedMenu(playerid)
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(current == hlavnemenu) TogglePlayerControllable(playerid, 1);
if(current == prvemenu) vytvorhlavnemenu(playerid);
if(current == druhemenu) vytvorhlavnemenu(playerid);
return 1;
}
{
new Menu:current;
current = GetPlayerMenu(playerid);
if(current == hlavnemenu) TogglePlayerControllable(playerid, 1);
if(current == prvemenu) vytvorhlavnemenu(playerid);
if(current == druhemenu) vytvorhlavnemenu(playerid);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx=0;
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/menu", true) == 0) {
vytvorhlavnemenu(playerid); // prikaz na zapnutie hlavneho menu
return 1;
}
return 0;
}
By t_Mc]Virus