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

AMD

Участник
Сообщения
180
Реакции
18
Нужно полностью запретить игрокам закупаться... :)

P.S. Извиняюсь если уже было :oops:
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #3
Вот уже скомпилированный:
 

Вложения

  • buy_block.sp
    117 байт · Просмотры: 53
  • buy_block.smx
    2.4 КБ · Просмотры: 35
  • Мне нравится
Реакции: AMD

TolikCorp

Участник
Сообщения
874
Реакции
334
не поверишь, инклуд можно было не делать)
 
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
PHP:
public Action:CS_OnBuyCommand(client, const String:weapon[]) 
{ 
         return Plugin_Handled; 
}

Работает, но хочется запретить открытие меню, на том уровне когда юзают клавишу b для закупа.
Можно сделать так чтобы нажимаешь b, а в ответ не чего не происходит?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
нажимаешь b, а в ответ не чего не происходит?
PHP:
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
	if (buttons & IN_ATTACK)
	{
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
Вместо IN_ATTACK вставить кнопку закупки. К сожалению, не нашёл её:
// These defines are for client button presses.
#define IN_ATTACK (1 << 0)
#define IN_JUMP (1 << 1)
#define IN_DUCK (1 << 2)
#define IN_FORWARD (1 << 3)
#define IN_BACK (1 << 4)
#define IN_USE (1 << 5)
#define IN_CANCEL (1 << 6)
#define IN_LEFT (1 << 7)
#define IN_RIGHT (1 << 8)
#define IN_MOVELEFT (1 << 9)
#define IN_MOVERIGHT (1 << 10)
#define IN_ATTACK2 (1 << 11)
#define IN_RUN (1 << 12)
#define IN_RELOAD (1 << 13)
#define IN_ALT1 (1 << 14)
#define IN_ALT2 (1 << 15)
#define IN_SCORE (1 << 16) /**< Used by client.dll for when scoreboard is held down */
#define IN_SPEED (1 << 17) /**< Player is holding the speed key */
#define IN_WALK (1 << 18) /**< Player holding walk key */
#define IN_ZOOM (1 << 19) /**< Zoom key for HUD zoom */
#define IN_WEAPON1 (1 << 20) /**< weapon defines these bits */
#define IN_WEAPON2 (1 << 21) /**< weapon defines these bits */
#define IN_BULLRUSH (1 << 22)
#define IN_GRENADE1 (1 << 23) /**< grenade 1 */
#define IN_GRENADE2 (1 << 24) /**< grenade 2 */
#define IN_ATTACK3 (1 << 25)
 

AMD

Участник
Сообщения
180
Реакции
18
PHP:
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
	if (buttons & IN_ATTACK)
	{
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
Вместо IN_ATTACK вставить кнопку закупки. К сожалению, не нашёл её:
// These defines are for client button presses.
#define IN_ATTACK (1 << 0)
#define IN_JUMP (1 << 1)
#define IN_DUCK (1 << 2)
#define IN_FORWARD (1 << 3)
#define IN_BACK (1 << 4)
#define IN_USE (1 << 5)
#define IN_CANCEL (1 << 6)
#define IN_LEFT (1 << 7)
#define IN_RIGHT (1 << 8)
#define IN_MOVELEFT (1 << 9)
#define IN_MOVERIGHT (1 << 10)
#define IN_ATTACK2 (1 << 11)
#define IN_RUN (1 << 12)
#define IN_RELOAD (1 << 13)
#define IN_ALT1 (1 << 14)
#define IN_ALT2 (1 << 15)
#define IN_SCORE (1 << 16) /**< Used by client.dll for when scoreboard is held down */
#define IN_SPEED (1 << 17) /**< Player is holding the speed key */
#define IN_WALK (1 << 18) /**< Player holding walk key */
#define IN_ZOOM (1 << 19) /**< Zoom key for HUD zoom */
#define IN_WEAPON1 (1 << 20) /**< weapon defines these bits */
#define IN_WEAPON2 (1 << 21) /**< weapon defines these bits */
#define IN_BULLRUSH (1 << 22)
#define IN_GRENADE1 (1 << 23) /**< grenade 1 */
#define IN_GRENADE2 (1 << 24) /**< grenade 2 */
#define IN_ATTACK3 (1 << 25)
В доках вот это нащёл и всё(по сути тоже самое):
#define IN_ATTACK (1 << 0)
#define IN_JUMP (1 << 1)
#define IN_DUCK (1 << 2)
#define IN_FORWARD (1 << 3)
#define IN_BACK (1 << 4)
#define IN_USE (1 << 5)
#define IN_CANCEL (1 << 6)
#define IN_LEFT (1 << 7)
#define IN_RIGHT (1 << 8)
#define IN_MOVELEFT (1 << 9)
#define IN_MOVERIGHT (1 << 10)
#define IN_ATTACK2 (1 << 11)
#define IN_RUN (1 << 12)
#define IN_RELOAD (1 << 13)
#define IN_ALT1 (1 << 14)
#define IN_ALT2 (1 << 15)
#define IN_SCORE (1 << 16) /**< Used by client.dll for when scoreboard is held down */
#define IN_SPEED (1 << 17) /**< Player is holding the speed key */
#define IN_WALK (1 << 18) /**< Player holding walk key */
#define IN_ZOOM (1 << 19) /**< Zoom key for HUD zoom */
#define IN_WEAPON1 (1 << 20) /**< weapon defines these bits */
#define IN_WEAPON2 (1 << 21) /**< weapon defines these bits */
#define IN_BULLRUSH (1 << 22)
#define IN_GRENADE1 (1 << 23) /**< grenade 1 */
#define IN_GRENADE2 (1 << 24) /**< grenade 2 */
#define IN_ATTACK3 (1 << 25)
#define FL_ONGROUND (1 << 0) /**< At rest / on the ground */
#define FL_DUCKING (1 << 1) /**< Player flag -- Player is fully crouched */
#define FL_WATERJUMP (1 << 2) /**< player jumping out of water */
#define FL_ONTRAIN (1 << 3) /**< Player is _controlling_ a train, so movement commands should be ignored on client during prediction. */
#define FL_INRAIN (1 << 4) /**< Indicates the entity is standing in rain */
#define FL_FROZEN (1 << 5) /**< Player is frozen for 3rd person camera */
#define FL_ATCONTROLS (1 << 6) /**< Player can't move, but keeps key inputs for controlling another entity */
#define FL_CLIENT (1 << 7) /**< Is a player */
#define FL_FAKECLIENT (1 << 8) /**< Fake client, simulated server side; don't send network messages to them */
#define PLAYER_FLAG_BITS 9
#define FL_INWATER (1 << 9) /**< In water */
#define FL_FLY (1 << 10) /**< Changes the SV_Movestep() behavior to not need to be on ground */
#define FL_SWIM (1 << 11) /**< Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) */
#define FL_CONVEYOR (1 << 12)
#define FL_NPC (1 << 13)
#define FL_GODMODE (1 << 14)
#define FL_NOTARGET (1 << 15)
#define FL_AIMTARGET (1 << 16) /**< set if the crosshair needs to aim onto the entity */
#define FL_PARTIALGROUND (1 << 17) /**< not all corners are valid */
#define FL_STATICPROP (1 << 18) /**< Eetsa static prop! */
#define FL_GRAPHED (1 << 19) /**< worldgraph has this ent listed as something that blocks a connection */
#define FL_GRENADE (1 << 20)
#define FL_STEPMOVEMENT (1 << 21) /**< Changes the SV_Movestep() behavior to not do any processing */
#define FL_DONTTOUCH (1 << 22) /**< Doesn't generate touch functions, generates Untouch() for anything it was touching when this flag was set */
#define FL_BASEVELOCITY (1 << 23) /**< Base velocity has been applied this frame (used to convert base velocity into momentum) */
#define FL_WORLDBRUSH (1 << 24) /**< Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something) */
#define FL_OBJECT (1 << 25) /**< Terrible name. This is an object that NPCs should see. Missiles, for example. */
#define FL_KILLME (1 << 26) /**< This entity is marked for death -- will be freed by game DLL */
#define FL_ONFIRE (1 << 27) /**< You know... */
#define FL_DISSOLVING (1 << 28) /**< We're dissolving! */
#define FL_TRANSRAGDOLL (1 << 29) /**< In the process of turning into a client side ragdoll. */
#define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) /**< pusher that can't be blocked by the player */
#define FL_FREEZING (1 << 31) /**< We're becoming frozen! */
#define FL_EP2V_UNKNOWN1 (1 << 31) /**< Unknown */

пробовал IN_BUYMENU не компилирует, пишет мол неизвестный параметр...:(
 

R1KO

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

SenatoR

Участник
Сообщения
773
Реакции
344
Как вариант можно вообще удалить байзону.
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");
			}
		}
	}
}
 
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
Как вариант можно вообще удалить байзону.
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");
			}
		}
	}
}

