[N][E][M][E][C] писал(а): Самое интересное, с контры делают помойку!!! Ледяной шар и т.д. От сюда я считаю кс и пропала.
Модератор: Leonidddd
/* ===============================================================================
* Knife warmup 0.1 [28.03.2016]
* Благодарности:
* - s1lent: реализация и возможность использования 'Regamedll_CS', 'RoundControl'
* - Safety1st: способы реализации некоторых функций из 'Uncommon Knife Warmup'
* ============================================================================ */
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <hamsandwich>
//#include <roundcontrol> // раскомментируйте эту строку, если на сервере не используется Regamedll_CS
#pragma semicolon 1
#define bit_set(%0,%1) (%1 |= (1<<%0))
#define bit_clear(%0,%1) (%1 &= ~(1<<%0))
#define bit_valid(%0,%1) (%1 & (1<<%0))
//#define USE_PAUSE // раскомментируйте эту строку, если желаете, чтобы плагин прекратил работу после выполнения задачи
const MAX_PLAYERS = 28; // максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
const WARMUP_TIME = 55; // кол-во времени в секундах, отведённое на разминку (по умолчанию 90)
const Float:RESPAWN_DELAY = 0.75; // кол-во времени в секундах, отведённое на задержку перед респауном (по умолчанию 0.75)
const Float:SHOW_MSG_DELAY = 0.5; // кол-во времени в секундах, отведённое на задержку перед отправкой HUD-сообщения (по умолчанию 0.5)
const Float:WARMUP_HEALTH = 35.0; // кол-во ед. здоровья, устанавливаемое игроку при спауне во время разминки (по умолчанию 35.0)
const HW_CROSS_AMMO_WPNLIST = (1<<0);
const HW_TIMER = (1<<4);
const HW_MONEY = (1<<5);
new const KILL_SOUNDS[][] = {
"misc/sheep.wav", "misc/killChicken.wav", "misc/cow.wav"
};
enum {
WS_WAITING = 1,
WS_BEGIN,
WS_IN_PROGRESS,
WS_ENDED
}
new HamHook:g_pHamSpawn, HamHook:g_pHamAddPlayerItem, HamHook:g_pHamGiveAmmo, HamHook:g_pHamUse, HamHook:g_pHamKilled;
#if defined _roundcontrol_included
new RoundControlHook:g_pCheckWinHook;
#else
new g_pRoundInfinite, g_szRoundInfinite[10];
#endif
new g_pRestartRound, g_pHideWeaponMsgId, g_pStatusIconMsgId, g_pHudSyncObj1, g_pHudSyncObj2, g_pThinkEnt, g_iConnectedBitsum, g_iAliveBitsum, g_iMessageBitsum, g_iFrags[MAX_PLAYERS + 1],
g_iWarmupState = WS_WAITING, g_pHideWeapon, g_iTimerCount;
public plugin_precache() {
for(new i; i < sizeof KILL_SOUNDS; i++) {
precache_sound(KILL_SOUNDS[i]);
}
}
public plugin_init() {
register_plugin("Knife warmup", "0.1", "Subb98");
register_clcmd("joinclass", "CmdJoinClass");
const JOIN_CLASS_MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
register_menucmd(register_menuid("Terrorist_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_menucmd(register_menuid("CT_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_event("HLTV", "EventHLTV", "a", "1=0", "2=0");
register_logevent("EventGameCommencing", 2, "1=Game_Commencing");
register_logevent("EventRoundStart", 2, "1=Round_Start");
register_logevent("EventRoundEnd", 2, "1=Round_End");
new const ENT_CLASSNAME[] = "player";
DisableHamForward(g_pHamSpawn = RegisterHam(Ham_Spawn, ENT_CLASSNAME, "HamSpawnPlayerPost", 1));
DisableHamForward(g_pHamAddPlayerItem = RegisterHam(Ham_AddPlayerItem, ENT_CLASSNAME, "HamAddPlayerItemPre"));
DisableHamForward(g_pHamGiveAmmo = RegisterHam(Ham_GiveAmmo, ENT_CLASSNAME, "HamGiveAmmoPre"));
DisableHamForward(g_pHamUse = RegisterHam(Ham_Use, "hostage_entity", "HamUseHostagePre"));
DisableHamForward(g_pHamKilled = RegisterHam(Ham_Killed, ENT_CLASSNAME, "HamKilledPlayerPost", 1));
#if !defined _roundcontrol_included
g_pRoundInfinite = get_cvar_pointer("mp_round_infinite");
#endif
g_pRestartRound = get_cvar_pointer("sv_restartround");
g_pHideWeaponMsgId = get_user_msgid("HideWeapon");
g_pStatusIconMsgId = get_user_msgid("StatusIcon");
g_pHudSyncObj1 = CreateHudSyncObj();
g_pHudSyncObj2 = CreateHudSyncObj();
CreateThinkEntity();
}
#if !defined _roundcontrol_included
public plugin_cfg() {
if(g_pRoundInfinite) {
get_pcvar_string(g_pRoundInfinite, g_szRoundInfinite, charsmax(g_szRoundInfinite));
}
}
#endif
public client_putinserver(id) {
ResetValues(id);
if(!is_user_bot(id) && !is_user_hltv(id)) {
bit_set(id, g_iConnectedBitsum);
}
}
public client_disconnect(id) {
ResetValues(id);
remove_task(id);
}
public CmdJoinClass(const id) {
if(g_iWarmupState == WS_IN_PROGRESS) {
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
}
public EventHLTV() {
switch(g_iWarmupState) {
case WS_BEGIN: {
g_iWarmupState = WS_IN_PROGRESS;
g_iMessageBitsum = 0;
EnableHamForward(g_pHamSpawn);
EnableHamForward(g_pHamAddPlayerItem);
EnableHamForward(g_pHamGiveAmmo);
EnableHamForward(g_pHamUse);
EnableHamForward(g_pHamKilled);
g_pHideWeapon = register_message(g_pHideWeaponMsgId, "MessageHideWeapon");
#if defined _roundcontrol_included
g_pCheckWinHook = SetBlockControl(RC_CheckWinConditions);
#else
if(g_pRoundInfinite) {
set_pcvar_num(g_pRoundInfinite, 1);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_SET);
}
case WS_ENDED: {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + SHOW_MSG_DELAY);
}
}
}
public EventGameCommencing() {
if(g_iWarmupState == WS_WAITING) {
g_iWarmupState = WS_BEGIN;
}
}
public EventRoundStart() {
if(g_iWarmupState == WS_IN_PROGRESS) {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + 1.0);
}
}
public EventRoundEnd() {
if(g_iWarmupState == WS_IN_PROGRESS) {
g_iWarmupState = WS_ENDED;
DisableHamForward(g_pHamSpawn);
DisableHamForward(g_pHamAddPlayerItem);
DisableHamForward(g_pHamGiveAmmo);
DisableHamForward(g_pHamUse);
DisableHamForward(g_pHamKilled);
unregister_message(g_pHideWeaponMsgId, g_pHideWeapon);
#if defined _roundcontrol_included
RemoveBlockControl(RC_CheckWinConditions, g_pCheckWinHook);
#else
if(g_pRoundInfinite) {
set_pcvar_string(g_pRoundInfinite, g_szRoundInfinite);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_NOT);
set_pcvar_float(g_pRestartRound, 1.0);
}
}
public MessageHideWeapon() {
const ARG_FLAGS = 1;
set_msg_arg_int(ARG_FLAGS, ARG_BYTE, get_msg_arg_int(ARG_FLAGS) | HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
}
public HamSpawnPlayerPost(const id) {
if(is_user_alive(id)) {
bit_set(id, g_iAliveBitsum);
if(!bit_valid(id, g_iMessageBitsum)) {
set_task(SHOW_MSG_DELAY, "TaskWarmupStartMsg", id);
}
entity_set_float(id, EV_FL_health, WARMUP_HEALTH);
engclient_cmd(id, "weapon_knife");
message_begin(MSG_ONE, g_pHideWeaponMsgId, _, id);
write_byte(HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
message_end();
}
}
public HamAddPlayerItemPre(const id, const pEnt) {
if(cs_get_weapon_id(pEnt) != CSW_KNIFE) {
entity_set_int(pEnt, EV_INT_flags, entity_get_int(pEnt, EV_INT_flags ) | FL_KILLME);
SetHamReturnInteger(0);
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public HamGiveAmmoPre() {
const NO_AMMO_STOP_PROCESSING = -1;
SetHamReturnInteger(NO_AMMO_STOP_PROCESSING);
return HAM_SUPERCEDE;
}
public HamUseHostagePre() {
return HAM_SUPERCEDE;
}
public HamKilledPlayerPost(const id, const pKiller) {
bit_clear(id, g_iAliveBitsum);
if(bit_valid(pKiller, g_iAliveBitsum)) {
if(g_iFrags[pKiller] == sizeof KILL_SOUNDS) {
g_iFrags[pKiller] = 0;
}
emit_sound(pKiller, CHAN_VOICE, KILL_SOUNDS[g_iFrags[pKiller]], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
g_iFrags[pKiller]++;
}
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
public FwdThink(const pEnt) {
switch(g_iWarmupState) {
case WS_IN_PROGRESS: {
static iDiff, iMin;
iDiff = WARMUP_TIME - g_iTimerCount++, iMin = 0;
GetMinutes(iDiff, iMin);
set_hudmessage(128, 64, _, _, 0.96, _, _, 1.0, 0.0, 0.01, -1);
ShowSyncHudMsg(0, g_pHudSyncObj1, "До конца разминки: %d:%d", iMin, iDiff);
if(iDiff || iMin) {
entity_set_float(pEnt, EV_FL_nextthink, get_gametime() + 1.0);
} else {
EventRoundEnd();
}
}
case WS_ENDED: {
g_iWarmupState = WS_WAITING;
g_iTimerCount = 0;
set_hudmessage(0, 255, _, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(0, g_pHudSyncObj2, "Приготовьтесь к бою!^nИгра началась!");
#if defined USE_PAUSE
pause("d");
#endif
}
}
}
public TaskRespawn(const id) {
if(bit_valid(id, g_iConnectedBitsum) && !bit_valid(id, g_iAliveBitsum) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
ExecuteHamB(Ham_CS_RoundRespawn, id);
}
}
public TaskWarmupStartMsg(const id) {
if(bit_valid(id, g_iAliveBitsum)) {
set_hudmessage(255, 0, _, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(id, g_pHudSyncObj2, "Приготовьтесь к бойне!^nРазминка на ножах началась!");
bit_set(id, g_iMessageBitsum);
}
}
CreateThinkEntity() {
new const ENT_CLASSNAME[] = "_warmup_think_ent";
if((g_pThinkEnt = create_entity("info_target"))) {
entity_set_string(g_pThinkEnt, EV_SZ_classname, ENT_CLASSNAME);
register_think(ENT_CLASSNAME, "FwdThink");
} else {
set_fail_state("Failed to create think entity");
}
}
ResetValues(const id) {
log_amx("id = %d", id);
bit_clear(id, g_iConnectedBitsum);
bit_clear(id, g_iAliveBitsum);
bit_clear(id, g_iMessageBitsum);
g_iFrags[id] = 0;
}
GetMinutes(&iSec, &iMin) {
const SECONDS_IN_MINUTE = 60;
iMin = iSec / SECONDS_IN_MINUTE, iSec %= SECONDS_IN_MINUTE;
}
Subb98 писал(а):BoJl4aRAAA, добрый день. Предоставьте также лог из консоли сервера + список загруженных модулей (amxx modules).
/* ===============================================================================
* Knife warmup 0.1 [28.03.2016]
* Благодарности:
* - s1lent: реализация и возможность использования 'Regamedll_CS', 'RoundControl'
* - Safety1st: способы реализации некоторых функций из 'Uncommon Knife Warmup'
* ============================================================================ */
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <hamsandwich>
//#include <roundcontrol> // раскомментируйте эту строку, если на сервере не используется Regamedll_CS
#pragma semicolon 1
#define bit_set(%0,%1) (%1 |= (1<<%0))
#define bit_clear(%0,%1) (%1 &= ~(1<<%0))
#define bit_valid(%0,%1) (%1 & (1<<%0))
#define USE_PAUSE // раскомментируйте эту строку, если желаете, чтобы плагин прекратил работу после выполнения задачи
const MAX_PLAYERS = 28; // максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
const WARMUP_TIME = 55; // кол-во времени в секундах, отведённое на разминку (по умолчанию 90)
const Float:RESPAWN_DELAY = 0.75; // кол-во времени в секундах, отведённое на задержку перед респауном (по умолчанию 0.75)
const Float:SHOW_MSG_DELAY = 0.5; // кол-во времени в секундах, отведённое на задержку перед отправкой HUD-сообщения (по умолчанию 0.5)
const Float:WARMUP_HEALTH = 35.0; // кол-во ед. здоровья, устанавливаемое игроку при спауне во время разминки (по умолчанию 35.0)
const HW_CROSS_AMMO_WPNLIST = (1<<0);
const HW_TIMER = (1<<4);
const HW_MONEY = (1<<5);
new const KILL_SOUNDS[][] = {
"misc/sheep.wav", "misc/killChicken.wav", "misc/cow.wav"
};
enum {
WS_WAITING = 1,
WS_BEGIN,
WS_IN_PROGRESS,
WS_ENDED
}
new HamHook:g_pHamSpawn, HamHook:g_pHamAddPlayerItem, HamHook:g_pHamGiveAmmo, HamHook:g_pHamUse, HamHook:g_pHamKilled;
#if defined _roundcontrol_included
new RoundControlHook:g_pCheckWinHook;
#else
new g_pRoundInfinite, g_szRoundInfinite[10];
#endif
new g_pRestartRound, g_pHideWeaponMsgId, g_pStatusIconMsgId, g_pHudSyncObj1, g_pHudSyncObj2, g_pThinkEnt, g_iConnectedBitsum, g_iAliveBitsum, g_iMessageBitsum, g_iFrags[MAX_PLAYERS + 1],
g_iWarmupState = WS_WAITING, g_pHideWeapon, g_iTimerCount;
public plugin_precache() {
for(new i; i < sizeof KILL_SOUNDS; i++) {
precache_sound(KILL_SOUNDS[i]);
}
}
public plugin_init() {
register_plugin("Knife warmup", "0.1", "Subb98");
register_clcmd("joinclass", "CmdJoinClass");
const JOIN_CLASS_MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
register_menucmd(register_menuid("Terrorist_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_menucmd(register_menuid("CT_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_event("HLTV", "EventHLTV", "a", "1=0", "2=0");
register_logevent("EventGameCommencing", 2, "1=Game_Commencing");
register_logevent("EventRoundStart", 2, "1=Round_Start");
register_logevent("EventRoundEnd", 2, "1=Round_End");
new const ENT_CLASSNAME[] = "player";
DisableHamForward(g_pHamSpawn = RegisterHam(Ham_Spawn, ENT_CLASSNAME, "HamSpawnPlayerPost", 1));
DisableHamForward(g_pHamAddPlayerItem = RegisterHam(Ham_AddPlayerItem, ENT_CLASSNAME, "HamAddPlayerItemPre"));
DisableHamForward(g_pHamGiveAmmo = RegisterHam(Ham_GiveAmmo, ENT_CLASSNAME, "HamGiveAmmoPre"));
DisableHamForward(g_pHamUse = RegisterHam(Ham_Use, "hostage_entity", "HamUseHostagePre"));
DisableHamForward(g_pHamKilled = RegisterHam(Ham_Killed, ENT_CLASSNAME, "HamKilledPlayerPost", 1));
#if !defined _roundcontrol_included
g_pRoundInfinite = get_cvar_pointer("mp_round_infinite");
#endif
g_pRestartRound = get_cvar_pointer("sv_restartround");
g_pHideWeaponMsgId = get_user_msgid("HideWeapon");
g_pStatusIconMsgId = get_user_msgid("StatusIcon");
g_pHudSyncObj1 = CreateHudSyncObj();
g_pHudSyncObj2 = CreateHudSyncObj();
CreateThinkEntity();
}
#if !defined _roundcontrol_included
public plugin_cfg() {
if(g_pRoundInfinite) {
get_pcvar_string(g_pRoundInfinite, g_szRoundInfinite, charsmax(g_szRoundInfinite));
}
}
#endif
public client_putinserver(id) {
ResetValues(id);
if(!is_user_bot(id) && !is_user_hltv(id)) {
bit_set(id, g_iConnectedBitsum);
}
}
public client_disconnect(id) {
ResetValues(id);
remove_task(id);
}
public CmdJoinClass(const id) {
if(g_iWarmupState == WS_IN_PROGRESS) {
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
}
public EventHLTV() {
switch(g_iWarmupState) {
case WS_BEGIN: {
g_iWarmupState = WS_IN_PROGRESS;
g_iMessageBitsum = 0;
EnableHamForward(g_pHamSpawn);
EnableHamForward(g_pHamAddPlayerItem);
EnableHamForward(g_pHamGiveAmmo);
EnableHamForward(g_pHamUse);
EnableHamForward(g_pHamKilled);
g_pHideWeapon = register_message(g_pHideWeaponMsgId, "MessageHideWeapon");
#if defined _roundcontrol_included
g_pCheckWinHook = SetBlockControl(RC_CheckWinConditions);
#else
if(g_pRoundInfinite) {
set_pcvar_num(g_pRoundInfinite, 1);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_SET);
}
case WS_ENDED: {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + SHOW_MSG_DELAY);
}
}
}
public EventGameCommencing() {
if(g_iWarmupState == WS_WAITING) {
g_iWarmupState = WS_BEGIN;
}
}
public EventRoundStart() {
if(g_iWarmupState == WS_IN_PROGRESS) {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + 1.0);
}
}
public EventRoundEnd() {
if(g_iWarmupState == WS_IN_PROGRESS) {
g_iWarmupState = WS_ENDED;
DisableHamForward(g_pHamSpawn);
DisableHamForward(g_pHamAddPlayerItem);
DisableHamForward(g_pHamGiveAmmo);
DisableHamForward(g_pHamUse);
DisableHamForward(g_pHamKilled);
unregister_message(g_pHideWeaponMsgId, g_pHideWeapon);
#if defined _roundcontrol_included
RemoveBlockControl(RC_CheckWinConditions, g_pCheckWinHook);
#else
if(g_pRoundInfinite) {
set_pcvar_string(g_pRoundInfinite, g_szRoundInfinite);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_NOT);
set_pcvar_float(g_pRestartRound, 1.0);
}
}
public MessageHideWeapon() {
const ARG_FLAGS = 1;
set_msg_arg_int(ARG_FLAGS, ARG_BYTE, get_msg_arg_int(ARG_FLAGS) | HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
}
public HamSpawnPlayerPost(const id) {
if(is_user_alive(id)) {
bit_set(id, g_iAliveBitsum);
if(!bit_valid(id, g_iMessageBitsum)) {
set_task(SHOW_MSG_DELAY, "TaskWarmupStartMsg", id);
}
entity_set_float(id, EV_FL_health, WARMUP_HEALTH);
engclient_cmd(id, "weapon_knife");
message_begin(MSG_ONE, g_pHideWeaponMsgId, _, id);
write_byte(HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
message_end();
}
}
public HamAddPlayerItemPre(const id, const pEnt) {
if(cs_get_weapon_id(pEnt) != CSW_KNIFE) {
entity_set_int(pEnt, EV_INT_flags, entity_get_int(pEnt, EV_INT_flags ) | FL_KILLME);
SetHamReturnInteger(0);
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public HamGiveAmmoPre() {
const NO_AMMO_STOP_PROCESSING = -1;
SetHamReturnInteger(NO_AMMO_STOP_PROCESSING);
return HAM_SUPERCEDE;
}
public HamUseHostagePre() {
return HAM_SUPERCEDE;
}
public HamKilledPlayerPost(const id, const pKiller) {
bit_clear(id, g_iAliveBitsum);
if(bit_valid(pKiller, g_iAliveBitsum)) {
if(g_iFrags[pKiller] == sizeof KILL_SOUNDS) {
g_iFrags[pKiller] = 0;
}
emit_sound(pKiller, CHAN_VOICE, KILL_SOUNDS[g_iFrags[pKiller]], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
g_iFrags[pKiller]++;
}
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
public FwdThink(const pEnt) {
switch(g_iWarmupState) {
case WS_IN_PROGRESS: {
static iDiff, iMin;
iDiff = WARMUP_TIME - g_iTimerCount++, iMin = 0;
GetMinutes(iDiff, iMin);
set_hudmessage(128, 64, _, _, 0.96, _, _, 1.0, 0.0, 0.01, -1);
ShowSyncHudMsg(0, g_pHudSyncObj1, "До конца разминки: %d:%d", iMin, iDiff);
if(iDiff || iMin) {
entity_set_float(pEnt, EV_FL_nextthink, get_gametime() + 1.0);
} else {
EventRoundEnd();
}
}
case WS_ENDED: {
g_iWarmupState = WS_WAITING;
g_iTimerCount = 0;
set_hudmessage(0, 255, _, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(0, g_pHudSyncObj2, "Разминка закончилась!^nВсем Удачи!");
#if defined USE_PAUSE
pause("d");
#endif
}
}
}
public TaskRespawn(const id) {
if(bit_valid(id, g_iConnectedBitsum) && !bit_valid(id, g_iAliveBitsum) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
ExecuteHamB(Ham_CS_RoundRespawn, id);
}
}
public TaskWarmupStartMsg(const id) {
if(bit_valid(id, g_iAliveBitsum)) {
set_hudmessage(255, 0, _, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(id, g_pHudSyncObj2, "nРазминка на ножах началась!");
bit_set(id, g_iMessageBitsum);
}
}
CreateThinkEntity() {
new const ENT_CLASSNAME[] = "_warmup_think_ent";
if((g_pThinkEnt = create_entity("info_target"))) {
entity_set_string(g_pThinkEnt, EV_SZ_classname, ENT_CLASSNAME);
register_think(ENT_CLASSNAME, "FwdThink");
} else {
set_fail_state("Failed to create think entity");
}
}
ResetValues(const id) {
log_amx("id = %d", id);
bit_clear(id, g_iConnectedBitsum);
bit_clear(id, g_iAliveBitsum);
bit_clear(id, g_iMessageBitsum);
g_iFrags[id] = 0;
}
GetMinutes(&iSec, &iMin) {
const SECONDS_IN_MINUTE = 60;
iMin = iSec / SECONDS_IN_MINUTE, iSec %= SECONDS_IN_MINUTE;
}
Subb98 писал(а):BoJl4aRAAA, прочтите эту статью: Вы должны зарегистрироваться, чтобы видеть ссылки.. Касаемо брони - её нужно обнулять при респауне, Вы должны зарегистрироваться, чтобы видеть ссылки..
Currently loaded plugins:
name version author file status
[ 1] Skill ELO 15.07.22 SKAJIbnEJIb skill_elo.amxx running
[ 2] CsStats MySQL 15.07.15 SKAJIbnEJIb csstats_mysql.a running
[ 3] StatsX RBS 15.07.24 SKAJIbnEJIb & AM statsx_rbs.amxx running
[ 4] Stats Configuration 15.07.15 SKAJIbnEJIb & AM statscfg_rbs.am running
[ 5] Army Ranks Ultimate 15.07.24 SKAJIbnEJIb army_ranks_ulti running
[ 6] AR Bets 15.07.15 SKAJIbnEJIb ar_bets.amxx running
[ 7] unknown unknown unknown top_awards_wopo bad load
[ 8] DopBan 2.8.2b kanagava dop_ban2.amxx running
[ 9] fb_forwards 0.1.4 Kanagava & Realu fb_forwards.amx running
[ 10] ScreenMaker 1.1 neygomon screen_maker.am running
[ 11] Admin Loader 2.5.2 neygomon admin_loader_fo running
[ 12] FreshBan 1.0.5b kanagava fresh_bans.amxx running
[ 13] AIM detector 0.9.2cs kanagava aim_detector.am running
[ 14] Lite Kill Assist 1.17 neygomon lite_kill_assis running
[ 15] unknown unknown unknown knifeduel_impro bad load
[ 16] Ultimate Gag 15.07.15 SKAJIbnEJIb ultimate_gag.am running
[ 17] VIP RBS 15.07.18 SKAJIbnEJIb vip_rbs.amxx running
[ 18] Ultimate Weapons 15.07.15 SKAJIbnEJIb ultimate_weapon running
[ 19] Maps Menu 1.8.2 AMXX Dev Team mapsmenu.amxx running
[ 20] Map Manager 2.5.60 Mistrick mapmanager.amxx running
[ 21] Chat Manager 1.0.0 Mistrick chatmanager.amx running
[ 22] LBZ 1.0 ill lbz.amxx running
[ 23] unknown unknown unknown lbzMOTD.amxx running
[ 24] Admin Chat 1.8.2 AMXX Dev Team adminchat.amxx running
[ 25] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 26] Anti Flood 1.8.2 AMXX Dev Team antiflood.amxx running
[ 27] Commands Menu 1.8.2 AMXX Dev Team cmdmenu.amxx running
[ 28] Info. Messages 1.8.2 AMXX Dev Team imessage.amxx running
[ 29] Players Menu 1.8.2 AMXX Dev Team plmenu.amxx running
[ 30] Plugin Menu 1.8.2 AMXX Dev Team pluginmenu.amxx running
[ 31] Restrict Weapons 1.8.2 AMXX Dev Team restmenu.amxx running
[ 32] Scrolling Message 1.8.2 AMXX Dev Team scrollmsg.amxx running
[ 33] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 34] CS Misc. Stats 1.8.2 AMXX Dev Team miscstats.amxx running
[ 35] CS Stats Logging 1.8.2 AMXX Dev Team stats_logging.a running
[ 36] unknown unknown unknown KickSpamer.amxx bad load
[ 37] unknown unknown unknown proxy_detector. bad load
[ 38] WeaponSparks 1.0 CSPlugin weaponsparks.am running
[ 39] Admin ESP Mini 1.5 KoST admin_esp_mini. running
[ 40] C4 CD Voice 1.1 TTuCTOH c4cdvoice_femal running
[ 41] Lite Vampire 1.2 neygomon lite_vampire.am running
[ 42] StatsX 1.8.2 AMXX Dev Team statsx.amxx stopped
[ 43] Demo Recorder RBS 15.07.15 SKAJIbnEJIb demorecorder_rb running
[ 44] Autoresponder/Advertis 0.5 MaximusBrood reklama_in_chat running
[ 45] unknown unknown unknown reapi_slayloose bad load
[ 46] SpecList 1.2a FatalisDK speclist.amxx running
[ 47] Admin Nick Guard 1.0 SKAJIbnEJIb admin_nick_guar running
[ 48] Block Spawn For Reconn 0.1 Bos93 block_spawn_for running
[ 49] Block Change Name 1.0 DJ_WEST block_change_na running
[ 50] LogsRemove 1.0 melo4 logsremove.amxx running
[ 51] Rock to Ban 1.52f Safety1st rock_to_ban.amx running
[ 52] Show Admins Online 1.1 vato loco [GE-S] show_admins_onl running
[ 53] High Ping Kicker 1.6 UFPS.Team high_ping_kicke running
[ 54] Map Spawns Editor RBS 14.08 iG_os & SKAJIbnE mapspawnseditor running
[ 55] Afk Control 0.5.1 neygomon afk_control.amx running
[ 56] unknown unknown unknown dhud_message_de bad load
[ 57] unknown unknown unknown gamename_change bad load
[ 58] unknown unknown unknown custom_models2. bad load
[ 59] unknown unknown unknown awp_limit.amxx bad load
[ 60] unknown unknown unknown admin_slots.amx bad load
[ 61] unknown unknown unknown gungame_changer bad load
[ 62] cAh VIP System Core 0.0.5 Notepad++ vip_system.amxx running
[ 63] Menus Front-End 15.07.15 AMXX Dev Team & amxmodmenu_rbs. running
[ 64] Parachute 15.07.15 KRoT@L/JTP10181 parachute_rbs.a running
[ 65] Reset Score 1.4 by24 reset_score.amx running
[ 66] Round Balancer 1.0 build neygomon round_balancer. running
[ 67] SlayNoobs 1.0 neygomon slaynoobs.amxx running
[ 68] Lite MapChooser 2.6 neygomon lite_mapchooser running
[ 69] Proxy Detetor 1.0 _xvi proxy_detetor.a running
[ 70] Block grande info soun 1.0 neygomon block_granade_i running
[ 71] Knife warmup 0.1 Subb98 knife_warnup.am running
[ 72] Admins are VIP's + gre 1.0 Eg@r4$il{ admin_vgk.amxx running
[ 73] cAh VIP System Golden AWP AlejandroSk/Note cahvipsystem_aw running
[ 74] cAh VIP System Golden Dea AlejandroSk/Note cahvipsystem_de running
[ 75] cAh VIP System Golden AK- AlejandroSk/Note cahvipsystem_go running
[ 76] cAh VIP System Golden FAM AlejandroSk/Note cahvipsystem_go running
[ 77] cAh VIP System Golden M4A AlejandroSk/Note cahvipsystem_go running
[ 78] cAh VIP System Golden M24 AlejandroSk/Note cahvipsystem_go running
( 7) Load fails: Plugin file open error (plugin "top_awards_wopox.amxx")
( 15) Load fails: Load error 17 (invalid file format or version) (plugin "knifeduel_improved.amxx")
( 36) Load fails: Load error 17 (invalid file format or version) (plugin "KickSpamer.amxx")
( 37) Load fails: Load error 17 (invalid file format or version) (plugin "proxy_detector.amxx")
( 45) Load fails: Load error 17 (invalid file format or version) (plugin "reapi_slayloosers.amxx")
( 56) Load fails: Load error 17 (invalid file format or version) (plugin "dhud_message_dead.amxx")
( 57) Load fails: Plugin file open error (plugin "")
( 58) Load fails: Load error 17 (invalid file format or version) (plugin "custom_models2.amxx")
( 59) Load fails: Load error 17 (invalid file format or version) (plugin "awp_limit.amxx")
( 60) Load fails: Load error 17 (invalid file format or version) (plugin "admin_slots.amxx")
( 61) Load fails: Load error 17 (invalid file format or version) (plugin "gungame_changer.amxx")
Currently loaded plugins:
description stat pend file vers src load unlod
[ 1] AMX Mod X RUN - amxmodx.so v1.8.2 ini Start ANY
[ 2] Rechecker RUN - rechecker.so v2.3 ini ANY
[ 3] WHBlocker RUN - whblocker.so v1.5.672 ini ANY
[ 4] SafeNameAndChat RUN - SafeNameAndChat. v1.0 ini ANY
[ 5] Reunion RUN - reunion.so v0.1.75 ini Start Never
[ 6] Revoice RUN - revoice.so v0.1.26 ini Start Never
[ 7] ReSemiclip RUN - resemiclip.so v2.3.8 ini ANY
[ 8] ReAuthCheck RUN - reauthcheck.so v0.1.5 ini Start Never
[ 9] ReAPI RUN - reapi_amxx_i386. v0.1.80 pl1 ANY Never
[10] CStrike RUN - cstrike_amxx_i38 v1.8.2 pl1 ANY
[11] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY
[12] Fun RUN - fun_amxx_i386.so v1.8.2 pl1 ANY
[13] Engine RUN - engine_amxx_i386 v1.8.2 pl1 ANY
[14] FakeMeta RUN - fakemeta_amxx_i3 v1.8.2 pl1 ANY
[15] Ham Sandwich RUN - hamsandwich_amxx v1.8.2 pl1 ANY
[16] MySQL RUN - mysql_amxx_i386. v1.8.2 pl1 ANY
16 plugins, 16 running
/* ===============================================================================
* Knife warmup 0.1 [28.03.2016]
* Благодарности:
* - Sanlerus: реализация отлова выбора класса
* - s1lent: реализация и возможность использования 'Regamedll_CS', 'RoundControl'
* - Safety1st: способы реализации некоторых функций из 'Uncommon Knife Warmup'
* ============================================================================ */
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <hamsandwich>
//#include <roundcontrol> // раскомментируйте эту строку, если на сервере не используется Regamedll_CS
#pragma semicolon 1
#define bit_set(%0,%1) (%1 |= (1<<%0))
#define bit_clear(%0,%1) (%1 &= ~(1<<%0))
#define bit_valid(%0,%1) (%1 & (1<<%0))
#define USE_PAUSE // раскомментируйте эту строку, если желаете, чтобы плагин прекратил работу после выполнения задачи
const MAX_PLAYERS = 20; // максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
const WARMUP_TIME = 90; // кол-во времени в секундах, отведённое на разминку (по умолчанию 90)
const Float:RESPAWN_DELAY = 0.75; // кол-во времени в секундах, отведённое на задержку перед респауном (по умолчанию 0.75)
const Float:SHOW_MSG_DELAY = 0.8; // кол-во времени в секундах, отведённое на задержку перед отправкой HUD-сообщения (по умолчанию 0.5)
const Float:WARMUP_HEALTH = 35.0; // кол-во ед. здоровья, устанавливаемое игроку при спауне во время разминки (по умолчанию 35.0)
const HW_CROSS_AMMO_WPNLIST = (1<<0);
const HW_TIMER = (1<<4);
const HW_MONEY = (1<<5);
new const KILL_SOUNDS[][] = {
"misc/sheep.wav", "misc/killChicken.wav", "misc/cow.wav"
};
enum {
WS_WAITING = 1,
WS_BEGIN,
WS_IN_PROGRESS,
WS_ENDED
}
new HamHook:g_pHamSpawn, HamHook:g_pHamAddPlayerItem, HamHook:g_pHamGiveAmmo, HamHook:g_pHamUse, HamHook:g_pHamKilled;
#if defined _roundcontrol_included
new RoundControlHook:g_pCheckWinHook;
#else
new g_pRoundInfinite, g_szRoundInfinite[10];
#endif
new g_pRestartRound, g_pHideWeaponMsgId, g_pStatusIconMsgId, g_pHudSyncObj1, g_pHudSyncObj2, g_pThinkEnt, g_iConnectedBitsum, g_iAliveBitsum, g_iMessageBitsum, g_iFrags[MAX_PLAYERS + 1],
g_iWarmupState = WS_WAITING, g_pHideWeapon, g_iTimerCount;
public plugin_precache() {
for(new i; i < sizeof KILL_SOUNDS; i++) {
precache_sound(KILL_SOUNDS[i]);
}
}
public plugin_init() {
register_plugin("Knife warmup", "0.1", "Subb98");
register_clcmd("joinclass", "CmdJoinClass");
const JOIN_CLASS_MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
register_menucmd(register_menuid("Terrorist_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_menucmd(register_menuid("CT_Select"), JOIN_CLASS_MENU_KEYS, "CmdJoinClass");
register_event("HLTV", "EventHLTV", "a", "1=0", "2=0");
register_logevent("EventGameCommencing", 2, "1=Game_Commencing");
register_logevent("EventRoundStart", 2, "1=Round_Start");
register_logevent("EventRoundEnd", 2, "1=Round_End");
new const ENT_CLASSNAME[] = "player";
DisableHamForward(g_pHamSpawn = RegisterHam(Ham_Spawn, ENT_CLASSNAME, "HamSpawnPlayerPost", 1));
DisableHamForward(g_pHamAddPlayerItem = RegisterHam(Ham_AddPlayerItem, ENT_CLASSNAME, "HamAddPlayerItemPre"));
DisableHamForward(g_pHamGiveAmmo = RegisterHam(Ham_GiveAmmo, ENT_CLASSNAME, "HamGiveAmmoPre"));
DisableHamForward(g_pHamUse = RegisterHam(Ham_Use, "hostage_entity", "HamUseHostagePre"));
DisableHamForward(g_pHamKilled = RegisterHam(Ham_Killed, ENT_CLASSNAME, "HamKilledPlayerPost", 1));
#if !defined _roundcontrol_included
g_pRoundInfinite = get_cvar_pointer("mp_round_infinite");
#endif
g_pRestartRound = get_cvar_pointer("sv_restartround");
g_pHideWeaponMsgId = get_user_msgid("HideWeapon");
g_pStatusIconMsgId = get_user_msgid("StatusIcon");
g_pHudSyncObj1 = CreateHudSyncObj();
g_pHudSyncObj2 = CreateHudSyncObj();
CreateThinkEntity();
}
#if !defined _roundcontrol_included
public plugin_cfg() {
if(g_pRoundInfinite) {
get_pcvar_string(g_pRoundInfinite, g_szRoundInfinite, charsmax(g_szRoundInfinite));
}
}
#endif
public client_putinserver(id) {
ResetValues(id);
if(!is_user_bot(id) && !is_user_hltv(id)) {
bit_set(id, g_iConnectedBitsum);
}
}
public client_disconnected(id) {
ResetValues(id);
remove_task(id);
}
public CmdJoinClass(const id) {
if(g_iWarmupState == WS_IN_PROGRESS) {
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
}
public EventHLTV() {
switch(g_iWarmupState) {
case WS_BEGIN: {
g_iWarmupState = WS_IN_PROGRESS;
g_iMessageBitsum = 0;
EnableHamForward(g_pHamSpawn);
EnableHamForward(g_pHamAddPlayerItem);
EnableHamForward(g_pHamGiveAmmo);
EnableHamForward(g_pHamUse);
EnableHamForward(g_pHamKilled);
g_pHideWeapon = register_message(g_pHideWeaponMsgId, "MessageHideWeapon");
#if defined _roundcontrol_included
g_pCheckWinHook = SetBlockControl(RC_CheckWinConditions);
#else
if(g_pRoundInfinite) {
set_pcvar_num(g_pRoundInfinite, 1);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_SET);
}
case WS_ENDED: {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + SHOW_MSG_DELAY);
}
}
}
public EventGameCommencing() {
if(g_iWarmupState == WS_WAITING) {
g_iWarmupState = WS_BEGIN;
}
}
public EventRoundStart() {
if(g_iWarmupState == WS_IN_PROGRESS) {
entity_set_float(g_pThinkEnt, EV_FL_nextthink, get_gametime() + 1.0);
}
}
public EventRoundEnd() {
if(g_iWarmupState == WS_IN_PROGRESS) {
g_iWarmupState = WS_ENDED;
DisableHamForward(g_pHamSpawn);
DisableHamForward(g_pHamAddPlayerItem);
DisableHamForward(g_pHamGiveAmmo);
DisableHamForward(g_pHamUse);
DisableHamForward(g_pHamKilled);
unregister_message(g_pHideWeaponMsgId, g_pHideWeapon);
#if defined _roundcontrol_included
RemoveBlockControl(RC_CheckWinConditions, g_pCheckWinHook);
#else
if(g_pRoundInfinite) {
set_pcvar_string(g_pRoundInfinite, g_szRoundInfinite);
}
#endif
set_msg_block(g_pStatusIconMsgId, BLOCK_NOT);
set_pcvar_float(g_pRestartRound, 1.0);
}
}
public MessageHideWeapon() {
const ARG_FLAGS = 1;
set_msg_arg_int(ARG_FLAGS, ARG_BYTE, get_msg_arg_int(ARG_FLAGS) | HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
}
public HamSpawnPlayerPost(const id) {
if(is_user_alive(id)) {
bit_set(id, g_iAliveBitsum);
if(!bit_valid(id, g_iMessageBitsum)) {
set_task(SHOW_MSG_DELAY, "TaskWarmupStartMsg", id);
}
entity_set_float(id, EV_FL_health, WARMUP_HEALTH);
engclient_cmd(id, "weapon_knife");
message_begin(MSG_ONE, g_pHideWeaponMsgId, _, id);
write_byte(HW_CROSS_AMMO_WPNLIST | HW_TIMER | HW_MONEY);
message_end();
}
}
public HamAddPlayerItemPre(const id, const pEnt) {
if(cs_get_weapon_id(pEnt) != CSW_KNIFE) {
entity_set_int(pEnt, EV_INT_flags, entity_get_int(pEnt, EV_INT_flags ) | FL_KILLME);
SetHamReturnInteger(0);
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public HamGiveAmmoPre() {
const NO_AMMO_STOP_PROCESSING = -1;
SetHamReturnInteger(NO_AMMO_STOP_PROCESSING);
return HAM_SUPERCEDE;
}
public HamUseHostagePre() {
return HAM_SUPERCEDE;
}
public HamKilledPlayerPost(const id, const pKiller) {
bit_clear(id, g_iAliveBitsum);
if(bit_valid(pKiller, g_iAliveBitsum)) {
if(g_iFrags[pKiller] == sizeof KILL_SOUNDS) {
g_iFrags[pKiller] = 0;
}
emit_sound(pKiller, CHAN_VOICE, KILL_SOUNDS[g_iFrags[pKiller]], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
g_iFrags[pKiller]++;
}
set_task(RESPAWN_DELAY, "TaskRespawn", id);
}
public FwdThink(const pEnt) {
switch(g_iWarmupState) {
case WS_IN_PROGRESS: {
static iDiff, iMin;
iDiff = WARMUP_TIME - g_iTimerCount++, iMin = 0;
GetMinutes(iDiff, iMin);
set_hudmessage(255, 255, 255, _, 0.96, _, _, 1.0, 0.0, 0.01, -1);
ShowSyncHudMsg(0, g_pHudSyncObj1, "До конца разминки: %d:%d", iMin, iDiff);
if(iDiff || iMin) {
entity_set_float(pEnt, EV_FL_nextthink, get_gametime() + 1.0);
} else {
EventRoundEnd();
}
}
case WS_ENDED: {
g_iWarmupState = WS_WAITING;
g_iTimerCount = 0;
set_hudmessage(255, 255, 255, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(0, g_pHudSyncObj2, "Приготовьтесь к бою!^nИгра началась!");
#if defined USE_PAUSE
pause("d");
#endif
}
}
}
public TaskRespawn(const id) {
if(bit_valid(id, g_iConnectedBitsum) && !bit_valid(id, g_iAliveBitsum) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
ExecuteHamB(Ham_CS_RoundRespawn, id);
}
}
public TaskWarmupStartMsg(const id) {
if(bit_valid(id, g_iAliveBitsum)) {
set_hudmessage(255, 255, 255, _, 0.25, _, _, 5.0, _, _, -1);
ShowSyncHudMsg(id, g_pHudSyncObj2, "Приготовьтесь к бойне!^nРазминка на ножах началась!");
bit_set(id, g_iMessageBitsum);
}
}
CreateThinkEntity() {
new const ENT_CLASSNAME[] = "_warmup_think_ent";
if((g_pThinkEnt = create_entity("info_target"))) {
entity_set_string(g_pThinkEnt, EV_SZ_classname, ENT_CLASSNAME);
register_think(ENT_CLASSNAME, "FwdThink");
} else {
set_fail_state("Failed to create think entity");
}
}
ResetValues(const id) {
bit_clear(id, g_iConnectedBitsum);
bit_clear(id, g_iAliveBitsum);
bit_clear(id, g_iMessageBitsum);
g_iFrags[id] = 0;
}
GetMinutes(&iSec, &iMin) {
const SECONDS_IN_MINUTE = 60;
iMin = iSec / SECONDS_IN_MINUTE, iSec %= SECONDS_IN_MINUTE;
}
Вернуться в Утвержденные плагины
Сейчас этот форум просматривают: Google [Bot] и гости: 7