Для этого и есть форум, обнаружатся баги, они исправятся, и будет всё хорошо!Делай делай, не забывай только, что нейронка пишет с багами)
А так да, функционал у тебя шире, удачи)
Для этого и есть форум, обнаружатся баги, они исправятся, и будет всё хорошо!Делай делай, не забывай только, что нейронка пишет с багами)
А так да, функционал у тебя шире, удачи)
открыл код, почитал его и понял, что код - полная фигнявроде рабочий
forward void Revival_OnPlayerReviving(int reviver, int target, int &frags, int &diff_hp, int &health);
, когда это уже прописано в подключеном инклюде revival
?Прошу Вас добавить нативы и форварды для возможности создавать модули для вашего плагинаоткрыл код, почитал его и понял, что код - полная фигня
- Нафига прописывать в плагине
forward void Revival_OnPlayerReviving(int reviver, int target, int &frags, int &diff_hp, int &health);
, когда это уже прописано в подключеном инклюдеrevival
?- Нафига менять значения кваров, если для изменения значений существует сам форвард?
- Нафига его хукать, если он срабатывает уже когда игрок вот-вот возродиться, когда тебе нужно изменить время возрождения? Т.е. когда это будет уже поздно для изменения значения скорости возрождения випом (потому как меняет её и количество попыток вообще всем, но меняет уже после первого возрождения випом).
Сообщения автоматически склеены:
Для реализации такого функционала нужно либо переписывать сам Revival добавляя интерграцию с випкой, либо, как я писал выше, просить меня добавить нативы/форварды для возможности делать такое модулями.
Такой вот вопрос интересный, то что да, действительно без натива для персонального тайм-аута это невозможно, но, как человек выше смог это обойтиДля реализации такого функционала нужно либо переписывать сам Revival добавляя интерграцию с випкой, либо, как я писал выше, просить меня добавить нативы/форварды для возможности делать такое модулями.
Если речь обо мне, то у меня переписанный исходник...но, как человек выше смог это обойти
Добавил ещё одно полеПрошу Вас добавить нативы и форварды для возможности создавать модули для вашего плагина
RI_CD
в нативы Revival_GetPlayerInfo
и Revival_SetPlayerInfo
, с помощью которого можно узнать или задать время, необходимое этому игроку, чтобы поднять другого.sm_revival_countdown
, потому как при изменении её значения будет меняться соответственно значение всем игрокам. Т.е. хукаем изменение значения этого квара, делаем таймер или лучше даже RequestFrame()
и проходимся циклом по игрокам, которым нужно задать отличающееся значение. Revival_SetPlayerInfo(client, RI_CD, значение);
. Потому как после дисконнекта значение будет сбрасываться на дефолтное.//// sm_revival 1.1.10_22.05.2025.sp
//
// Code size: 79420 bytes
// Data size: 180700 bytes
// Stack/heap size: 16728 bytes
// Total requirements: 276848 bytes
//
// Compilation Time: 0,17 sec
// ----------------------------------------
//// sm_revival 1.1.10_22.05.2025.sp
//
// Code size: 75916 bytes
// Data size: 179696 bytes
// Stack/heap size: 16728 bytes
// Total requirements: 272340 bytes
//
// Compilation Time: 0,16 sec
// ----------------------------------------
это просто вставить в конфиг или как в конфиге такого нету значениявроде это - sm_revival_duel "1"
не относится - но помагает, раньше ставил этот квар, чтобы при 1х1 не могли поднимать и работало. (плагин дуелей Weapon Fight)Если что, к плагину дуэлей это никак не относится
Так он и будет работать, он выключает возрождения при 1на1, но именно к плагину дуэлей не имеет отношенияне относится - но помагает, раньше ставил этот квар, чтобы при 1х1 не могли поднимать и работало. (плагин дуелей Weapon Fight)
это понятно что не имеет)Так он и будет работать, он выключает возрождения при 1на1, но именно к плагину дуэлей не имеет отношения
помогите как сделать что бы во время дуэли 1 на 1 нельзя было воскрещать игроков
#pragma semicolon 1
#include <weaponfight>
char
sPluginName[92] = "здесь_название_плагина.smx";
public int WeaponFight_DuelStart()
{
ServerCommand("sm plugins unload %s", sPluginName);
}
public int WeaponFight_DuelEnd()
{
ServerCommand("sm plugins load %s", sPluginName);
}
#pragma semicolon 1
#pragma newdecls required
#include <revival>
#include <weaponfight>
enum
{
RI_Revives, // How many times during this round the player reviveded others
RI_Revived, // How many times during this round the player was reviveded by others
RI_Target, // Player's current target for revive
RI_Percents,// Progress in reviving the target
RI_CD // Time reviving in seconds
};
ConVar
sm_revival_times;
bool
bRevival;
int
iUses[MAXPLAYERS+1] = {-1, ...};
public void OnAllPluginsLoaded()
{
if(!LibraryExists("revival"))
return;
bRevival = true;
sm_revival_times = FindConVar("sm_revival_times");
}
public void OnLibraryRemoved(const char[] name)
{
if(!strcmp(name, "revival")) bRevival = false;
}
public void OnClientDisconnect(int client)
{
iUses[client] = -1; // помечаем счётчик неиспользуемым для вышедшего игрока
}
public int WeaponFight_DuelStart()
{
if(!bRevival || (!sm_revival_times && !(sm_revival_times = FindConVar("sm_revival_times"))))
return 0;
iUses[0] = sm_revival_times.IntValue; // сохраняем текущее значение квара
sm_revival_times.IntValue = 1; // ставим ему минимальное значение
for(int i; ++i <= MaxClients;) if(IsClientInGame(i) && IsPlayerAlive(i))
{
iUses[i] = Revival_GetPlayerInfo(i, RI_Revives); // сохраняем счётчик игрока
Revival_SetPlayerInfo(i, RI_Revives, 0x7FFFFFFF); // устанавливаем максимальное знаковое 32-битное значение =)
}
}
public int WeaponFight_DuelEnd()
{
if(!bRevival || !sm_revival_times)
return 0;
sm_revival_times.IntValue = iUses[0]; // возвращаем значение квару
for(int i; ++i <= MaxClients;) if(iUses[i] != -1 && IsClientInGame(i))
Revival_SetPlayerInfo(i, RI_Revives, IsPlayerAlive(i) ? iUses[i] : 0); // возвращаем счётчик игрока к предыдущему значению
}
Revival_SetPlayerInfo()
.Для WeaponFight (хз что за плагин с таким инклюдом, не нашёл) код должен выглядеть примерно так:
Должно работать, кстати, с плагином Revival начиная с версии 1.1.5_16.10.2021, где я добавил нативSM1.13:#pragma semicolon 1 #pragma newdecls required #include <revival> #include <weaponfight> enum { RI_Revives, // How many times during this round the player reviveded others RI_Revived, // How many times during this round the player was reviveded by others RI_Target, // Player's current target for revive RI_Percents,// Progress in reviving the target RI_CD // Time reviving in seconds }; ConVar sm_revival_times; bool bRevival; int iUses[MAXPLAYERS+1] = {-1, ...}; public void OnAllPluginsLoaded() { if(!LibraryExists("revival")) return; bRevival = true; sm_revival_times = FindConVar("sm_revival_times"); } public void OnLibraryRemoved(const char[] name) { if(!strcmp(name, "revival")) bRevival = false; } public void OnClientDisconnect(int client) { iUses[client] = -1; // помечаем счётчик неиспользуемым для вышедшего игрока } public int WeaponFight_DuelStart() { if(!bRevival || (!sm_revival_times && !(sm_revival_times = FindConVar("sm_revival_times")))) return 0; iUses[0] = sm_revival_times.IntValue; // сохраняем текущее значение квара sm_revival_times.IntValue = 1; // ставим ему минимальное значение for(int i; ++i <= MaxClients;) if(IsClientInGame(i) && IsPlayerAlive(i)) { iUses[i] = Revival_GetPlayerInfo(i, RI_Revives); // сохраняем счётчик игрока Revival_SetPlayerInfo(i, RI_Revives, 0x7FFFFFFF); // устанавливаем максимальное знаковое 32-битное значение =) } } public int WeaponFight_DuelEnd() { if(!bRevival || !sm_revival_times) return 0; sm_revival_times.IntValue = iUses[0]; // возвращаем значение квару for(int i; ++i <= MaxClients;) if(iUses[i] != -1 && IsClientInGame(i)) Revival_SetPlayerInfo(i, RI_Revives, IsPlayerAlive(i) ? iUses[i] : 0); // возвращаем счётчик игрока к предыдущему значению }
Revival_SetPlayerInfo()
.
Это стандартный плагин дуэли из ПУ Арены.Для WeaponFight (хз что за плагин с таким инклюдом, не нашёл) код должен выглядеть примерно так:
Должно работать, кстати, с плагином Revival начиная с версии 1.1.5_16.10.2021, где я добавил нативSM1.13:#pragma semicolon 1 #pragma newdecls required #include <revival> #include <weaponfight> enum { RI_Revives, // How many times during this round the player reviveded others RI_Revived, // How many times during this round the player was reviveded by others RI_Target, // Player's current target for revive RI_Percents,// Progress in reviving the target RI_CD // Time reviving in seconds }; ConVar sm_revival_times; bool bRevival; int iUses[MAXPLAYERS+1] = {-1, ...}; public void OnAllPluginsLoaded() { if(!LibraryExists("revival")) return; bRevival = true; sm_revival_times = FindConVar("sm_revival_times"); } public void OnLibraryRemoved(const char[] name) { if(!strcmp(name, "revival")) bRevival = false; } public void OnClientDisconnect(int client) { iUses[client] = -1; // помечаем счётчик неиспользуемым для вышедшего игрока } public int WeaponFight_DuelStart() { if(!bRevival || (!sm_revival_times && !(sm_revival_times = FindConVar("sm_revival_times")))) return 0; iUses[0] = sm_revival_times.IntValue; // сохраняем текущее значение квара sm_revival_times.IntValue = 1; // ставим ему минимальное значение for(int i; ++i <= MaxClients;) if(IsClientInGame(i) && IsPlayerAlive(i)) { iUses[i] = Revival_GetPlayerInfo(i, RI_Revives); // сохраняем счётчик игрока Revival_SetPlayerInfo(i, RI_Revives, 0x7FFFFFFF); // устанавливаем максимальное знаковое 32-битное значение =) } } public int WeaponFight_DuelEnd() { if(!bRevival || !sm_revival_times) return 0; sm_revival_times.IntValue = iUses[0]; // возвращаем значение квару for(int i; ++i <= MaxClients;) if(iUses[i] != -1 && IsClientInGame(i)) Revival_SetPlayerInfo(i, RI_Revives, IsPlayerAlive(i) ? iUses[i] : 0); // возвращаем счётчик игрока к предыдущему значению }
Revival_SetPlayerInfo()
.
У меня стоит 3 поднятия за раунд, выгружаю и загружаю обратно, вроде точно так же 3 остаётся в след. раунде. На днях проверю даже, может внимание не обращал просто.Если установлено количество поднятий за раунд и не выключается подъём по окончанию раунда, то после выгрузки/загрузки плагина уже должны начинаться проблемы. Т.к. счётчики будут сбиваться.
Сейчас вот обнаружил, что да, есть небольшая проблемка. После завершения дуэли, плагин загружается обратно, но поднимать нельзя игроков и иконки исчезают. Только в след. раунде всё работает как должно. Ты об этом писал, я правильно понимаю?)я не про следующий