Hud в CS:GO... Работает...

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Знаю. Оптимизация - его дело, но он предлагает хороший вариант "избавления от конкурентов", достаточно опасный. Это нельзя не упомянуть.
:biggrin:

PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

Handle TW[MAXPLAYERS+1];
Handle TW2[MAXPLAYERS+1];
Handle TW3[MAXPLAYERS+1];

public void OnClientPutInServer(int client)
{
   if(IsClientInGame(client))
   {
       TW[client] = CreateTimer(6.0, TimerWelcome, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public void OnClientDisconnect(int client)
{
   if((TW[client]) != null)
   {
       KillTimer(TW[client]);
       TW[client] = null;
   }
   
   if(TW2[client] != null)
   {
       KillTimer(TW2[client]);
       TW2[client] = null;
   }

   if(TW3[client] != null)
   {
       KillTimer(TW3[client]);
       TW3[client] = null;
   }
}

public Action TimerWelcome(Handle timer, int client)
{
   TW[client] = null;
   
   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Добро пожаловать, %N", client);
       
       SetHudTextParams(0.40, 0.83, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Вы играете на проекте 'HLMod.ru'");

       TW2[client] = CreateTimer(6.0, TimerWelcome2, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome2(Handle timer, int client)
{
   TW2[client] = null;

   if(IsClientInGame(client))
   {
       Handle cvar = FindConVar("hostip");
       int hostip = GetConVarInt(cvar);

       Handle hostport = FindConVar("hostport");
       char ServerIp[32];
       char ServerPort[1024];

       FormatEx(ServerIp, 32, "%u.%u.%u.%u", hostip >>> 24 & 255, hostip >>> 16 & 255, hostip >>> 8 & 255, hostip & 255);
       GetConVarString(hostport, ServerPort, 1024);

       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Наш ip: %s:%s", ServerIp, ServerPort);

       TW3[client] = CreateTimer(6.0, TimerWelcome3, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome3(Handle timer, int client)
{
   TW3[client] = null;

   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Контакты гл.администратора...\n\nВконтакте: vk.com/...");
   }
}

А если серьезно, мне все равно не понятно...

Создался таймер. К конкретному игроку привязались конкретные данные и так каждый раз когда создается новый таймер.
Разве я не прав?

Оффтоп
 

Вложения

  • WelcomeInfoNoCvars#3.rar
    7.7 КБ · Просмотры: 13

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Handle TW[MAXPLAYERS+1];
Handle TW2[MAXPLAYERS+1];
Handle TW3[MAXPLAYERS+1];
А если будет десять сообщений (вместо рекламы), то десять штук станешь делать? Это делается всего 1 массивом, вне зависимости от количества следующих друг за другом таймеров. Оффтоп
К конкретному игроку привязались конкретные данные
Это не так. client - это индекс игрока, номер его слота на сервере, если хочешь. И он "конкретен", пока игрок на сервере. Далее - повторяется (слот же никуда не девается, лишь освобождается для нового игрока - индекс остаётся прежним). Вот и получается: один вышел с индексом 1, другой зашёл на этот же слот и тоже с 1 - новый и старый таймер отправляется ему (он же "в игре"). Оффтоп
Для полной "конкретики" используется userid:
C-подобный:
GetClientUserId(client);
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
А если будет десять сообщений (вместо рекламы), то десять штук станешь делать? Это делается всего 1 массивом, вне зависимости от количества следующих друг за другом таймеров. ОффтопЭто не так. client - это индекс игрока, номер его слота на сервере, если хочешь. И он "конкретен", пока игрок на сервере. Далее - повторяется (слот же никуда не девается, лишь освобождается для нового игрока - индекс остаётся прежним). Вот и получается: один вышел с индексом 1, другой зашёл на этот же слот и тоже с 1 - новый и старый таймер отправляется ему (он же "в игре"). Оффтоп
Для полной "конкретики" используется userid:
C-подобный:
GetClientUserId(client);
Ой все.
Еще один...

А так вроде стала понятна твоя позиция, спасибо.

Да поправил я, поправил!)

Если сделать так...

PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

Handle TW[MAXPLAYERS+1];

public void OnClientPutInServer(int client)
{
   if(IsClientInGame(client))
   {
       TW[client] = CreateTimer(6.0, TimerWelcome, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public void OnClientDisconnect(int client)
{
   if(!IsClientInGame(client))
   {
       if((TW[client]) != null)
       {
           KillTimer(TW[client]);
           TW[client] = null;
       }
   }
}

public Action TimerWelcome(Handle timer, int client)
{
   TW[client] = null;
 
   if(IsClientInGame(client))
   {
       char name[32];
       GetClientName(client, name, 32);
    
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Добро пожаловать, %s", name);
    
       SetHudTextParams(0.40, 0.83, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Вы играете на проекте 'HLMod.ru'");

       TW[client] = CreateTimer(6.0, TimerWelcome2, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome2(Handle timer, int client)
{
   TW[client] = null;

   if(IsClientInGame(client))
   {
       Handle cvar = FindConVar("hostip");
       int hostip = GetConVarInt(cvar);

       Handle hostport = FindConVar("hostport");
       char ServerIp[32];
       char ServerPort[1024];

       FormatEx(ServerIp, 32, "%u.%u.%u.%u", hostip >>> 24 & 255, hostip >>> 16 & 255, hostip >>> 8 & 255, hostip & 255);
       GetConVarString(hostport, ServerPort, 1024);

       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Наш ip: %s:%s", ServerIp, ServerPort);

       TW[client] = CreateTimer(6.0, TimerWelcome3, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome3(Handle timer, int client)
{
   TW[client] = null;

   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Контакты гл.администратора...\n\nВконтакте: vk.com/...");
   }
}

Оффтоп
 

wayLANder

Где AlmazON?
Сообщения
1,742
Реакции
577
Я не понял, алё, почему сие творение человечества до сих пор не в ресурсах, а в болталке??7???7???!?77?!?7
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
OnClientPutInServer(int client)
Неа. Игрок качает карту/звуки/модели - твои рекламы пролетают мимо.
PHP:
OnClientPostAdminCheck(client)
Вот теперь, вообще не работает. Оффтоп Программа "Избавляюсь от конкурентов" в верно начатом (завуалированном) коде. :biggrin:
Да нигде оно не нужно, таймер теперь автоматически останавливается, если игрок "не в игре".
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Ой все.
Еще один...
Это моменты не оптимизации, а стабильной работы плагина, а следовательно и сервера. Одно дело, когда плагин не оптимизирован, но работает без перебоев, а другое дело, когда он работает не стабильно.
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Программа "Избавляюсь от конкурентов" в верно начатом (завуалированном) коде. :biggrin:

̶Е̶с̶л̶и̶ ̶н̶е̶т̶ ̶и̶г̶р̶о̶к̶а̶ ̶в̶ ̶и̶г̶р̶е̶,̶ ̶п̶р̶о̶в̶е̶р̶и̶т̶ь̶ ̶т̶а̶й̶м̶е̶р̶.̶.̶.̶ ̶Е̶с̶л̶и̶ ̶о̶н̶ ̶е̶щ̶е̶ ̶д̶о̶ ̶с̶е̶х̶ ̶п̶о̶р̶ ̶р̶а̶б̶о̶т̶а̶е̶т̶,̶ ̶у̶б̶и̶в̶а̶т̶ь̶ ̶е̶г̶о̶.̶.̶.̶
̶Х̶о̶т̶я̶ ̶з̶а̶ч̶е̶м̶.̶.̶.̶ ̶Е̶с̶л̶и̶,̶ ̶и̶г̶р̶о̶к̶ ̶п̶о̶ ̶с̶о̶б̶ы̶т̶и̶ю̶ ̶в̶ы̶ш̶е̶л̶ ̶и̶з̶ ̶и̶г̶р̶ы̶.̶.̶.̶

А ну да, OnClientPostAdminCheck(client) позже вызывается чем OnClientPutInServer(client)
Тут я подумал только о себе, не правильно...

Да нигде оно не нужно, таймер теперь автоматически останавливается, если игрок "не в игре".
Hud в CS:GO... Работает... - не добавил проверку, выдало ошибку в логи "client 0".

Это моменты не оптимизации, а стабильной работы плагина, а следовательно и сервера. Одно дело, когда плагин не оптимизирован, но работает без перебоев, а другое дело, когда он работает не стабильно.
Все нормально, рано или поздно бы это всплыло и мне бы пришлось поправлять это дело :ab:

PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

Handle TW[MAXPLAYERS+1];

public void OnClientPostAdminCheck(int client)
{
   if(IsClientInGame(client))
   {
       TW[client] = CreateTimer(10.0, TimerWelcome, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public void OnClientDisconnect(int client)
{
   if((TW[client]) != null)
   {
       KillTimer(TW[client]);
       TW[client] = null;
   }
}

public Action TimerWelcome(Handle timer, int client)
{
   TW[client] = null;
   
   if(IsClientInGame(client))
   {
       char name[32];
       GetClientName(client, name, 32);
       
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Добро пожаловать, %s", name);
       
       SetHudTextParams(0.40, 0.83, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Вы играете на проекте ''");

       TW[client] = CreateTimer(10.0, TimerWelcome2, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome2(Handle timer, int client)
{
   TW[client] = null;

   if(IsClientInGame(client))
   {
       Handle cvar = FindConVar("hostip");
       int hostip = GetConVarInt(cvar);

       Handle hostport = FindConVar("hostport");
       char ServerIp[32];
       char ServerPort[1024];

       FormatEx(ServerIp, 32, "%u.%u.%u.%u", hostip >>> 24 & 255, hostip >>> 16 & 255, hostip >>> 8 & 255, hostip & 255);
       GetConVarString(hostport, ServerPort, 1024);

       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Наш ip: %s:%s", ServerIp, ServerPort);

       TW[client] = CreateTimer(10.0, TimerWelcome3, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome3(Handle timer, int client)
{
   TW[client] = null;

   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Контакты гл.администратора...\n\nВконтакте: vk.com/...");
   }
}
 

Вложения

  • WelcomeInfoNoCvars.rar
    7.6 КБ · Просмотры: 13

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Последнее редактирование:

Yura7181

Участник
Сообщения
678
Реакции
594
Ну к примеру я сделал так...

PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

public void OnClientPutInServer(int client)
{
   if(IsClientInGame(client))
   {
       CreateTimer(10.0, TimerWelcome, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome(Handle timer, int client)
{
   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Добро пожаловать, %N", client);

      // Создаем новый худ и меняем координаты(сделал чуть ниже)
       SetHudTextParams(0.40, 0.83, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Вы играете на проекте 'HLMod.ru'");

       CreateTimer(10.0, TimerWelcome2, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome2(Handle timer, int client)
{
   if(IsClientInGame(client))
   {
       Handle cvar = FindConVar("hostip");
       int hostip = GetConVarInt(cvar);

       Handle hostport = FindConVar("hostport");
       char ServerIp[32];
       char ServerPort[1024];

       FormatEx(ServerIp, 32, "%u.%u.%u.%u", hostip >>> 24 & 255, hostip >>> 16 & 255, hostip >>> 8 & 255, hostip & 255);
       GetConVarString(hostport, ServerPort, 1024);

       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Наш ip: %s:%s", ServerIp, ServerPort);

       CreateTimer(10.0, TimerWelcome3, client, TIMER_FLAG_NO_MAPCHANGE);
   }
}

public Action TimerWelcome3(Handle timer, int client)
{
   if(IsClientInGame(client))
   {
       SetHudTextParams(0.40, 0.80, 5.0, GetRandomInt(0, 255), GetRandomInt(0, 255), GetRandomInt(0, 255), 255, 0, 0.25, 1.0, 1.0);
       ShowHudText(client, -1, "Контакты гл.администратора...\n\nВконтакте: vk.com/...");
   }
}


Все изменяйте в исходнике плагина, так, чисто для примера...


Когда я пишу sm_xsay Будут сообщения разноцветными и в несколько рядов/строк разного цвета это можно настроить?
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Когда я пишу sm_xsay Будут сообщения разноцветными и в несколько рядов/строк разного цвета это можно настроить?
Это вряд ли, я пока не знаю как это реализовать в xsay.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
html теги работают? не проверяли? (<font> и т.п.)
 

wayLANder

Где AlmazON?
Сообщения
1,742
Реакции
577
Есть ли возможность теперь выводить инфу о спеках и демеджу, как а старые добрые?)
Screenshot_20170414-000628.png
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Всмысли? Все на UserMessage
Мне еще не довелось попользоваться худом, но, судя по
PHP:
       int ent = CreateEntityByName("game_text");
       DispatchKeyValue(ent, "channel", "1");
       DispatchKeyValue(ent, "color", "255 255 255");
       DispatchKeyValue(ent, "color2", "0 0 0");
       DispatchKeyValue(ent, "effect", "0");
       DispatchKeyValue(ent, "fadein", "1.5");
       DispatchKeyValue(ent, "fadeout", "0.5");
       DispatchKeyValue(ent, "fxtime", "0.25");
       DispatchKeyValue(ent, "holdtime", "5.0");
       DispatchKeyValue(ent, "message", ("%s", text));
       DispatchKeyValue(ent, "spawnflags", "0");
       DispatchKeyValue(ent, "x", "0.25");
       DispatchKeyValue(ent, "y", "0.3");
       DispatchSpawn(ent);
       SetVariantString("!activator");
       AcceptEntityInput(ent,"display",i);
       AcceptEntityInput(ent, "Kill");
приходится постоянно энтити новый создавать)

UPD: нашел на usermessage реализацию)
 
Сверху Снизу