[TTT] Model Player Detective
Informacion:
► Este plugin viene por default en el Trouble In Terrorist Town o mejor dicho Mata al Traidor, lo unico que hice es agregarle el model al Detective, lo quiero hacer publico ya que no lo uso y lo tengo ahi tirado nomas, a algunos le servirá a otros no.
Plugin:
Código PHP:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <cstrike>
#include <ttt>
#include <amx_settings_api>
#include <ttt_stocks>
#include <cs_weapons_api>
#define LINUX_WEAPON_OFF 4
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flNextHudTextArgs 198
new g_szCrowbarModel[2][TTT_FILELENGHT];
new g_szGrenadeModel[3][TTT_FILELENGHT];
new const g_szCrowbarSound[][] = {"weapons/cbar_hitbod2.wav", "weapons/cbar_hitbod1.wav", "weapons/bullet_hit2.wav", "weapons/cbar_miss1.wav"};
new const g_szHeadShotSound[][] = {"player/headshot1.wav", "player/headshot2.wav", "player/headshot3.wav"};
new g_szPlayerModel[32], g_szPlayerModelDT[32], g_iKnifeID = -1;
public plugin_precache()
{
// PLAYER
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Player model", "MODEL", g_szPlayerModel, charsmax(g_szPlayerModel)))
{
g_szPlayerModel = "terror";
amx_save_setting_string(TTT_SETTINGSFILE, "Player model", "MODEL", g_szPlayerModel);
}
new model[TTT_FILELENGHT];
formatex(model, charsmax(model), "models/player/%s/%s.mdl", g_szPlayerModel, g_szPlayerModel);
precache_model(model);
// PLAYER DT
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Player model DT", "MODELDT", g_szPlayerModelDT, charsmax(g_szPlayerModelDT)))
{
g_szPlayerModelDT = "detective";
amx_save_setting_string(TTT_SETTINGSFILE, "Player model DT", "MODELDT", g_szPlayerModelDT);
}
new modeldt[TTT_FILELENGHT];
formatex(modeldt, charsmax(modeldt), "models/player/%s/%s.mdl", g_szPlayerModelDT, g_szPlayerModelDT);
precache_model(modeldt);
// CROWBAR
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Crowbar", "MODEL_V", g_szCrowbarModel[0], charsmax(g_szCrowbarModel[])))
{
g_szCrowbarModel[0] = "models/ttt/v_crowbar.mdl";
amx_save_setting_string(TTT_SETTINGSFILE, "Crowbar", "MODEL_V", g_szCrowbarModel[0]);
}
precache_model(g_szCrowbarModel[0]);
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Crowbar", "MODEL_P", g_szCrowbarModel[1], charsmax(g_szCrowbarModel[])))
{
g_szCrowbarModel[1] = "models/ttt/p_crowbar.mdl";
amx_save_setting_string(TTT_SETTINGSFILE, "Crowbar", "MODEL_P", g_szCrowbarModel[1]);
}
precache_model(g_szCrowbarModel[1]);
// END
// GRENADE
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_V", g_szGrenadeModel[0], charsmax(g_szGrenadeModel[])))
{
g_szGrenadeModel[0] = "models/ttt/v_hegrenade.mdl";
amx_save_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_V", g_szGrenadeModel[0]);
}
precache_model(g_szGrenadeModel[0]);
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_P", g_szGrenadeModel[1], charsmax(g_szGrenadeModel[])))
{
g_szGrenadeModel[1] = "models/ttt/p_hegrenade.mdl";
amx_save_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_P", g_szGrenadeModel[1]);
}
precache_model(g_szGrenadeModel[1]);
if(!amx_load_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_W", g_szGrenadeModel[2], charsmax(g_szGrenadeModel[])))
{
g_szGrenadeModel[2] = "models/ttt/w_hegrenade.mdl";
amx_save_setting_string(TTT_SETTINGSFILE, "Grenade", "MODEL_W", g_szGrenadeModel[2]);
}
precache_model(g_szGrenadeModel[2]);
// END
new i;
for(i = 0; i <= charsmax(g_szCrowbarSound); i++)
precache_sound(g_szCrowbarSound[i]);
for(i = 0; i <= charsmax(g_szHeadShotSound); i++)
precache_sound(g_szHeadShotSound[i]);
}
public plugin_init()
{
register_plugin("[TTT] Replacements", TTT_VERSION, TTT_AUTHOR);
new const g_szBlockSet[][] =
{
"BombDrop",
"BombPickup",
"DeathMsg",
"ScoreInfo",
"Radar",
"Money"
};
new const g_szMessageBlock[][] =
{
"ScoreAttrib",
"TextMsg",
"SendAudio",
"Scenario",
"StatusIcon"
};
new i;
for(i = 0; i <= charsmax(g_szBlockSet); i++)
set_msg_block(get_user_msgid(g_szBlockSet[i]), BLOCK_SET);
for(i = 0; i <= charsmax(g_szMessageBlock); i++)
register_message(get_user_msgid(g_szMessageBlock[i]), "Block_Messages");
register_message(get_user_msgid("HudTextArgs"), "Block_HudTextArgs");
register_forward(FM_EmitSound, "Forward_EmitSound_pre", 0);
register_forward(FM_GetGameDescription, "Forward_GetGameDescription_pre", 0);
RegisterHamPlayer(Ham_Spawn, "Ham_Spawn_post", 1);
RegisterHam(Ham_Item_Deploy, "weapon_knife", "Ham_Knife_Deploy_post", 1);
RegisterHam(Ham_Item_Deploy, "weapon_hegrenade", "Ham_He_Deploy_post", 1);
register_clcmd("drop", "clcmd_drop");
}
public clcmd_drop(id)
{
if(get_user_weapon(id) == CSW_C4)
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public cswa_killed(ent, victim, killer)
{
ttt_set_playerdata(victim, PD_KILLEDBYITEM, get_weapon_edict(ent, REPL_CSWA_ITEMID));
}
public grenade_throw(id, ent, nade)
{
if(nade == CSW_HEGRENADE && is_user_alive(id))
{
if(entity_get_float(ent, EV_FL_dmgtime) != 0.0)
entity_set_model(ent, g_szGrenadeModel[2]);
}
}
public Block_Messages(msgid, dest, id)
{
if(get_msg_args() > 1)
{
static message[128];
if(get_msg_args() == 5)
get_msg_arg_string(5, message, charsmax(message));
if(equal(message, "#Fire_in_the_hole"))
return PLUGIN_HANDLED;
get_msg_arg_string(2, message, charsmax(message));
if(equal(message, "%!MRAD_BOMBPL") || equal(message, "%!MRAD_BOMBDEF") || equal(message, "%!MRAD_terwin") || equal(message, "%!MRAD_ctwin") || equal(message, "%!MRAD_FIREINHOLE"))
return PLUGIN_HANDLED;
if(equal(message, "#Killed_Teammate") || equal(message, "#Game_teammate_kills") || equal(message, "#Game_teammate_attack") || equal(message, "#C4_Plant_At_Bomb_Spot"))
return PLUGIN_HANDLED;
if(equal(message, "#Bomb_Planted") || equal(message, "#Game_bomb_drop") || equal(message, "#Game_bomb_pickup") || equal(message, "#Got_bomb") || equal(message, "#C4_Plant_Must_Be_On_Ground"))
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public Block_HudTextArgs(msgid, dest, id)
{
set_pdata_float(id, m_flNextHudTextArgs, 0.0);
return PLUGIN_HANDLED;
}
public Forward_GetGameDescription_pre()
{
forward_return(FMV_STRING, "Trouble in Terrorist Town");
return FMRES_SUPERCEDE;
}
public Forward_EmitSound_pre(id, channel, sample[])
{
if(!is_user_connected(id))
return FMRES_IGNORED;
if(equal(sample, "player/bhit_helmet-1.wav"))
{
emit_sound(id, CHAN_BODY, g_szHeadShotSound[random_num(0, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM);
return FMRES_SUPERCEDE;
}
if((equal(sample, "player/die", 10) || equal(sample, "player/death6.wav")) && !is_user_alive(id) && ttt_get_playerdata(id, PD_KILLEDBYITEM) > -1)
return FMRES_SUPERCEDE;
if(g_iKnifeID == -1)
{
new name[TTT_ITEMLENGHT];
formatex(name, charsmax(name), "%L", LANG_SERVER, "TTT_ITEM_ID11");
g_iKnifeID = ttt_get_item_id(name);
}
if(equal(sample, "weapons/knife_", 14) && ttt_get_playerdata(id, PD_HOLDINGITEM) != g_iKnifeID)
{
switch(sample[17])
{
case('b'): emit_sound(id, CHAN_WEAPON, g_szCrowbarSound[0], 1.0, ATTN_NORM, 0, PITCH_NORM);
case('w'): emit_sound(id, CHAN_WEAPON, g_szCrowbarSound[1], 1.0, ATTN_NORM, 0, PITCH_LOW);
case('s'): emit_sound(id, CHAN_WEAPON, g_szCrowbarSound[3], 1.0, ATTN_NORM, 0, PITCH_NORM);
case('1', '2'): emit_sound(id, CHAN_WEAPON, g_szCrowbarSound[2], random_float(0.5, 1.0), ATTN_NORM, 0, PITCH_NORM);
}
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public Ham_Spawn_post(id)
{
if(is_user_alive(id))
{
// CAUSES NAME CHANGE MESSAGE TO DISAPPEAR, WTF?
cs_reset_user_model(id);
cs_set_user_model(id, g_szPlayerModel);
static model[20];
cs_get_user_model(id, model, charsmax(model));
if(!equal(model, g_szPlayerModel))
cs_set_user_model(id, g_szPlayerModel);
set_task(get_cvar_float("ttt_preparation_time")+1.0, "check_model", id); // Para cuando se elijan los Traidores y Detectives
}
}
public check_model(id)
{
if(is_user_alive(id) && is_user_connected(id))
{
if(ttt_get_playerstate(id) != PC_DETECTIVE) return;
static modeldt[20];
cs_get_user_model(id, modeldt, charsmax(modeldt));
if(!equal(modeldt, g_szPlayerModelDT))
cs_set_user_model(id, g_szPlayerModelDT);
}
}
public Ham_Knife_Deploy_post(ent)
{
new id = get_weapon_owner(ent);
if(is_user_alive(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_szCrowbarModel[0]);
entity_set_string(id, EV_SZ_weaponmodel, g_szCrowbarModel[1]);
}
}
public Ham_He_Deploy_post(ent)
{
new id = get_weapon_owner(ent);
if(is_user_alive(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_szGrenadeModel[0]);
entity_set_string(id, EV_SZ_weaponmodel, g_szGrenadeModel[1]);
}
}
Tambien para el extra "Fake Detective" con el model les dejo.
Código PHP:
#include <amxmodx>
#include <cstrike>
#include <ttt>
new cvar_price_fake, cvar_max_count;
new g_iCurrentCount, g_iItemID, g_pMsgTeamInfo;
public plugin_init()
{
register_plugin("[TTT] Item: Fake Detective", TTT_VERSION, TTT_AUTHOR);
cvar_max_count = my_register_cvar("ttt_fake_max_count", "1", "Fake detective max count. (Default: 1)");
cvar_price_fake = my_register_cvar("ttt_price_fake", "2", "Fake detective price. (Default: 2)");
g_pMsgTeamInfo = get_user_msgid("TeamInfo");
}
public ttt_plugin_cfg()
{
new name[TTT_ITEMLENGHT];
formatex(name, charsmax(name), "%L", LANG_PLAYER, "TTT_ITEM_FAKEDETECTIVE");
g_iItemID = ttt_buymenu_add(name, get_pcvar_num(cvar_price_fake), PC_TRAITOR);
}
public ttt_gamemode(gamemode)
{
if(gamemode == GAME_ENDED || gamemode == GAME_RESTARTING)
g_iCurrentCount = 0;
}
public ttt_item_selected(id, item, name[], price)
{
if(g_iItemID == item)
{
if(ttt_get_specialcount(PC_DETECTIVE))
{
if(g_iCurrentCount < get_pcvar_num(cvar_max_count))
{
set_fake_team(id);
ttt_set_playerdata(id, PD_FAKESTATE, PC_DETECTIVE);
g_iCurrentCount++;
client_print_color(id, print_team_default, "%s %L", TTT_TAG, id, "TTT_ITEM2", name, id, "TTT_FAKEDETECTIVE1", id, special_names[PC_DETECTIVE]);
return PLUGIN_HANDLED;
}
else client_print_color(id, print_team_default, "%s %L", TTT_TAG, id, "TTT_FAKEDETECTIVE2", g_iCurrentCount, name);
}
else client_print_color(id, print_team_default, "%s %L", TTT_TAG, id, "TTT_FAKEDETECTIVE4", id, special_names[PC_DETECTIVE], name);
}
return PLUGIN_CONTINUE;
}
stock set_fake_team(id)
{
new num, i;
static players[32], name[32];
get_players(players, num);
get_user_name(id, name, charsmax(name));
for(--num; num >= 0; num--)
{
i = players[num];
message_begin(MSG_ONE_UNRELIABLE, g_pMsgTeamInfo, _, i);
write_byte(id);
write_string("CT");
message_end();
if(id != i && ttt_get_playerstate(i) == PC_TRAITOR)
{
client_print_color(i, print_team_default, "%s %L", TTT_TAG, id, "TTT_FAKEDETECTIVE3", name, id, special_names[PC_DETECTIVE]);
new g_szPlayerModelDT[32];
static modeldt[20];
g_szPlayerModelDT = "detective";
cs_get_user_model(id, modeldt, charsmax(modeldt));
if(!equal(modeldt, g_szPlayerModelDT))
cs_set_user_model(id, g_szPlayerModelDT);
}
}
}
Descargas:
► Abajo les dejare el .sma, el archivo .ini que necesita para que el plugin funcione correctamente y tambien un model que yo use cuando tenia el TTT. Es optativo si quieren dejan ese model sino se lo cambian.
► Cualquier cosa que no funcione o algo me dicen, saludos.
► Cualquier cosa que no funcione o algo me dicen, saludos.
Imagenes:
►
►
►
Aportes:
Slenderman Mod | The Return of Fear
[TTT] Model Detective
Voces tipo CS:GO/TS3
Comando de Evento Admin
[ORPHEU] Firmas actualizadas