Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

mp_hostages_rescuetime 0.0.2

, Добавляет новый CVar в игру 'mp_hostages_rescuetime'.
Ждём вашего ответа
Всего голосов: 6
Гости не могут голосовать 
Статус пользователя wopox3
сообщение 6.3.2018, 13:34
Сообщение #1


Стаж: 13 лет

Сообщений: 333
Благодарностей: 222
Полезность: 902


mp_hostages_rescuetime

Описание: Квар добавляет время в секундах к времени раунда, если заложник был спасён игроком команды CT.
К примеру, время раунда 2:00. На 1:15 игрок команды CT спасает одного заложника, и к времени раунда добавляется +45 секунд.

Автор: wopox1337
Совместимость: Amx Mod X 1.8.2, (Re) Amx Mod X 1.8.3-dev
Требования: ReAPI ИЛИ Fakemeta 1.8.3 (нужна модификация gamedata-файлов)
Благодарности: fantom
Источник: Dev-CS.ru
Настройка: Плагин имеет 1 CVar.
Код:
// Время, которое будет добавлено к текущему времени раунда, когда спасают заложника (в секундах).
// 0 - отключить функционал
// >1 - Время для прибавки.
//
// Стандартное значение: "45"
mp_hostages_rescuetime "45"


Данная реализация была позаимствована из Counter-Strike: Global Offensive.

Важно!
Если при работе плагина у вас появляются в консоли ошибка:
Код:
[FAKEMETA] Could not find class "CHalfLifeMultiplay" and/or member "m_fRoundStartTimeReal" in gamedata
[AMXX] Displaying debug trace (plugin "mp_hostages_rescuetime.amxx", version "0.0.2")
[AMXX] Run time error 10: native error (native "get_gamerules_int")
Значит у вас нет модифицированного файла gamedata для использования плагина с компиляцией под fakemeta.

Исходный код:

Код:

/*
* Copyright © Dev-CS Team, 2018
*
* This software is licensed under the GNU General Public License, version 3 or higher.
* Additional exceptions apply. For full license details, see LICENSE.txt or visit:
* https://alliedmods.net/amxmodx-license
*
* Description:
* This plugin add a new CVar to game 'mp_hostages_rescuetime'.
* Additional time added to round time if a hostage is reached by a CT. (in seconds).
*
* Changelog:
* - 0.0.1: Init;
* - 0.0.2:
* - Add support 1.8.3 compilation without using ReAPI.
* NOTE: The AMXX 1.8.3 haven't declarated offset "m_fRoundStartTimeReal" in gamedata file. This bug may cause errors.
* (https://github.com/alliedmodders/amxmodx/blob/master/gamedata/common.games/gamerules.games/cstrike/offsets-chalflifemultiplay.txt#L93)
* Need to modify: https://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
* - Changed 'hostage rescued' hook.
*
*/

#include <amxmodx>
#tryinclude <reapi>

#if !defined _reapi_included
#include <fakemeta>
#endif

#if defined get_member_game
#define _get_iRoundTimeSecs() get_member_game(m_iRoundTimeSecs)
#define _set_iRoundTimeSecs(%1) set_member_game(m_iRoundTimeSecs, %1)
#define _get_fRoundStartTimeReal() get_member_game(m_fRoundStartTimeReal)
#elseif defined get_gamerules_int
#define _get_iRoundTimeSecs() get_gamerules_int("CHalfLifeMultiplay", "m_iRoundTimeSecs")
#define _set_iRoundTimeSecs(%1) set_gamerules_int("CHalfLifeMultiplay", "m_iRoundTimeSecs", .value = %1)
#define _get_fRoundStartTimeReal() get_gamerules_int("CHalfLifeMultiplay", "m_fRoundStartTimeReal") // may cause errors

#pragma deprecated NOTE: The AMXX 1.8.3 have not declarated offset "m_fRoundStartTimeReal" in gamedata file. This bug may cause errors.

#elseif AMXX_VERSION_NUM < 183
#error [ERROR]: AMXX_VERSION_NUM < 1.8.3 AND Plugin compilled withuot ReAPI! AMXX 1.8.2 - not supported!
#else
#error [ERROR]: Unknown error case 1!
#endif

new g_pCvar;

#if defined bind_pcvar_num
new mp_hostages_rescuetime;
#else
#define mp_hostages_rescuetime get_pcvar_num(g_pCvar)
#endif

new msgId_RoundTime;

public plugin_init()
{
register_plugin("mp_hostages_rescuetime", "0.0.2", "wopox1337");

msgId_RoundTime = get_user_msgid("RoundTime");

// Hook hostage rescued event
register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");

#if defined create_cvar
g_pCvar = create_cvar("mp_hostages_rescuetime", "45",
.flags = FCVAR_SERVER,
.description = "Additional time added to round time if a hostage is reached by a CT. (in seconds).",
.has_min = true,
.min_val = 0.0
);

bind_pcvar_num(g_pCvar, mp_hostages_rescuetime);
#else
g_pCvar = register_cvar("mp_hostages_rescuetime", "45", .flags = FCVAR_SERVER);
#endif
}

// hook for amxx
public Hostage_Rescued()
{
if(mp_hostages_rescuetime > 0)
CSGameRules_AddRoundTime(mp_hostages_rescuetime);
}

// This method may be added
CSGameRules_AddRoundTime(iTime)
{
// set new time remaining on backend
_set_iRoundTimeSecs(_get_iRoundTimeSecs() + iTime + 1);

static Float: tmRemaining;
tmRemaining = floatmax(0.0, CSGameRules_GetRoundRemainingTimeReal());

CBasePlayer_SyncRoundTimer(floatround(tmRemaining));
}

// Send update timer to players client HUD
CBasePlayer_SyncRoundTimer(tmRemaining)
{
message_begin(MSG_ALL, msgId_RoundTime);
write_short(tmRemaining);
message_end();
}

// Get Current remaining time to round end.
// from: https://github.com/s1lentq/ReGameDLL_CS/blo...amerules.h#L826
stock Float: CSGameRules_GetRoundRemainingTimeReal()
{
return float(_get_iRoundTimeSecs()) - get_gametime() + Float: _get_fRoundStartTimeReal();
}



Модифицированный gamedata-файл будет позже.

Отредактировал: wopox3, - 6.3.2018, 13:37
Прикрепленные файлы:
Прикрепленный файл  mp_hostages_rescuetime.sma ( 3,68 килобайт ) Кол-во скачиваний: 25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: