Как я раньше давал пример на установку нужного скина на зимний период
Столкнулся с проблемой для HL.
Вот я вижу его заснеженного и живого
Убиваю,и когда проходит чутка секунд и скин тухнет на стандартный у модели
Я понимаю,что нужно загнать в событие мессаги трупов нужное значение,которое я загнал сюда
Код:
stock SetUserModel(id, szModelName[])
{
if(map_type == 3)
{
set_pev(id, pev_skin, 1);
}
set_user_info(id, MODEL_KEY, szModelName)
copy(g_szModel[id], charsmax(g_szModel), szModelName)
}
Но здесь оно реально не срабатывает вообще (((
Код:
public Message_ClCorpse()
{
new id = get_msg_arg_int(12)
if(g_szModel[id])
{
if(map_type == 3)
{
set_pev(id, pev_skin, 1);
set_msg_arg_string(1, g_szModel[id])
}
}
}
На заметку: Вдруг что,такого нюанса с трупами в cs нету,только в hl
Или же мне нужно делать создание трупа и там прописывать это значение?
Есть решение?
Благодарю за внимание
Код:
#include <amxmodx>
#include <fakemeta>
new g_szModel[33]
new const MODEL_KEY[] = "model"
new const g_szModels[][] = { "cdc", "UT_Robo_II", "GERMANY", "Genestealer", "Spawn", "Scream", "lobo", "TERRORISTS", "UT_Horror_I", "UT_Horror_II", "UT_Infantry_V", "UT_Xan_I" }
new map_type;
public plugin_init()
{
register_plugin("Random Model", "1.0", "OciXCrom & Huehue")
register_forward(FM_SetClientKeyValue, "FM__SetClientKeyValue")
register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse")
}
public ws_map_type(type)
{
map_type = type;
}
public plugin_precache()
{
for(new i; i < sizeof(g_szModels); i++)
{
precache_player_model(g_szModels[i])
}
}
public client_putinserver(id)
{
SetUserModel(id, g_szModels[random(sizeof(g_szModels))])
}
public FM__SetClientKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
{
if(g_szModel[id] && equal(szKey, MODEL_KEY) && !equal(szValue, g_szModel[id]))
{
set_user_info(id, MODEL_KEY, g_szModel[id])
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public Message_ClCorpse()
{
new id = get_msg_arg_int(12)
if(g_szModel[id])
{
if(map_type == 3)
{
set_pev(id, pev_skin, 1);
set_msg_arg_string(1, g_szModel[id])
}
}
}
stock SetUserModel(id, szModelName[])
{
if(map_type == 3)
{
set_pev(id, pev_skin, 1);
}
set_user_info(id, MODEL_KEY, szModelName)
copy(g_szModel[id], charsmax(g_szModel), szModelName)
}
precache_player_model(szModel[])
{
static szFile[128]
formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel)
precache_model(szFile)
replace(szFile, charsmax(szFile), ".mdl", "T.mdl")
if(file_exists(szFile))
{
precache_model(szFile)
}
}
Вот к примеру Код прошлый на Трупы,который в кс работает и не тухнет установленный скин в мессаге создания их
Я подумал,раз уж в ХЛ нет рестарта раунда и нет выбора команды при заходе в игру,то я всё не нужное снёс включая pev_team
Но результата не принесло никакого (
Как буд-то код вообще не работает и даже нет того плавного исчезновения
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN_NAME "REMOVE CORPSE"
#define PLUGIN_VERSION "2.0"
#define PLUGIN_AUTHOR "fl0wer | MayroN"
new const CORPSE_CLASSNAME[] = "ent_corpse";
#define MAX_CLIENTS 32
#define LIFE_CORPSE 1.0 // Через сколько секунд удалять Труп игрока
new const Float:CORPSE_MINS[3] = { -24.0, -24.0, 0.0 };
new const Float:CORPSE_MAXS[3] = { 24.0, 24.0, 24.0 };
new g_iCorpse[MAX_PLAYERS + 1];
#define STEP 10.0
enum (+= 3591)
{
STATUS_NONE = 0,
STATUS_EFFECT,
STATUS_KILL
}
new map_type;
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
RegisterHam(Ham_Spawn, "player", "Corpse_Spawn", true);
register_think("ent_corpse", "Remove_Corpse");
register_message(get_user_msgid("ClCorpse"), "MSG_ClCorpse");
}
public ws_map_type(type)
{
map_type = type;
}
public client_disconnected(id)
{
Corpse_Remove(id);
}
public Corpse_Spawn(id)
{
Corpse_Remove(id);
}
public MSG_ClCorpse(id, dest, player)
{
new model[32];
new Float:vecOrigin[3];
new Float:vecAngles[3];
get_msg_arg_string(1, model, charsmax(model));
for (new i; i < 3; i++)
{
vecOrigin[i] = float(get_msg_arg_int(2 + i)) / 128.0;
vecAngles[i] = get_msg_arg_float(5 + i);
}
new sequence = get_msg_arg_int(9);
new playerId = get_msg_arg_int(12);
Corpse_Create(fmt("models/player/%s/%s.mdl", model, model), vecOrigin, vecAngles, sequence, playerId);
return PLUGIN_HANDLED;
}
Corpse_Create(model[], Float:vecOrigin[3], Float:vecAngles[3], sequence, owner)
{
new ent = create_entity("info_target");
if (!is_valid_ent(ent))
return;
g_iCorpse[owner] = ent;
engfunc(EngFunc_SetModel, ent, model);
engfunc(EngFunc_SetSize, ent, CORPSE_MINS, CORPSE_MAXS);
engfunc(EngFunc_SetOrigin, ent, vecOrigin);
set_pev(ent, pev_classname, CORPSE_CLASSNAME);
set_pev(ent, pev_angles, vecAngles);
set_pev(ent, pev_owner, owner);
set_pev(ent, pev_sequence, sequence);
set_pev(ent, pev_framerate, 1.0);
set_pev(ent, pev_animtime, 0.0);
if(map_type == 3)
{
set_pev(ent, pev_skin, 1);
}
set_pev(ent, pev_nextthink, get_gametime() + LIFE_CORPSE);
}
Corpse_Remove(id)
{
new ent = g_iCorpse[id];
if(is_valid_ent(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
g_iCorpse[id] = 0;
}
public Remove_Corpse(ent)
{
if (!is_valid_ent(ent) || pev(ent, pev_impulse) == STATUS_KILL)
return;
new Float:flOrigin[3]
pev(ent,pev_origin,flOrigin)
switch(pev(ent, pev_impulse))
{
case STATUS_NONE:
{
set_pev(ent, pev_movetype, MOVETYPE_NONE);
set_pev(ent, pev_solid, SOLID_NOT);
set_pev(ent, pev_rendermode, kRenderTransAlpha);
set_pev(ent, pev_renderamt, 100.0);
set_pev(ent, pev_impulse, STATUS_EFFECT);
}
case STATUS_EFFECT:
{
if (pev(ent, pev_renderamt) > 0.0)
{
set_pev(ent, pev_renderamt, floatmax(0.0, pev(ent, pev_renderamt) - STEP));
}
else
{
set_pev(ent, pev_impulse, STATUS_KILL);
}
}
case STATUS_KILL:
{
set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
}
}
set_pev(ent,pev_nextthink,get_gametime() + 0.1)
}