Вариант, но не очень, в моей ситуации нужно сделать так как R1KO, отписал.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
AMD, да кстати, можно удалить зоны закупки как и все так и для определенной команды.
 

AMD

Участник
Сообщения
180
Реакции
18
AMD, да кстати, можно удалить зоны закупки как и все так и для определенной команды.

Но веть тогда будет писать при попытке закупа что игрок покинул зону закупки, я тут думал, можно ли сделать так:
1 - Удалить зоны закупки у обеих команд, при этом чтобы при попытке закупа не выводилось сообщение "Вы покинули зону закупки"
2 - Когда юзаеться кнопка закупа открываеться меню(например свой магазин)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Когда юзаеться кнопка закупа открываеться меню(например свой магазин)
Ну ты захотел! :-D Можно конечно, но не более чем, как меню голосования или Shop, а не так красиво, как стандартное.
 

AMD

Участник
Сообщения
180
Реакции
18
Ну ты захотел! :-D Можно конечно, но не более чем, как меню голосования или Shop, а не так красиво, как стандартное.

Естественно как shop, стандартное меню полюбому на клиенте, чисто меню допустим админки.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #17
Но веть тогда будет писать при попытке закупа что игрок покинул зону закупки, я тут думал, можно ли сделать так:
1 - Удалить зоны закупки у обеих команд, при этом чтобы при попытке закупа не выводилось сообщение "Вы покинули зону закупки"
2 - Когда юзаеться кнопка закупа открываеться меню(например свой магазин)

