Как заблочить закупку?

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
AMD, лучше бы сказал, работает или нет. Я не проверял, у меня итак нет меню закупки на GunGame.
 

AMD

Участник
Сообщения
180
Реакции
18
AMD, лучше бы сказал, работает или нет. Я не проверял, у меня итак нет меню закупки на GunGame.

Нет не работает, но пытаеться:
L 06/07/2014 - 20:07:34: [SM] Displaying call stack trace for plugin "TestBuy.smx":
L 06/07/2014 - 20:07:34: [SM] [0] Line 11, TestBuy.sp::HookHUD()
L 06/07/2014 - 20:07:34: [SM] Plugin encountered error 21: Native is not bound
L 06/07/2014 - 20:07:34: [SM] Native "BfReadString" reported:

Скажите мне какую версию см юзать, 1.5.3 не пашет, пока юзаю снапшот
 

Webman

Nevermind
Сообщения
803
Реакции
330
Дабы не создавать новую тему, спрошу здесь.

Почему не работает этот код? Стандартное меню закупки открывается спокойно. Меню нет.
Надо чтобы меню закупки вообще не открывалось.

PHP:
public OnPluginStart()
{
    RegConsoleCmd("buymenu", cmd_BuyMenu);
}

public Action:cmd_BuyMenu(client, args)
{
    if (client > 0 && args < 1)
        OpenBuyMenu(client);
    PrintToChat(client, "#debug: Buymenu entered by %N", client);
    return Plugin_Handled;
}
 

Webman

Nevermind
Сообщения
803
Реакции
330
AlmazON, Таким образом можно сделать. Но мне надо чтобы нажатии клавиши открывалось свое меню покупок...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #49
Webman, либо:
PHP:
public OnPluginStart()
{
	AddCommandListener(cmd_BuyMenu, "buymenu");
}

public Action:cmd_BuyMenu(client, const String:sCommand[], args)
{
	OpenBuyMenu(client);
	PrintToChat(client, "#debug: Buymenu entered by %N", client);
	return Plugin_Handled;
}

Либо
PHP:
HookUserMessage(GetUserMessageId("VGUIMenu"),HookUserMessages,true);

public Action:HookUserMessages(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) 
{
	// проверяешь что это меню закупки
	return Plugin_Handled;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
мне надо чтобы нажатии клавиши открывалось свое меню покупок
Так впиши код перед return в строчке, что я дал:
PHP:
public Action:CS_OnBuyCommand(client, const String:weapon[])
{
	OpenBuyMenu(client); 
    PrintToChat(client, "#debug: Buymenu entered by %N", client);
	return Plugin_Handled;
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #51
AlmazON, не не. В твоем коде блочится сама покупка оружия, а ему нужно заблочить всё меню.
 

Webman

Nevermind
Сообщения
803
Реакции
330
R1KO, Попробую, отпишу.

AlmazON, Да, если то дефолт меню не будет юзаться, то можно удалить.

PHP:
decl String:szClass[65];
 if( GetConVarInt( bztoggle ))
 {
  for (new i = MaxClients; i <= GetMaxEntities(); i++) 
  { 
   if(IsValidEdict(i) && IsValidEntity(i)) 
   { 
    GetEdictClassname(i, szClass, sizeof(szClass)); 
    if(StrEqual("func_buyzone", szClass)) 
    { 
     RemoveEdict(i); 
    } 
   } 
  }  
 }

Зоны покупки где лучше удалять? В OnMapStart?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #54
Фу ,каку сделал. Получи до цикла, запиши в переменную и юзай её, а то будет получать при каждом сравнении.


Преинкремент быстрее


Создал до проверки квара, а нужно после.
 

Webman

Nevermind
Сообщения
803
Реакции
330
R1KO, Первый вариант вообще ни в какую не работает. Попробовал со вторым. Все равно работает. Может я неправильно проверял:
PHP:
public Action:HookUserMessages(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) 
{
    decl String:type[10]; 
    BfReadString(bf, type, sizeof(type)); 
    
    if(StrEqual(type, "buymenu"))
    {
        return Plugin_Handled;
    }
    
    return Plugin_Continue; 
}

P.S. код выше не мой, это с какого-то топика на аллиедах взял.. :D

Добавлено через 10 минут
Ничего не пашет и не блокирует
PHP:
if(strcmp(type, "buy", 8) == 0)

PHP:
if(strcmp(type, "buy", false) == 0)

PHP:
if(strcmp(type, "buymenu", 8) == 0)

PHP:
if(strcmp(type, "buymenu", false) == 0)
 
Последнее редактирование:
N

NiGaByte

Ну вот код здесь взят:
PHP:
public OnMapStart() 
{ 
    new iMaxEntities = GetMaxEntities(), String:eName[64]; 
    for (new i=MaxClients;i<iMaxEntities;i++) 
    { 
        if (IsValidEdict(i) && IsValidEntity(i) && GetEdictClassname(i, eName, sizeof(eName))) 
        { 
            if(StrContains(eName, "func_buyzone") != -1) 
            { 
                AcceptEntityInput(i, "Kill"); 
            } 
        } 
    } 
}

Если блокните сообщение "Вы находитесь не в зоне закупки", то вообще огонь, главное кодом поделитесь, а там дальше вызывайте что хотите...
а чтобы вызвать свою менюшку по дефолтной команде на кнопку закупки, то посмотрите это, хотя я подозреваю что это плохой пример, точнее не тот который может здесь помочь, но влюбом случае давайте думать.

Добавлено через 20 минут
Перечитал весь топик, походу думать не о чём.
 
Последнее редактирование модератором:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
OnConfigsExecuted() для данного случая подойдёт.
PHP:
if( GetConVarInt( bztoggle ))
{
	decl String:szClass[14];
	for (new i = GetEntityCount(); i > MaxClients; --i) 
	{ 
		if(IsValidEdict(i))
		{ 
			GetEdictClassname(i, szClass, 14); 
			if(strcmp("func_buyzone", szClass) == 0) 
			{ 
				RemoveEdict(i); 
			} 
		} 
	}
 

Webman

Nevermind
Сообщения
803
Реакции
330
NiGaByte, Попробовал с этим фонариком сделать. Не получилось. Работал на CSS, в кач-ве пример взял +reload. Я так понял, что саму команду покупки никак нельзя захукать, типо защищено. В ксго работает хук +lookatweapon (просмотр оружия), потому что это новоиспеченная команда, видимо никакой защиты на нее не ставилось.
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Так и не удалось хукнуть момент нажатии кнопки "B" ?
 
Последнее редактирование:
Сверху Снизу