BlackStarArmy
Участник
- Сообщения
- 12
- Реакции
- 0
- Баллы
- 1
Здраствуйте,нужно реализовать в плагине продажу через GameCMS . И поравить некоторые ньюансы
Бюджет 100р
Бюджет 100р
- Исходный код
- #define PLUGIN "Revive Corpse"
#define VERSION "1.0"
#define AUTHOR "zxcNesh1337"
#define LASTUPDATE "21.03.2021"
#define CLASSNAME "Corpse"
#define FLAG "r" // Флаг доступа к возрождению
#define DISTANCE 85.0 // Дистанция
#define USE_TIME 5 // Время зажатия кнопки E
#define LIMIT 2 // Количество возрождений за раунд
/* Данные Игрока */
enum _leyerEnum{
p_iCorpse,
p_iTarget,
p_iTime,
p_iTouch,
p_iLimit
};
new Player[MAX_PLAYERS + 1][PleyerEnum];
/* Данные Игрока */
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("zxcNesh1337", VERSION, FCVAR_SERVER);
RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn_Post", true);
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true);
RegisterHam(Ham_Touch, "info_target", "Touch_Pre", false);
register_forward(FM_EmitSound, "FM_EmitSound_Pre", false);
set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET);
}
public client_disconnected(id)
{
Player[id][p_iTarget] = 0;
Player[id][p_iTime] = 0;
RemoveCorpse(id);
}
public CBasePlayer_Spawn_Post(id)
{
Player[id][p_iLimit] = 0;
RemoveCorpse(id);
}
public CBasePlayer_Killed_Post(const id, pevAttacker, iGib)
{
CreateCorpse(id);
}
public Touch_Pre(iEnt, id)
{
if(is_entity(iEnt) && is_user_connected(id)){
new szName[16];
get_entvar(iEnt, var_classname, szName, 15);
if(equal(szName, CLASSNAME)){
if(Player[id][p_iTime] != 0){
if(Player[id][p_iTouch] < get_systime()){
Player[id][p_iTouch] = get_systime() + 2;
set_dhudmessage(200, 200, 200, -1.0, 0.7, 0, 2.0, 2.0);
show_dhudmessage(id, "ВОЗРОДИТЬ ИГРОКА - E");
}
}
}
}
}
public FM_EmitSound_Pre(const id, const iChannel,const szSound[])
{
if(!is_user_alive(id) || !equal(szSound, "common/wpn_denyselect.wav")) return FMRES_IGNORED;
if(!(get_user_flags(id) & read_flags(FLAG))) return FMRES_IGNORED;
if(Player[id][p_iTime] != 0) return FMRES_IGNORED;
if(Player[id][p_iLimit] == LIMIT) return FMRES_IGNORED;
new iPlayers[MAX_PLAYERS], iCount;
get_players(iPlayers, iCount, "bch");
for(new i = 0; i < iCount; i++){
static idd; idd = iPlayers;
if(get_member(idd, m_iTeam) != get_member(id, m_iTeam)) continue;
static iEnt; iEnt = Player[idd][p_iCorpse];
if(!is_entity(iEnt)) continue;
new Float:fOriginPlayer[3]; new Float:fOriginEnt[3];
get_entvar(id, var_origin, fOriginPlayer);
get_entvar(iEnt, var_origin, fOriginEnt);
if(get_distance_f(fOriginPlayer, fOriginEnt) > DISTANCE) continue;
Player[id][p_iTarget] = idd;
Player[id][p_iTime] = USE_TIME;
rg_send_bartime(id, USE_TIME, true);
set_task(1.0, "CheckUse", id, _, _, "b");
break;
}
return FMRES_SUPERCEDE;
}
public CheckUse(id)
{
static idd; idd = Player[id][p_iTarget];
if(!(get_entvar(id, var_button) & IN_USE) || !is_user_connected(idd)){
CancelUse(id);
return;
}
static iEnt; iEnt = Player[idd][p_iCorpse];
new Float:fOriginPlayer[3]; new Float:fOriginEnt[3];
get_entvar(id, var_origin, fOriginPlayer);
get_entvar(iEnt, var_origin, fOriginEnt);
if(Player[idd][p_iCorpse] == 0 || get_distance_f(fOriginPlayer, fOriginEnt) > DISTANCE){
CancelUse(id);
return;
}
Player[id][p_iTime]--;
if(Player[id][p_iTime] == 0){
Player[id][p_iTarget] = 0;
Player[id][p_iLimit]++;
rg_send_bartime(id, 0, true);
remove_task(id);
rg_round_respawn(idd);
set_entvar(idd, var_origin, fOriginEnt);
new szName[32], szNameTwo[32];
get_user_name(id, szName, 31);
get_user_name(idd, szNameTwo, 31);
client_print_color(0, print_team_default, "^1[^4Система^1] ^3%s ^1возродил ^3%s^1.", szName, szNameTwo);
return;
}
}
public CancelUse(id)
{
Player[id][p_iTarget] = 0;
Player[id][p_iTime] = 0;
rg_send_bartime(id, 0, true);
remove_task(id);
}
public CreateCorpse(id)
{
new iEnt = rg_create_entity("info_target");
if(!is_entity(iEnt)) return;
Player[id][p_iCorpse] = iEnt;
set_entvar(iEnt, var_classname, CLASSNAME);
set_entvar(iEnt, var_movetype, MOVETYPE_NOCLIP);
set_entvar(iEnt, var_solid, SOLID_TRIGGER);
new szModel[32];
get_entvar(id, var_model, szModel, charsmax(szModel));
set_entvar(iEnt, var_model, szModel);
new iModelIndex = get_entvar(id, var_modelindex);
set_entvar(iEnt, var_modelindex, iModelIndex);
new Float:fOrigin[3];
get_entvar(id, var_origin, fOrigin);
set_entvar(iEnt, var_origin, fOrigin);
new Float:fAngles[3];
get_entvar(id, var_angles, fAngles);
set_entvar(iEnt, var_angles, fAngles);
set_entvar(iEnt, var_mins, Float:{-16.0, -16.0, -0.0});
set_entvar(iEnt, var_maxs, Float:{16.0, 16.0, 32.0});
new iRandom = random_num(101, 103);
set_entvar(id, var_sequence, iRandom);
set_entvar(iEnt, var_sequence, iRandom);
set_entvar(iEnt, var_framerate, 1.0);
}
public RemoveCorpse(id)
{
new iEnt = Player[id][p_iCorpse];
if(Player[id][p_iCorpse] == 0 || !is_entity(iEnt)) return;
Player[id][p_iCorpse] = 0;
set_entvar(iEnt, var_flags, get_entvar(iEnt, var_flags) | FL_KILLME);
set_entvar(iEnt, var_nextthink, get_gametime());