Если в руках оружие, то выполнить

Тема в разделе "Программирование / Скриптинг", создана пользователем Webman, 22 дек 2013.

  1. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Здравствуйте.

    Помогите, хочу сделать небольшой плагин на sourcemod.
    Так как не особо сильно разбираюсь, нуждаюсь в вашей помощи.
    Как сделать небольшое условие:
    "Если в руках оружие (в моем случаи это AWP), то выполнить ... (мой код)"
    То есть, если в руках клиента AWP, то выполнить действия.

    Подскажите, пожалуйста. Заранее спасибо.
     
  2. wanted241

    wanted241 Real-Gamer.Ru

    Сообщения:
    783
    Симпатии:
    355
    Код:
    new weaponIndex = GetEntProp(client, "Prop_Data", "m_hActiveWeapon");
    decl String:WpnName[64];
    GetEdictClassname(weaponIndex, WpnName, sizeof(WpnName));
    if (StrEqual(WpnName, "weapon_awp")) {
      .............
    }
    Мб так?
     
    Webman нравится это.
  3. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Спасибо, попробую.

    Добавлено через 47 секунд
    Подскажите, пожалуйста, как покрасить оружие синим цветом (авп).

    Добавлено через 1 час 49 минут
    Еще небольшой вопрос. Можно ли в одном
    PHP:
    public OnEntityCreated () {

    }
    Разместить еще один public:
    PHP:
    public OnEntityCreated () {
    public 
    Action:blablabla() {

    }

    }
    Можно так сделать?
     
    Последнее редактирование: 22 дек 2013
  4. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Webman нравится это.
  5. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    2. Хочу сделать в выданном оружие 2 функции (только вот один работает через Action, другой - через OnEntityCreated). По отдельности в плагине они распространяются на все оружие (то есть и на выданное плагином по команде и отдельно его купив). Мне надо их объединить, чтобы они действовали на выданное оружие только.
     
  6. R1KO

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

    Сообщения:
    5.993
    Симпатии:
    2.989
    Webman, сделай через функцию
     
    Webman нравится это.
  7. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    R1KO, например?
     
  8. R1KO

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

    Сообщения:
    5.993
    Симпатии:
    2.989
    Webman,
    PHP:
    public OnEntityCreated()
    {
    //получаешь ентити и предаешь его в функцию
    MyFunc(ent);


    public 
    Action:blablabla()
    {
    // так же получаешь ентити и предаешь его в функцию
    MyFunc(ent);
    }

    MyFunc(ent)
    {
    //обрабатываешь
    }
     
    Webman нравится это.
  9. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Спасибо, попробую. Потом отпишусь.

    Добавлено через 18 часов 15 минут
    В общем вот:
    Выдаю клиенту оружие:
    PHP:
    GivePlayerItem(client"weapon_awp");
    Как его покрасить (именно у него только)? Подскажите, пожалуйста.
     
    Последнее редактирование: 23 дек 2013
  10. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Помогите, пожалуйста!
    В общем, вот - выдаю оружие, накладывается спрайт, все нормально:
    PHP:
    #include <sourcemod>
    #include <sdktools>
    #include <cstrike>
    #include <sdkhooks>

    #define EFFECT_MODEL "sprites/redglow1.vmt"

    public OnMapStart()
    {
        
    PrecacheModel(EFFECT_MODEL);
    }

    ...

    public 
    Action:Give(client)
    {
        new 
    weapon GetPlayerWeaponSlot(client0);
        if (
    weapon != -|| weapon 0)
        {
        
    CS_DropWeapon(clientweapontruefalse);
        }
        
    GivePlayerItem(client"weapon_mp5navy");
        return 
    Plugin_Handled;
        }
    }

    public 
    OnEntityCreated(iEntity, const String:sClassName[])
    {
         if ( 
    StrEqual(sClassName"weapon_mp5navy") )
         {
             new 
    iGlowEntity CreateEntityByName("env_glow");
             
    DispatchKeyValue(iGlowEntity"model"EFFECT_MODEL);
             
    DispatchKeyValue(iGlowEntity"rendermode""3");            // свечение
             
    DispatchKeyValue(iGlowEntity"scale""1.0");               // размер свечения
             
    DispatchKeyValue(iGlowEntity"renderamt""255");           // прозрачность
             
    DispatchKeyValue(iGlowEntity"rendercolor""176 21 21");     // цвет
        
    SetEntityRenderColor(iEntity1202121200); 
              
             if ( 
    DispatchSpawn(iGlowEntity) )
             {
                 
    decl String:sTargetName[32], Float:fOrigin[3];
                 
    Format(sTargetNamesizeof(sTargetName) - 1"weapon_mp5navy_%d"iGlowEntity);
                 
    DispatchKeyValue(iEntity"targetname"sTargetName);
                 
    GetEntPropVector(iEntityProp_Data"m_vecOrigin"fOrigin);
                  
                 
    SetVariantString(sTargetName);
                 
    AcceptEntityInput(iGlowEntity"SetParent");
                  
                 
    TeleportEntity(iGlowEntityfOriginNULL_VECTORNULL_VECTOR);
                 
    AcceptEntityInput(iGlowEntity"ShowSprite");
                 
    AcceptEntityInput(iGlowEntity"TurnOn");
             }
         }
    }
    Но как сделать так, чтобы красилось только выданное оружие?


    R1KO, Кстати пробовал сделать окраску - не работает. В коде выше вставил, не работает, пробовал с SetEntityRenderMode(iEntity, RENDER_TRANSCOLOR); и без. Не красится оружие...

    Заранее спасибо. Надеюсь, найдутся добрые люди.
     
  11. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Код:
    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>
    #pragma semicolon 1
    
    // переменная-показатель, выдано ли плагином или нет 
    new bool:   g_bCustomSpawn = false;
                
    public OnPluginStart()
    {
        RegConsoleCmd("sm_test", Command_Test);
    }
    
    public Action:Command_Test(iClient, iArgs)
    {
        // если запустили команду, то зафиксируем, что следующее созданное
        // оружие должно быть перекрашено
        g_bCustomSpawn = true;
        GivePlayerItem(iClient, "weapon_mp5navy");
        return Plugin_Handled;
    }
    
    public OnEntityCreated(iEntity, const String:sClassName[])
    {
        // если это оружие и нужна перекраска
        if ( g_bCustomSpawn && StrEqual(sClassName, "weapon_mp5navy") )
        {
            // отметим, что до след вызова команды нам не нужно перекрашивать оружие
            g_bCustomSpawn = false;
            // оружие меняет свой статус при поднятии\смене\выбрасывании. поэтому 
            // хукаем все изменения статуса оружия
            SDKHook(iEntity, SDKHook_Think, WeaponThink);
        }
    }
    
    public WeaponThink(iEntity)
    {
        // меняем цвет оружия
        SetEntityRenderMode(iEntity, RENDER_TRANSCOLOR);
        SetEntityRenderColor(iEntity, 0, 0, 255, 255);
    }
    Только покраска. Дальше возникнуть проблем не должно. Спрайт достаточно создать один раз.
     
    Серый™, Webman, Konstantin и ещё 1-му нравится это.