Добро пожаловать на форум, Гость, это ваша панель
  • Страница 1 из 1
  • 1
Отображение расы в чате + префикс привилегий.
aelrond
Дата: Понедельник, 26.10.2015, 22:36 | Сообщение # 1
офлайн

  • Сообщения: 29
  • Награды: 0
  • Замечания:
 
Добрый день, скрипты писать начал недавно, вот столкнулся с проблемой: как сделать, что бы в чате указывалась раса, префикс, уровень?


Нашел тут несколько тем, там описан один способ с использованием chatcolor3.0
Я решил сделать своим способом, и выкладываю его сюда. Может кому пригодится!
Итак, что дает мой способ?
1. Выводит расу в чат
2. Добавляет префикс VIP ADMIN player VIP+ (на сколько у вас хватит фантазии)
3. Не нужно ничего качать дополнительно.

Начнём!
1.    B *.sma

Код
#include "war3ft/prefix.inl"

public plugin_init{
register_clcmd ("say", "hook_say");
   register_clcmd ("say_team", "hook_say_team");
   SzSayText = get_user_msgid ("SayText");
   SzMaxPlayers = get_maxplayers();
   register_message (SzSayText, "arubaid_duplicated");
}

2. В папке /war3ft создаем файлик prefix.inl
в него копируем следующий код


Код
new SzMaxPlayers
new SzSayText
new Messages[192]
new SzName[32]

public arubaid_duplicated (msgId, msgDest, receiver)
{
   return PLUGIN_HANDLED
}

public hook_say(idUser)
{
   read_args (Messages, 191)
   remove_quotes (Messages)
      
   if (Messages[0] == '/' || Messages[0] == '!' || equal (Messages, ""))
      return PLUGIN_CONTINUE
   
   new szRaceName[64];
   lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );
   new SzAlive = is_user_alive(idUser);
   get_user_name(idUser, SzName, 31);
   
   if(!is_valid_msg(Messages))
      return PLUGIN_CONTINUE;
   
   //Player
   (SzAlive ? format(Messages, 191, "^1[^3%s^1]^3%s: ^1%s", szRaceName, SzName,Messages) : format(Messages, 191, "^1DEAD^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))
      
   for(new i = 1; i <= SzMaxPlayers; i++){
      if(!is_user_connected(i))
         continue;
      if(SzAlive && is_user_alive(i) || !SzAlive && !is_user_alive(i)){
         message_begin(MSG_ONE, SzSayText, {0, 0, 0}, i);
         write_byte(idUser);
         write_string(Messages);
         message_end();} }
   return PLUGIN_CONTINUE;
}

public hook_say_team(idUser)
{
   read_args (Messages, 191)
   remove_quotes (Messages)
      
   if (Messages[0] == '/' || Messages[0] == '!' || equal (Messages, ""))
      return PLUGIN_CONTINUE
   
   new szRaceName[64];
   lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );
   
   new SzPlayerTeam = get_user_team(idUser);   
   new SzAlive = is_user_alive(idUser);
   get_user_name(idUser, SzName, 31);
   
   if(!is_valid_msg(Messages))
      return PLUGIN_CONTINUE;
   
   //Player
{
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1CT^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD CT^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1T^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD T^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   }
      
   for(new i = 1; i <= SzMaxPlayers; i++)
      {
      if(!is_user_connected(i))
         continue;
      if(get_user_team(i) != SzPlayerTeam)
         continue;
      if(SzAlive && is_user_alive(i) || !SzAlive && !is_user_alive(i))
         {
         message_begin(MSG_ONE, SzSayText, {0, 0, 0}, i);
         write_byte(idUser);
         write_string(Messages);
         message_end();
         }
      }
   return PLUGIN_CONTINUE;
}

bool:is_valid_msg(const Messages[])
   {
   if( Messages[0] == '@'   || !strlen(Messages))
      {
      return false;
      }
   return true;
   }

3. В принципе всё готово. можно компилировать! но если вы хотите добавить префиксы VIP/Admin/player/любой другой, то нужно дописать еще пару строк:
В constants.inl
Я делал под себя, вы можете оперировать "флагами" как душе угодно! Главное не запутаться.
Код
#define ADMIN_FLAG ADMIN_LEVEL_H // VIP
#define ADMIN_FLAG2 ADMIN_KICK     // VIP+
#define ADMIN_FLAG3 ADMIN_BAN      // админ
#define GL ADMIN_PASSWORD             // Главный админ


