Помогите разобраться с плагином на аптечку

Existance' Donald

Участник
Сообщения
27
Реакции
7
Игра CS:GO
SOURCEMOD: 1.7.2-dev+5202

Имеется плагин на выдачу (хилки) на джаил сервере.
До обновлений последних оон работал великолепно, но сейчас он пишет при установке:

C-подобный:
L 06/30/2015 - 00:02:32: [SM] Native "SetEntProp" reported: Property "m_MoveCollide" not found (entity 792/prop_physics)
L 06/30/2015 - 00:02:32: [SM] Displaying call stack trace for plugin "hl.smx":
L 06/30/2015 - 00:02:32: [SM]   [0]  Line 159, C:\Users\QuadXeon\Desktop\scripting\hl.sp::CreateMedKit()
L 06/30/2015 - 00:02:32: [SM]   [1]  Line 112, C:\Users\QuadXeon\Desktop\scripting\hl.sp::CmdThrowMedKit()

При этом хилка устанавливается в различных местах на карте (не куда смотрю) + не работает (вылазит только моделька и висит).

Вот после установки лог:
prop_physics in solid list (not solid) (0, 0098) models/items/healthkit.mdl

Вот сам плагин:

C-подобный:
#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 = "Jail HL",
	author = "XeonQuad",
	description = "Medkits For JailBreak (by XeonQuad)",
	version = VERSION,
	url = "http://existance.pw/"
};

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_Send, "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[EX] \x01Данную команду могут использовать только CT");
		return Plugin_Handled;
	}
	
	if (!IsPlayerAlive(client)) {
		PrintToChat(client, "\x03[EX] \x01Вы мертвы");
		return Plugin_Handled;
	}
	
	if (!g_iMedKitCount[client]) {
		PrintToChat(client, "\x03[EX] \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[EX] \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_Send, "m_CollisionGroup", 4);
	SetEntProp(entity, Prop_Send, "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);
}

Я так понимаю, что проблема в SetEntProp(entity, Prop_Send, "m_MoveCollide", 0);
Помогите разобраться пожалуйста.
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Попробуй обновить гейм дату, из последнего снапшота. Может поможет (думаю оффсет изменился m_MoveCollide).
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
Попробуй prop_physics_override
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
В ксго вообще нету пропа "m_MoveCollide". Просто удали строку.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
public Plugin:myinfo = {
name = "Jail HL",
author = "XeonQuad",
description = "Medkits For JailBreak (by XeonQuad)",
version = VERSION,
url = ""
};

Подниму старую тему. Автор плагина не ты... автор s1dex

PHP:
public Plugin:myinfo = {
	name = "JailMedKit",
	author = "s1dex",
	description = "CT can throw medkits",
	version = VERSION,
	url = ""
};

http://hlmod.ru/forum/utverjdionnye-plaginy/10305-jail-medkit.html
 
Сверху Снизу