Русское сообщество по скриптингу

Разминка на ножах (Knife warmup)

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".

Re: Разминка на ножах (Knife warmup)

Сообщение Капитан » 04 дек 2016, 01:44

Нет, там все правильно.
У меня маленький 16-ти слотовый паблик.)
Аватара пользователя
Капитан
 
Сообщения: 12
Зарегистрирован: 06 мар 2016, 21:05
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.

Re: Разминка на ножах (Knife warmup)

Сообщение Subb98 » 04 дек 2016, 17:11

Капитан, в таком случае, давайте смотреть, что происходит. Установите, пожалуйста, этот исходный код:

Код: Выделить всё
/* ===============================================================================
 * 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 16// максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)
const WARMUP_TIME 80// кол-во времени в секундах, отведённое на разминку (по умолчанию 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_pHamSpawnHamHook:g_pHamAddPlayerItemHamHook:g_pHamGiveAmmoHamHook:g_pHamUseHamHook:g_pHamKilled;

#if defined _roundcontrol_included
new RoundControlHook:g_pCheckWinHook;
#else
new g_pRoundInfiniteg_szRoundInfinite[10];
#endif

new g_pRestartRoundg_pHideWeaponMsgIdg_pStatusIconMsgIdg_pHudSyncObj1g_pHudSyncObj2g_pThinkEntg_iConnectedBitsumg_iAliveBitsumg_iMessageBitsumg_iFrags[MAX_PLAYERS 1],
    
g_iWarmupState WS_WAITINGg_pHideWeapong_iTimerCount;

public 
plugin_precache() {
    for(new 
isizeof KILL_SOUNDSi++) {
        
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_SpawnENT_CLASSNAME"HamSpawnPlayerPost"1));
    
DisableHamForward(g_pHamAddPlayerItem RegisterHam(Ham_AddPlayerItemENT_CLASSNAME"HamAddPlayerItemPre"));
    
DisableHamForward(g_pHamGiveAmmo RegisterHam(Ham_GiveAmmoENT_CLASSNAME"HamGiveAmmoPre"));
    
DisableHamForward(g_pHamUse RegisterHam(Ham_Use"hostage_entity""HamUseHostagePre"));
    
DisableHamForward(g_pHamKilled RegisterHam(Ham_KilledENT_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_pRoundInfiniteg_szRoundInfinitecharsmax(g_szRoundInfinite));
    }
}
#endif

public client_putinserver(id) {
    
ResetValues(id);
    if(!
is_user_bot(id) && !is_user_hltv(id)) {
        
bit_set(idg_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_pRoundInfinite1);
            }
            
#endif
            
set_msg_block(g_pStatusIconMsgIdBLOCK_SET);
        }
        case 
WS_ENDED: {
            
entity_set_float(g_pThinkEntEV_FL_nextthinkget_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_pThinkEntEV_FL_nextthinkget_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_pHideWeaponMsgIdg_pHideWeapon);
        
#if defined _roundcontrol_included
        
RemoveBlockControl(RC_CheckWinConditionsg_pCheckWinHook);
        
#else
        
if(g_pRoundInfinite) {
            
set_pcvar_string(g_pRoundInfiniteg_szRoundInfinite);
        }
        
#endif
        
set_msg_block(g_pStatusIconMsgIdBLOCK_NOT);
        
set_pcvar_float(g_pRestartRound1.0);
    }
}

public 
MessageHideWeapon() {
    const 
ARG_FLAGS 1;
    
set_msg_arg_int(ARG_FLAGSARG_BYTEget_msg_arg_int(ARG_FLAGS) | HW_CROSS_AMMO_WPNLIST HW_TIMER HW_MONEY);
}

public 
HamSpawnPlayerPost(const id) {
    if(
is_user_alive(id)) {
        
bit_set(idg_iAliveBitsum);
        if(!
bit_valid(idg_iMessageBitsum)) {
            
set_task(SHOW_MSG_DELAY"TaskWarmupStartMsg"id);
        }
        
entity_set_float(idEV_FL_healthWARMUP_HEALTH);
        
engclient_cmd(id"weapon_knife");
        
message_begin(MSG_ONEg_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(pEntEV_INT_flagsentity_get_int(pEntEV_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(idg_iAliveBitsum);
    if(
bit_valid(pKillerg_iAliveBitsum)) {
        if(
g_iFrags[pKiller] == sizeof KILL_SOUNDS) {
            
g_iFrags[pKiller] = 0;
        }
        
emit_sound(pKillerCHAN_VOICEKILL_SOUNDS[g_iFrags[pKiller]], VOL_NORMATTN_NORM0PITCH_NORM);
        
g_iFrags[pKiller]++;
    }
    
set_task(RESPAWN_DELAY"TaskRespawn"id);
}

public 
FwdThink(const pEnt) {
    switch(
g_iWarmupState) {
        case 
WS_IN_PROGRESS: {
            static 
iDiffiMin;
            
iDiff WARMUP_TIME g_iTimerCount++, iMin 0;
            
GetMinutes(iDiffiMin);
            
set_hudmessage(12864__0.96__1.00.00.01, -1);
            
ShowSyncHudMsg(0g_pHudSyncObj1"До конца разминки: %d:%d"iMiniDiff);
            if(
iDiff || iMin) {
                
entity_set_float(pEntEV_FL_nextthinkget_gametime() + 1.0);
            } else {
                
EventRoundEnd();
            }
        }
        case 
WS_ENDED: {
            
g_iWarmupState WS_WAITING;
            
g_iTimerCount 0;
            
set_hudmessage(0255__0.25__5.0__, -1);
            
ShowSyncHudMsg(0g_pHudSyncObj2"Приготовьтесь к бою!^nИгра началась!");
            
#if defined USE_PAUSE
            
pause("d");
            
#endif
        
}
    }
}

public 
TaskRespawn(const id) {
    if(
bit_valid(idg_iConnectedBitsum) && !bit_valid(idg_iAliveBitsum) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
        
ExecuteHamB(Ham_CS_RoundRespawnid);
    }
}

public 
TaskWarmupStartMsg(const id) {
    if(
bit_valid(idg_iAliveBitsum)) {
        
set_hudmessage(2550__0.25__5.0__, -1);
        
ShowSyncHudMsg(idg_pHudSyncObj2"Приготовьтесь к бойне!^nРазминка на ножах началась!");
        
bit_set(idg_iMessageBitsum);
    }
}

CreateThinkEntity() {
    new const 
ENT_CLASSNAME[] = "_warmup_think_ent";
    if((
g_pThinkEnt create_entity("info_target"))) {
        
entity_set_string(g_pThinkEntEV_SZ_classnameENT_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(idg_iConnectedBitsum);
    
bit_clear(idg_iAliveBitsum);
    
bit_clear(idg_iMessageBitsum);
    
g_iFrags[id] = 0;
}

GetMinutes(&iSec, &iMin) {
    const 
SECONDS_IN_MINUTE 60;
    
iMin iSec SECONDS_IN_MINUTEiSec %= SECONDS_IN_MINUTE;
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4578
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1236 раз.
Поблагодарили: 2107 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Разминка на ножах (Knife warmup)

Сообщение Капитан » 04 дек 2016, 23:34

Хорошо, спасибо.
Аватара пользователя
Капитан
 
Сообщения: 12
Зарегистрирован: 06 мар 2016, 21:05
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.

Re: Разминка на ножах (Knife warmup)

Сообщение Subb98 » 05 дек 2016, 00:03

Капитан, как появятся ошибки - напишите, посмотрим логи.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4578
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1236 раз.
Поблагодарили: 2107 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Разминка на ножах (Knife warmup)

Сообщение Капитан » 05 дек 2016, 01:01

Да, обязательно, спасибо еще раз.
Аватара пользователя
Капитан
 
Сообщения: 12
Зарегистрирован: 06 мар 2016, 21:05
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.

Re: Разминка на ножах (Knife warmup)

Сообщение Капитан » 22 дек 2016, 15:48

Subb98, Здравствуйте.
Несколько дней назад переехал на другой хостинг по некоторым причинам.
Поставил плагин из 1-го поста и всё просто чудесно, все довольны и нет ошибок.
Извините и спасибо большое за помощь.)
Аватара пользователя
Капитан
 
Сообщения: 12
Зарегистрирован: 06 мар 2016, 21:05
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.

Re: Разминка на ножах (Knife warmup)

Сообщение Subb98 » 22 дек 2016, 15:56

Капитан, всегда пожалуйста. :-) Рад, что всё работает.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4578
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1236 раз.
Поблагодарили: 2107 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Разминка на ножах (Knife warmup)

Сообщение proland » 23 дек 2016, 15:57

Было бы не плохо взаимодействовать данный плагин и тот что отправлен в личку.
Аватара пользователя
proland
 
Сообщения: 30
Зарегистрирован: 21 дек 2016, 18:53
Забанен
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

Re: Разминка на ножах (Knife warmup)

Сообщение Subb98 » 23 дек 2016, 17:43

proland, как это возможно? Используйте какой-то один из них, они по своей сути выполняют одинаковую функцию.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 4578
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1236 раз.
Поблагодарили: 2107 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, PHP

Re: Разминка на ножах (Knife warmup)

Сообщение proland » 23 дек 2016, 19:12

Subb98 писал(а):proland, как это возможно? Используйте какой-то один из них, они по своей сути выполняют одинаковую функцию.

Всё бы ничeго, но кто то написал, что там код "уг" ;).
Аватара пользователя
proland
 
Сообщения: 30
Зарегистрирован: 21 дек 2016, 18:53
Забанен
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

Пред.След.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1