Далее, для каждого префикса добавляем строки в hook_say и hook_say_team

Код
//Player
   if(!(get_user_flags(idUser) & ADMIN_FLAG2) && !(get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   (SzAlive ? format(Messages, 191, "^1[^3Player^1]^1[^3%s^1]^3%s: ^1%s", szRaceName, SzName,Messages) : format(Messages, 191, "^1DEAD^1[^3Player^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))
   
   //Admin
   if((get_user_flags(idUser) & ADMIN_FLAG3) && !(get_user_flags(idUser) & GL))
   (SzAlive ? format(Messages, 191, "^1[^4Admin^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD^1[^4Admin^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))

   //VIP  
   if(!(get_user_flags(idUser) & ADMIN_FLAG2) && (get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   (SzAlive ? format(Messages, 191, "^1[^3VIP^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD^1[^3VIP^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))

   //VIP+  
   if((get_user_flags(idUser) & ADMIN_FLAG2) && (get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   (SzAlive ? format(Messages, 191, "^1[^3VIP+^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD^1[^3VIP+^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))
   
   //Главный
   if(get_user_flags(idUser) & GL)
   (SzAlive ? format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^1%s", szRaceName,SzName, Messages))


Код
//Player
   if(!(get_user_flags(idUser) & ADMIN_FLAG2) && !(get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   {
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1CT^1[^4Player^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD CT^1[^4Player^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1T^1[^4Player^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD T^1[^4Player^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   }
   //Admin
   if((get_user_flags(idUser) & ADMIN_FLAG3) && !(get_user_flags(idUser) & GL))
   {
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1CT^1[^4Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD CT^1[^4Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1T^1[^4Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD T^1[^4Admin^1]^1[^3%s^1]^3%s : ^3%s", szRaceName,SzName, Messages))
   }
   //VIP  
   if(!(get_user_flags(idUser) & ADMIN_FLAG2) && (get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   {
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1CT^1[^3VIP^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD CT^1[^3VIP^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1T^1[^3VIP^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD T^1[^3VIP^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   }
   //VIP+  
   if((get_user_flags(idUser) & ADMIN_FLAG2) && (get_user_flags(idUser) & ADMIN_FLAG) && !(get_user_flags(idUser) & GL) && !(get_user_flags(idUser) & ADMIN_FLAG3))
   {
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1CT^1[^3VIP+^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD CT^1[^3VIP+^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1T^1[^3VIP+^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1DEAD T^1[^3VIP+^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   }
   //Главный
   if(get_user_flags(idUser) & GL)
   {
   if( get_user_team( idUser ) == 2 )
   (SzAlive ? format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   if( get_user_team( idUser ) == 1 )
   (SzAlive ? format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages) : format(Messages, 191, "^1[^4Gl.Admin^1]^1[^3%s^1]^3%s: ^3%s", szRaceName,SzName, Messages))
   }


4. Если вы на этом не желаете останавливаться, и хотите отображать еще и уровень игрока:


то нужно сделать вот что:
берем конструкцию ^1[^3%d^1] и p_data[idUser][P_LEVEL] и вставляем её везде вот таким образом:



Готово!


Сообщение отредактировал aelrond - Понедельник, 26.10.2015, 22:38
 
drewsteka
Дата: Пятница, 30.10.2015, 13:26 | Сообщение # 2
офлайн

  • Сообщения: 8
  • Награды: 0
  • Замечания:
 
Обязательно проверю как время будет
 
q1w2e3r4t5y6
Дата: Понедельник, 27.02.2017, 20:11 | Сообщение # 3
офлайн

  • Сообщения: 14
  • Награды: 0
  • Замечания:
 
ошибку выводит [prefix.inl]

lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );

как исправить

//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// cssbWar3ftMod.sma
// war3ft/prefix.inl(21) : error 017: undefined symbol "p_data"
// war3ft/prefix.inl(21) : warning 215: expression has no effect
// war3ft/prefix.inl(21) : error 001: expected token: ";", but found "]"
// war3ft/prefix.inl(21) : error 029: invalid expression, assumed zero
// war3ft/prefix.inl(21) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
// Compilation Time: 15,53 sec
// ----------------------------------------

Press enter to exit ...
Прикрепления: prefix.inl (6.8 Kb) · constants.inl (41.5 Kb)


Сообщение отредактировал q1w2e3r4t5y6 - Четверг, 02.03.2017, 16:38
 
fkminango
Дата: Понедельник, 27.02.2017, 21:50 | Сообщение # 4
офлайн

  • Сообщения: 8
  • Награды: 0
  • Замечания:
 
q1w2e3r4t5y6, Сделай лучше как тут написано, все идеально расписано. Будут ошибки при компиляции, пиши, помогу. 

http://perfect-soft.su/forum/56-933-1


 
q1w2e3r4t5y6
Дата: Четверг, 02.03.2017, 16:11 | Сообщение # 5
офлайн

  • Сообщения: 14
  • Награды: 0
  • Замечания:
 
ошибку выводит [prefix.inl]

lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );

как исправить

//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// cssbWar3ftMod.sma
// war3ft/prefix.inl(21) : error 017: undefined symbol "p_data"
// war3ft/prefix.inl(21) : warning 215: expression has no effect
// war3ft/prefix.inl(21) : error 001: expected token: ";", but found "]"
// war3ft/prefix.inl(21) : error 029: invalid expression, assumed zero
// war3ft/prefix.inl(21) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// Compilation Time: 15,53 sec
// ----------------------------------------

Press enter to exit ...


Сообщение отредактировал q1w2e3r4t5y6 - Четверг, 02.03.2017, 16:38
 
fkminango
Дата: Четверг, 02.03.2017, 20:32 | Сообщение # 6
офлайн

  • Сообщения: 8
  • Награды: 0
  • Замечания:
 
q1w2e3r4t5y6, Сбрось исходник (Весь) Помогу настроить.

 
q1w2e3r4t5y6
Дата: Пятница, 03.03.2017, 09:30 | Сообщение # 7
офлайн

  • Сообщения: 14
  • Награды: 0
  • Замечания:
 
Цитата aelrond ()
куда этот код добавить нужно

 ^1[^3%d^1] и p_data[idUser][P_LEVEL]

Добавлено (03.03.2017, 09:28)
---------------------------------------------
ошибку выводит [prefix.inl]

lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );

как исправить

//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// cssbWar3ftMod.sma
// war3ft/prefix.inl(21) : error 017: undefined symbol "p_data"
// war3ft/prefix.inl(21) : warning 215: expression has no effect
// war3ft/prefix.inl(21) : error 001: expected token: ";", but found "]"
// war3ft/prefix.inl(21) : error 029: invalid expression, assumed zero
// war3ft/prefix.inl(21) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// Compilation Time: 15,53 sec
// ----------------------------------------

Press enter to exit ...

Добавлено (03.03.2017, 09:30)
---------------------------------------------

Цитата aelrond ()
ошибку выводит [prefix.inl]lang_GetRaceName( p_data[idUser][P_RACE], idUser, szRaceName, 63 );

как исправить

//AMXXPC compile.exe
// by the AMX Mod X Dev Team

//// cssbWar3ftMod.sma
// war3ft/prefix.inl(21) : error 017: undefined symbol "p_data"
// war3ft/prefix.inl(21) : warning 215: expression has no effect
// war3ft/prefix.inl(21) : error 001: expected token: ";", but found "]"
// war3ft/prefix.inl(21) : error 029: invalid expression, assumed zero
// war3ft/prefix.inl(21) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// Compilation Time: 15,53 sec
// ----------------------------------------

Press enter to exit ...
 
fkminango
Дата: Пятница, 03.03.2017, 21:57 | Сообщение # 8
офлайн

  • Сообщения: 8
  • Награды: 0
  • Замечания:
 
q1w2e3r4t5y6
Цитата fkminango ()
q1w2e3r4t5y6, Сбрось исходник (Весь) Помогу настроить.

или же 
Цитата fkminango ()
Сделай лучше как тут написано, все идеально расписано. Будут ошибки при компиляции, пиши, помогу. http://perfect-soft.su/forum/56-933-1

Пойми, тебе ни кто помогать не будет тут. Так как за 5 лет, Администраторы уже устали помогать таким как вам "Из-за тупых, мелких ошибок"
Можешь заплатить им, и мб они помогут, или же делай то что я тебе сказал.


 
  • Страница 1 из 1
  • 1
Поиск: