• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь Доделать плагин

BlackStarArmy

Участник
Сообщения
12
Реакции
0
Баллы
1
Здраствуйте,нужно реализовать в плагине продажу через GameCMS . И поравить некоторые ньюансы
Бюджет 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 _:pleyerEnum{
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());
Последнее редактирование:
На 10 руб повысь, сразу возьмутся.
 
Назад
Сверху