Hejter
xor ebx, ebx
- Сообщения
- 1,759
- Реакции
- 393
поддержка плагина тут http://hlmod.ru/forum/novye-plaginy/32988-krovotechenie.html
Последнее редактирование:
Ничего не напоминает?) В CS:GO это, похоже, как толчок уже после 0 HP.
И что мне тогда делать?
В любом случае, не дело совмещать такое. Выполнять либо одно, либо другое.C-подобный:if (cHealth < 30) {SetEntityHealth(client, cHealth - MINUS_BLEED_HP);} if (cHealth <= 0) ForcePlayerSuicide(client);
Больше смысла использовать обычное событие урона. ОффтопOnTakeDamage
что-то с таймером который отнимает ХП.
public Action:Bleed_Timer(Handle:timer, any:userid){
new client = GetClientOfUserId(userid);
if (client)
{
new cHealth = GetClientHealth(client) - MINUS_BLEED_HP;
if (cHealth > 0){
SetEntityHealth(client, cHealth);
}
else{
PrintToChat(client, "Ты умер");
EmitSoundToClient(client, "player/death1.wav", _, _, _, _, 1.0);
ForcePlayerSuicide(client);
Bleed[client] = false;
return Plugin_Stop;
}
}
return Plugin_Continue;
}
Primo так научил.И никаких Datapack-таймеров
Если у игрока 30 хп или меньше вызывается кровотечение, так же есть шанс получения кровотечение.напиши изначальное тз
Нет команда не нужна, это я проверить, убивается ли таймер. Возможно потом добавил бы для других плагинов.Только прописав команду, игрок может его остановить.
вангСейчас R1KO за тебя напишет)
ванг #2R1KO напишет, а ты просто добавишь.
public OnPluginStart()
{
HookEvent("player_death", PlayerDeath);
HookEvent("player_hurt", PlayerHurt);
}
public PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
Bleed[client] = false;
ClientCommand(client,"r_screenoverlay 0");
if(BleedTimerKill[client]) // это в ф-ю нужно вынести
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
public OnClientPutInServer(client)
{
Bleed[client] = false;
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
public OnClientDisconnect(client)
{
Bleed[client] = false;
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
public PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if(IsPlayerAlive(client) && Bleed[client] == false && client != GetClientOfUserId(GetEventInt(event, "attacker")))
{
if(GetEventInt(event, "health") < 30 && GetConVarFloat(BleedChance) >= GetRandomInt(0, 100)) // BleedChance от 0 до 100 %
{
BleedTimerKill[client] = CreateTimer(BLEED_TIMER, Bleed_Timer, GetClientUserId(client), TIMER_REPEAT);
PrintToChat(client, "У тебя кровотечение");
ClientCommand(client, g_blood[GetRandomInt(0, 1)]);
Bleed[victim] = true;
}
}
}
public Action:Bleed_Timer(Handle:timer, any:UserID)
{
new client = GetClientOfUserId(UserID);
if (client && IsPlayerAlive(client) && Bleed[client])
{
new cHealth = GetClientHealth(client) - MINUS_BLEED_HP;
if (cHealth > 0)
{
SetEntityHealth(client, cHealth);
return Plugin_Continue;
}
PrintToChat(client, "Ты умер");
EmitSoundToClient(client, "player/death1.wav", _, _, _, _, 1.0);
ForcePlayerSuicide(client);
Bleed[client] = false;
BleedTimerKill[client] = INVALID_HANDLE;
}
return Plugin_Stop;
}
if (client && IsPlayerAlive(client) && Bleed[client])
{
BleedTimerKill[client] = INVALID_HANDLE;
Да прибудет строк в логах ошибок)if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
Оффтопчто-то возьму, что-то оставлю
#pragma semicolon 1
#include <sdkhooks>
#include <sdktools>
/* Переменные */
#define BLEED_TIMER 3.0
#define MINUS_BLEED_HP 2
/* ========== */
new Handle:BleedChance;
new bool:Bleed[MAXPLAYERS+1];
new Handle:BleedTimerKill[MAXPLAYERS+1];
public Plugin:myinfo = {
author = "Hejter",
name = "[CS:GO] Bleeding",
description = "Вызывает кровотечение с X шансом.",
version = "0.1",
url = "hlmod.ru & excw.ru",
}
public OnPluginStart(){
BleedChance = CreateConVar("sm_bbb_chance", "0.33", "Шанс кровотечения, 1.00 = 100%, 0.50 = 50%, и т.д", FCVAR_PLUGIN);
HookEvent("player_death", PlayerDeath);
HookEvent("player_hurt", PlayerHurt);
AutoExecConfig(true, "sm_bleeding");
}
public PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
Bleed[client] = false;
ClientCommand(client,"r_screenoverlay 0");
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
public OnClientPutInServer(client)
{
Bleed[client] = false;
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
public OnClientDisconnect(client)
{
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
Bleed[client] = false;
}
/*
public Action:Command_Bandage(client, args){
if(IsClientInGame(client) && IsPlayerAlive(client)){
{
PrintToChat(client, "Ты перевязал себя!");
ClientCommand(client,"r_screenoverlay 0");
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
}
return Plugin_Handled;
} */
public PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast){
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new Float:iBleedChance = GetConVarFloat(BleedChance);
new Float:iRoll = GetRandomFloat();
if(IsPlayerAlive(client) && Bleed[client] == false && client != GetClientOfUserId(GetEventInt(event, "attacker")))
{
if (iBleedChance >= iRoll)
{
if (GetEventInt(event, "health") < 30)
{
BleedTimerKill[client] = CreateTimer(BLEED_TIMER, Bleed_Timer, GetClientUserId(client), TIMER_REPEAT);
//ClientCommand(client,g_blood[GetRandomInt(0, 1)]);
Bleed[client] = true;
}
}
}
}
public Action:Bleed_Timer(Handle:timer, any:UserID){
new client = GetClientOfUserId(UserID);
if (client && IsPlayerAlive(client) && Bleed[client])
{
new cHealth = GetClientHealth(client) - MINUS_BLEED_HP;
if (cHealth > 0){
SetEntityHealth(client, cHealth);
ClientCommand(client,"r_screenoverlay effects/blood2.vmt");
return Plugin_Continue;
}
EmitSoundToClient(client, "player/death1.wav", _, _, _, _, 1.0);
ForcePlayerSuicide(client);
Bleed[client] = false;
if(BleedTimerKill[client])
{
KillTimer(BleedTimerKill[client]);
BleedTimerKill[client] = INVALID_HANDLE;
}
}
return Plugin_Stop;
}
Наоборот, даже реалистичней будет, когда в самом начале ранения кровотечение откроется сразу же или чуть позже, чем в прошлый раз.И ошибки из логов исправить.
BfWriteByte(hFadeClient, 255); // fade alpha