AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Using chat to fill in the blanks in a command? (https://forums.alliedmods.net/showthread.php?t=40185)

Stealth Penguin 06-24-2006 15:37

Using chat to fill in the blanks in a command?
 
I'm trying to make a menu plugin for a group of servers I play on. I know how to make basic menus and sub-menus, but I'm having trouble with one type of thing in particular...

I want to be able to select from a list of a couple options on one menu, which would read like this (minus the _'s):
__________
Menu Title

1. Psay
2. Execclient
3. Slay and send message

0. Exit
__________


Selecting option 0 would close the menu, but selecting options 1, 2, and 3 would bring up a new menu consisiting of the players on the server which would look something like this (minus the _'s) if there were 14 people on the server:
__________
Players 1/2

1. Bobby
2. Timmy
3. Jimmy
4. Tommy
5. Beepy
6. Tweety
7. Zippy
8. Mister Egg

9. More
0. Exit
__________


The hard part is that I'd like to be able to select one of those names and have it bring up a chat prompt (like when you use say or team say) so you don't have to open the console or add the players name before the message or command you want run on them. I need to be able to input something into that box which then would be added to the end of an amx_psay command or an execclient command as the message/command to be executed on the player of choice.

An example of what I'd like to be able to do:
_____________
1) Admin Bob presses 1

2) Admin Bob presses 5

3) Admin Bob types into message prompt (without the <>): <Hello, how are you doing?> and presses return

4) Admin Bob's client acts as though he has typed into his console (without the <>): <amx_psay Beepy "Hello, how are you doing?">

5) Beepy gets a private message from Admin Bob which reads (without the <>): <Hello, how are you doing?>
_____________

So basically what it comes down to is that I'd like to know how to make something like this:

First Menu choice equals variable x
Second Menu Choice equals variable y
What gets typed into the command prompt equals variable z

all of this should end up being the same as though you'd typed into the console (minus the <>): <"x" "y" "z">.


Thank you for reading the lengthly post.
~Fin~

twistedeuphoria 06-24-2006 16:08

Re: Using chat to fill in the blanks in a command?
 
You could print a message telling them to type the rest of the command into chat, hook chat (set a variable in the menu cmd and then unset it after they finish the command) and then run the command with that.

Stealth Penguin 06-24-2006 16:10

Re: Using chat to fill in the blanks in a command?
 
How would I do that? Could you show me an example?

twistedeuphoria 06-24-2006 16:16

Re: Using chat to fill in the blanks in a command?
 
Code:
  new sayspecial[33] = 0 ... public plugin_init() {     ...     register_clcmd("say","say_hook")     ... } public menu_cmd(id,key) {     switch(key)     {         case 1:         {             sayspecial[id] = 1             client_print(id,print_chat,"Enter your other params in chat:")         }         ...             }     return PLUGIN_HANDLED } public say_hook(id) {     new said[191]     read_args(said,190)     remove_quotes(said)     if(sayspecial[id])     {         switch(sayspecial[id])         {             case 1: client_cmd(id,"command1 %s",said)             case 2: client_cmd(id,"command2 %s",said)             case 3: client_cmd(id,"command3 %s",said)         }         sayspecial[id] = 0         return PLUGIN_HANDLED     }     return PLUGIN_CONTINUE }

Stealth Penguin 06-24-2006 18:20

Re: Using chat to fill in the blanks in a command?
 
I have a question about the code you made, where would I put the player selection? Thanks for the start.

twistedeuphoria 06-24-2006 21:31

Re: Using chat to fill in the blanks in a command?
 
If I understood you correctly, you put the player selection inside the switch statement in the menu cmd function.

Stealth Penguin 06-24-2006 22:08

Re: Using chat to fill in the blanks in a command?
 
I need a seperate menu to select the players, it should be brought up after the command (psay or execclient for instance) is selected from the other menu.

Stealth Penguin 06-25-2006 02:16

Re: Using chat to fill in the blanks in a command?
 
Currently I'm trying to figure out how to make a selection of a player from a list of players in a menu (already made that menu) so I can insert that into the console command thing.

Does the code you posted actually allow you to have a players name selected from a menu? Wouldn't the switch cases have to be like:
Code:
case 1: client_cmd(id,"command1 %s %s",name,said) case 2: client_cmd(id,"command2 %s %s",name,said)
Instead of like:
Code:
case 1: client_cmd(id,"command1 %s",said) case 2: client_cmd(id,"command2 %s",said)

