Установка администратору хп

Ice_Sochi

Участник
Сообщения
711
Реакции
415
Раньше никогда кодингом не занимался, решил начать с малого: плагин, устанавливающий админам с флагом бана 110 хп в начале раунда. Игра ксс.
Просидев около часа:
#define PLUGIN_AUTHOR ""
#define PLUGIN_VERSION "1.0"

#include <sourcemod>
#include <sdktools>
//#include <sdkhooks>

public Plugin:myinfo =
{
name = "AdminHp",
author = PLUGIN_AUTHOR,
description = "1",
version = PLUGIN_VERSION,
url = ""
}
public OnPluginStart()
{
public HookEvent("round_start", round_start);
}
public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
if (CheckAdminBan()) PrintToChat("Вы получаете 110 хп как админ"); //насколько я понял, тут должно устанавливаться хп админу
else Plugin_Handled;
}
bool:CheckAdminBan()
{
for (new i = 1, i <= MaxClients, i++)
{
if(IsClientInGame(i) && GetUserFlagBits(i) & ADMFLAG_BAN)
{
return true;
}
}
return false;
}
Подскажите пожалуйста, как осуществить саму выдачу хп, желательно с пояснениями

Компилятор ругается тоже:
error 021: symbol already defined: "i"
warning 204: symbol is assigned a value that is never used: "i"
Done
Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
PHP:
public OnPluginStart()
{
    HookEvent("round_start", round_start);
}


public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    for (new i = 0; i <= MaxClients; i++)
    {
        if(CheckAdminBan(i))
        {
            SetEntityHealth(i, 110);
        }
    }
}

bool:CheckAdminBan(client)
{
    if(IsClientInGame(client) && GetUserFlagBits(client) & ADMFLAG_BAN)
    {
        return true;
    }
    return false;
}
--- Добавлено позже ---
Да и вообще, логичней было бы это делать в player_spawn
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Возвращает все флаги (бит-сумму флагов), а не только один. Для проверки на конкретный админ-флаг, используй:
PHP:
GetAdminFlag(AdminId:id, AdminFlag:flag, AdmAccessMode:mode=Access_Effective);
PrintToChat("Вы получаете 110 хп как админ");
Функция PrintToChat всегда требует индекс клиента того, кому конкретно отсылаешь сообщение.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Сделал через player_spawn
Неправильно. Для этого события цикл по всем игрокам не нужен, т.к. он вызывается ровно столько раз, сколько игроков отспавнилось (и именно для того, кто сейчас возродился).
PHP:
#define PLUGIN_AUTHOR ""
#define PLUGIN_VERSION "1.0sdkhooks"

#include <sourcemod>
//Подключаем нашу библиотеку sdkhooks для компиляции и работы его же функций (SDKHook).
#include <sdkhooks>

public Plugin:myinfo =
{
	name = "AdminHp",
	author = PLUGIN_AUTHOR,
	description = "Установка определенного кол-ва HP админам с флагом 'b'",
	version = PLUGIN_VERSION,
	url = "hlmod.ru"
}

//Вызывается каждый раз для ВСЕХ игроков, когда все их административные полномочия (флаги) уже точно известны (client - индекс игрока при его вызове).
public OnClientPostAdminCheck(client)
{
	//Проверяем, что зашедший игрок имеет нужный нам флаг ('b' - ban).
	if (GetAdminFlag(GetUserAdmin(client), Admin_Ban))
	{
		//ТОЛЬКО нужному нам администратору "ставим" индивидуальный хук Спавна.
		//Таким образом, код никогда не будет вызываться на ботах и других игроках, которые нам не нужны. Избавляет от возможных багов и оптимизирует.
		SDKHook(client, SDKHook_SpawnPost, SpawnPost);
	}
}

//Вызывается каждый раз, когда админ (с индексом client) возрождается.
public SpawnPost(client)
{
	//Собственно установка админу client количества HP, равным 110 (client, HP).
	SetEntityHealth(client, 110);
}
 

Ice_Sochi

Участник
Сообщения
711
Реакции
415
Неправильно. Для этого события цикл по всем игрокам не нужен, т.к. он вызывается ровно столько раз, сколько игроков отспавнилось (и именно для того, кто сейчас возродился).
PHP:
#define PLUGIN_AUTHOR ""
#define PLUGIN_VERSION "1.0sdkhooks"

#include <sourcemod>
//Подключаем нашу библиотеку sdkhooks для компиляции и работы его же функций (SDKHook).
#include <sdkhooks>

public Plugin:myinfo =
{
    name = "AdminHp",
    author = PLUGIN_AUTHOR,
    description = "Установка определенного кол-ва HP админам с флагом 'b'",
    version = PLUGIN_VERSION,
    url = "hlmod.ru"
}

//Вызывается каждый раз для ВСЕХ игроков, когда все их административные полномочия (флаги) уже точно известны (client - индекс игрока при его вызове).
public OnClientPostAdminCheck(client)
{
    //Проверяем, что зашедший игрок имеет нужный нам флаг ('b' - ban).
    if (GetAdminFlag(GetUserAdmin(client), Admin_Ban))
    {
        //ТОЛЬКО нужному нам администратору "ставим" индивидуальный хук Спавна.
        //Таким образом, код никогда не будет вызываться на ботах и других игроках, которые нам не нужны. Избавляет от возможных багов и оптимизирует.
        SDKHook(client, SDKHook_SpawnPost, SpawnPost);
    }
}

//Вызывается каждый раз, когда админ (с индексом client) возрождается.
public SpawnPost(client)
{
    //Собственно установка админу client количества HP, равным 110 (client, HP).
    SetEntityHealth(client, 110);
}
теперь понял, еще раз огромное спасибо
 
Сверху Снизу