Сообщение можно заблокировать.

Свой магазин открыть.. можно попробывать ловить
AddCommandListener(Command_Buy, "buy");
 

AMD

Участник
Сообщения
180
Реакции
18
Сообщение можно заблокировать.

Свой магазин открыть.. можно попробывать ловить
AddCommandListener(Command_Buy, "buy");

Не получается, вот что делаю:
PHP:
#include <sourcemod>

public OnPluginStart()
{      
		AddCommandListener(Command_Buy, "buy");
}
В доках рылся, Command_Buy события там нету, пытался что либо менять не выходит...

Добавлено через 31 минуту
Ещё скажите пожалуйста как заблочить месадж, о том что игрок покинул зону закупки
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #19
AMD, я нашел как отловить вызов меню покупки)))

PHP:
public OnPluginStart()
{
	HookUserMessage(GetUserMessageId("VGUIMenu"), HookHUD, true);
}

public Action:HookHUD(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) 
{
    /* Тут делаем нужные проверки и блочим вывод. */
	decl String:type[16];
	BfReadString(bf, type, sizeof(type));

	if (strcmp(type, "buy") == 0)  return Plugin_Handled;
	return Plugin_Continue;
}
В коде я не уверен т.к. не проверял, но все ровно я красавчик что хоть это нарыл. Думаю кому-то этог поможет (ну и всяким барыгам само собой).
 
Последнее редактирование:
  • Мне нравится
Реакции: AMD

AMD

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

PHP:
public OnPluginStart()
{
	HookUserMessage(GetUserMessageId("VGUIMenu"), HookHUD, true);
}

public Action:HookHUD(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) 
{
    /* Тут делаем нужные проверки и блочим вывод. */
	decl String:type[16];
	BfReadString(bf, type, sizeof(type));

	if (strcmp(type, "buy", 8) == 0)  return Plugin_Handled;
}
В коде я не уверен т.к. не проверял, но все ровно я красавчик что хоть это нарыл. Думаю кому-то этог поможет (ну и всяким барыгам само собой).

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

R1KO, помоги плиз, буть так любезен))))
 
Сверху Снизу