Boolean delay (wait 2 seconds before false in case it gets true again)
The code below is to block voice from dead players. Admins can use the bind +adminvoice which is handled by another plugin (amx_super-serious.axx). Dead players are getting a HUD message and when admins using +adminvoice to talk to other admins they shouldn't get that message. Everything works fine theoretically, but when a admin repeatedly press the key bind to +adminvoice, they eventually get the HUD message.
Is there a way to code something that set a delay for g_bAdminVoice? Like: if it get true with +adminvoice, wait 2 seconds before it get false with -adminvoice only in case it get's true again. Edit: I can probably fixing this issue with set_task. Some help or other suggestions are still appreciated. The code: PHP Code:
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
Look for examples of get_systime usage. You can also block that command if admin is spamming, sorta cooldown.
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
Thanks for the suggestion Relaxing.
I tried this below. Problem is if someone spams the key bound to +adminvoice longer than 2 seconds, the issue is still there. As soon g_bAdminVoice get false and true again in VTC_OnClientStartSpeak it gives the HUD message. For practical reasons (end users) I can't make it longer than 2 seconds. There must be another way to solve this. I am a coding rookie. I'm more of an electrician that compare this issue with a light bulb with a momentary switch connected. To solve the light flickering when someone repeatedly pressing the switch I would use a capacitor big enough for steady light. :) PHP Code:
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
So you want admins to use a custom command for 2 seconds only, and regain that ability to do it again after 2 more seconds, right? .-.
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
I think this plugin needs some explanation first:
The plugin sets all talk on. FM_Voice_SetClientListening handles +voicerecord and -voicerecord. Only alive players can talk. Dead players can only listen (to prevent ghosting). Dead players are getting a HUD message when they try to talk with the VTC_OnClientStartSpeak function (that doesn't need a forward). Admins can talk to each other with +adminvoice bind to a key. This is part of amx_super-serious.amxx. Luckily the FM_Voice_SetClientListening function doesn't interfere with this. Admins are still able to talk to each other while dead. However the VTC_OnClientStartSpeak function also get triggered when +adminvoice is used (they can still talk as it is supposed). To hide the HUD message I added to +adminvoice clcmd to a function to set it true and clcmd -adminvoice to another command to make it false so I was able to determine when or when not printing the HUD message. Only problem is: as soon it get false (accidentally release mic key) and instantly true again (or after the 2 seconds in the code above) it prints the HUD message. Almost all admins have the habit to do that.. I'm using PLUGIN_CONTINUE instead of PLUGIN_HANDLED for the parts + or -adminvoice needs to re-used in amx_super-serious.amxx. Everything would be more easy if I was able to catch the +voicerecord event (set true and false for +adminvoice) but as far as I know that's not possible without using the Orpheu module. I am using reAPI/ReHLDS* for other plugins as well so I'm unable to install that module. * This is maybe a red flag for moderators but not everyone is using Reunion. Edit: Is this possible: keep g_bAdminVoice in function AdminVoiceOff true for 5 seconds before setting to false. If it becomes true again withing these 5 seconds in AdminVoiceOn reset this timer and don't let it become false until the full 5 seconds expire. |
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
If you're capable you can merge both plugins into a single and give it a try.
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
I was able to solve it with set_task:
PHP Code:
|
Re: Boolean delay (wait 2 seconds before false in case it gets true again)
Where in the code is g_bAdmin getting filled with a 6 digit number (262144) instead of 0 or 1 just as in g_bEnforcer or g_bAdminVoice?
Edit: I removed the code. Solved: it was the admin level constant.. |
| All times are GMT -4. The time now is 12:44. |
Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.