Моделлер
Участник
Пользователь
- Сообщения
- 1,558
- Реакции
- 1,566
- Помог
- 2 раз(а)
Данный метод подойдёт тем людям,у которых сервер HLDS
Привожу пример на основе сервера GunGame
Игрок подключается в игру,когда уже идёт игра к примеру 2-3 минуты ( время может быть и в меньше / больше )
Он не будет возрождатся и ему прейдётся ждать когда закончится раунд
Это если на сервере имеются карты по сценарию cs_ | de_
Здесь ситуация куда ещё нормальная
Если же есть карты по типу gg_ - то тут всё - приехали
Никакого сценария здесь нет,и Вы просто ждёте будучи мёртвым,когда закончится текущая карта - до следующей...
Бывают случаи,когда люди ставят Simple DeathMatch на обычный классик с ночи к примеру
Ну там ситуация таже,что и с cs_ | de_ - ждём окончания раунда
Да и вцелом не только здесь,где нужно поставить мгновенный респаун игрока - на других подобных Модах
Теперь перейдём к тому,что нам нужно зделать
1. Берём модуль CSDM последней версии csdm_amxx.dll - Windows | csdm_amxx_i386.so - Linux
2. Ложим его в папку для модулей addons/amxmodx/modules
3. Прописываем название csdm в файле modules.ini ниже в списке модулей
4. Всё )
Примечание:
Вцелом, как работать будет возрождение.?
Игрок заходит за команду - он сначала в Наблюдателях и потом через 3 секунды возрождается
Как видим - всёравно приходится подождать )))
Есть в Модуле квар csdm_active 0/1 - выкл./вкл.
Вы можете к примеру ставить его на тот же Simple DeathMatch ночью,а утром выключать его в заданное время,когда уже не будет Дезматч работать,а будет Классика
Да,модуль будет загружен - но он не будет работать
Есть ещё старый метод от Коннора,который заверял,что должен работать
Проверял с разным промежутком времени - не работает
Ну мало ли - тоже сюда
Вроде всё
На всякий случай скину модули для Винды и Линукса
На Виндовсе в модуле я убрал рекламку - на Линуксе - не убирал ( знаю как убрать,но не знаю как пересобрать файл .so )))
Привожу пример на основе сервера GunGame
Игрок подключается в игру,когда уже идёт игра к примеру 2-3 минуты ( время может быть и в меньше / больше )
Он не будет возрождатся и ему прейдётся ждать когда закончится раунд
Это если на сервере имеются карты по сценарию cs_ | de_
Здесь ситуация куда ещё нормальная
Если же есть карты по типу gg_ - то тут всё - приехали
Никакого сценария здесь нет,и Вы просто ждёте будучи мёртвым,когда закончится текущая карта - до следующей...
Бывают случаи,когда люди ставят Simple DeathMatch на обычный классик с ночи к примеру
Ну там ситуация таже,что и с cs_ | de_ - ждём окончания раунда
Да и вцелом не только здесь,где нужно поставить мгновенный респаун игрока - на других подобных Модах
Теперь перейдём к тому,что нам нужно зделать
1. Берём модуль CSDM последней версии csdm_amxx.dll - Windows | csdm_amxx_i386.so - Linux
2. Ложим его в папку для модулей addons/amxmodx/modules
3. Прописываем название csdm в файле modules.ini ниже в списке модулей
4. Всё )
Примечание:
Вцелом, как работать будет возрождение.?
Игрок заходит за команду - он сначала в Наблюдателях и потом через 3 секунды возрождается
Как видим - всёравно приходится подождать )))
Есть в Модуле квар csdm_active 0/1 - выкл./вкл.
Вы можете к примеру ставить его на тот же Simple DeathMatch ночью,а утром выключать его в заданное время,когда уже не будет Дезматч работать,а будет Классика
Да,модуль будет загружен - но он не будет работать
Есть ещё старый метод от Коннора,который заверял,что должен работать
Проверял с разным промежутком времени - не работает
Ну мало ли - тоже сюда
Код:
#include < amxmodx >
#include < fakemeta >
#include < hamsandwich >
#pragma semicolon 1
#define VERSION "0.1.0"
#define PLUGIN "Respawn on First Join"
const m_iJoiningState = 121;
const m_iMenu = 205;
const MENU_CHOOSEAPPEARANCE = 3;
const JOIN_CHOOSEAPPEARANCE = 4;
new HamHook:g_iHhCBasePlayerPreThink;
#define MaskEnt(%0) ( 1<<(%0 & 31) )
new g_iBitHookPlayerPreThink;
#define MarkPlayerPreThink(%0) g_iBitHookPlayerPreThink |= MaskEnt(%0)
#define ClearPlayerPreThink(%0) g_iBitHookPlayerPreThink &= ~MaskEnt(%0)
#define HookPlayerPreThink(%0) ( g_iBitHookPlayerPreThink & MaskEnt(%0) )
public plugin_init()
{
register_plugin(PLUGIN, VERSION, "ConnorMcLeod");
register_clcmd("menuselect", "ClCmd_MenuSelect_JoinClass"); // old style menu
register_clcmd("joinclass", "ClCmd_MenuSelect_JoinClass"); // VGUI menu
DisableHamForward( g_iHhCBasePlayerPreThink = RegisterHam(Ham_Player_PreThink, "player", "OnCBasePlayer_PreThink_Post", true) ); // register it for later
}
// player is pressing a key in an old style menu
// or player is sending joinclass command, either by typing it in console, either selecting a option from VGUI skins selection menu
public ClCmd_MenuSelect_JoinClass(id)
{
// Don't need to check args here, because (assuming player is in the skin select menu,
// we gonna check this) if there is no arg, or if arg is bad, game gonna act as if player was choosing auto-select.
// So first check if player is in the correct menu, pdata m_iMenu can just tell us
// Then check if player has just joined the server, m_iJoiningState is used by the game for this
if( get_pdata_int(id, m_iMenu) == MENU_CHOOSEAPPEARANCE && get_pdata_int(id, m_iJoiningState) == JOIN_CHOOSEAPPEARANCE )
{
// Enable PreThink for 1 frame if not already
if( !g_iBitHookPlayerPreThink )
{
EnableHamForward( g_iHhCBasePlayerPreThink );
}
MarkPlayerPreThink(id);
}
}
// Little explanation on what should happen after player has chosen a skin :
// In CBasePlayer::PreThink, if player pdata m_iJoiningState is different from 0, function CBasePlayer::JoinThink gonna be called
// In JoinThink function, if m_iJoiningState 5 it means that player has just chosen a skin, we had checked if pdata was 4 because player has not chosen a team yet
// Then game checks if that player can be respawn with function CGameRules::FPlayerCanRespawn (if no objective or no player in 1 team player can respawn,
// else if we are less that 20sec after round start player can respawn, else player won't spawn)
// So now that PreThink and JoinThink have been called, let's check if player has been respawned or not.
public OnCBasePlayer_PreThink_Post( id )
{
if( !HookPlayerPreThink(id) )
{
return HAM_IGNORED;
}
ClearPlayerPreThink(id);
if( !g_iBitHookPlayerPreThink )
{
DisableHamForward( g_iHhCBasePlayerPreThink );
}
if( !is_user_alive(id) )
{
// if player has not been respawned by the game, let's force it.
ExecuteHam(Ham_Spawn, id);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
На всякий случай скину модули для Винды и Линукса
На Виндовсе в модуле я убрал рекламку - на Линуксе - не убирал ( знаю как убрать,но не знаю как пересобрать файл .so )))
[CSDM] This server is running CSDM 2.1.x
[CSDM] Visit http://www.здесьбылареклама.net/
На ReHLDS данный метод неактуален,т.к. там есть квар для этого возрождения ( насколько мне известно )
Вложения
-
94.7 KB Просмотры: 13
Последнее редактирование: