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

Тема в разделе "Counter-Strike: Global Offensive", создана пользователем AMD, 5 июн 2014.

  1. AMD

    AMD

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

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

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    PHP:
    public Action:CS_OnBuyCommand(client, const String:weapon[]) 

             return 
    Plugin_Handled
    }
     
    AMD и White Wolf нравится это.
  3. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.193
    Симпатии:
    424
    Вот уже скомпилированный:
     

    Вложения:

    • buy_block.sp
      Размер файла:
      117 байт
      Просмотров:
      16
    • buy_block.smx
      Размер файла:
      2,4 КБ
      Просмотров:
      1
    AMD нравится это.
  4. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    не поверишь, инклуд можно было не делать)
     
    AMD нравится это.
  5. AMD

    AMD

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    PHP:
    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat: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)
     
  7. AMD

    AMD

    Сообщения:
    180
    Симпатии:
    16
    В доках вот это нащёл и всё(по сути тоже самое):
    #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 не компилирует, пишет мол неизвестный параметр...:(
     
  8. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    AlmazON, не в ту сторону, нужно ловить команду вызова меню закупки. Сейчас с телефона - завтра поищу.
     
  9. AMD

    AMD

    Сообщения:
    180
    Симпатии:
    16
    Буду ждать :)
     
  10. SenatoR

    SenatoR Модератор

    Сообщения:
    714
    Симпатии:
    270
    Как вариант можно вообще удалить байзону.
    PHP:
    public OnMapStart()
    {
        new 
    iMaxEntities GetMaxEntities(), String:eName[64];
        for (new 
    i=MaxClients;i<iMaxEntities;i++)
        {
            if (
    IsValidEdict(i) && IsValidEntity(i) && GetEdictClassname(ieNamesizeof(eName)))
            {
                if(
    StrContains(eName"func_buyzone") != -1)
                {
                    
    AcceptEntityInput(i"Kill");
                }
            }
        }
    }
     
    AMD нравится это.
  11. AMD

    AMD

    Сообщения:
    180
    Симпатии:
    16
    Вариант, но не очень, в моей ситуации нужно сделать так как R1KO, отписал.
     
  12. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    AMD, да кстати, можно удалить зоны закупки как и все так и для определенной команды.
     
  13. AMD

    AMD

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Ну ты захотел! :-D Можно конечно, но не более чем, как меню голосования или Shop, а не так красиво, как стандартное.
     
  15. AMD

    AMD

    Сообщения:
    180
    Симпатии:
    16
    Естественно как shop, стандартное меню полюбому на клиенте, чисто меню допустим админки.
     
  16. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    Берёшь
    public Action:CS_OnBuyCommand(client, const String:weapon[])
    и вставляешь меню от списка оружия плагина DM после блокировки стандартного.
     
  17. R1KO

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    Сообщение можно заблокировать.

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

    AMD

    Сообщения:
    180
    Симпатии:
    16
    Не получается, вот что делаю:
    PHP:
    #include <sourcemod>

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

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

    R1KO Супер-модератор

    Сообщения:
    6.000
    Симпатии:
    2.992
    AMD, я нашел как отловить вызов меню покупки)))

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

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

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

    AMD

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

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