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

Тема в разделе "Общие вопросы", создана пользователем Existance' Donald, 29 июн 2015.

  1. Existance' Donald

    Existance' Donald

    Сообщения:
    27
    Симпатии:
    7
    Игра CS:GO
    SOURCEMOD: 1.7.2-dev+5202

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

    Код:
    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

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

    Код:
    #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);
    Помогите разобраться пожалуйста.
     
  2. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.558
    Симпатии:
    1.143
    Попробуй обновить гейм дату, из последнего снапшота. Может поможет (думаю оффсет изменился m_MoveCollide).
     
  3. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.972
    Симпатии:
    2.977
    Попробуй prop_physics_override
     
  4. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    В ксго вообще нету пропа "m_MoveCollide". Просто удали строку.
     
    Серый™ нравится это.
  5. Existance' Donald

    Existance' Donald

    Сообщения:
    27
    Симпатии:
    7
    Если удаляешь, то тут ошибка.
    SetEntProp(entity, Prop_Send, "m_PredictableID", client);
     
  6. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    В ксго овнера выставлять лучше через SetEntPropEnt(entity, Prop_Send, "m_hEffectEntity", client);
     
  7. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Подниму старую тему. Автор плагина не ты... автор 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