From 3b1d507eb5a0dba53faa60ba7a9583debacef117 Mon Sep 17 00:00:00 2001 From: Mistrick Date: Sat, 1 Oct 2016 12:43:38 +0700 Subject: [PATCH] updated API - separate includes for plugins - new forward dr_chosen_new_terrorist - changed dr_duel_canceled --- deathrun_core.sma | 19 +++-- deathrun_mode_duel.sma | 24 ++++-- deathrun_shop.sma | 5 +- include/deathrun_core.inc | 41 +++++++++++ include/deathrun_duel.inc | 52 +++++++++++++ include/deathrun_modes.inc | 145 ++++++++++++------------------------- 6 files changed, 177 insertions(+), 109 deletions(-) create mode 100644 include/deathrun_core.inc create mode 100644 include/deathrun_duel.inc diff --git a/deathrun_core.sma b/deathrun_core.sma index e3cd69d..dcd1658 100644 --- a/deathrun_core.sma +++ b/deathrun_core.sma @@ -11,7 +11,7 @@ #endif #define PLUGIN "Deathrun: Core" -#define VERSION "1.0" +#define VERSION "1.1.0" #define AUTHOR "Mistrick" #pragma semicolon 1 @@ -33,9 +33,14 @@ enum _:Cvars RESTART }; +enum Forwards +{ + FW_NEW_TERRORIST +}; + new const PREFIX[] = "^4[DRM]"; -new g_eCvars[Cvars], g_bWarmUp = true; +new g_eCvars[Cvars], g_iForwards[Forwards], g_iReturn, g_bWarmUp = true; new g_iForwardSpawn, HamHook:g_iHamPreThink, Trie:g_tRemoveEntities; new g_msgShowMenu, g_msgVGUIMenu, g_msgAmmoPickup, g_msgWeapPickup; new g_iOldAmmoPickupBlock, g_iOldWeapPickupBlock, g_iTerrorist, g_iNextTerrorist, g_iMaxPlayers; @@ -70,7 +75,7 @@ public plugin_init() register_touch("func_door", "weaponbox", "Engine_TouchFuncDoor"); - g_iHamPreThink = RegisterHam(Ham_Player_PreThink, "player", "Ham_PlayerPreThink_Post", true); + g_iForwards[FW_NEW_TERRORIST] = CreateMultiForward("dr_chosen_new_terrorist", ET_IGNORE, FP_CELL); g_msgVGUIMenu = get_user_msgid("VGUIMenu"); g_msgShowMenu = get_user_msgid("ShowMenu"); @@ -80,7 +85,7 @@ public plugin_init() register_message(g_msgVGUIMenu, "Message_Menu"); register_message(g_msgShowMenu, "Message_Menu"); - DisableHamForward(g_iHamPreThink); + DisableHamForward(g_iHamPreThink = RegisterHam(Ham_Player_PreThink, "player", "Ham_PlayerPreThink_Post", true)); unregister_forward(FM_Spawn, g_iForwardSpawn, 0); TrieDestroy(g_tRemoveEntities); @@ -129,6 +134,7 @@ public plugin_cfg() } public plugin_natives() { + register_library("deathrun_core"); register_native("dr_get_terrorist", "native_get_terrorist", 1); register_native("dr_set_next_terrorist", "native_set_next_terrorist", 1); register_native("dr_get_next_terrorist", "native_get_next_terrorist", 1); @@ -166,6 +172,8 @@ public client_disconnect(id) ExecuteHamB(Ham_CS_RoundRespawn, g_iTerrorist); engfunc(EngFunc_SetOrigin, g_iTerrorist, fOrigin); + ExecuteForward(g_iForwards[FW_NEW_TERRORIST], g_iReturn, g_iTerrorist); + new szName[32]; get_user_name(g_iTerrorist, szName, charsmax(szName)); new szNameLeaver[32]; get_user_name(id, szNameLeaver, charsmax(szNameLeaver)); client_print_color(0, print_team_red, "%s %L", PREFIX, LANG_PLAYER, "DRC_TERRORIST_LEFT", szNameLeaver, szName); @@ -239,7 +247,8 @@ TerroristCheck() { new players[32], pnum; get_players(players, pnum, "ae", "TERRORIST"); g_iTerrorist = pnum ? players[0] : 0; - } + } + ExecuteForward(g_iForwards[FW_NEW_TERRORIST], g_iReturn, g_iTerrorist); } //******** Messages Credits: PRoSToTeM@ ********// public Message_Menu(const msg, const nDest, const nClient) diff --git a/deathrun_mode_duel.sma b/deathrun_mode_duel.sma index 377ce55..82a0efc 100644 --- a/deathrun_mode_duel.sma +++ b/deathrun_mode_duel.sma @@ -12,7 +12,7 @@ #endif #define PLUGIN "Deathrun Mode: Duel" -#define VERSION "1.0" +#define VERSION "1.0.1" #define AUTHOR "Mistrick" #pragma semicolon 1 @@ -25,6 +25,14 @@ #define MAX_DISTANCE 1500 #define MIN_DISTANCE 300 +enum CancelType +{ + CType_TimeOver, + CType_PlayerDisconneced, + CType_PlayerDied, + CType_ModeChanged +}; + enum (+=100) { TASK_TURNCHANGER = 100, @@ -127,7 +135,7 @@ public plugin_init() g_iForwards[DUEL_PRESTART] = CreateMultiForward("dr_duel_prestart", ET_IGNORE, FP_CELL, FP_CELL); g_iForwards[DUEL_START] = CreateMultiForward("dr_duel_start", ET_IGNORE, FP_CELL, FP_CELL); g_iForwards[DUEL_FINISH] = CreateMultiForward("dr_duel_finish", ET_IGNORE, FP_CELL, FP_CELL); - g_iForwards[DUEL_CANCELED] = CreateMultiForward("dr_duel_canceled", ET_IGNORE); + g_iForwards[DUEL_CANCELED] = CreateMultiForward("dr_duel_canceled", ET_IGNORE, FP_CELL); g_iModeDuel = dr_register_mode ( @@ -161,6 +169,10 @@ public plugin_cfg() register_dictionary("deathrun_mode_duel.txt"); LoadSpawns(); } +public plugin_natives() +{ + register_library("deathrun_duel"); +} LoadSpawns() { new szConfigDir[128]; get_localinfo("amxx_configsdir", szConfigDir, charsmax(szConfigDir)); @@ -258,7 +270,7 @@ public client_disconnect(id) if((g_bDuelStarted) && (id == g_iDuelPlayers[DUELIST_CT] || id == g_iDuelPlayers[DUELIST_T])) { ResetDuel(); - ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn); + ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_PlayerDisconneced); } } public Command_Drop(id) @@ -502,7 +514,7 @@ public Task_DuelTimer() ExecuteHam(Ham_Killed, g_iDuelPlayers[DUELIST_CT], g_iDuelPlayers[DUELIST_CT], 0); ExecuteHam(Ham_Killed, g_iDuelPlayers[DUELIST_T], g_iDuelPlayers[DUELIST_T], 0); - ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn); + ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_TimeOver); ResetDuel(); client_print_color(0, print_team_default, "%s^1 %L", PREFIX, LANG_PLAYER, "DRD_TIME_OVER"); @@ -624,7 +636,7 @@ public Ham_PlayerKilled_Post(victim, killer) } else { - ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn); + ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_PlayerDied); } ResetDuel(); } @@ -675,7 +687,7 @@ public dr_selected_mode(id, mode) if(g_bDuelStarted && mode != g_iModeDuel) { ResetDuel(); - ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn); + ExecuteForward(g_iForwards[DUEL_CANCELED], g_iReturn, CType_ModeChanged); } } ResetDuel() diff --git a/deathrun_shop.sma b/deathrun_shop.sma index 05b8124..a1b6156 100644 --- a/deathrun_shop.sma +++ b/deathrun_shop.sma @@ -1,9 +1,12 @@ #include #include + +#if AMXX_VERSION_NUM < 183 #include +#endif #define PLUGIN "Deathrun: Shop" -#define VERSION "0.1" +#define VERSION "0.1.1" #define AUTHOR "Mistrick" #pragma semicolon 1 diff --git a/include/deathrun_core.inc b/include/deathrun_core.inc new file mode 100644 index 0000000..2e1169a --- /dev/null +++ b/include/deathrun_core.inc @@ -0,0 +1,41 @@ +#if defined _deathrun_core_included + #endinput +#endif +#define _deathrun_core_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib deathrun_core + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib deathrun_core + #endif +#else + #pragma library deathrun_core +#endif + +/** + * Forward which called when chosen new terrorist(new round or disconnect). + * + * @param id Player index. + */ +forward dr_chosen_new_terrorist(id); + +/** + * Get player index current terrorist. + * + * @return Player index. + */ +native dr_get_terrorist(); + +/** + * Set player who became terrorist in new round. + * + * @param id Next terrorist index. + */ +native dr_set_next_terrorist(id); + +/** + * Get player who became terrorist in new round. + * + * @return Player index. + */ +native dr_get_next_terrorist(); diff --git a/include/deathrun_duel.inc b/include/deathrun_duel.inc new file mode 100644 index 0000000..55c9163 --- /dev/null +++ b/include/deathrun_duel.inc @@ -0,0 +1,52 @@ +#if defined _deathrun_duel_included + #endinput +#endif +#define _deathrun_duel_included + +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib deathrun_duel + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib deathrun_duel + #endif +#else + #pragma library deathrun_duel +#endif + +enum CancelType +{ + CType_TimeOver, + CType_PlayerDisconneced, + CType_PlayerDied, + CType_ModeChanged +} + + /** + * Forward which called before duel start, warm up time + * + * @param duelist_ct Player index. + * @param duelist_t Player index. + */ +forward dr_duel_prestart(duelist_ct, duelist_t); + + /** + * Forward which called when duel started + * + * @param duelist_ct Player index. + * @param duelist_t Player index. + */ +forward dr_duel_start(duelist_ct, duelist_t); + + /** + * Forward which called when duel overed + * + * @param winner Player index. + * @param looser Player index. + */ +forward dr_duel_finish(winner, looser); + + /** + * Forward which called when duel canceled + * + * @param type Cancel type + */ +forward dr_duel_canceled(CancelType:type); diff --git a/include/deathrun_modes.inc b/include/deathrun_modes.inc index 96e8eb1..b6d28a2 100644 --- a/include/deathrun_modes.inc +++ b/include/deathrun_modes.inc @@ -3,6 +3,15 @@ #endif #define _deathrun_modes_included +#if AMXX_VERSION_NUM >= 175 + #pragma reqlib deathrun_modes + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib deathrun_modes + #endif +#else + #pragma library deathrun_modes +#endif + enum _:ModeData { m_Name[32], @@ -19,152 +28,94 @@ enum _:ModeData }; /** - * Регистрация режима. + * Mode registration. * - * @param Name Имя режима, будет отображено в меню. - * @param Mark Метка режима. - * @param RoundDelay На сколько раундов будет заблокирован режим для выбора. - * @param CT_BlockWeapons Позволяет блокировать взятие лежащего оружия для CT. - * @param TT_BlockWeapons Позволяет блокировать взятие лежащего оружия для T. - * @param CT_BlockButtons Позволяет блокировать использование кнопок для CT. - * @param TT_BlockButtons Позволяет блокировать использование кнопок для T. - * @param Bhop Включить/выключить автобхоп. - * @param Usp Включить/выключить выдачу USP для CT. - * @param Hide Позволяет скрывать режим в меню. + * @param Name Mode name, use ML key. + * @param Mark Mode mark, use this to get mode index in other plugins. + * @param RoundDelay Mode blocking in rounds. + * @param CT_BlockWeapons Allow CT pick up weapons. + * @param TT_BlockWeapons Allow TT pick up weapons. + * @param CT_BlockButtons Allow CT use buttons. + * @param TT_BlockButtons Allow TT use buttons. + * @param Bhop Enable autobhop. + * @param Usp Enable start with USP for CT. + * @param Hide Allow hide mode in menu. * - * @return Возвращает индекс режима. + * @return Mode index. */ native dr_register_mode(Name[32], Mark[16], RoundDelay, CT_BlockWeapons, TT_BlockWeapons, CT_BlockButtons, TT_BlockButtons, Bhop, Usp, Hide = 0); /** - * Получение имени и индекса текущего режима. + * Get current mode. * - * @param name Сюда будет скопировано имя режима. - * @param size Размер массива name. + * @param name Mode name, here will be copied the current mode ML key. + * @param size Name size. * - * @return Возвращает индекс режима. + * @return Mode index. */ native dr_get_mode(name[] = "", size = 0); /** - * Установка режима. + * Set new mode. * - * @param mode Индекс режима, полученный при регистрации. - * @param fwd Вызывать ли форвард выбора режима(dr_selected_mode). - * @param id Индекс игрока от которого будет вызван форвард выбора режима. + * @param mode Mode index. + * @param fwd Call forward(dr_selected_mode). + * @param id Player index in forward. */ native dr_set_mode(mode, fwd = 0, id = 0); /** - * Получение индекса режима по имени. + * Get mode by mark. * - * @param mark Метка режима. + * @param mark Mode mark. * - * @return Возвращает индекс режима. + * @return Mode index. */ native dr_get_mode_by_mark(mark[]); /** - * Получение индекса режима по имени. + * Get full mode info. * - * @param mode Индекс режима, полученный при регистрации. - * @param modeinfo Массив для получение информации о режиме. + * @param mode Mode index. + * @param modeinfo Info array. */ native dr_get_mode_info(mode, modeinfo[ModeData]); /** - * Установка автобхопа для текущего режима. + * Set mode autobhop. * - * @param bhop 0 - выключение, 1 - включение. + * @param bhop 0 - OFF, 1 - ON. */ native dr_set_mode_bhop(bhop); /** - * Получение значения автобхопа для текущего режима. + * Get mode autobhop. * - * @return 0 - выключен, 1 - включен. + * @return 0 - OFF, 1 - ON. */ native dr_get_mode_bhop(); /** - * Установка автобхопа для конкретного игрока. + * Set player autobhop. * - * @note Значение bhop для режима важнее, чем для игрока. + * @note The value for a mode bhop more important than for the player. * - * @param id Индекс игрока. - * @param bhop 0 - выключение, 1 - включение. + * @param id Player index. + * @param bhop false - OFF, true - ON. */ native dr_set_user_bhop(id, bool:bhop); /** - * Получение значения автобхопа для конкретного игрока. + * Get player autobhop. * - * @param id Индекс игрока. + * @param id Player index. */ native bool:dr_get_user_bhop(id); /** - * Форвард, который вызывается после выбора режима. + * Forward which called when the selection mode. * - * @param id Индекс игрока. - * @param mode Индекс режима. + * @param id Terrorist index. + * @param mode Mode index. */ forward dr_selected_mode(id, mode); - -/** - * deathrun_core - */ - -/** - * Получение индекса текущего террориста. - * - * @return Индекс игрока. - */ -native dr_get_terrorist(); - -/** - * Устанавливает игрока, который станет террористом в следующем раунде. - * - * @param id Индекс игрока. - */ -native dr_set_next_terrorist(id); - -/** - * Получает индекс игрока, который станет террористом в следующем раунде. - * - * @return Индекс игрока. - */ -native dr_get_next_terrorist(); - -/** - * deathrun_modes_duel - */ - - /** - * Форвард, который вызывается до начала дуэли, во время разминки. - * - * @param duelist_ct Индекс игрока. - * @param duelist_t Индекс игрока. - */ -forward dr_duel_prestart(duelist_ct, duelist_t); - - /** - * Форвард, который вызывается когда началась дуэль. - * - * @param duelist_ct Индекс игрока. - * @param duelist_t Индекс игрока. - */ -forward dr_duel_start(duelist_ct, duelist_t); - - /** - * Форвард, который вызывается когда закончилась дуэль. - * - * @param winner Индекс победителя. - * @param looser Индекс проигравшего. - */ -forward dr_duel_finish(winner, looser); - - /** - * Форвард, который вызывается когда отменили дуэль. - */ -forward dr_duel_canceled();