Как я раньше давал пример на установку нужного скина на зимний период Столкнулся с проблемой для 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) }
|