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

Webman

Nevermind
Сообщения
803
Реакции
330
Здравствуйте.

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

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

wanted241

Real-Gamer.Ru
Сообщения
428
Реакции
161
C-подобный:
new weaponIndex = GetEntProp(client, "Prop_Data", "m_hActiveWeapon");
decl String:WpnName[64];
GetEdictClassname(weaponIndex, WpnName, sizeof(WpnName));
if (StrEqual(WpnName, "weapon_awp")) {
  .............
}

Мб так?
 

Webman

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

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

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

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

}

}
Можно так сделать?
 
Последнее редактирование:

Webman

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
Webman, сделай через функцию
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
Webman,
PHP:
public OnEntityCreated()
{
//получаешь ентити и предаешь его в функцию
MyFunc(ent);
} 

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

MyFunc(ent)
{
//обрабатываешь
}
 

Webman

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

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

Webman

Nevermind
Сообщения
803
Реакции
330
Помогите, пожалуйста!
В общем, вот - выдаю оружие, накладывается спрайт, все нормально:
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(client, 0);
    if (weapon != -1 || weapon < 0)
    {
    CS_DropWeapon(client, weapon, true, false);
    }
    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(iEntity, 120, 21, 21, 200); 
          
         if ( DispatchSpawn(iGlowEntity) )
         {
             decl String:sTargetName[32], Float:fOrigin[3];
             Format(sTargetName, sizeof(sTargetName) - 1, "weapon_mp5navy_%d", iGlowEntity);
             DispatchKeyValue(iEntity, "targetname", sTargetName);
             GetEntPropVector(iEntity, Prop_Data, "m_vecOrigin", fOrigin);
              
             SetVariantString(sTargetName);
             AcceptEntityInput(iGlowEntity, "SetParent");
              
             TeleportEntity(iGlowEntity, fOrigin, NULL_VECTOR, NULL_VECTOR);
             AcceptEntityInput(iGlowEntity, "ShowSprite");
             AcceptEntityInput(iGlowEntity, "TurnOn");
         }
     }
}
Но как сделать так, чтобы красилось только выданное оружие?


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

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

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
C-подобный:
#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);
}

Только покраска. Дальше возникнуть проблем не должно. Спрайт достаточно создать один раз.
 
Сверху Снизу