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

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
нужно изменить плагин

/*
* 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);
 
Последнее редактирование:

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
народ помогите

Добавлено через 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);
 
Последнее редактирование:

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
я так понял,что за это отвечает m_CollisionGroup, но не знаю какую цифру ставить, помогите
 

NeXxX

Участник
Сообщения
312
Реакции
26
так смотри и сам себе поможешь_)
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
какие вообще цифра можно ставить, а я уже все вроде перепробовал, результат 0
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
m_CollisionGroup, но не знаю какую цифру ставить
C-подобный:
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.
когда направляешь прицел на игрока со 100 хп жмешь команду !hl
PHP:
decl target;
if (0 < (target = GetClientAimTarget(client)))
{
	if (GetClientHealth(target) < 100)
	{
		//Выдать аптечку.
	}
	else PrintToChat(client, "Игрок %N не нуждается в лечении.", target);
}
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
C-подобный:
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 (0 < (target = GetClientAimTarget(client)))
{
	if (GetClientHealth(target) < 100)
	{
		//Выдать аптечку.
	}
	else PrintToChat(client, "Игрок %N не нуждается в лечении.", target);
}

при 2 не блочит, но теперь она летит только вперед,а не куда прицел показываю
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
она летит только вперед,а не куда прицел показываю
Под прицелом оставь "блок" аптечки по умолчанию - пусть себе летит.
public Action:OnTouch(medkit, entity)
А тут отдельно выдавать 2 - аптечка всё равно уже долетела до цели.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
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), 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)
 {
 SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
 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;
 }
 decl target;
 if (0 < (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: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);
 }
Если то был оригинал, то должно быть неплохо. Сначала может и затормозит игрока, но сразу после - нет. Оффтоп
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
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), 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)
 {
 SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
 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;
 }
 decl target;
 if (0 < (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: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);
 }
Если то был оригинал, то должно быть неплохо. Сначала может и затормозит игрока, но сразу после - нет. Оффтоп

теперь самой хилки не видно
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
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), 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)
 {
 SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 2);
 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;
 }
 decl target;
 if (0 < (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: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);
 }
Если то был оригинал, то должно быть неплохо. Сначала может и затормозит игрока, но сразу после - нет. Оффтоп

при использование данного кода, хилка не блочит, но теперь лечить перестала(
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
Как будто код, что ты дал в 1 посте - лечит и летит по прицелу. Оффтоп


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

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
В 1 посте тоже не берётся, не лечит. Вылетает и рядом падает, как мусор.
Что дал, тот и получил.

код рабочий, вот сам плагин откуда код Jail Medkit при этом коде игрок может брать хилку, если у него меньше 100 хп, но он в ней застревает, когда у него 100
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
вот сам плагин откуда код
Не умеешь пользоваться тегами форума - пиши ссылки на оригинал (да и вообще, всегда пишут). А то разбирай то месиво под спойлером... Оффтоп
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), 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)) return;
	if (GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
        SetEntProp(medkit, Prop_Data, "m_CollisionGroup", 16);
        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;
    }

    decl target;
    if (0 < (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: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);
}
Раненный подбежит - возьмёт. Если "живчик" - аптечка совсем перестанет браться, по ней можно спокойно бегать.
 
Последнее редактирование:
Сверху Снизу