День добрый знатоки, подскажите как решить данную проблему с нативом.
Суть проблемы:
В плагине А зарегистрирован натив на проверку булевой(работает как вкл\выкл для дамагера).
В плагине Б Открывается менюшка которая отображает состояние булевой (вкл или выкл) и нажав на цифру меню, мы отправляем (say /dmg ), которая меняет ее положение тру\фолс , но проблема в том что в меню, изменение в тексте происходит только со 2-3 нажатия, словно натива не успевает вернуть значение....я так понимаю ее нужно зафорсить или как вариант через второй натив менять ее значение................
Пробовал через второй натив менять значение в плагине Б, для плагина А...но там вообще не сработало. Может кто подскажет идею для решения?
Код:
#define PLUGIN "Test Native A"
#define VERSION "0.0.1"
#define AUTHOR "South Shtorm"
#include <amxmodx>
#include <reapi>
new const Float:g_flCoords[][] = {
{0.50, 0.40}, {0.56, 0.44},
{0.60, 0.50}, {0.56, 0.56},
{0.50, 0.60}, {0.44, 0.56},
{0.40, 0.50}, {0.44, 0.44}
};
new g_iPosition[MAX_CLIENTS+1], g_szCoords;
new bool:g_bDmgReturn[MAX_CLIENTS+1];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /dmg", "ClientCommand_Damager");
RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage_Post", .post = true);
g_szCoords = charsmax(g_flCoords);
}
public plugin_natives()
register_native("get_bDmgReturn", "_get_bDmgReturn_", 1);
public _get_bDmgReturn_(id)
return g_bDmgReturn[id];
public client_putinserver(id)
g_bDmgReturn[id] = false;
public ClientCommand_Damager(id)
g_bDmgReturn[id] = !g_bDmgReturn[id];
public CBasePlayer_TakeDamage_Post(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
if(!g_bDmgReturn[pevAttacker] || !is_user_connected(pevAttacker))
return HC_CONTINUE;
if(pevAttacker == this || pevAttacker != pevInflictor)
return HC_CONTINUE;
if(rg_is_player_can_takedamage(this, pevAttacker))
{
new iPos = g_iPosition[pevAttacker] > g_szCoords ? (g_iPosition[pevAttacker] = 0) : g_iPosition[pevAttacker];
set_hudmessage(0, 100, 200, Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02);
show_hudmessage(pevAttacker, "%.0f", flDamage);
g_iPosition[pevAttacker]++;
}
return HC_CONTINUE;
}
Код:
#define PLUGIN "Test Native B"
#define VERSION "0.0.1"
#define AUTHOR "South Shtorm"
#define MENU_TITLE "\yМеню:^n^n"
#define MENU_DMG_ON "\y1. \rПоказ урона: \w[ \yВКЛ\w ]"
#define MENU_DMG_OFF "\y1. \rПоказ урона: \y[ \wВЫКЛ\y ]"
#define MENU_EXIT_NAME "\r0. \yВыход"
#include <amxmodx>
#include <reapi>
native bool:get_bDmgReturn(id);
const MENU_KEY_BITS = (MENU_KEY_1|MENU_KEY_0);
const MENU_KEY_EXIT = 9;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /vp", "ClientCommand_Menu");
register_clcmd("say_team /vp", "ClientCommand_Menu");
register_menucmd(register_menuid("Menu"), MENU_KEY_BITS, "Menu_Handler");
}
public ClientCommand_Menu(const id)
{
new iLen, szMenu[512], iKey = MENU_KEY_0;
iLen = formatex(szMenu, charsmax(szMenu), MENU_TITLE);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%s^n^n", get_bDmgReturn(id) ? MENU_DMG_ON : MENU_DMG_OFF);
iKey |= MENU_KEY_1;
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, MENU_EXIT_NAME);
iKey |= MENU_KEY_0;
show_menu(id, iKey, szMenu, -1, "Menu");
return PLUGIN_HANDLED;
}
public Menu_Handler(id, iKey)
{
if(iKey == MENU_KEY_EXIT)
return PLUGIN_HANDLED;
switch(iKey)
{
case 0: client_cmd(id, "say /dmg");
}
ClientCommand_Menu(id);
return PLUGIN_HANDLED;
}
Суть проблемы:
В плагине А зарегистрирован натив на проверку булевой(работает как вкл\выкл для дамагера).
В плагине Б Открывается менюшка которая отображает состояние булевой (вкл или выкл) и нажав на цифру меню, мы отправляем (say /dmg ), которая меняет ее положение тру\фолс , но проблема в том что в меню, изменение в тексте происходит только со 2-3 нажатия, словно натива не успевает вернуть значение....я так понимаю ее нужно зафорсить или как вариант через второй натив менять ее значение................
Пробовал через второй натив менять значение в плагине Б, для плагина А...но там вообще не сработало. Может кто подскажет идею для решения?
Последнее редактирование модератором: