₮αй₮оβый
Участник
- Сообщения
- 317
- Реакции
- 35
нужно изменить плагин
аптечка блочит игроков при замени prop_physics на prop_dynamic_override она не летит, это все что я смог найти в инете
И если не сложно добавить проверку,когда направляешь прицел на игрока со 100 хп жмешь команду !hl, она бы не вылетала,а в чате писало бы, что в лечение он не нуждается
это тоже не помогает
/*
* 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);
}
* 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);
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);
Последнее редактирование: