Переписать плагин

Тема в разделе "Запросы", создана пользователем ₮αй₮оβый, 14 дек 2015.

  1. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    нужно изменить плагин

    /*
    * Jail MedKit plugin by s1dex
    * Desc: CT players can throw medkits for players
    */

    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>

    #define VERSION "1.0"

    #define TEAM_T 2
    #define TEAM_CT 3

    #define HEALTHKIT_SOUND "items/medshot4.wav"
    #define HEALTHKIT_MODEL "models/items/healthkit.mdl"

    //Cvars
    new Handle:g_hMedKitCount = INVALID_HANDLE;
    new Handle:g_hMedKitLifeTime = INVALID_HANDLE;
    new Handle:g_hMedKitRegenTime = INVALID_HANDLE;

    //Client variables
    new g_iMedKitCount[MAXPLAYERS+1];

    //Timers
    new Handle:g_hMedKitTimer[2048];
    new Handle:g_hClientRegenKits[MAXPLAYERS+1];

    //Offset
    new g_iCollision = -1;
    new g_iSolidFlags = -1;

    public Plugin:myinfo = {
    name = "JailMedKit",
    author = "s1dex",
    description = "CT can throw medkits",
    version = VERSION,
    url = "http://adminexe.ru/showthread.php?t=773"
    };

    public OnPluginStart()
    {
    g_hMedKitCount = CreateConVar("sm_jailmedkit_count", "2", "Максимальное количетсво аптечек на руках у CT");
    g_hMedKitLifeTime = CreateConVar("sm_jailmedkit_lifetime", "15", "Время \"жизни\" аптечек");
    g_hMedKitRegenTime = CreateConVar("sm_jailmedkit_regentime", "10", "Время регенерации аптечек");

    RegConsoleCmd("hl", CmdThrowMedKit);

    HookEvent("player_spawn", EventPlayerSpawn);

    if((g_iCollision = FindSendPropOffs("CBaseEntity", "m_Collision")) == -1)
    LogError("Could not find offset for CBaseEntity::m_Collision");

    if((g_iSolidFlags = FindSendPropOffs("CBaseEntity", "m_usSolidFlags")) == -1)
    LogError("Could not find offset for CBaseEntity::m_usSolidFlags");

    AutoExecConfig(true, "jailmedkit");
    }

    public OnClientPutInServer(client)
    {
    if (g_hClientRegenKits[client] != INVALID_HANDLE)
    CloseHandle(g_hClientRegenKits[client]);
    g_hClientRegenKits[client] = CreateTimer(GetConVarFloat(g_hMedKitRegenTime), TimerRegen, client, TIMER_REPEAT);
    }

    public OnClientDisconnect(client)
    {
    if (g_hClientRegenKits[client] != INVALID_HANDLE)
    CloseHandle(g_hClientRegenKits[client]);

    g_hClientRegenKits[client] = INVALID_HANDLE;
    }

    public OnMapStart()
    {
    PrecacheModel(HEALTHKIT_MODEL, true);
    PrecacheSound(HEALTHKIT_SOUND, true);
    }

    public Action:OnTouch(medkit, entity)
    {
    if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
    return;
    }

    SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));

    new Float:origin[3];
    EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);

    AcceptEntityInput(medkit, "Kill");
    if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
    CloseHandle(g_hMedKitTimer[medkit]);

    g_hMedKitTimer[medkit] = INVALID_HANDLE;
    }

    public Action:CmdThrowMedKit(client, args)
    {
    if (GetClientTeam(client) != TEAM_CT) {
    PrintToChat(client, "\x03[Аптечка] \x01Данную команду могут использовать только CT");
    return Plugin_Handled;
    }

    if (!IsPlayerAlive(client)) {
    PrintToChat(client, "\x03[Аптечка] \x01Вы мертвы");
    return Plugin_Handled;
    }

    if (!g_iMedKitCount[client]) {
    PrintToChat(client, "\x03[Аптечка] \x01У Вас нет доступных аптечек");
    return Plugin_Handled;
    }

    CreateMedKit(client);
    g_iMedKitCount[client]--;
    return Plugin_Handled;
    }

    public Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    g_iMedKitCount[client] = GetConVarInt(g_hMedKitCount);

    //Advert
    if (GetClientTeam(client) == 3)
    PrintToChat(client, "\x03[Аптечка] \x01Вы можете кинуть аптечку командой !hl");
    }

    public Action:TimerRegen(Handle:timer, any:client)
    {
    if (IsClientInGame(client) && g_iMedKitCount[client] < GetConVarInt(g_hMedKitCount))
    g_iMedKitCount[client]++;

    return Plugin_Continue;
    }

    public Action:TimerDissolve(Handle:timer, any:entity)
    {
    if (IsValidEntity(entity))
    {
    decl String:dname[16];
    Format(dname, sizeof(dname), "dis_%d", entity);
    DispatchKeyValue(entity, "targetname", dname);
    new diss = CreateEntityByName("env_entity_dissolver");
    DispatchKeyValue(diss, "dissolvetype", "3");
    DispatchKeyValue(diss, "target", dname);
    AcceptEntityInput(diss, "Dissolve");
    AcceptEntityInput(diss, "kill");
    }

    g_hMedKitTimer[entity] = INVALID_HANDLE;
    }

    stock CreateMedKit(client)
    {
    new entity = CreateEntityByName("prop_physics");
    new Float:vecPos[3], Float:vecVel[3], Float:clAngles[3], Float:fwd[3];
    GetClientEyePosition(client, vecPos);
    SetEntityModel(entity, HEALTHKIT_MODEL);
    SetEntProp(entity, Prop_Data, "m_CollisionGroup", 4);
    SetEntProp(entity, Prop_Data, "m_MoveCollide", 0);
    SetSolidFlags(entity, 152);
    SetEntProp(entity, Prop_Send, "m_PredictableID", client);
    SetEntityMoveType(entity, MOVETYPE_VPHYSICS);

    GetClientAbsAngles(client, clAngles);
    GetAngleVectors(clAngles, fwd, NULL_VECTOR, NULL_VECTOR);
    NormalizeVector(fwd, vecVel);
    ScaleVector(vecVel, 150.0);

    TeleportEntity(entity, vecPos, NULL_VECTOR, NULL_VECTOR);
    DispatchSpawn(entity);
    TeleportEntity(entity, NULL_VECTOR, NULL_VECTOR, vecVel);

    SDKHook(entity, SDKHook_StartTouchPost, OnTouch);
    g_hMedKitTimer[entity] = CreateTimer(GetConVarFloat(g_hMedKitLifeTime), TimerDissolve, entity);
    }

    SetSolidFlags(iEntity, iFlags)
    {
    if(g_iCollision == -1 || g_iSolidFlags == -1) return;
    SetEntData(iEntity, g_iCollision + g_iSolidFlags, iFlags, 2, true);
    }

    аптечка блочит игроков при замени prop_physics на prop_dynamic_override она не летит, это все что я смог найти в инете

    И если не сложно добавить проверку,когда направляешь прицел на игрока со 100 хп жмешь команду !hl, она бы не вылетала,а в чате писало бы, что в лечение он не нуждается

    это тоже не помогает

    new imode;
    new entity = CreateEntityByName("prop_dynamic_override");
    SetEntityModel(entity, HEALTHKIT_MODEL);
    imode & 32 ? SetEntProp(entity, Prop_Send, "m_CollisionGroup", 1):0;
    SetEntProp(entity, Prop_Send, "m_nSolidType", 0);
    SetSolidFlags(entity, 152);
    SetEntProp(entity, Prop_Send, "m_PredictableID", client);
    SetEntityMoveType(entity, MOVETYPE_VPHYSICS);
     
    Последнее редактирование: 15 дек 2015
  2. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    народ помогите

    Добавлено через 8 минут
    устанавливаю этот код хилка не блочит, но весит над головой, а надо чтобы летела куда показывает прицел

    stock CreateMedKit(client)
    {
    new imode;
    new entity = CreateEntityByName("prop_dynamic_override");
    new Float:vecPos[3], Float:vecVel[3], Float:clAngles[3], Float:fwd[3];
    GetClientEyePosition(client, vecPos);
    SetEntityModel(entity, HEALTHKIT_MODEL);
    imode & 32 ? SetEntProp(entity, Prop_Send, "m_CollisionGroup", 1):0;
    SetEntProp(entity, Prop_Send, "m_nSolidType", 0);
    SetSolidFlags(entity, 152);
    SetEntProp(entity, Prop_Send, "m_PredictableID", client);
    SetEntityMoveType(entity, MOVETYPE_VPHYSICS);
     
    Последнее редактирование: 17 дек 2015
  3. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    я так понял,что за это отвечает m_CollisionGroup, но не знаю какую цифру ставить, помогите
     
  4. NeXxX

    NeXxX

    Сообщения:
    320
    Симпатии:
    18
    так смотри и сам себе поможешь_)
     
  5. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    какие вообще цифра можно ставить, а я уже все вроде перепробовал, результат 0
     
  6. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Код:
    SetEntProp(client, Prop_Data, "m_CollisionGroup", flags);
    
    Here are a list of flag values you can use (I found in another post and its usefull):
    
    --------------------------------------------
    FLAG  NAME                           NOTES
    --------------------------------------------
     0     COLLISION_GROUP_NONE           
     1     COLLISION_GROUP_DEBRIS,             Collides with nothing but world and static stuff
     2     COLLISION_GROUP_DEBRIS_TRIGGER,     Same as debris, but hits triggers
     3     COLLISION_GROUP_INTERACTIVE_DEBRIS  Collides with everything except other interactive debris or debris
     4     COLLISION_GROUP_INTERACTIVE         Collides with everything except interactive debris or debris
     5     COLLISION_GROUP_PLAYER              This is the default behavior expected for most prop_physics
     6     COLLISION_GROUP_BREAKABLE_GLASS,
     7     COLLISION_GROUP_VEHICLE,
     8     COLLISION_GROUP_PLAYER_MOVEMENT   For HL2, same as Collision_Group_Player
     9     COLLISION_GROUP_NPC               Generic NPC group
    10     COLLISION_GROUP_IN_VEHICLE        For any entity inside a vehicle
    11     COLLISION_GROUP_WEAPON            For any weapons that need collision detection
    12     COLLISION_GROUP_VEHICLE_CLIP      Vehicle clip brush to restrict vehicle movement
    13     COLLISION_GROUP_PROJECTILE        Projectiles!
    14     COLLISION_GROUP_DOOR_BLOCKER      Blocks entities not permitted to get near moving doors
    15     COLLISION_GROUP_PASSABLE_DOOR     Doors that the player shouldn't collide with
    16     COLLISION_GROUP_DISSOLVING        Things that are dissolving are in this group
    17     COLLISION_GROUP_PUSHAWAY          Nonsolid on client and server, pushaway in player code
    18     COLLISION_GROUP_NPC_ACTOR         Used so NPCs in scripts ignore t
    Т.е. цифры от 0 до 18. NoBlock обычно 2, обычный режим - 4.
    PHP:
    decl target;
    if (
    < (target GetClientAimTarget(client)))
    {
        if (
    GetClientHealth(target) < 100)
        {
            
    //Выдать аптечку.
        
    }
        else 
    PrintToChat(client"Игрок %N не нуждается в лечении."target);
    }
     
  7. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    при 2 не блочит, но теперь она летит только вперед,а не куда прицел показываю
     
  8. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    тема актуальна
     
  9. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Под прицелом оставь "блок" аптечки по умолчанию - пусть себе летит.
    А тут отдельно выдавать 2 - аптечка всё равно уже долетела до цели.
     
  10. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    А можно готовый код
     
  11. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    PHP:
    /*
     * Jail MedKit plugin by s1dex
     * Desc: CT players can throw medkits for players
     */

     #include <sourcemod>
     #include <sdktools>
     #include <sdkhooks>

     #define VERSION "1.0"

     #define TEAM_T 2
     #define TEAM_CT 3

     #define HEALTHKIT_SOUND "items/medshot4.wav"
     #define HEALTHKIT_MODEL "models/items/healthkit.mdl"

     //Cvars
     
    new Handle:g_hMedKitCount INVALID_HANDLE;
     new 
    Handle:g_hMedKitLifeTime INVALID_HANDLE;
     new 
    Handle:g_hMedKitRegenTime INVALID_HANDLE;

     
    //Client variables
     
    new g_iMedKitCount[MAXPLAYERS+1];

     
    //Timers
     
    new Handle:g_hMedKitTimer[2048];
     new 
    Handle:g_hClientRegenKits[MAXPLAYERS+1];

     
    //Offset
     
    new g_iCollision = -1;
     new 
    g_iSolidFlags = -1;

     public 
    Plugin:myinfo = {
     
    name "JailMedKit",
     
    author "s1dex",
     
    description "CT can throw medkits",
     
    version VERSION,
     
    url "http://adminexe.ru/showthread.php?t=773"
     
    };

     public 
    OnPluginStart()
     {
     
    g_hMedKitCount CreateConVar("sm_jailmedkit_count""2""Максимальное количетсво аптечек на руках у CT");
     
    g_hMedKitLifeTime CreateConVar("sm_jailmedkit_lifetime""15""Время \"жизни\" аптечек");
     
    g_hMedKitRegenTime CreateConVar("sm_jailmedkit_regentime""10""Время регенерации аптечек");

     
    RegConsoleCmd("hl"CmdThrowMedKit);

     
    HookEvent("player_spawn"EventPlayerSpawn);

     if((
    g_iCollision FindSendPropOffs("CBaseEntity""m_Collision")) == -1)
     
    LogError("Could not find offset for CBaseEntity::m_Collision");

     if((
    g_iSolidFlags FindSendPropOffs("CBaseEntity""m_usSolidFlags")) == -1)
     
    LogError("Could not find offset for CBaseEntity::m_usSolidFlags");

     
    AutoExecConfig(true"jailmedkit");
     }

     public 
    OnClientPutInServer(client)
     {
     if (
    g_hClientRegenKits[client] != INVALID_HANDLE)
     
    CloseHandle(g_hClientRegenKits[client]);
     
    g_hClientRegenKits[client] = CreateTimer(GetConVarFloat(g_hMedKitRegenTime), TimerRegenclientTIMER_REPEAT);
     }

     public 
    OnClientDisconnect(client)
     {
     if (
    g_hClientRegenKits[client] != INVALID_HANDLE)
     
    CloseHandle(g_hClientRegenKits[client]);

     
    g_hClientRegenKits[client] = INVALID_HANDLE;
     }

     public 
    OnMapStart()
     {
     
    PrecacheModel(HEALTHKIT_MODELtrue);
     
    PrecacheSound(HEALTHKIT_SOUNDtrue);
     }

     public 
    Action:OnTouch(medkitentity)
     {
     
    SetEntProp(medkitProp_Data"m_CollisionGroup"2);
     if (
    entity || entity MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkitProp_Send"m_PredictableID") == entity || GetClientHealth(entity) == 100) {
     return;
     }

     
    SetEntityHealth(entityGetEntProp(entityProp_Data"m_iMaxHealth"));

     new 
    Float:origin[3];
     
    EmitSoundToAll(HEALTHKIT_SOUNDentitySNDCHAN_AUTOSNDLEVEL_NORMALSND_NOFLAGS1.0SNDPITCH_NORMAL, -1originNULL_VECTORtrue0.0);

     
    AcceptEntityInput(medkit"Kill");
     if (
    g_hMedKitTimer[medkit] != INVALID_HANDLE)
     
    CloseHandle(g_hMedKitTimer[medkit]);

     
    g_hMedKitTimer[medkit] = INVALID_HANDLE;
     }

     public 
    Action:CmdThrowMedKit(clientargs)
     {
     if (
    GetClientTeam(client) != TEAM_CT) {
     
    PrintToChat(client"\x03[Аптечка] \x01Данную команду могут использовать только CT");
     return 
    Plugin_Handled;
     }

     if (!
    IsPlayerAlive(client)) {
     
    PrintToChat(client"\x03[Аптечка] \x01Вы мертвы");
     return 
    Plugin_Handled;
     }

     if (!
    g_iMedKitCount[client]) {
     
    PrintToChat(client"\x03[Аптечка] \x01У Вас нет доступных аптечек");
     return 
    Plugin_Handled;
     }
     
    decl target;
     if (
    < (target GetClientAimTarget(client))){
     if (
    GetClientHealth(target) < 100){
     
    CreateMedKit(client);
     
    g_iMedKitCount[client]--;
     }
     else 
    PrintToChat(client"\x03[Аптечка] \x01Игрок %N не нуждается в лечении."target);
     }
     return 
    Plugin_Handled;
     }

     public 
    Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
     {
     new 
    client GetClientOfUserId(GetEventInt(event"userid"));
     
    g_iMedKitCount[client] = GetConVarInt(g_hMedKitCount);

     
    //Advert
     
    if (GetClientTeam(client) == 3)
     
    PrintToChat(client"\x03[Аптечка] \x01Вы можете кинуть аптечку командой !hl");
     }

     public 
    Action:TimerRegen(Handle:timerany:client)
     {
     if (
    IsClientInGame(client) && g_iMedKitCount[client] < GetConVarInt(g_hMedKitCount))
     
    g_iMedKitCount[client]++;

     return 
    Plugin_Continue;
     }

     public 
    Action:TimerDissolve(Handle:timerany:entity)
     {
     if (
    IsValidEntity(entity))
     {
     
    decl String:dname[16];
     
    Format(dnamesizeof(dname), "dis_%d"entity);
     
    DispatchKeyValue(entity"targetname"dname);
     new 
    diss CreateEntityByName("env_entity_dissolver");
     
    DispatchKeyValue(diss"dissolvetype""3");
     
    DispatchKeyValue(diss"target"dname);
     
    AcceptEntityInput(diss"Dissolve");
     
    AcceptEntityInput(diss"kill");
     }

     
    g_hMedKitTimer[entity] = INVALID_HANDLE;
     }

     
    stock CreateMedKit(client)
     {
     new 
    entity CreateEntityByName("prop_physics");
     new 
    Float:vecPos[3], Float:vecVel[3], Float:clAngles[3], Float:fwd[3];
     
    GetClientEyePosition(clientvecPos);
     
    SetEntityModel(entityHEALTHKIT_MODEL);
     
    SetEntProp(entityProp_Data"m_CollisionGroup"4);
     
    SetEntProp(entityProp_Data"m_MoveCollide"0);
     
    SetSolidFlags(entity152);
     
    SetEntProp(entityProp_Send"m_PredictableID"client);
     
    SetEntityMoveType(entityMOVETYPE_VPHYSICS);

     
    GetClientAbsAngles(clientclAngles);
     
    GetAngleVectors(clAnglesfwdNULL_VECTORNULL_VECTOR);
     
    NormalizeVector(fwdvecVel);
     
    ScaleVector(vecVel150.0);

     
    TeleportEntity(entityvecPosNULL_VECTORNULL_VECTOR);
     
    DispatchSpawn(entity);
     
    TeleportEntity(entityNULL_VECTORNULL_VECTORvecVel);

     
    SDKHook(entitySDKHook_StartTouchPostOnTouch);
     
    g_hMedKitTimer[entity] = CreateTimer(GetConVarFloat(g_hMedKitLifeTime), TimerDissolveentity);
     }

     
    SetSolidFlags(iEntityiFlags)
     {
     if(
    g_iCollision == -|| g_iSolidFlags == -1) return;
     
    SetEntData(iEntityg_iCollision g_iSolidFlagsiFlags2true);
     }
    Если то был оригинал, то должно быть неплохо. Сначала может и затормозит игрока, но сразу после - нет. Оффтоп
     
  12. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    теперь самой хилки не видно
     
  13. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Значит, пользуйся только вставкой кода от "100 HP прицела - не выдавать аптечку". Оффтоп
     
  14. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    при использование данного кода, хилка не блочит, но теперь лечить перестала(
     
  15. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Как будто код, что ты дал в 1 посте - лечит и летит по прицелу. Оффтоп
     
  16. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10

    чем я испортил, я попросил просто сделать, чтобы хилка не блочила игроком + проверку нуждается ли игрок в лечение, ты все так и сделал, хилка перестала блочить, если у игрока 100 хп, хилка не дается, а если меньше 100 , хилку можно дать, только игрок которому даешь ее взять не может
     
  17. ₮αй₮оβый

    ₮αй₮оβый

    Сообщения:
    280
    Симпатии:
    10
    код рабочий, вот сам плагин откуда код Jail Medkit при этом коде игрок может брать хилку, если у него меньше 100 хп, но он в ней застревает, когда у него 100
     
  18. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Не умеешь пользоваться тегами форума - пиши ссылки на оригинал (да и вообще, всегда пишут). А то разбирай то месиво под спойлером... Оффтоп
    PHP:
    /*
     * Jail MedKit plugin by s1dex
     * Desc: CT players can throw medkits for players
     */

    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>

    #define VERSION "1.0"

    #define TEAM_T 2
    #define TEAM_CT 3

    #define HEALTHKIT_SOUND    "items/medshot4.wav"
    #define HEALTHKIT_MODEL    "models/items/healthkit.mdl"

    //Cvars
    new Handle:g_hMedKitCount INVALID_HANDLE;
    new 
    Handle:g_hMedKitLifeTime INVALID_HANDLE;
    new 
    Handle:g_hMedKitRegenTime INVALID_HANDLE;

    //Client variables
    new g_iMedKitCount[MAXPLAYERS+1];

    //Timers
    new Handle:g_hMedKitTimer[2048];
    new 
    Handle:g_hClientRegenKits[MAXPLAYERS+1];

    //Offset
    new g_iCollision        = -1;
    new 
    g_iSolidFlags    = -1;

    public 
    Plugin:myinfo = {
        
    name "JailMedKit",
        
    author "s1dex",
        
    description "CT can throw medkits",
        
    version VERSION,
        
    url "http://adminexe.ru/showthread.php?t=773"
    };

    public 
    OnPluginStart()
    {
        
    g_hMedKitCount CreateConVar("sm_jailmedkit_count""2""Максимальное количетсво аптечек на руках у CT");
        
    g_hMedKitLifeTime CreateConVar("sm_jailmedkit_lifetime""15""Время \"жизни\" аптечек");
        
    g_hMedKitRegenTime CreateConVar("sm_jailmedkit_regentime""10""Время регенерации аптечек");
        
        
    RegConsoleCmd("hl"CmdThrowMedKit);
        
        
    HookEvent("player_spawn"EventPlayerSpawn);
        
        if((
    g_iCollision FindSendPropOffs("CBaseEntity""m_Collision")) == -1)
            
    LogError("Could not find offset for CBaseEntity::m_Collision");
        
        if((
    g_iSolidFlags FindSendPropOffs("CBaseEntity""m_usSolidFlags")) == -1)
            
    LogError("Could not find offset for CBaseEntity::m_usSolidFlags");
            
        
    AutoExecConfig(true"jailmedkit");
    }

    public 
    OnClientPutInServer(client)
    {
        if (
    g_hClientRegenKits[client] != INVALID_HANDLE)
            
    CloseHandle(g_hClientRegenKits[client]);
        
    g_hClientRegenKits[client] = CreateTimer(GetConVarFloat(g_hMedKitRegenTime), TimerRegenclientTIMER_REPEAT);
    }

    public 
    OnClientDisconnect(client)
    {
        if (
    g_hClientRegenKits[client] != INVALID_HANDLE)
            
    CloseHandle(g_hClientRegenKits[client]);
        
        
    g_hClientRegenKits[client] = INVALID_HANDLE;
    }

    public 
    OnMapStart()
    {
        
    PrecacheModel(HEALTHKIT_MODELtrue);
        
    PrecacheSound(HEALTHKIT_SOUNDtrue);
    }

    public 
    Action:OnTouch(medkitentity)
    {
        if (
    entity || entity MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity)) return;
        if (
    GetEntProp(medkitProp_Send"m_PredictableID") == entity || GetClientHealth(entity) == 100) {
            
    SetEntProp(medkitProp_Data"m_CollisionGroup"16);
            return;
        }
        
        
    SetEntityHealth(entityGetEntProp(entityProp_Data"m_iMaxHealth"));
        
        new 
    Float:origin[3];
        
    EmitSoundToAll(HEALTHKIT_SOUNDentitySNDCHAN_AUTOSNDLEVEL_NORMALSND_NOFLAGS1.0SNDPITCH_NORMAL, -1originNULL_VECTORtrue0.0);
            
        
    AcceptEntityInput(medkit"Kill");
        if (
    g_hMedKitTimer[medkit] != INVALID_HANDLE)
            
    CloseHandle(g_hMedKitTimer[medkit]);
        
        
    g_hMedKitTimer[medkit] = INVALID_HANDLE;
    }

    public 
    Action:CmdThrowMedKit(clientargs)
    {
        if (
    GetClientTeam(client) != TEAM_CT) {
            
    PrintToChat(client"\x03[Аптечка] \x01Данную команду могут использовать только CT");
            return 
    Plugin_Handled;
        }
        
        if (!
    IsPlayerAlive(client)) {
            
    PrintToChat(client"\x03[Аптечка] \x01Вы мертвы");
            return 
    Plugin_Handled;
        }
        
        if (!
    g_iMedKitCount[client]) {
            
    PrintToChat(client"\x03[Аптечка] \x01У Вас нет доступных аптечек");
            return 
    Plugin_Handled;
        }

        
    decl target;
        if (
    < (target GetClientAimTarget(client)))
        {
            if (
    GetClientHealth(target) < 100)
            {
                
    CreateMedKit(client);
                
    g_iMedKitCount[client]--;
            }
            else 
    PrintToChat(client"Игрок %N не нуждается в лечении."target);
        }
        return 
    Plugin_Handled;
    }

    public 
    Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        
    g_iMedKitCount[client] = GetConVarInt(g_hMedKitCount);
        
        
    //Advert
        
    if (GetClientTeam(client) == 3)
            
    PrintToChat(client"\x03[Аптечка] \x01Вы можете кинуть аптечку командой !hl");
    }

    public 
    Action:TimerRegen(Handle:timerany:client)
    {
        if (
    IsClientInGame(client) && g_iMedKitCount[client] < GetConVarInt(g_hMedKitCount))
            
    g_iMedKitCount[client]++;
        
        return 
    Plugin_Continue;
    }

    public 
    Action:TimerDissolve(Handle:timerany:entity)
    {
        if (
    IsValidEntity(entity))
        {
            
    decl String:dname[16];
            
    Format(dnamesizeof(dname), "dis_%d"entity);
            
    DispatchKeyValue(entity"targetname"dname);
            new 
    diss CreateEntityByName("env_entity_dissolver");
            
    DispatchKeyValue(diss"dissolvetype""3");
            
    DispatchKeyValue(diss"target"dname);
            
    AcceptEntityInput(diss"Dissolve");
            
    AcceptEntityInput(diss"kill");
        }
        
        
    g_hMedKitTimer[entity] = INVALID_HANDLE;
    }

    stock CreateMedKit(client)
    {
        new 
    entity CreateEntityByName("prop_physics");
        new 
    Float:vecPos[3], Float:vecVel[3], Float:clAngles[3], Float:fwd[3];
        
    GetClientEyePosition(clientvecPos);
        
    SetEntityModel(entityHEALTHKIT_MODEL);
        
    SetEntProp(entityProp_Data"m_CollisionGroup"4);
        
    SetEntProp(entityProp_Data"m_MoveCollide"0);
        
    SetSolidFlags(entity152);
        
    SetEntProp(entityProp_Send"m_PredictableID"client);
        
    SetEntityMoveType(entityMOVETYPE_VPHYSICS);
        
        
    GetClientAbsAngles(clientclAngles);
        
    GetAngleVectors(clAnglesfwdNULL_VECTORNULL_VECTOR);
        
    NormalizeVector(fwdvecVel);
        
    ScaleVector(vecVel150.0);
        
        
    TeleportEntity(entityvecPosNULL_VECTORNULL_VECTOR);
        
    DispatchSpawn(entity);
        
    TeleportEntity(entityNULL_VECTORNULL_VECTORvecVel);
        
        
    SDKHook(entitySDKHook_StartTouchPostOnTouch);
        
    g_hMedKitTimer[entity] = CreateTimer(GetConVarFloat(g_hMedKitLifeTime), TimerDissolveentity);
    }

    SetSolidFlags(iEntityiFlags)
    {
        if(
    g_iCollision == -|| g_iSolidFlags == -1) return;
        
    SetEntData(iEntityg_iCollision g_iSolidFlagsiFlags2true);
    }
    Раненный подбежит - возьмёт. Если "живчик" - аптечка совсем перестанет браться, по ней можно спокойно бегать.
     
    Последнее редактирование: 16 янв 2016