*edit*
Code:
public ShowMiscMenu( id, pos ) {     if( pos < 0 )     {         return     }     pos = g_nMiscMenuPosition[id] = 0     format(szMenuBody8, 255, "\yMisc:^n" )     add(szMenuBody8, 255, "^n\w1. psay"  )     add(szMenuBody8, 255, "^n\w2. execclient" )     add(szMenuBody8, 255, "^n^n\w0. Index Menu" )     show_menu( id, 1023, szMenuBody8, -1 ) } public MiscMenuCommand(id,key) {     switch(key)     {         case 0:         {             ShowPlayerListMenu( id, g_nPlayerListMenuPosition[id])             PlayerOption2[id] = 1         }         case 1:         {             ShowPlayerListMenu( id, g_nPlayerListMenuPosition[id])             PlayerOption2[id] = 2         }     }     return PLUGIN_HANDLED } public ShowPlayerListMenu(id,pos) {     if (pos <   0)     {         return     }     get_players(g_menuPlayers2[id],g_menuPlayersNum2[id])     new t     new name[32]     get_user_name(t,name,31)     new b   =   0     new start   =   pos *   6     if (start   >= g_menuPlayersNum2[id])     start   =   pos = g_nPlayerListMenuPosition[id] = 0     new len =   format(szPlayerListMenuBody,    255, "\yWhich Player?:\R%d/%d^n\w^n", pos + 1(   g_menuPlayersNum2[id] / 6 + ((g_menuPlayersNum2[id] %   6) ? 1 : 0 ))   )     new end =   start   +   6     new keys = MENU_KEY_0|MENU_KEY_8     if (end >   g_menuPlayersNum2[id])     {         end =   g_menuPlayersNum2[id]     }     for (new a = start; a   <   end; ++a)     {         t   =   g_menuPlayers2[id][a]         get_user_name(t,name,31)         if ( is_user_bot(t) || access(t,ADMIN_IMMUNITY) )         {             ++b             if ( g_coloredMenus )             len += format(szPlayerListMenuBody[len],255-len,    "\d%d. %s^n",b,name)             else             len += format(szPlayerListMenuBody[len],255-len,"#. %s^n",name)         }         else         {             keys |= (1<<b)             len += format(szPlayerListMenuBody[len],255-len,"\w%d.  %s^n",++b,name)         }     }     if (end >   g_menuPlayersNum2[id])     end =   g_menuPlayersNum2[id]     if (end != g_menuPlayersNum2[id])     {         len += format(szPlayerListMenuBody[len],255-len,"^n8. More")         len += format(szPlayerListMenuBody[len],255-len,"^n9. Back")     }     else format(szPlayerListMenuBody[len],255-len,"^n0. Back to choices")     show_menu(id,keys,szPlayerListMenuBody,-1,"\yWhich Player?:") } public PlayerListCommand(id,key) {     switch (key) {         case 7: ShowPlayerListMenu(id,++g_nPlayerListMenuPosition[id])         case 8: ShowPlayerListMenu(id,--g_nPlayerListMenuPosition[id])         case 9: ShowMiscMenu(id, 0)         default:         {             PlayerTarget = g_menuPlayers2[id][g_nPlayerListMenuPosition[id] * 6 + key]             new name2[32], name[32]             get_user_name(id,name2,31)             new authid[32],authid2[32]             get_user_authid(id,authid,31)             get_user_authid(id,authid2,31)             i   =   g_menuPlayers[id][a]             get_user_name(i,PlayerTarget,31)             get_user_name(id,name,31)             ShowPlayerListMenu(id,g_nPlayerListMenuPosition[id])             if ( PlayerOption2[id] == 1 )             {                 sayspecial[id] = 1             }             else if ( PlayerOption2[id] == 2 )             {                 sayspecial[id] = 2             }         }     } } public DoShowPlayerListMenu(id,level,cid) {     if (!cmd_access(id,level,cid,1))     {         return PLUGIN_HANDLED     }     ShowPlayerListMenu(id,g_nPlayerListMenuPosition[id] = 0)     return PLUGIN_HANDLED } ///////////////////////////////////////////////////////////////////////////// public say_hook(id) {     new said[191]     read_args(said,190)     remove_quotes(said)     if( sayspecial[id] != 0 )     {         switch(sayspecial[id])         {             case 1: client_cmd(id,"amx_psay %s %s",PlayerTarget,said)             case 2: client_cmd(id,"amx_execclient %s %s",PlayerTarget,said)         }         sayspecial[id] = 0         PlayerTarget[id] = 0     }     return PLUGIN_HANDLED }
There is what I've tried to get working so far. The problem seems to be with finding the name of the player you select in the menu and getting it into the client_cmd string. This is quite baffling to me, because the menus show up fine, its just that the way the command is carried out is not correct. After I choose an option from the first menu, it goes to the second menu to choose a player. Once I choose a player I can type into chat "Bob kill" and it will either psay to Bob "kill" (without the quotes) or it will make him kill himself depending on which of the first menu's options I chose. I'm trying to eliminate having to type the person's name into the chat.

mysticssjgoku4 06-25-2006 08:58

Re: Using chat to fill in the blanks in a command?
 
Holy fucking tabs and variables >_>!

v3x 06-25-2006 09:01

Re: Using chat to fill in the blanks in a command?
 
You could simply register a new menu with it's own command, then put this inside the switch statement's case for the submenu key:
Code:
client_cmd(id , "amx_menu_command");


All times are GMT -4. The time now is 08:07.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.