Handle WelcomePanel = CreatePanel(INVALID_HANDLE);
Format(message2, sizeof(message2), "%N C Хомячил(а) Аптечку. Кол-во: %i", player, counts[player]);
SetPanelTitle(WelcomePanel, message2);
Format(message2, sizeof(message2), "Было ХП %i Стало %i ХП", Health, heal);
DrawPanelText(WelcomePanel, message2);
SendPanelToClient(WelcomePanel, FakeClient(), NullMenuHandler, 10);
CloseHandle(WelcomePanel);
О_о, если не сложно покажи как?А не вылезает оно, потому что есть незакрытая панель, которая как бы открыта, но не отображается. Во всём есть своя логика.
Код изначально странно написан. И не показали даже обработчик.
вроде бы и без этого ведь работаетДоброго времени суток. Помогите написать плагин который будет автоматически после рестарта сервера прописывать в консоль команду mp_restartgame1, сервер АВП ДМ, если не прописать данную команду в консоли LVL ranks работать не будет.
Ну раз написал, значит не работает :Dвроде бы и без этого ведь работает
что за функция FakeClient() и что она возвращает?SendPanelToClient(WelcomePanel, FakeClient(), NullMenuHandler, 10);
Отправка сообщение реальным игрокам. Ну вот как весь плагин:что за функция FakeClient() и что она возвращает?
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
char message[100];
int counts[MAXPLAYERS+1];
static int Health, heal;
public void OnPluginStart()
{
HookEvent("heal_success", Event_Heal_Success, EventHookMode_Post);
HookEvent("heal_begin", Event_Heal_Begin, EventHookMode_Post);
HookEvent("round_start", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("round_end", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("finale_win", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("mission_lost", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("map_transition", eventResetSettings, EventHookMode_PostNoCopy);
}
public void eventResetSettings(Event event, const char[] name, bool dontBroadcast)
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) counts[i] = 0;
}
public void Event_Heal_Begin(Event event, const char[] name, bool dontBroadcast)
{
Health = 0;
int client = GetClientOfUserId(event.GetInt("userid"));
int player = GetClientOfUserId(event.GetInt("subject"));
if(client == player && !IsFakeClient(client))
Health = GetEntProp(player, Prop_Send, "m_iHealth");
}
public void Event_Heal_Success(Event event, const char[] name, bool dontBroadcast)
{
heal = 0;
int client = GetClientOfUserId(event.GetInt("userid"));
int player = GetClientOfUserId(event.GetInt("subject"));
{
if(client == player && !IsFakeClient(client))
{
counts[player]++;
heal = GetEntProp(player, Prop_Send, "m_iHealth");
Handle WelcomePanel = CreatePanel(INVALID_HANDLE);
Format(message2, sizeof(message2), "%N C Хомячил(а) Аптечку. Кол-во: %i", player, counts[player]);
SetPanelTitle(WelcomePanel, message2);
Format(message2, sizeof(message2), "Было ХП %i Стало %i ХП", Health, heal);
DrawPanelText(WelcomePanel, message2);
SendPanelToClient(WelcomePanel, FakeClient(), NullMenuHandler, 10);
CloseHandle(WelcomePanel);
}
}
}
int NullMenuHandler(Handle menu, MenuAction action, int param1, int param2)
{
}
bool FakeClient()
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
return true;
return false;
}
Так она возвращает bool, а там id игрока должен быть:censored:Отправка сообщение реальным игрокам. Ну вот как весь плагин:
PHP:#pragma semicolon 1 #include <sourcemod> #include <sdktools> char message[100]; int counts[MAXPLAYERS+1]; static int Health, heal; public void OnPluginStart() { HookEvent("heal_success", Event_Heal_Success, EventHookMode_Post); HookEvent("heal_begin", Event_Heal_Begin, EventHookMode_Post); HookEvent("round_start", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("round_end", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("finale_win", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("mission_lost", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("map_transition", eventResetSettings, EventHookMode_PostNoCopy); } public void eventResetSettings(Event event, const char[] name, bool dontBroadcast) { for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) counts[i] = 0; } public void Event_Heal_Begin(Event event, const char[] name, bool dontBroadcast) { Health = 0; int client = GetClientOfUserId(event.GetInt("userid")); int player = GetClientOfUserId(event.GetInt("subject")); if(client == player && !IsFakeClient(client)) Health = GetEntProp(player, Prop_Send, "m_iHealth"); } public void Event_Heal_Success(Event event, const char[] name, bool dontBroadcast) { heal = 0; int client = GetClientOfUserId(event.GetInt("userid")); int player = GetClientOfUserId(event.GetInt("subject")); { if(client == player && !IsFakeClient(client)) { counts[player]++; heal = GetEntProp(player, Prop_Send, "m_iHealth"); Handle WelcomePanel = CreatePanel(INVALID_HANDLE); Format(message2, sizeof(message2), "%N C Хомячил(а) Аптечку. Кол-во: %i", player, counts[player]); SetPanelTitle(WelcomePanel, message2); Format(message2, sizeof(message2), "Было ХП %i Стало %i ХП", Health, heal); DrawPanelText(WelcomePanel, message2); SendPanelToClient(WelcomePanel, FakeClient(), NullMenuHandler, 10); CloseHandle(WelcomePanel); } } } int NullMenuHandler(Handle menu, MenuAction action, int param1, int param2) { } bool FakeClient() { for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) return true; return false; }
Можно же напрямую сделать, а проверку выше.Отправка сообщение реальным игрокам. Ну вот как весь плагин:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
char message2[100];
int counts[MAXPLAYERS+1];
static int Health, heal;
public void OnPluginStart()
{
HookEvent("heal_success", Event_Heal_Success, EventHookMode_Post);
HookEvent("heal_begin", Event_Heal_Begin, EventHookMode_Post);
HookEvent("round_start", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("round_end", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("finale_win", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("mission_lost", eventResetSettings, EventHookMode_PostNoCopy);
HookEvent("map_transition", eventResetSettings, EventHookMode_PostNoCopy);
}
public void eventResetSettings(Event event, const char[] name, bool dontBroadcast)
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) counts[i] = 0;
}
public void Event_Heal_Begin(Event event, const char[] name, bool dontBroadcast)
{
Health = 0;
int client = GetClientOfUserId(event.GetInt("userid"));
int player = GetClientOfUserId(event.GetInt("subject"));
if(client == player && !IsFakeClient(client))
Health = GetEntProp(player, Prop_Send, "m_iHealth");
}
public void Event_Heal_Success(Event event, const char[] name, bool dontBroadcast)
{
heal = 0;
int client = GetClientOfUserId(event.GetInt("userid"));
int player = GetClientOfUserId(event.GetInt("subject"));
{
if(client == player && !IsFakeClient(client) && IsClientInGame(client))
{
counts[player]++;
heal = GetEntProp(player, Prop_Send, "m_iHealth");
Handle WelcomePanel = CreatePanel(INVALID_HANDLE);
Format(message2, sizeof(message2), "%N C Хомячил(а) Аптечку. Кол-во: %i", player, counts[player]);
SetPanelTitle(WelcomePanel, message2);
Format(message2, sizeof(message2), "Было ХП %i Стало %i ХП", Health, heal);
DrawPanelText(WelcomePanel, message2);
SendPanelToClient(WelcomePanel, client, NullMenuHandler, 10);
CloseHandle(WelcomePanel);
}
}
}
int NullMenuHandler(Handle menu, MenuAction action, int param1, int param2)
{
}
Можно же напрямую сделать, а проверку выше.
PHP:#pragma semicolon 1 #include <sourcemod> #include <sdktools> char message2[100]; int counts[MAXPLAYERS+1]; static int Health, heal; public void OnPluginStart() { HookEvent("heal_success", Event_Heal_Success, EventHookMode_Post); HookEvent("heal_begin", Event_Heal_Begin, EventHookMode_Post); HookEvent("round_start", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("round_end", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("finale_win", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("mission_lost", eventResetSettings, EventHookMode_PostNoCopy); HookEvent ("map_transition", eventResetSettings, EventHookMode_PostNoCopy); } public void eventResetSettings (Событие события, имя const char [], bool dontBroadcast) { for (int i = 1; i <= MaxClients; i ++), если (IsClientInGame (i)) считается [i] = 0; } public void Event_Heal_Begin (Событие события, имя const char [], bool dontBroadcast) { Здоровье = 0; int client = GetClientOfUserId (event.GetInt ("идентификатор пользователя")); int player = GetClientOfUserId (event.GetInt ("subject")); if (client == player &&! IsFakeClient (client)) Health = GetEntProp (игрок, Prop_Send, "m_iHealth"); } public void Event_Heal_Success (Событие события, имя const char [], bool dontBroadcast) { заживать = 0; int client = GetClientOfUserId (event.GetInt ("идентификатор пользователя")); int player = GetClientOfUserId (event.GetInt ("subject")); { if (client == player &&! IsFakeClient (клиент) && IsClientInGame (клиент)) { отсчеты [игрок] ++; heal = GetEntProp (игрок, Prop_Send, "m_iHealth"); Дескриптор WelcomePanel = CreatePanel (INVALID_HANDLE); Формат (message2, sizeof (message2), "% NC Хомячил (а) Аптечку. Кол-во:% i", игрок, счет [игрок]); SetPanelTitle (WelcomePanel, message2); Формат (message2, sizeof (message2), "Было ХП% i Стало% i ХП", Здоровье, исцеление); DrawPanelText (WelcomePanel, message2); SendPanelToClient (WelcomePanel, клиент, NullMenuHandler, 10); CloseHandle (WelcomePanel); } } } int NullMenuHandler (Управление меню, действие MenuAction, int param1, int param2) { } [/КОД] [/СПОЙЛЕР] [/ QUOTE] Зачем мне же видеть, мои данные мне одному?
Можно же напрямую сделать, а проверку выше.
PHP:#pragma semicolon 1 #include <sourcemod> #include <sdktools> char message2[100]; int counts[MAXPLAYERS+1]; static int Health, heal; public void OnPluginStart() { HookEvent("heal_success", Event_Heal_Success, EventHookMode_Post); HookEvent("heal_begin", Event_Heal_Begin, EventHookMode_Post); HookEvent("round_start", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("round_end", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("finale_win", eventResetSettings, EventHookMode_PostNoCopy); HookEvent("mission_lost", eventResetSettings, EventHookMode_PostNoCopy); HookEvent ("map_transition", eventResetSettings, EventHookMode_PostNoCopy); } public void eventResetSettings (Событие события, имя const char [], bool dontBroadcast) { for (int i = 1; i <= MaxClients; i ++), если (IsClientInGame (i)) считается [i] = 0; } public void Event_Heal_Begin (Событие события, имя const char [], bool dontBroadcast) { Здоровье = 0; int client = GetClientOfUserId (event.GetInt ("идентификатор пользователя")); int player = GetClientOfUserId (event.GetInt ("subject")); if (client == player &&! IsFakeClient (client)) Health = GetEntProp (игрок, Prop_Send, "m_iHealth"); } public void Event_Heal_Success (Событие события, имя const char [], bool dontBroadcast) { заживать = 0; int client = GetClientOfUserId (event.GetInt ("идентификатор пользователя")); int player = GetClientOfUserId (event.GetInt ("subject")); { if (client == player &&! IsFakeClient (клиент) && IsClientInGame (клиент)) { отсчеты [игрок] ++; heal = GetEntProp (игрок, Prop_Send, "m_iHealth"); Дескриптор WelcomePanel = CreatePanel (INVALID_HANDLE); Формат (message2, sizeof (message2), "% NC Хомячил (а) Аптечку. Кол-во:% i", игрок, счет [игрок]); SetPanelTitle (WelcomePanel, message2); Формат (message2, sizeof (message2), "Было ХП% i Стало% i ХП", Здоровье, исцеление); DrawPanelText (WelcomePanel, message2); SendPanelToClient (WelcomePanel, клиент, NullMenuHandler, 10); CloseHandle (WelcomePanel); } } } int NullMenuHandler (Управление меню, действие MenuAction, int param1, int param2) { } [/КОД] [/СПОЙЛЕР] [/ QUOTE] Зачем?
Ты че прикалываешься, там true или false возвращает, когда в функции используется id игрока.[QUOTE = "d4Ck, сообщение: 417775, участник: 91305"]
Так она возвращает bool, а там id игрок должен быть: Цензура:
[/ QUOTE]
всё правильно там, там идет отправка сообщение через цикл игрокам.
Сообщения автоматически склеены:
Сообщения автоматически склеены:
Прочтите API SendPanelToClient · menus · SourceMod Scripting API Reference, там чётко сказано что нужен id игрока, а не bool,[QUOTE = "d4Ck, сообщение: 417775, участник: 91305"]
Так она возвращает bool, а там id игрок должен быть: Цензура:
[/ QUOTE]
всё правильно там, там идет отправка сообщение через цикл игрокам.
Сообщения автоматически склеены:
Сообщения автоматически склеены:
bool FakeClient()
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
return true;
return false;
}
bool FakeClient()
{
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
return true;
return false;
}
#pragma semicolon 1
int counts[MAXPLAYERS+1], iHP;
public void OnPluginStart()
{
HookEvent("heal_begin", Event_Heal_Begin);
HookEvent("heal_success", Event_Heal_Success);
HookEvent("round_start", Event_Reset, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_Reset, EventHookMode_PostNoCopy);
HookEvent("finale_win", Event_Reset, EventHookMode_PostNoCopy);
HookEvent("mission_lost", Event_Reset, EventHookMode_PostNoCopy);
HookEvent("map_transition", Event_Reset, EventHookMode_PostNoCopy);
}
public void OnClientConnected(int client)
{
counts[client] = 0;
}
public void Event_Reset(Event event, const char[] name, bool dontBroadcast)
{
for(int i = 1; i <= MaxClients; i++) counts[i] = 0;
}
public void Event_Heal_Begin(Event event, const char[] name, bool dontBroadcast)
{
iHP = 0;
static int uid, client;
if((uid = event.GetInt("userid")) == event.GetInt("subject") && (client = GetClientOfUserId(uid))
&& !IsFakeClient(client))
iHP = GetClientHealth(client);
}
public void Event_Heal_Success(Event event, const char[] name, bool dontBroadcast)
{
static int uid, client;
if((uid = event.GetInt("userid")) == event.GetInt("subject") && (client = GetClientOfUserId(uid))
&& !IsFakeClient(client))
{
counts[client]++;
static char buffer[100];
Panel panel = CreatePanel();
FormatEx(buffer, sizeof(buffer), "%N схомячил(а) аптечку. Кол-во: %i", client, counts[client]);
SetPanelTitle(panel, buffer);
FormatEx(buffer, sizeof(buffer), "Было ХП %i Стало %i ХП", iHP, GetClientHealth(client));
DrawPanelText(panel, buffer);
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
SendPanelToClient(panel, i, NullMenuHandler, 10);
CloseHandle(panel);
}
}
public int NullMenuHandler(Menu menu, MenuAction action, int param1, int param2){}
Ну вообще-то цикл оно делает:biggrin:лол, оно даже цикл не делает, а отсылает true при нахождении первого же реального игрока и прекращает работу :rtfm: