
Стаж: 12 лет
Сообщений: 409
Благодарностей: 41
Полезность: < 0
|
Привет есть WarmUP от Сафетиста и есть Nighmode от trallface нужно сделать так что-бы WarmUP во время Nighmode не работал! Писал trallface у него дела занят пока не занимается плагинами! Вообщем как можно это устроить ? (знаю что какие-то нативы надо на оба плагина вшить но как не знаю) вообщем нужна помощь! Код:
#include <amxmodx> #include <cstrike> #include <fun> #if AMXX_VERSION_NUM < 183 #include <colorchat> #endif
#define VERSION "3.6" // #define DBG // Дебаг сообщение в plugin_end #define CSDM // Включает CSDM режим #define AUTORR // Включить или выключить автоматические рестарты карты [По дефолту включены] #define AUTORR_ROUNDS 30 // Количество раундов, после которых последует рестарт карты #define NM_MAP "de_dust2" // Карта во время ночного времени #define NM_TIME "03:00 09:00" // Время ночного времени 23 - час 10 - час | Промежуток с 23:00 до 10:00
#if defined CSDM #include <hamsandwich> #if AMXX_VERSION_NUM < 183 #include <dhudmessage> #endif new pcv_mp_roundtime, pcv_mp_buytime, g_iOldBuytime; #endif
new g_szCurrentMap[32]; new pcv_time, pcv_mp_timelimit; new g_iOldTimelimit; new bool:g_bNightMode, bool:g_bNeedChange, bool:g_bParseFromTo; #if defined AUTORR new bool:isFirstRound = true; new g_roundCount; #endif
new szParse[4][3], szParseFromH, szParseToH, szTime[12], iTo, iFrom;
public plugin_natives() { register_library("night_mode"); register_native("is_night_mode", "CheckNightMode"); }
public plugin_init() { register_plugin("Map on Time", VERSION, "Flash | neygomon"); register_event("DeathMsg", "DeathMessg", "a"); register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0"); #if defined AUTORR register_event("TextMsg","eventRoundRestart","a","2&#Game_w"); register_event("TextMsg","eventCommencingRestart","a","2&#Game_C"); #endif #if defined CSDM register_clcmd("joinclass", "Spawn"); register_clcmd("say /respawn", "Spawn"); register_clcmd("say /spawn", "Spawn"); RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn_Post", 1); #endif
// Cvars pcv_time = register_cvar("mot_time", NM_TIME); pcv_mp_timelimit = get_cvar_pointer("mp_timelimit"); #if defined CSDM pcv_mp_buytime = get_cvar_pointer("mp_buytime"); pcv_mp_roundtime = get_cvar_pointer("mp_roundtime"); #endif }
public plugin_cfg() { get_mapname(g_szCurrentMap, 31); get_pcvar_string(pcv_time, szTime, 11); replace_all(szTime, 11, ":", " "); if(parse(szTime, szParse[0], 2, szParse[1], 2, szParse[2], 2, szParse[3], 2) != 4) { set_fail_state("Invalid time in cvar"); return; } szParseFromH = str_to_num(szParse[0]); szParseToH = str_to_num(szParse[2]); iFrom = szParseFromH * 60 * 60 + str_to_num(szParse[1]) * 60; iTo = szParseToH * 60 * 60 + str_to_num(szParse[3]) * 60; if(szParseFromH > szParseToH) g_bParseFromTo = true; }
public client_authorized(id) { if(g_bNightMode) remove_user_flags(id, ADMIN_MAP|ADMIN_VOTE); } #if defined CSDM public DeathMessg() { if(g_bNightMode) set_task(1.0, "fw_PlayerSpawn", read_data(2)); }
public Spawn(id) { if(g_bNightMode) set_task(3.0, "fw_PlayerSpawn", id); }
public fwd_PlayerSpawn_Post(id) { if(g_bNightMode) { if(!is_user_alive(id)) return; // remove bmb if(get_user_team(id) == 1) { strip_user_weapons(id); give_item(id, "weapon_knife"); give_item(id, "weapon_glock18"); cs_set_user_bpammo(id, CSW_GLOCK18, 40); } // end remove bmb cs_set_user_money(id, 16000); set_user_godmode(id, 1); set_task(2.0, "OffProtection", id); } }
public OffProtection(id) { if(!is_user_connected(id)) return; set_user_godmode(id, 0); }
public fw_PlayerSpawn(id) { if(is_user_alive(id)) return; switch(get_user_team(id)) { case 1, 2: ExecuteHamB(Ham_CS_RoundRespawn, id); } } #endif public TaskCheckTime() { new iHour, iMin; time(iHour, iMin); new iCurTime = iHour * 60 * 60 + iMin * 60;
if((iFrom <= iCurTime && g_bParseFromTo) || iCurTime < iTo) { if(!equal(g_szCurrentMap, NM_MAP)) { set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.23, 0, 5.0, 15.04, 0.0, 0.5); show_dhudmessage(0, "Последний раунд^nПодготовка к ночному режиму!"); g_bNeedChange = true; return; } if(!g_bNightMode) { g_iOldTimelimit = get_pcvar_num(pcv_mp_timelimit); #if defined CSDM g_iOldBuytime = get_pcvar_num(pcv_mp_buytime); set_pcvar_float(pcv_mp_buytime, get_pcvar_float(pcv_mp_roundtime)); #endif set_pcvar_num(pcv_mp_timelimit, 0); server_cmd("hostname ^"[NightMode] ProStrike Public ©^""); RemovePlayersFlags(); g_bNightMode = true; } } else if(g_bNightMode) { g_bNightMode = false; set_pcvar_num(pcv_mp_timelimit, 5 + floatround(get_gametime()) / 60); server_cmd("hostname ^"ProStrike Public ©^""); } #if defined DBG log_to_file("_dbg_nm.log", "CurTime: %d | From: %d | To: %d || NightMode %s", iHour, szParseFromH, szParseToH, g_bNightMode ? "Actived" : "Not active") #endif }
#if defined AUTORR public eventCommencingRestart() isFirstRound = true; public eventRoundRestart() g_roundCount = 0; #endif public EventRoundStart() { if(g_bNeedChange) { message_begin(MSG_BROADCAST, SVC_INTERMISSION); message_end(); set_task(3.0, "DelayChangeMap"); } TaskCheckTime(); if(g_bNightMode) { #if defined AUTORR if(isFirstRound) { isFirstRound = false; g_roundCount = 0; } g_roundCount++; new round = AUTORR_ROUNDS - g_roundCount; if(round > 0) client_print_color(0, 0, "^4[^3NightMode^4] До авторестарта карты осталось ^3%d ^4раундов ^4[Тек. раунд: ^3%d ^4| Всего: ^3%d^4]", round, g_roundCount, AUTORR_ROUNDS); else server_cmd("restart"); #endif #if defined CSDM set_task(1.0, "hud_message"); #endif } }
public DelayChangeMap() server_cmd("changelevel %s", NM_MAP);
public plugin_end() { if(g_iOldTimelimit) { set_pcvar_num(pcv_mp_timelimit, g_iOldTimelimit); #if defined CSDM set_pcvar_num(pcv_mp_buytime, g_iOldBuytime); #endif #if defined DBG log_to_file("_dbg_nm.log", "[plugin_end] g_iOldTimelimit: %d | timelimit: %d", g_iOldTimelimit, get_pcvar_num(pcv_mp_timelimit)); #endif } }
RemovePlayersFlags() { new players[32], pcount get_players(players, pcount, "ch") for(new i; i < pcount; i++) remove_user_flags(players[i], ADMIN_MAP|ADMIN_VOTE); } #if defined CSDM public hud_message() { #if AMXX_VERSION_NUM < 183 set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.23, 0, 3.0, 3.0, 0.0, 0.0, false); #else set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.23, 0, 3.0, 3.0, 0.0, 0.0); #endif show_dhudmessage(0, "C 0%d:00 до 0%d:00 ночной режим!^nМод CSDM | Карта: %s", szParseFromH, szParseToH, NM_MAP); } #endif
public CheckNightMode() return g_bNightMode; Код:
/* last update: 2/25/2014 * * Attention: setting hp during knife round (if enabled) to bots are NOT supported! * * Credits: * - Subb98 for the idea & prototype * - ConnorMcLeod for code that forces spawning of newly connected players * https://forums.alliedmods.net/showthread.ph...862#post1820862 * * Thanks to eX-test from CS Support Community https://c-s.net.ua/ for testing */
#include <amxmodx> #include <cstrike> #include <fakemeta> #include <hamsandwich>
#define PLUGIN "Simple WarmUp" #define VERSION "0.51 deprecated" #define AUTHOR "Safety1st"
/*---------------EDIT ME------------------*/ #define RESTART_AFTER // comment to disable restart round after warmup end #define ARMOR_FOR_PISTOL_ROUND // uncomment to give armour during pistol round /*----------------------------------------*/
#define TT 1 #define CT 2
new giRoundCounter new gMsgStatusIconReg, gMsgStatusIcon, gMsgCurWeapon new HamHook:g_iHhCBasePlayerSpawn, HamHook:g_iHhCBasePlayerPreThink new bool:gbWarmupActive
#if defined RESTART_AFTER new bool:gbIgnoreRestart #endif
// offsets #define m_fClientMapZone 235 #define MAPZONE_BUYZONE ( 1<<0 )
enum { ROUND_NONE, ROUND_KNIFE, ROUND_PISTOL }
const m_iJoinedState = 121 const m_iMenu = 205
const MENU_CHOOSEAPPEARANCE = 3 const STATE_PICKINGCLASS = 4
#if AMXX_VERSION_NUM < 183 // Attention! This will correctly work only for AMXX 1.8.3-dev git3790 and above. #include <dhudmessage> #endif
#define MESSAGE_TASK_ID 1337 #define HUD_WARMUP 220, 160, 0, -1.0, 0.8, 0, 0.0, 1.1, 0.0, 0.0 #define HUD_END 100, 200, 0, -1.0, 0.8, 0, 0.0, 4.0, 0.0, 1.0
enum _:Messages { WARMUP_PROCESS, WARMUP_END } new gszMessage[Messages][] = { "Разминочный раунд!", "LIVE! LIVE! LIVE! ^nУдачи и приятной игры!" }
new bool:gbShowEnd
public plugin_init() { register_plugin( PLUGIN, VERSION, AUTHOR )
register_event( "TextMsg", "EventNewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" ) register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" ) register_event( "CurWeapon", "EventCurWeapon", "be", "1=1", "2!29" ) // specified, call if is send to alive player only
register_logevent( "EventRoundStart", 2, "0=World triggered", "1=Round_Start" ) register_logevent( "EventRoundEnd", 2, "1=Round_End" )
gMsgStatusIcon = get_user_msgid( "StatusIcon" ) gMsgCurWeapon = get_user_msgid( "CurWeapon" )
DisableHamForward( g_iHhCBasePlayerSpawn = RegisterHam( Ham_Spawn, "player", "OnCBasePlayer_Spawn_Post", 1 ) )
DisableHamForward( g_iHhCBasePlayerPreThink = RegisterHam( Ham_Player_PreThink, "player", "OnCBasePlayer_PreThink_Post", 1 ) )
register_clcmd( "menuselect", "ClCmd_MenuSelect_JoinClass" ) register_clcmd( "joinclass", "ClCmd_MenuSelect_JoinClass" ) }
public EventNewGame() { #if defined RESTART_AFTER if( gbIgnoreRestart ) { // it is planned gbIgnoreRestart = false return } #endif
if( !gbWarmupActive ) { // we don't have active 'hooks' for now gMsgStatusIconReg = register_message( gMsgStatusIcon, "MessageStatusIcon" ) EnableHamForward( g_iHhCBasePlayerSpawn ) set_task( 1.0, "ShowMessage", MESSAGE_TASK_ID, .flags = "b" ) gbWarmupActive = true }
gbShowEnd = false giRoundCounter = ROUND_NONE }
public EventNewRound() { if( !gbWarmupActive ) return
giRoundCounter += 2 // fast fix to avoid knife round ;) }
public OnCBasePlayer_Spawn_Post(id) { if( !is_user_alive(id) ) return
switch( giRoundCounter ) { case ROUND_PISTOL: { switch( get_user_team(id) ) { case TT: cs_set_user_bpammo( id, CSW_GLOCK18, 120 ) case CT: cs_set_user_bpammo( id, CSW_USP, 100 ) } #if defined ARMOR_FOR_PISTOL_ROUND // remember: only TT/CT players could be spawned cs_set_user_armor( id, 100, CS_ARMOR_VESTHELM ) #endif } } }
public EventCurWeapon(id) { if( !gbWarmupActive ) return
switch( giRoundCounter ) { case ROUND_KNIFE : { if( read_data(2) /* weapon id */ != CSW_C4 ) SetKnife(id) } case ROUND_PISTOL: { switch( read_data(2) ) { case CSW_GLOCK18, CSW_USP, CSW_C4 : return } SetKnife(id) } } }
SetKnife(id) { engclient_cmd( id, "weapon_knife" )
// update info about weapon emessage_begin( MSG_ONE, gMsgCurWeapon, _, id ) ewrite_byte(1) // active ewrite_byte(CSW_KNIFE) // weapon ewrite_byte(-1) // clip emessage_end() }
public MessageStatusIcon( msgid, dest, receiver ) { // Exolent[jNr]'s code // check if status is to be shown if( get_msg_arg_int(1) ) { static const buyzone[] = "buyzone"
// grab what icon is being shown new icon[ sizeof( buyzone ) + 1 ] get_msg_arg_string( 2, icon, charsmax(icon) )
// check if buyzone icon if( !strcmp( icon, buyzone ) ) { // remove player's buyzone bit for the map zones set_pdata_int( receiver, m_fClientMapZone, get_pdata_int( receiver, m_fClientMapZone ) &~ MAPZONE_BUYZONE ) // block buyzone icon return PLUGIN_HANDLED } }
return PLUGIN_CONTINUE }
public EventRoundEnd() { if( !gbWarmupActive ) return
// remember: Round_End is fired right after Game_Commencing too switch( giRoundCounter ) { case ROUND_NONE: return case ROUND_KNIFE : return }
gbWarmupActive = false unregister_message( gMsgStatusIcon, gMsgStatusIconReg ) DisableHamForward( g_iHhCBasePlayerSpawn ) remove_task( MESSAGE_TASK_ID ) gbShowEnd = true
#if defined RESTART_AFTER gbIgnoreRestart = true set_cvar_num( "sv_restart", 5 ) #endif }
public ClCmd_MenuSelect_JoinClass(id) { if( !gbWarmupActive ) return
if( get_pdata_int(id, m_iMenu) == MENU_CHOOSEAPPEARANCE && get_pdata_int(id, m_iJoinedState) == STATE_PICKINGCLASS ) EnableHamForward( g_iHhCBasePlayerPreThink ) }
public OnCBasePlayer_PreThink_Post(id) { DisableHamForward( g_iHhCBasePlayerPreThink ) if( !is_user_alive(id) ) ExecuteHam( Ham_Spawn, id ) }
public ShowMessage() { set_dhudmessage( HUD_WARMUP ) show_dhudmessage( 0, gszMessage[ WARMUP_PROCESS ] ) }
public EventRoundStart() { if( gbShowEnd ) { set_dhudmessage( HUD_END ) show_dhudmessage( 0, gszMessage[ WARMUP_END ] ) gbShowEnd = false } }
Отредактировал: firante, - 29.7.2014, 12:12
|