Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <file>
//#include <cstrike>
#include <fakemeta>
//#include <reapi>
// Настройки:
// Флаг доступа:
#define ACCESS_FLAG ADMIN_LEVEL_H
// Мин. и макс. урон от огня:
#define FIRE_DMG_MIN 4
#define FIRE_DMG_MAX 8
// Мин. и макс. длительность горения:
#define FIRE_DUR_MIN 4
#define FIRE_DUR_MAX 8
// Путь к папке с моделями ("models/.../"):
#define MODEL_PATH "models/awFireDeagle/"
// Название моделей ("deagle" => v/p_deagle.mdl):
#define MODEL_NAME "deagle"
// Команда для вкл\выкл огненного дигла:
#define SWITCH_CMD "say /fd"
// Префикс плагина в чате:
//new const pPrefix[] = "!g[!tFireDeagle!g]!t";
// Поддержка режима FFA(Каждый сам за себя)
#define SUPPORT_FFA 0
// Множитель урона от попадания огненного дигла [Float]
#define FIRE_SHOT_DMG 0.8
enum cvars{
cFireDmgMin,
cFireDmgMax,
cFireDurMin,
cFireDurMax,
cAccessFlags,
cModelsPath,
cModelsName,
cFfaMode,
cDmgMult,
cChatPrefix,
cSwitchCmd,
cPlayerGlow
}
new bool:pOnFire[33], bool:pFireDeagleActive[33];
new msgDamage, spFire[5];
new vModel[128], pModel[128];
new pCvars[cvars];
new pPrefix[128], mdlName[128], mdlPath[128];
#define PLUG_VER "1.2"
#define PLUG_NAME "Fire Deagle"
public plugin_init(){
register_plugin(PLUG_NAME, PLUG_VER, "ArKaNeMaN");
get_pcvar_string(pCvars[cChatPrefix], pPrefix, charsmax(pPrefix));
static swtchCmd[128]; get_pcvar_string(pCvars[cSwitchCmd], swtchCmd, charsmax(swtchCmd));
RegisterHam (Ham_TakeDamage, "player", "pTakeDamage", true);
RegisterHam(Ham_Item_Deploy, "weapon_deagle", "pDeagleDeploy", true);
RegisterHam(Ham_Killed,"player","pDeath");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "wPrimaryAttack", true);
msgDamage = get_user_msgid("Damage");
register_clcmd(swtchCmd, "fdSwitch");
server_print("[%s v%s] loaded. ", PLUG_NAME, PLUG_VER);
}
public cfgExec(){
pCvars[cFireDmgMin] = register_cvar("awFdFireDmgMin", "4");
pCvars[cFireDmgMax] = register_cvar("awFdFireDmgMax", "8");
pCvars[cFireDurMin] = register_cvar("awFdFireDurMin", "4");
pCvars[cFireDurMax] = register_cvar("awFdFireDurMax", "8");
pCvars[cAccessFlags] = register_cvar("awFdAccessFlags", "t");
pCvars[cModelsPath] = register_cvar("awFdModelsPath", "models/awFireDeagle/");
pCvars[cModelsName] = register_cvar("awFdModelsName", "deagle");
pCvars[cFfaMode] = register_cvar("awFdFfaMode", "0");
pCvars[cDmgMult] = register_cvar("awFdDmgMult", "1.0");
pCvars[cChatPrefix] = register_cvar("awFdChatPrefix", "!g[!tFireDeagle!g]!t");
pCvars[cSwitchCmd] = register_cvar("awFdSwitchCmd", "say /fd");
pCvars[cPlayerGlow] = register_cvar("awFdPlayerGlow", "1");
static cfgDir[32], cfgFileFullName[64];
get_configsdir(cfgDir, charsmax(cfgDir));
formatex(cfgFileFullName, charsmax(cfgFileFullName), "%s/awFireDeagle.cfg", cfgDir);
if(file_exists(cfgFileFullName)){
server_cmd("exec %s", cfgFileFullName);
server_exec();
}
else{
server_print("[%s v%s] [Error] [Config file not found (%s)] [Plugin paused]", PLUG_NAME, PLUG_VER, cfgFileFullName);
pause("d");
}
}
public wPrimaryAttack(weapon){
static id; id = get_pdata_cbase(weapon, 41, 4);
if(pFireDeagleActive[id] && get_user_flags(id) & get_pcvar_flags(pCvars[cAccessFlags])) emit_sound(id, CHAN_WEAPON, "awFireDeagle/shot.wav", 1.0, ATTN_NORM, 0, 100);
}
public fdSwitch(id){
if(get_user_flags(id) & get_pcvar_flags(pCvars[cAccessFlags])){
static name[32]; get_user_name(id, name, charsmax(name));
pFireDeagleActive[id] = !pFireDeagleActive[id];
printColorChat(id, "%s Огненный дигл !g%s!t.", pPrefix, pFireDeagleActive[id] ? "активирован" : "деактивирован");
if(get_user_weapon(id) == CSW_DEAGLE){
if(pFireDeagleActive[id]) setFireModel(id);
else resetDeagleModel(id);
}
}
else printColorChat(id, "%s Нет доступа!", pPrefix);
}
public plugin_natives() register_native("fdIsUserOnFire", "nativeIsUserOnFire");
public nativeIsUserOnFire(pluginId, param) return pOnFire[get_param(1)] ? 1 : 0;
public plugin_precache(){
cfgExec();
get_pcvar_string(pCvars[cModelsPath], mdlPath, charsmax(mdlPath));
get_pcvar_string(pCvars[cModelsName], mdlName, charsmax(mdlName));
for(new i = 0; i < 1; i++){
static fileName[128]; formatex(fileName, charsmax(fileName), "sprites/reapi_molotov/fire.spr", i+1);
spFire[i] = precache_model(fileName);
}
/*
precache_sound("awFireDeagle/dmg1.wav");
precache_sound("awFireDeagle/dmg2.wav");
precache_sound("awFireDeagle/dmg3.wav");
precache_sound("awFireDeagle/dmg4.wav");
*/
precache_sound("awFireDeagle/shot.wav");
formatex(vModel, charsmax(vModel), "%sv_%s.mdl", mdlPath, mdlName);
if(file_exists(vModel)) precache_model(vModel);
else formatex(vModel, charsmax(vModel), "");
formatex(pModel, charsmax(pModel), "%sp_%s.mdl", mdlPath, mdlName);
if(file_exists(pModel)) precache_model(pModel);
else formatex(pModel, charsmax(pModel), "");
}
public client_authorized(id) pFireDeagleActive[id] = false;
public pDeath(victim, attacker, corpse){
static data[2]; data[0] = victim;
pFireEnd(data);
remove_task(victim);
}
public pTakeDamage(victim, weapon, attacker, Float:damage, damagebits){
if(!attacker || !victim || attacker == victim) return HAM_IGNORED;
if(get_user_weapon(attacker) == CSW_DEAGLE && get_user_flags(attacker) & get_pcvar_flags(pCvars[cAccessFlags]) && pFireDeagleActive[attacker]){
if(!pOnFire[victim]){
if(get_user_team(attacker) != get_user_team(victim) || get_pcvar_num(pCvars[cFfaMode])){
static data[2]; data[0] = victim; data[1] = attacker;
pOnFire[victim] = true;
igniteEffects(data);
ignitePlayer(data);
static fireDur; fireDur = random_num(get_pcvar_num(pCvars[cFireDurMin]), get_pcvar_num(pCvars[cFireDurMax]));
if(get_pcvar_num(pCvars[cPlayerGlow])) set_user_rendering(victim, kRenderFxGlowShell, 240, 127, 19, kRenderNormal, 25);
set_task(float(fireDur), "pFireEnd" , victim, data, 2);
damage = damage*get_pcvar_float(pCvars[cDmgMult]);
SetHamParamFloat(4, damage);
return HAM_IGNORED;
}
}
}
return HAM_IGNORED;
}
public pFireEnd(data[]){
pOnFire[data[0]] = false;
set_user_rendering(data[0]);
}
public igniteEffects(data[]){
new id = data[0];
if(is_user_alive(id) && pOnFire[id]){
static korigin[3]; get_user_origin(id, korigin);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(17);
write_coord(korigin[0]);
write_coord(korigin[1]);
write_coord(korigin[2]);
write_short(spFire[random_num(0, 4)]);
write_byte(6); ///размер спрайта
write_byte(200); ///прозрачность спрайта
message_end();
set_task(0.1, "igniteEffects" , 0 , data, 2);
}
return PLUGIN_CONTINUE;
}
public ignitePlayer(data[]){
new id = data[0];
if(is_user_alive(id) && pOnFire[id]){
new korigin[3];
new pOrigin[3];
get_user_origin(id, korigin);
ExecuteHam(Ham_TakeDamage, data[0], data[1], data[1], float(random_num(get_pcvar_num(pCvars[cFireDmgMin]), get_pcvar_num(pCvars[cFireDmgMax]))), DMG_BURN);
message_begin(MSG_ONE, msgDamage, {0, 0, 0}, id);
write_byte(30);
write_byte(30);
write_long(1<<21);
write_coord(korigin[0]);
write_coord(korigin[1]);
write_coord(korigin[2]);
message_end();
/*
static name[32]; get_user_name(id, name, charsmax(name));
static sSound[128]; formatex(sSound, charsmax(sSound), "awFireDeagle/dmg%d.wav", random_num(1, 4));
emit_sound(data[0], CHAN_VOICE, sSound, 0.8, ATTN_NORM, 0, PITCH_NORM);
emit_sound(id, CHAN_ITEM, sSound, 0.6, ATTN_NORM, 0, PITCH_NORM);
*/
new players[32], inum = 0;
get_players(players, inum, "a");
for(new i = 0 ; i < inum; ++i){
get_user_origin(players[i], pOrigin);
if(get_distance(korigin, pOrigin) < 100){
if(!pOnFire[players[i]]){
ExecuteHam(Ham_TakeDamage, players[i], data[0], data[1], float(random_num(get_pcvar_num(pCvars[cFireDmgMin]), get_pcvar_num(pCvars[cFireDmgMax]))), DMG_BURN);
message_begin(MSG_ONE, msgDamage, {0, 0, 0}, players[i]);
write_byte(30);
write_byte(30);
write_long(1<<21);
write_coord(pOrigin[0]);
write_coord(pOrigin[1]);
write_coord(pOrigin[2]);
message_end();
/*
static ssSound[128]; formatex(ssSound, charsmax(ssSound), "awFireDeagle/fire%d.wav", random_num(1, 4));
emit_sound(players[i], CHAN_VOICE, ssSound, 0.8, ATTN_NORM, 0, PITCH_NORM);
*/
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(17);
write_coord(pOrigin[0]);
write_coord(pOrigin[1]);
write_coord(pOrigin[2]);
write_short(spFire[random_num(0, 4)]);
write_byte(20);
write_byte(200);
message_end();
}
}
}
set_task(1.0, "ignitePlayer" , 0, data, 2);
}
return PLUGIN_CONTINUE;
}
public pDeagleDeploy(weapon){
static id; id = get_pdata_cbase(weapon, 41, 4);
setFireModel(id);
return HAM_IGNORED;
}
public setFireModel(id){
if(pFireDeagleActive[id] && get_user_flags(id) & get_pcvar_flags(pCvars[cAccessFlags])){
if(vModel[0]) set_pev(id, pev_viewmodel2, vModel);
if(pModel[0]) set_pev(id, pev_weaponmodel2, pModel);
return true;
}
return false;
}
public resetDeagleModel(id){
set_pev(id, pev_viewmodel2, "models/v_deagle.mdl");
set_pev(id, pev_weaponmodel2, "models/p_deagle.mdl");
}
stock printColorChat(const index, const input[], any:...){
#define gmsg_SayText 76
static msg[191];
new count = 1, players[32];
vformat(msg, 190, input, 3);
replace_all(msg, sizeof(msg), "!g", "^4");
replace_all(msg, sizeof(msg), "!t", "^3");
replace_all(msg, sizeof(msg), "!n", "^1");
if(index) players[0] = index; else get_players(players, count, "ch");
for(new i = 0; i < count; i++){
if(!is_user_connected(players[i])) return;
message_begin(MSG_ONE_UNRELIABLE, gmsg_SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}