Русское сообщество по скриптингу

Adding menu to plugin

Scripting help for english speaking users. While not very active, you still have a chance to get help here.
Правила форума
We cannot maintain english version version of our forum rules, but shortly (it's simple) - Don't be a dick. If you really want to know our rules you should check appropriate thread.

Adding menu to plugin

Сообщение VenomIvanof » 07 апр 2016, 14:14

Hi all, someone can help me to add a menu like "amx_tmenu" and also in the chat with command
/tmenu, to can show all players and choose to which team to transfer like:

1. Name
2. Name
3. Name
4. Name
5. Name
6. Name
7. Name
8. Transfer to CT/T/Spec
9. Next
0.Exit

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <colorchat>

#define VERSION "1.2"

new amx_show_activity



public plugin_init()
{
   /* Register plugin and author */
   register_plugin("AMX Transfer", VERSION, "****")
   
   /* Register plugin version by cvar */
   register_cvar("transfer_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
   set_cvar_string("transfer_version", VERSION);
   
   /* Register admin commands */
   register_concmd("amx_transfer", "cmd_transfer", ADMIN_SLAY,"- <name> <CT/T/Spec> Transfers that player to the specified team")
   register_concmd("amx_team", "cmd_transfer", ADMIN_SLAY,"- <name> <CT/T/Spec> Transfers that player to the specified team")
   
   /* Register plugin cvars */
   amx_show_activity = get_cvar_pointer("amx_show_activity");
   
   /* Register language file */
   
}

public cmd_transfer(id,level,cid)
{
   
   if(!cmd_access(id, level, cid, 2))
      return PLUGIN_HANDLED;
   
   new arg1[32], arg2[32]
   
   read_argv(1, arg1, 31)
   read_argv(2, arg2, 31)
   
   new player = cmd_target(id, arg1, 2)
   
   if(!player)
      return PLUGIN_HANDLED
   
   new teamname[32]
   
   if(!strlen(arg2))
   {
      cs_set_user_team(player, cs_get_user_team(player) == CS_TEAM_CT ? CS_TEAM_T:CS_TEAM_CT)
      teamname = cs_get_user_team(player) == CS_TEAM_CT ? "Counter-Terrorists":"Terrorists"
   }
   else
   {
      if(equali(arg2, "T"))
      {
         cs_set_user_team(player, CS_TEAM_T)
         teamname = "Terrorists"
         ExecuteHamB(Ham_CS_RoundRespawn, player)
      }
      else if(equali(arg2, "CT"))
      {
         cs_set_user_team(player, CS_TEAM_CT)
         teamname = "Counter-Terrorists"
         ExecuteHamB(Ham_CS_RoundRespawn, player)
      }
      else if(equali(arg2, "SPEC"))
      {
         user_silentkill(player)
         cs_set_user_team(player, CS_TEAM_SPECTATOR)
         teamname = "Spectator"
      }
      else
      {
         return PLUGIN_HANDLED
      }
   }
   
   new name[32], admin[32], authid[35]
   
   get_user_name(id, admin, 31)
   get_user_name(player, name, 31)
   get_user_authid(id, authid, 34)
   
   switch(get_pcvar_num(amx_show_activity))
   {
      case 2:   ColorChat(0, GREY, "^4[^3amxx^4] ^3Admin ^4%s ^3transfer ^4%s ^3to ^4%s", admin, name, teamname)
      case 1:   ColorChat(0, GREY, "^4[^3amxx^4] ^3Player ^4%s ^3now is^4%s", name, teamname)
   }
   

   return PLUGIN_HANDLED
   
}
Аватара пользователя
VenomIvanof
 
Сообщения: 66
Зарегистрирован: 02 апр 2016, 13:26
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

Re: Adding menu to plugin

Сообщение RevCrew » 07 апр 2016, 16:27

VenomIvanof,
1. Create The player menu in old style.
2. create variable like

Код: Выделить всё

enum Tteam
{
 
T,
 
CT,
 
SPECTRATOR
}

new 
t_team;

if(
t_team == T)
{
// add item like Tranfer to TT
}
ele
if(t_team == CT)
....
 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Adding menu to plugin

Сообщение VenomIvanof » 07 апр 2016, 20:08

RevCrew писал(а):VenomIvanof,
1. Create The player menu in old style.
2. create variable like

Код: Выделить всё

enum Tteam
{
 T,
 CT,
 SPECTRATOR
}

new t_team;

if(
t_team == T)
{
// add item like Tranfer to TT
}
ele
if(t_team == CT)
....

i tryed to make like the menu in plmenu, but i get many errors... so would you do it for me?
Аватара пользователя
VenomIvanof
 
Сообщения: 66
Зарегистрирован: 02 апр 2016, 13:26
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

Re: Adding menu to plugin

Сообщение RevCrew » 09 апр 2016, 09:28

VenomIvanof, ok, waiting...
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Adding menu to plugin

Сообщение VenomIvanof » 09 апр 2016, 11:32

RevCrew писал(а):VenomIvanof, ok, waiting...


okey, thanks!
Аватара пользователя
VenomIvanof
 
Сообщения: 66
Зарегистрирован: 02 апр 2016, 13:26
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

Re: Adding menu to plugin

Сообщение RevCrew » 12 апр 2016, 21:21

Код: Выделить всё
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "Tmenu"
#define VERSION "1.0"
#define AUTHOR "RevCrew"
#define KeysTeamMenu (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)

new MenuPosTeamMenu
new MenuPlayersTeamMenu[32]

#define FLAGS ADMIN_ADMIN

enum csTeams
{
    
TEAM_T,
    
TEAM_CT,
    
TEAM_SPECTATOR
}

new 
team_names[csTeams][] = 
{
    
"TT",
    
"CT",
    
"SPEC"
}

new 
csTeams:g_team_name[33]

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_menucmd(register_menuid("TeamMenu"), KeysTeamMenu"PressedTeamMenu")
    
    
register_clcmd("say /tmenu""ShowMenuTeamMenu")
    
// Add your code here...
}
public 
client_putinserver(id)
    
g_team_name[id] = TEAM_T;
public 
ShowTeamMenu(id) {
    
    
//if(~get_user_flags(id) & FLAGS)
    //    return PLUGIN_CONTINUE;
    
    
ShowMenuTeamMenu(idMenuPosTeamMenu 0)
    return 
PLUGIN_HANDLED
}

public 
ShowMenuTeamMenu(idposition) {
    
// Menu stuff //
    
if (position 0) { return 0; }
    
    new 
ik
    
new MenuBody[255]
    new 
CurrentKey 0
    
new Start position 7
    
new Num
    
new UserName[32]
    
    
get_players(MenuPlayersTeamMenuNum)
    if (
Start >= Num) { Start position MenuPosTeamMenu 0; }
    new 
Len format(MenuBody255"\yAmx Team Menu\R%d/%d^n\w^n"position+1, (Num + ((Num 7) ? )) )
    new 
End Start 7
    
new Keys = (1<<9)
    if (
End Num) { End Num; }
    
    for(
i=Start;i<End;i++) {
        
MenuPlayersTeamMenu[i]
        
get_user_name(kUserName31)
        
Keys |= (1<<CurrentKey++)
        
Len += format(MenuBody[Len], (255-Len), "%s%i. %s^n"get_user_team(id) == _:g_team_name[id]+"\d" "\w"CurrentKeyUserName)
    }
    
Len += format(MenuBody[Len], (255-Len), "^n\w8.\yTeam\w: [%s]^n",team_names[g_team_name[id]])
    
Keys |= (1<<7)
    if (
End != Num) {
        
format(MenuBody[Len], (255-Len), "^n\w9. Next^n%s"position "\w0. Back" "\w0. Exit")
        
Keys |= (1<<8)
    }
    else {
        
format(MenuBody[Len], (255-Len), "^n%s"position "\w0. Back" "\w0. Exit")
    }
    
show_menu(idKeysMenuBody, -1"TeamMenu")
    return 
0
}

public 
PressedTeamMenu(idkey) {
    switch (
key) {
        case 
7ChangeTeam(id);
        case 
8ShowMenuTeamMenu(id, ++MenuPosTeamMenu// More Option
        
case 9ShowMenuTeamMenu(id, --MenuPosTeamMenu// Back Option
        
default: {
            
// Get User ID and Username
            
new PlayerID MenuPlayersTeamMenu[MenuPosTeamMenu key]
            new 
UserName[32], AdminName[32]
            
            
get_user_name(PlayerIDUserName31)
            
get_user_name(idAdminName31)
            
            
user_silentkill(PlayerID)
            
cs_set_user_team(id_:g_team_name[id]+1)
            
            new 
p[32], cplayer;
            
get_players(pc"ch")
            
            for(new 
iici++)
            {
                
player p[i];
                
ColorPrint(player"[^4%s^3] transfer [^4%s^3] to [^1%s^3]",AdminNameUserNameteam_names[g_team_name[id]] )
            }
        }
    }
    return 
PLUGIN_HANDLED
}
ChangeTeam(id)
{
    
g_team_name[id] ++;
    if(
g_team_name[id] > TEAM_SPECTATOR)
        
g_team_name[id] = TEAM_T;
    
ShowMenuTeamMenu(idMenuPosTeamMenu 0)
}

stock ColorPrint(id, const message_fmt[], any:...)
{
    static 
iid id 0;
    if ( !
) return;
    
    static 
message[256], len;
    
len formatex(messagecharsmax(message), "^3[^4TeamMenu^3] ");
    
vformat(message[len], charsmax(message) - lenmessage_fmt3);
    
message[192] = 0;
    
    if(
is_user_connected(i))
    {
        static 
msgid_SayText;
        if ( !
msgid_SayText msgid_SayText get_user_msgid("SayText");
    
        static const 
team_names[][] =
        {
            
"",
            
"TERRORIST",
            
"CT",
            
"SPECTATOR"
        
};
    
        static 
teamteam get_user_team(i);
        
        
TeamInfo(iidteam_names[0]);
    
        
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgid_SayText_id);
        
write_byte(i);
        
write_string(message);
        
message_end();
    
        
TeamInfo(iidteam_names[team]);
    }
}

TeamInfo(receiversenderteam[])
{
    static 
msgid_TeamInfo;
    if ( !
msgid_TeamInfo msgid_TeamInfo get_user_msgid("TeamInfo");
    
    
message_begin(sender MSG_ONE_UNRELIABLE MSG_BROADCASTmsgid_TeamInfo_sender);
    
write_byte(receiver);
    
write_string(team);
    
message_end();
}
 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Scripting

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5