Русское сообщество по скриптингу

Выбор следующей карты (UFPS Nextmap Chooser)

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".

Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение ViP.Predator » 24 апр 2010, 14:59

Авторы: AMXX Dev Team
Версия: 1.9
Rebuild: UFPS.Team


Описание:
Стандарный плагин голосования за следующую карту (mapchooser) из комплекта AMX MOD X v1.8.1 пофиксенный UFPS.Team


Настройки:
Переменные:
amx_extendmap_max (default: 45) - Максимальная длительность карты в минутах
amx_extendmap_step (default: 15) - Время продления карты за 1 раз в минутах
amx_vote_time (default: 15) - Длительность голосования в секундах
amx_vote_delay (default: 3) - Отсрочка голосования в минутах от начала карты
amx_votemap_ratio (default: 0.6) - Процент голосов для начала голосования (по-умолчанию 60%)
amx_lastround (default: 1) - Производить смену карты по окончании раунда.


Список изменений:
Пофиксено:
- Повторение карт в голосованиях
- Несоответствие выбранной карты и карты, на которую меняется.
- Отсчет до голосования с звуковым оповещением.
- Изменение переменной mp_timelimit и mp_chattime.
- Смена карты после окончания раунда (интегрирован lastround).
- Смена карты досрочным голосованием (интегрирован rockthevote).
- Смена карты при досрочном голосовании без возможности продления карты.
- Вызов досрочного голосования через команды say, say_team.
- Смена карты без ожидания при отсутсвии игроков.
- Оповещение о последнем раунде.
- Вывод таблицы счета при смене карты.
- Мультиязычность.
- Корректный русский перевод в mapchooser.txt
- И так... по-мелочи.


----------------------------------------------------------------------------------------------------------------------------------


AMX MOD X v1.8.1 mapchooser plugin (standard, fixed and functionally extended by UFPS.Team)

Variables:
amx_extendmap_max (default: 45) - The maximum map time with the extension
amx_extendmap_step (default: 15) - Step of time for each extending
amx_vote_time (default: 15) - voting Time in seconds
amx_vote_delay (default: 3) - voting Delay period in minutes after the map beginning
amx_votemap_ratio (default: 0.6) - Percent of votes to start voting (on-default 60 %)
amx_lastround (default: 1) - the Final round before map change



Changelog:
- Duplication of maps in votings
- Mismatch of the selected map and a map on which changes.
- Countdown before voting with the sound notification.
- Variable change mp_timelimit and mp_chattime.
- Map change after the end of round (it is integrated lastround).
- Map change by pre-voting (it is integrated rockthevote).
- Map change by pre-voting without possibility of extending of a map.
- Start pre-voting by means of commands say, say_team.
- Change of map without waiting when players miss.
или "Change of a map without waiting in absence of players."
- The notification about a final round.
- Show scoretable at map change.
- Multilanguage.
- Correct Russian translation in language dictionary (mapchooser.txt)
- Other minor changes


Утверждено. //Leonidddd
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ViP.Predator 06 апр 2011, 18:50, всего редактировалось 13 раз(а).
Человеку свойственно ошибаться, и он пользуется этим свойством часто и с удовольствием!
Аватара пользователя
ViP.Predator
 
Сообщения: 115
Зарегистрирован: 14 окт 2009, 15:59
Откуда: Тверь
Благодарил (а): 1 раз.
Поблагодарили: 99 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение ViP.Predator » 18 июн 2013, 00:23

Давно есть... UFPS Map Manager называется
Человеку свойственно ошибаться, и он пользуется этим свойством часто и с удовольствием!
Аватара пользователя
ViP.Predator
 
Сообщения: 115
Зарегистрирован: 14 окт 2009, 15:59
Откуда: Тверь
Благодарил (а): 1 раз.
Поблагодарили: 99 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение panikajo » 30 авг 2013, 20:43

Что неверно?

[spoiler]
Код: Выделить всё


/*
   Nextmap Chooser
   Интегрированы:   Lastround & RockTheVote

   Использован код следующих плагинов, за что их авторам большая благодарность:
      1.   Nextmap Chooser Plugin
         by the AMX Mod X Development Team
         originally developed by OLO

      2.   RockTheVote   v1.8
         Made by DA

   Переменные:
      amx_extendmap_max  (default: 45)  - Максимальная длительность карты в минутах
      amx_extendmap_step (default: 15)  - Время продления карты за 1 раз в минутах
      amx_vote_time      (default: 15)  - Длительность голосования в секундах
      amx_vote_delay     (default: 3)   - Отсрочка голосования в минутах от начала карты
      amx_votemap_ratio  (default: 0.6) - Процент голосов для начала голосования (по-умолчанию 60%)
      amx_lastround      (default: 1)   - Производить смену карты по окончании раунда.

   Rebuilding by UFPS.Team
*/


#include <amxmodx>
#include <amxmisc>
#include <dhudmessage>

#define PLUGIN_NAME      "Nextmap Chooser"
#define PLUGIN_VERSION   "1.9"
#define PLUGIN_AUTHOR   "UFPS.Team"

#define SELECTMAPS      5
#define MAPS_MAX      128
#define AUTO_LANG      -76

#define charsmax(%1)   (sizeof(%1)-1)


new g_mapNums
new g_mapName      [MAPS_MAX][32]

new g_nextName      [SELECTMAPS]
new g_voteCount      [SELECTMAPS + 2]
new g_mapVoteNum
new g_teamScore      [2]
new g_lastMap      [32]
new g_rtv_count
new g_rtv_vote      [33]

new g_MENU         [512]
new g_MENU_keys =   ( 1 << SELECTMAPS + 1 )
new g_MENU_name      [64]
new g_MENU_title   [128]

new const speak[][] = { "one", "two", "three", "four", "five" }

new g_coloredMenus      = 0
new bool:g_rtv         = false
new bool:g_lastround   = false
new bool:g_changemap   = false
new bool:g_selected      = false
new Float:g_timelimit   = 0.0

new pcv_lastround
new pcv_extendmap_max
new pcv_extendmap_step
new pcv_vote_time
new pcv_vote_delay
new pcv_votemap_ratio
new pcv_amx_nextmap
new pcv_mp_chattime
new pcv_mp_timelimit
new pcv_mp_winlimit
new pcv_mp_maxrounds


public plugin_init( )
{
   register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )

   register_dictionary   ( "common.txt" )
   register_dictionary   ( "lastround.txt" )
   register_dictionary   ( "mapchooser.txt" )

   register_clcmd( "say rockthevote",         "cmd_say_rtv" )
   register_clcmd( "say /rockthevote",         "cmd_say_rtv" )
   register_clcmd( "say rtv",               "cmd_say_rtv" )
   register_clcmd( "say /rtv",               "cmd_say_rtv" )

   register_clcmd( "say_team rockthevote",      "cmd_say_rtv" )
   register_clcmd( "say_team /rockthevote",   "cmd_say_rtv" )
   register_clcmd( "say_team rtv",            "cmd_say_rtv" )
   register_clcmd( "say_team /rtv",         "cmd_say_rtv" )

   pcv_vote_time      = pcvar_register( "amx_vote_time",      "15"   )
   pcv_vote_delay      = pcvar_register( "amx_vote_delay",      "3"    )
   pcv_votemap_ratio   = pcvar_register( "amx_votemap_ratio",   "0.60" )
   pcv_extendmap_max    = pcvar_register( "amx_extendmap_max",   "45"   )
   pcv_extendmap_step    = pcvar_register( "amx_extendmap_step",   "15"   )

   pcv_mp_chattime      = get_cvar_pointer( "mp_chattime"  )
   pcv_mp_timelimit   = get_cvar_pointer( "mp_timelimit" )
   pcv_mp_winlimit      = get_cvar_pointer( "mp_winlimit"  )
   pcv_mp_maxrounds   = get_cvar_pointer( "mp_maxrounds" )
   pcv_amx_nextmap      = get_cvar_pointer( "amx_nextmap"  )

   if( !pcv_amx_nextmap )
   pcv_amx_nextmap   = register_cvar( "amx_nextmap",   "", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY )

   if( cstrike_running( ) )
   {
      pcv_lastround = register_cvar( "amx_lastround", "1" )
      register_event( "TeamScore", "team_score", "a" )
      register_logevent( "evRoundStart", 2, "0=World triggered", "1=Round_Start" )
   }

   register_event( "30", "mapChange", "a" )

   g_coloredMenus = colored_menus( )

   get_localinfo( "lastMap", g_lastMap, charsmax( g_lastMap ) )
   set_localinfo( "lastMap", "" )

   set_cvar_float( "sv_restart", 1.0 )
}

public plugin_cfg( )
{
   new mapcycle[64]
   get_configsdir( mapcycle, charsmax( mapcycle ) )
   format( mapcycle, charsmax( mapcycle ), "%s/maps.ini", mapcycle )

   if( !file_exists( mapcycle ) )
   get_cvar_string( "mapcyclefile", mapcycle, charsmax( mapcycle ) )

   if( !file_exists( mapcycle ) )
   copy( mapcycle, charsmax( mapcycle ), "mapcycle.txt" )

   if( loadSettings( mapcycle) )
   set_task( 15.0, "voteNextmap", 987456, "", 0, "b" )

   formatex( g_MENU_name, charsmax( g_MENU_name ), "%L", "en", "CHOOSE_NEXTM" )
   register_menucmd( register_menuid( g_MENU_name ), ( -1 ^ ( -1 << ( SELECTMAPS + 2 ) ) ), "countVote" )
}

public countVote( id, key )
{
   if( get_cvar_float( "amx_vote_answers" ) )
   {
      new name[32]
      get_user_name( id, name, charsmax( name ) )

      if( key == SELECTMAPS )
      client_print( 0, print_chat, "%L", LANG_PLAYER, "CHOSE_EXT", name )

      else if( key < SELECTMAPS )
      {
         new map[32]
         copy( map, charsmax( map ), g_mapName[g_nextName[key]] )
         client_print( 0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", name, map )
      }
   }

   g_voteCount[key]++

   return PLUGIN_HANDLED
}

public voteNextmap( )
{
   if( !g_mapNums ) return 0

   new winlimit = get_pcvar_num( pcv_mp_winlimit )
   new maxrounds = get_pcvar_num( pcv_mp_maxrounds )

   if( g_rtv )
   {
      winlimit = 0
      maxrounds = -1
   }

   if( winlimit )
   {
      new c = winlimit - 2

      if( ( c > g_teamScore[0] ) && ( c > g_teamScore[1] ) )
      {
         g_selected = false
         return 0
      }
   }

   else if( maxrounds )
   {
      if( ( maxrounds - 2 ) > ( g_teamScore[0] + g_teamScore[1] ) )
      {
         g_selected = false
         return 0
      }
   }
   
   else
   {
      new timeleft = get_timeleft( )

      if( timeleft < 1 || timeleft > 129 )
      {
         g_selected = false
         return 0
      }
   }

   if( g_selected ) return 0

   g_selected = true

   new pos, a

   g_MENU_keys = ( 1 << SELECTMAPS + 1 )

   new dmax = clamp( g_mapNums, 0, SELECTMAPS )

   for( g_mapVoteNum = 0; g_mapVoteNum < dmax; g_mapVoteNum++ )
   {
      a = random_num( 0, g_mapNums - 1 )

      while( isInMenu( a ) ) { if( ++a >= g_mapNums ) a = 0; }

      g_nextName[g_mapVoteNum] = a
      pos += format( g_MENU[pos], charsmax( g_MENU ), "%d. %s^n", g_mapVoteNum + 1, g_mapName[a] )
      g_MENU_keys |= ( 1 << g_mapVoteNum )
      g_voteCount[g_mapVoteNum] = 0
   }

   g_MENU[pos++] = '^n'
   g_voteCount[SELECTMAPS] = 0
   g_voteCount[SELECTMAPS + 1] = 0

   new mapname[32]
   get_mapname( mapname, charsmax( mapname ) )

   if( ( winlimit + maxrounds ) == 0 && ( get_pcvar_float( pcv_mp_timelimit ) < get_pcvar_float( pcv_extendmap_max ) ) )
   {
      pos += format( g_MENU[pos], charsmax( g_MENU ), "%d. %L^n", SELECTMAPS + 1, LANG_SERVER, "EXTED_MAP", mapname )
      g_MENU_keys |= ( 1 << SELECTMAPS )
   }

   format( g_MENU[pos], charsmax( g_MENU ), "%d. %L", SELECTMAPS + 2, LANG_SERVER, "NONE" )
   set_task( 1.0, "countDown", 5 )

   return 1
}

stock bool:isInMenu( id )
{
   for( new a; a < g_mapVoteNum; a++ )
   if( id == g_nextName[a] ) return true

   return false
}

public countDown( timer )
{
   if( timer )
   {
      client_cmd( 0 ,"spk ^"fvox/%s^"", speak[timer-1] )
      say_hudmessage( 0, 64, 64, 64, 0.025, -1.0, 0, 0.0, 1.03, 0.0, 0.0, 4, "%L %L", AUTO_LANG, "CHOOSE_NEXTM", AUTO_LANG, "VOTE_COUNTER", timer, g_MENU )
      set_task(1.0, "countDown", --timer)
   }

   else
   set_task( 0.01, "showMenu" )
}

public showMenu( )
{
   new Float:votetime = floatclamp( get_pcvar_float ( pcv_vote_time ), 10.0, 60.0 )

   new menu[512], players[32], player, num
   get_players( players, num, "ch" )

   for( new i; i < num; i++ )
   {
      player = players[i]

      formatex( g_MENU_title, charsmax( g_MENU_title ), g_coloredMenus ? "\y%L:\w^n^n" : "%L:^n^n", player, "CHOOSE_NEXTM" )
      formatex( menu, charsmax( menu ), "%s%s", g_MENU_title, g_MENU )
      show_menu( player, g_MENU_keys, menu, floatround( votetime ), g_MENU_name )
   }

   set_task( votetime + 0.5, "checkVotes" )

   client_print( 0, print_chat, "%L", LANG_PLAYER, "TIME_CHOOSE" )
   client_cmd( 0, "spk Gman/Gman_Choose%d", random_num( 1, 2 ) )
   log_amx( "Vote: Voting for the nextmap started" )
}

public checkVotes( )
{
   new b = 0

   for( new a; a < g_mapVoteNum; ++a )
   if( g_voteCount[b] < g_voteCount[a] ) b = a

   if( g_voteCount[SELECTMAPS] > g_voteCount[b] && g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS + 1] )
   {
      if( !g_timelimit )
      g_timelimit = get_pcvar_float( pcv_mp_timelimit )

      new Float:steptime = get_pcvar_float( pcv_extendmap_step )

      new mapname[32]
      get_mapname( mapname, charsmax( mapname ) )

      set_pcvar_float( pcv_mp_timelimit, get_pcvar_float( pcv_mp_timelimit ) + steptime )
      client_print( 0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_EXT", steptime )
      log_amx( "Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", mapname, steptime )

      return
   }

   new smap[32]
   if( g_voteCount[b] && g_voteCount[SELECTMAPS + 1] <= g_voteCount[b] )
   {
      copy( smap, charsmax( smap ), g_mapName[g_nextName[b]] )
      set_pcvar_string( pcv_amx_nextmap, smap )
   }

   get_pcvar_string( pcv_amx_nextmap, smap, charsmax( smap ) )
   client_print( 0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", smap )
   log_amx( "Vote: Voting for the nextmap finished. The nextmap will be %s", smap )

   new players[32], num
   get_players( players, num, "ch" )

   if( g_rtv )
   {
      if( pcv_lastround && get_pcvar_num( pcv_lastround ) )
      {
         if( !g_timelimit )
         g_timelimit = get_pcvar_float( pcv_mp_timelimit )

         set_pcvar_float( pcv_mp_timelimit, 0.0 )

         g_rtv = false
         g_changemap = true
         g_lastround = false

         set_dhudmessage( random_num(0, 255), random_num(0, 255), random_num(0, 255), -0.0, 0.15, 2, 6.0, 3.0, 0.1, 1.5 )
         show_dhudmessage( 0, "%L", AUTO_LANG, "FINAL_ROUND!" )
         
         return
      }
      
      else
      g_rtv = false
   }

   else if( num > 1 )
   {
      if( pcv_lastround )
      {
         set_task( 90.0 - floatclamp( get_pcvar_float ( pcv_vote_time ), 10.0, 60.0 ), "initiateLastRound", 23478, "", 0, "d" )
         return
      }
   }

   set_task( 1.0, "delayMapChange" )
}

public initiateLastRound( )
{
   if( !get_pcvar_num( pcv_lastround ) ) return PLUGIN_CONTINUE

   if( !g_timelimit )
   g_timelimit = get_pcvar_float( pcv_mp_timelimit )

   g_lastround = true
   set_pcvar_float( pcv_mp_timelimit, 0.0 )

   set_dhudmessage( random_num(0, 255), random_num(0, 255), random_num(0, 255), -0.0, 0.15, 2, 6.0, 3.0, 0.1, 1.5 )
   show_dhudmessage( 0, "%L", AUTO_LANG, "FINAL_COMING" )

   return PLUGIN_CONTINUE
}

public evRoundStart( )
{
   if( !pcv_lastround ) return PLUGIN_CONTINUE

   if( !get_pcvar_num( pcv_lastround ) ) return PLUGIN_CONTINUE

   if( g_lastround )
   {
      g_changemap = true
      g_lastround = false

      set_dhudmessage( random_num(0, 255), random_num(0, 255), random_num(0, 255), -0.0, 0.15, 2, 6.0, 3.0, 0.1, 1.5 )
      show_dhudmessage( 0, "%L", AUTO_LANG, "FINAL_ROUND" )
   }
   
   else if( g_changemap )
   {
      /*
      message_begin   ( MSG_ALL, SVC_INTERMISSION )
      message_end      ( )
*/

      set_pcvar_float( pcv_mp_timelimit, 0.01 )
   }

   return PLUGIN_CONTINUE
}

public mapChange ( )
{
   new Float:chattime = get_pcvar_float ( pcv_mp_chattime )

   if ( chattime < 3.0 )
   {
      chattime = 3.0
      set_pcvar_float ( pcv_mp_chattime, chattime )
   }

   set_task( chattime - 1.0, "delayMapChange" )

   return PLUGIN_CONTINUE
}

public delayMapChange( )
{
   new nextmap[32]
   get_pcvar_string( pcv_amx_nextmap, nextmap, charsmax( nextmap ) )
   server_cmd( "changelevel %s", nextmap )
}

loadSettings( filename[] )
{
   if( !file_exists( filename ) )
   {
      log_amx( "Mapcycle file ^"%s^" not found", filename )
      return 0
   }

   g_mapNums = 0

   new currentMap[32], map[32], string[256]
   get_mapname( currentMap, charsmax( currentMap ) )

   new file = fopen( filename, "r" )
   
   while( !feof( file ) )
   {
      fgets( file, string, charsmax( string ) )

      if
      (
      ( string[0] != ';' ) &&
      ( string[0] != '/' ) &&
      parse( string, map, charsmax( map ) ) &&
      isValidMap( map, charsmax( map ), currentMap ) &&
      isMapCycle( map ) == -1
      )
      {
         copy( g_mapName[g_mapNums++], charsmax( g_mapName[] ), map )
      }
      
   }

   fclose( file )

   return g_mapNums
}

stock bool:isValidMap( map[], const len, const currentMap[] )
{
   remove_quotes ( map )
   strtolower( map )

   while( replace( map, len, "/", "" ) ) {}
   while( replace( map, len, "\", "" ) ) {}
   while( replace( map, len, ":", "" ) ) {}
   while( replace( map, len, "*", "" ) ) {}
   while( replace( map, len, "?", "" ) ) {}
   while( replace( map, len, ">", "" ) ) {}
   while( replace( map, len, "<", "" ) ) {}
   while( replace( map, len, "|", "" ) ) {}
   while( replace( map, len, ".", "" ) ) {}

   if( is_map_valid( map ) && !equali( map, g_lastMap ) && !equali( map, currentMap ) ) return true

   return false
}

stock isMapCycle( map[] )
{
   for( new i; i < g_mapNums; i++ )
      if( equali( g_mapName[i], map ) ) return i

   return -1
}

public team_score( )
{
   new team[2]

   read_data( 1, team, 1 )
   g_teamScore[( team[0]=='C' ) ? 0 : 1] = read_data( 2 )
}

public pcvar_register( const pcvar_name[], const pcvar_value[] )
{
   new pcvar_index = get_cvar_pointer( pcvar_name )
   
   if( !pcvar_index )
      pcvar_index = register_cvar( pcvar_name, pcvar_value )

   return pcvar_index
}

stock say_hudmessage( id, red=255, green=255, blue=255, Float:x=0.05, Float:y=0.45, effects=0, Float:fxtime=6.0, Float:holdtime=5.0, Float:fadeintime=0.5, Float:fadeouttime=0.15, channel=4, msg[], any:... )
{
   new arg_num = numargs()
   new arg_langid[16], arg_langcount

   for( new i = 12; i < arg_num; i++ )
      if( getarg( i ) == AUTO_LANG )
         arg_langid[arg_langcount++] = i

   new players[32], player, num

   if( id )
   {
      players[0] = id
      num = 1
   }

   else
      get_players( players, num )

   set_hudmessage( red, green, blue, x, y, effects, fxtime, holdtime, fadeintime, fadeouttime, channel )

   new message[192]

   for( new i; i < num; i++ )
   {
      player = players[i]

      if( !is_user_connected( player ) ) continue

      for( new j; j < arg_langcount; j++ )
         setarg( arg_langid[j], 0, player )

      vformat( message, charsmax( message ), msg, 14 )
      show_hudmessage( player, message )
   }
}

public cmd_say_rtv( id )
{
   if( get_gametime( ) < ( get_pcvar_float( pcv_vote_delay ) * 60.0 ) )
   {
      new timeleft = floatround( get_pcvar_float( pcv_vote_delay ) * 60.0 - get_gametime( ) )

      client_print( id, print_chat, "%L", id, "RTV_NOTALLOWED", timeleft / 60, timeleft % 60 )
   }

   else
   {
      if( g_rtv_vote[id - 1] == id ) client_print( id, print_chat, "%L", id, "RTV_ALREADY" )

      else
      {
         g_rtv_vote[id - 1] = id
         g_rtv_count++
   
         static players[32], num
         get_players( players, num, "ch" )

         new Float:voteratio = floatclamp( get_pcvar_float ( pcv_votemap_ratio ), 0.0, 1.0 )

         num = floatround( voteratio * num )

         if( num <= g_rtv_count )
         {
            g_rtv = true
            voteNextmap( )

            return PLUGIN_CONTINUE
         }

         static name[32]
         get_user_name( id, name, charsmax( name ) )
   
         client_print( 0, print_chat, "%L", LANG_PLAYER, "RTV_ADDVOTE", name, num - g_rtv_count, floatround( voteratio * 100.0 ) )
      }
   }

   return PLUGIN_CONTINUE
}

public client_disconnect( id )
{
   if( g_rtv_vote[id - 1] == id )
   {
      g_rtv_vote[id - 1] = 0
      g_rtv_count--
   }
}

public plugin_end( )
{
   if( g_timelimit )
      set_pcvar_float( pcv_mp_timelimit, g_timelimit )

   new current_map[32]
   get_mapname( current_map, charsmax( current_map ) )

   set_localinfo( "lastMap", current_map )

   return PLUGIN_CONTINUE
}

[/spoiler]
Аватара пользователя
panikajo
 
Сообщения: 118
Зарегистрирован: 22 янв 2012, 19:15
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение ViP.Predator » 31 авг 2013, 03:00

panikajo писал(а):Что неверно?


В первом посте все верно.
Человеку свойственно ошибаться, и он пользуется этим свойством часто и с удовольствием!
Аватара пользователя
ViP.Predator
 
Сообщения: 115
Зарегистрирован: 14 окт 2009, 15:59
Откуда: Тверь
Благодарил (а): 1 раз.
Поблагодарили: 99 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение panikajo » 31 авг 2013, 20:32

Ок переведу я хочу не hud а dhud сделать некоторые сообщения там последний раунд след карта какая вон впихнул что не верно там подскажите?
Аватара пользователя
panikajo
 
Сообщения: 118
Зарегистрирован: 22 янв 2012, 19:15
Благодарил (а): 7 раз.
Поблагодарили: 1 раз.

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение kenZZo » 29 сен 2013, 21:13

В этом плагине есть баг - он почемуто постоянно увеличивает переменную mp_chattime... Не знаю для чего это сделали, но я постарался убрать эту функцию - вроде получилось. + добавил колорчат. кому нужно, забирайте

[spoiler][pawn]
  1.  

  2. /*

  3.         Nextmap Chooser

  4.         Интегрированы:     Lastround & RockTheVote

  5.  

  6.         Использован код следующих плагинов, за что их авторам большая благодарность:

  7.                 1.      Nextmap Chooser Plugin

  8.                         by the AMX Mod X Development Team

  9.                         originally developed by OLO

  10.  

  11.                 2.      RockTheVote     v1.8

  12.                         Made by DA

  13.  

  14.         Переменные:

  15.                 amx_extendmap_max  (default: 45)  - Максимальная длительность карты в минутах

  16.                 amx_extendmap_step (default: 15)  - Время продления карты за 1 раз в минутах

  17.                 amx_vote_time      (default: 15)  - Длительность голосования в секундах

  18.                 amx_vote_delay     (default: 3)   - Отсрочка голосования в минутах от начала карты

  19.                 amx_votemap_ratio  (default: 0.6) - Процент голосов для начала голосования (по-умолчанию 60%)

  20.                 amx_lastround      (default: 1)   - Производить смену карты по окончании раунда.

  21.  

  22.         Rebuilding by UFPS.Team

  23. */

  24.  

  25.  

  26. #include <amxmodx>

  27. #include <amxmisc>

  28.  

  29. #define PLUGIN_NAME             "Nextmap Chooser"

  30. #define PLUGIN_VERSION  "1.9"

  31. #define PLUGIN_AUTHOR   "UFPS.Team"

  32.  

  33. #define SELECTMAPS              5

  34. #define MAPS_MAX                128

  35. #define AUTO_LANG               -76

  36.  

  37. #define charsmax(%1)    (sizeof(%1)-1)

  38.  

  39.  

  40. new g_mapNums

  41. new g_mapName           [MAPS_MAX][32]

  42.  

  43. new g_nextName          [SELECTMAPS]

  44. new g_voteCount         [SELECTMAPS + 2]

  45. new g_mapVoteNum

  46. new g_teamScore         [2]

  47. new g_lastMap           [32]

  48. new g_rtv_count

  49. new g_rtv_vote          [33]

  50.  

  51. new g_MENU                      [512]

  52. new g_MENU_keys =       ( 1 << SELECTMAPS + 1 )

  53. new g_MENU_name         [64]

  54. new g_MENU_title        [128]

  55.  

  56. new const speak[][] = { "one", "two", "three", "four", "five" }

  57.  

  58. new g_coloredMenus              = 0

  59. new bool:g_rtv                  = false

  60. new bool:g_lastround    = false

  61. new bool:g_changemap    = false

  62. new bool:g_selected             = false

  63. new Float:g_timelimit   = 0.0

  64.  

  65. new pcv_lastround

  66. new pcv_extendmap_max

  67. new pcv_extendmap_step

  68. new pcv_vote_time

  69. new pcv_vote_delay

  70. new pcv_votemap_ratio

  71. new pcv_amx_nextmap

  72. new pcv_mp_timelimit

  73. new pcv_mp_winlimit

  74. new pcv_mp_maxrounds

  75.  

  76.  

  77. public plugin_init( )

  78. {

  79.         register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )

  80.  

  81.         register_dictionary     ( "common.txt" )

  82.         register_dictionary     ( "mapchooser19.txt" )

  83.  

  84.         register_clcmd( "say rockthevote",                      "cmd_say_rtv" )

  85.         register_clcmd( "say /rockthevote",                     "cmd_say_rtv" )

  86.         register_clcmd( "say rtv",                                      "cmd_say_rtv" )

  87.         register_clcmd( "say /rtv",                                     "cmd_say_rtv" )

  88.  

  89.         register_clcmd( "say_team rockthevote",         "cmd_say_rtv" )

  90.         register_clcmd( "say_team /rockthevote",        "cmd_say_rtv" )

  91.         register_clcmd( "say_team rtv",                         "cmd_say_rtv" )

  92.         register_clcmd( "say_team /rtv",                        "cmd_say_rtv" )

  93.  

  94.         pcv_vote_time           = pcvar_register( "amx_vote_time",              "15"   )

  95.         pcv_vote_delay          = pcvar_register( "amx_vote_delay",             "3"    )

  96.         pcv_votemap_ratio       = pcvar_register( "amx_votemap_ratio""0.60" )

  97.         pcv_extendmap_max       = pcvar_register( "amx_extendmap_max""45"   )

  98.         pcv_extendmap_step      = pcvar_register( "amx_extendmap_step", "15"   )

  99.  

  100.         pcv_mp_timelimit        = get_cvar_pointer( "mp_timelimit" )

  101.         pcv_mp_winlimit         = get_cvar_pointer( "mp_winlimit"  )

  102.         pcv_mp_maxrounds        = get_cvar_pointer( "mp_maxrounds" )

  103.         pcv_amx_nextmap         = get_cvar_pointer( "amx_nextmap"  )

  104.  

  105.         if( !pcv_amx_nextmap )

  106.                 pcv_amx_nextmap = register_cvar( "amx_nextmap", "", FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_SPONLY )

  107.  

  108.         if( cstrike_running( ) )

  109.         {

  110.                 pcv_lastround = register_cvar( "amx_lastround", "1" )

  111.                 register_event( "TeamScore", "team_score", "a" )

  112.                 register_logevent( "evRoundStart", 2, "0=World triggered", "1=Round_Start" )

  113.         }

  114.  

  115.         g_coloredMenus = colored_menus( )

  116.  

  117.         get_localinfo( "lastMap", g_lastMap, charsmax( g_lastMap ) )

  118.         set_localinfo( "lastMap", "" )

  119.  

  120.         set_cvar_float( "sv_restart", 1.0 )

  121. }

  122.  

  123. public plugin_cfg( )

  124. {

  125.         new mapcycle[64]

  126.         get_configsdir( mapcycle, charsmax( mapcycle ) )

  127.         format( mapcycle, charsmax( mapcycle ), "%s/maps.ini", mapcycle )

  128.  

  129.         if( !file_exists( mapcycle ) )

  130.                 get_cvar_string( "mapcyclefile", mapcycle, charsmax( mapcycle ) )

  131.  

  132.         if( !file_exists( mapcycle ) )

  133.                 copy( mapcycle, charsmax( mapcycle ), "mapcycle.txt" )

  134.  

  135.         if( loadSettings( mapcycle) )

  136.                 set_task( 15.0, "voteNextmap", 987456, "", 0, "b" )

  137.  

  138.         formatex( g_MENU_name, charsmax( g_MENU_name ), "%L", "en", "CHOOSE_NEXTM" )

  139.         register_menucmd( register_menuid( g_MENU_name ), ( -1 ^ ( -1 << ( SELECTMAPS + 2 ) ) ), "countVote" )

  140. }

  141.  

  142. public countVote( id, key )

  143. {

  144.         if( get_cvar_float( "amx_vote_answers" ) )

  145.         {

  146.                 new name[32]

  147.                 get_user_name( id, name, charsmax( name ) )

  148.  

  149.                 if( key == SELECTMAPS )

  150.                         ColorPrint( 0, "%L", LANG_PLAYER, "CHOSE_EXT", name )

  151.  

  152.                 else if( key < SELECTMAPS )

  153.                 {

  154.                         new map[32]

  155.                         copy( map, charsmax( map ), g_mapName[g_nextName[key]] )

  156.                         ColorPrint( 0, "%L", LANG_PLAYER, "X_CHOSE_X", name, map )

  157.                 }

  158.         }

  159.  

  160.         g_voteCount[key]++

  161.  

  162.         return PLUGIN_HANDLED

  163. }

  164.  

  165. public voteNextmap( )

  166. {

  167.         if( !g_mapNums ) return 0

  168.  

  169.         new winlimit = get_pcvar_num( pcv_mp_winlimit )

  170.         new maxrounds = get_pcvar_num( pcv_mp_maxrounds )

  171.  

  172.         if( g_rtv )

  173.         {

  174.                 winlimit = 0

  175.                 maxrounds = -1

  176.         }

  177.  

  178.         if( winlimit )

  179.         {

  180.                 new c = winlimit - 2

  181.  

  182.                 if( ( c > g_teamScore[0] ) && ( c > g_teamScore[1] ) )

  183.                 {

  184.                         g_selected = false

  185.                         return 0

  186.                 }

  187.         }

  188.  

  189.         else if( maxrounds )

  190.         {

  191.                 if( ( maxrounds - 2 ) > ( g_teamScore[0] + g_teamScore[1] ) )

  192.                 {

  193.                         g_selected = false

  194.                         return 0

  195.                 }

  196.         }

  197.        

  198.         else

  199.         {

  200.                 new timeleft = get_timeleft( )

  201.  

  202.                 if( timeleft < 1 || timeleft > 129 )

  203.                 {

  204.                         g_selected = false

  205.                         return 0

  206.                 }

  207.         }

  208.  

  209.         if( g_selected ) return 0

  210.  

  211.         g_selected = true

  212.  

  213.         new pos, a

  214.  

  215.         g_MENU_keys = ( 1 << SELECTMAPS + 1 )

  216.  

  217.         new dmax = clamp( g_mapNums, 0, SELECTMAPS )

  218.  

  219.         for( g_mapVoteNum = 0; g_mapVoteNum < dmax; g_mapVoteNum++ )

  220.         {

  221.                 a = random_num( 0, g_mapNums - 1 )

  222.  

  223.                 while( isInMenu( a ) ) { if( ++a >= g_mapNums ) a = 0; }

  224.  

  225.                 g_nextName[g_mapVoteNum] = a

  226.                 pos += format( g_MENU[pos], charsmax( g_MENU ), "%d. %s^n", g_mapVoteNum + 1, g_mapName[a] )

  227.                 g_MENU_keys |= ( 1 << g_mapVoteNum )

  228.                 g_voteCount[g_mapVoteNum] = 0

  229.         }

  230.  

  231.         g_MENU[pos++] = '^n'

  232.         g_voteCount[SELECTMAPS] = 0

  233.         g_voteCount[SELECTMAPS + 1] = 0

  234.  

  235.         new mapname[32]

  236.         get_mapname( mapname, charsmax( mapname ) )

  237.  

  238.         if( ( winlimit + maxrounds ) == 0 && ( get_pcvar_float( pcv_mp_timelimit ) < get_pcvar_float( pcv_extendmap_max ) ) )

  239.         {

  240.                 pos += format( g_MENU[pos], charsmax( g_MENU ), "%d. %L^n", SELECTMAPS + 1, LANG_SERVER, "EXTED_MAP", mapname )

  241.                 g_MENU_keys |= ( 1 << SELECTMAPS )

  242.         }

  243.  

  244.         format( g_MENU[pos], charsmax( g_MENU ), "%d. %L", SELECTMAPS + 2, LANG_SERVER, "NONE" )

  245.         set_task( 1.0, "countDown", 5 )

  246.  

  247.         return 1

  248. }

  249.  

  250. stock bool:isInMenu( id )

  251. {

  252.         for( new a; a < g_mapVoteNum; a++ )

  253.                 if( id == g_nextName[a] ) return true

  254.  

  255.         return false

  256. }

  257.  

  258. public countDown( timer )

  259. {

  260.         if( timer )

  261.         {

  262.                 client_cmd( 0 ,"spk ^"fvox/%s^"", speak[timer-1] )

  263.                 say_hudmessage( 0, 64, 64, 64, 0.025, -1.0, 0, 0.0, 1.03, 0.0, 0.0, 4, "%L %L", AUTO_LANG, "CHOOSE_NEXTM", AUTO_LANG, "VOTE_COUNTER", timer, g_MENU )

  264.                 set_task(1.0, "countDown", --timer)

  265.         }

  266.  

  267.         else

  268.                 set_task( 0.01, "showMenu" )

  269. }

  270.  

  271. public showMenu( )

  272. {

  273.         new Float:votetime = floatclamp( get_pcvar_float ( pcv_vote_time ), 10.0, 60.0 )

  274.  

  275.         new menu[512], players[32], player, num

  276.         get_players( players, num, "ch" )

  277.  

  278.         for( new i; i < num; i++ )

  279.         {

  280.                 player = players[i]

  281.  

  282.                 formatex( g_MENU_title, charsmax( g_MENU_title ), g_coloredMenus ? "\y%L:\w^n^n" : "%L:^n^n", player, "CHOOSE_NEXTM" )

  283.                 formatex( menu, charsmax( menu ), "%s%s", g_MENU_title, g_MENU )

  284.                 show_menu( player, g_MENU_keys, menu, floatround( votetime ), g_MENU_name )

  285.         }

  286.  

  287.         set_task( votetime + 0.5, "checkVotes" )

  288.  

  289.         ColorPrint( 0, "%L", LANG_PLAYER, "TIME_CHOOSE" )

  290.         client_cmd( 0, "spk Gman/Gman_Choose%d", random_num( 1, 2 ) )

  291.         log_amx( "Vote: Voting for the nextmap started" )

  292. }

  293.  

  294. public checkVotes( )

  295. {

  296.         new b = 0

  297.  

  298.         for( new a; a < g_mapVoteNum; ++a )

  299.                 if( g_voteCount[b] < g_voteCount[a] ) b = a

  300.  

  301.         if( g_voteCount[SELECTMAPS] > g_voteCount[b] && g_voteCount[SELECTMAPS] > g_voteCount[SELECTMAPS + 1] )

  302.         {

  303.                 if( !g_timelimit )

  304.                         g_timelimit = get_pcvar_float( pcv_mp_timelimit )

  305.  

  306.                 new Float:steptime = get_pcvar_float( pcv_extendmap_step )

  307.  

  308.                 new mapname[32]

  309.                 get_mapname( mapname, charsmax( mapname ) )

  310.  

  311.                 set_pcvar_float( pcv_mp_timelimit, get_pcvar_float( pcv_mp_timelimit ) + steptime )

  312.                 ColorPrint( 0, "%L", LANG_PLAYER, "CHO_FIN_EXT", steptime )

  313.                 log_amx( "Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", mapname, steptime )

  314.  

  315.                 return

  316.         }

  317.  

  318.         new smap[32]

  319.         if( g_voteCount[b] && g_voteCount[SELECTMAPS + 1] <= g_voteCount[b] )

  320.         {

  321.                 copy( smap, charsmax( smap ), g_mapName[g_nextName[b]] )

  322.                 set_pcvar_string( pcv_amx_nextmap, smap )

  323.         }

  324.  

  325.         get_pcvar_string( pcv_amx_nextmap, smap, charsmax( smap ) )

  326.         ColorPrint( 0, "%L", LANG_PLAYER, "CHO_FIN_NEXT", smap )

  327.         log_amx( "Vote: Voting for the nextmap finished. The nextmap will be %s", smap )

  328.  

  329.         new players[32], num

  330.         get_players( players, num, "ch" )

  331.  

  332.         if( g_rtv )

  333.         {

  334.                 if( pcv_lastround && get_pcvar_num( pcv_lastround ) )

  335.                 {

  336.                         if( !g_timelimit )

  337.                                 g_timelimit = get_pcvar_float( pcv_mp_timelimit )

  338.  

  339.                         set_pcvar_float( pcv_mp_timelimit, 0.0 )

  340.  

  341.                         g_rtv = false

  342.                         g_changemap = true

  343.                         g_lastround = false

  344.  

  345.                         say_hudmessage( 0, 210, 0, 0, 0.02, 0.21, 1, 20.0, 10.0, 0.5, 0.15, 4, "%L", AUTO_LANG, "FINAL_ROUND" )

  346.        

  347.                         return

  348.                 }

  349.        

  350.                 else

  351.                         g_rtv = false

  352.         }

  353.  

  354.         else if( num > 1 )

  355.         {

  356.                 if( pcv_lastround )

  357.                 {

  358.                         set_task( 90.0 - floatclamp( get_pcvar_float ( pcv_vote_time ), 10.0, 60.0 ), "initiateLastRound", 23478, "", 0, "d" )

  359.                         return

  360.                 }

  361.         }

  362.  

  363.         set_task( 1.0, "delayMapChange" )

  364. }

  365.  

  366. public initiateLastRound( )

  367. {

  368.         if( !get_pcvar_num( pcv_lastround ) ) return PLUGIN_CONTINUE

  369.  

  370.         if( !g_timelimit )

  371.                 g_timelimit = get_pcvar_float( pcv_mp_timelimit )

  372.  

  373.         g_lastround = true

  374.         set_pcvar_float( pcv_mp_timelimit, 0.0 )

  375.  

  376.         say_hudmessage( 0, 100, 200, 0, 0.02, 0.21, 1, 20.0, 10.0, 0.5, 0.15, 4, "%L", AUTO_LANG, "FINAL_COMING" )

  377.  

  378.         return PLUGIN_CONTINUE

  379. }

  380.  

  381. public evRoundStart( )

  382. {

  383.         if( !pcv_lastround ) return PLUGIN_CONTINUE

  384.  

  385.         if( !get_pcvar_num( pcv_lastround ) ) return PLUGIN_CONTINUE

  386.  

  387.         if( g_lastround )

  388.         {

  389.                 g_changemap = true

  390.                 g_lastround = false

  391.  

  392.                 say_hudmessage( 0, 210, 0, 0, 0.02, 0.21, 1, 20.0, 10.0, 0.5, 0.15, 4, "%L", AUTO_LANG, "FINAL_ROUND" )

  393.         }

  394.        

  395.         else if( g_changemap )

  396.         {

  397. /*

  398.                 message_begin   ( MSG_ALL, SVC_INTERMISSION )

  399.                 message_end             ( )

  400. */

  401.  

  402.                 set_pcvar_float( pcv_mp_timelimit, 0.01 )

  403.         }

  404.  

  405.         return PLUGIN_CONTINUE

  406. }

  407.  

  408. public delayMapChange( )

  409. {

  410.         new nextmap[32]

  411.         get_pcvar_string( pcv_amx_nextmap, nextmap, charsmax( nextmap ) )

  412.         server_cmd( "changelevel %s", nextmap )

  413. }

  414.  

  415. loadSettings( filename[] )

  416. {

  417.         if( !file_exists( filename ) )

  418.         {

  419.                 log_amx( "Mapcycle file ^"%s^" not found", filename )

  420.                 return 0

  421.         }

  422.  

  423.         g_mapNums = 0

  424.  

  425.         new currentMap[32], map[32], string[256]

  426.         get_mapname( currentMap, charsmax( currentMap ) )

  427.  

  428.         new file = fopen( filename, "r" )

  429.        

  430.         while( !feof( file ) )

  431.         {

  432.                 fgets( file, string, charsmax( string ) )

  433.  

  434.                 if

  435.                 (

  436.                         ( string[0] != ';' ) &&

  437.                         ( string[0] != '/' ) &&

  438.                         parse( string, map, charsmax( map ) ) &&

  439.                         isValidMap( map, charsmax( map ), currentMap ) &&

  440.                         isMapCycle( map ) == -1

  441.                 )

  442.                 {

  443.                         copy( g_mapName[g_mapNums++], charsmax( g_mapName[] ), map )

  444.                 }

  445.        

  446.         }

  447.  

  448.         fclose( file )

  449.  

  450.         return g_mapNums

  451. }

  452.  

  453. stock bool:isValidMap( map[], const len, const currentMap[] )

  454. {

  455.         remove_quotes ( map )

  456.         strtolower( map )

  457.  

  458.         while( replace( map, len, "/", "" ) ) {}

  459.         while( replace( map, len, "\", "" ) ) {}

  460.         while( replace( map, len, ":", "" ) ) {}

  461.         while( replace( map, len, "*", "" ) ) {}

  462.         while( replace( map, len, "?", "" ) ) {}

  463.         while( replace( map, len, ">", "" ) ) {}

  464.         while( replace( map, len, "<", "" ) ) {}

  465.         while( replace( map, len, "|", "" ) ) {}

  466.         while( replace( map, len, ".", "" ) ) {}

  467.  

  468.         if( is_map_valid( map ) && !equali( map, g_lastMap ) && !equali( map, currentMap ) ) return true

  469.  

  470.         return false

  471. }

  472.  

  473. stock isMapCycle( map[] )

  474. {

  475.         for( new i; i < g_mapNums; i++ )

  476.                 if( equali( g_mapName[i], map ) ) return i

  477.  

  478.         return -1

  479. }

  480.  

  481. public team_score( )

  482. {

  483.         new team[2]

  484.  

  485.         read_data( 1, team, 1 )

  486.         g_teamScore[( team[0]=='C' ) ? 0 : 1] = read_data( 2 )

  487. }

  488.  

  489. public pcvar_register( const pcvar_name[], const pcvar_value[] )

  490. {

  491.         new pcvar_index = get_cvar_pointer( pcvar_name )

  492.        

  493.         if( !pcvar_index )

  494.                 pcvar_index = register_cvar( pcvar_name, pcvar_value )

  495.  

  496.         return pcvar_index

  497. }

  498.  

  499. stock say_hudmessage( id, red=255, green=255, blue=255, Float:x=0.05, Float:y=0.45, effects=0, Float:fxtime=6.0, Float:holdtime=5.0, Float:fadeintime=0.5, Float:fadeouttime=0.15, channel=4, msg[], any:... )

  500. {

  501.         new arg_num = numargs()

  502.         new arg_langid[16], arg_langcount

  503.  

  504.         for( new i = 12; i < arg_num; i++ )

  505.                 if( getarg( i ) == AUTO_LANG )

  506.                         arg_langid[arg_langcount++] = i

  507.  

  508.         new players[32], player, num

  509.  

  510.         if( id )

  511.         {

  512.                 players[0] = id

  513.                 num = 1

  514.         }

  515.  

  516.         else

  517.                 get_players( players, num )

  518.  

  519.         set_hudmessage( red, green, blue, x, y, effects, fxtime, holdtime, fadeintime, fadeouttime, channel )

  520.  

  521.         new message[192]

  522.  

  523.         for( new i; i < num; i++ )

  524.         {

  525.                 player = players[i]

  526.  

  527.                 if( !is_user_connected( player ) ) continue

  528.  

  529.                 for( new j; j < arg_langcount; j++ )

  530.                         setarg( arg_langid[j], 0, player )

  531.  

  532.                 vformat( message, charsmax( message ), msg, 14 )

  533.                 show_hudmessage( player, message )

  534.         }

  535. }

  536.  

  537. public cmd_say_rtv( id )

  538. {

  539.         if( get_gametime( ) < ( get_pcvar_float( pcv_vote_delay ) * 60.0 ) )

  540.         {

  541.                 new timeleft = floatround( get_pcvar_float( pcv_vote_delay ) * 60.0 - get_gametime( ) )

  542.  

  543.                 ColorPrint( id, "%L", id, "RTV_NOTALLOWED", timeleft / 60, timeleft % 60 )

  544.         }

  545.  

  546.         else

  547.         {

  548.                 if( g_rtv_vote[id - 1] == id ) ColorPrint( id, "%L", id, "RTV_ALREADY" )

  549.  

  550.                 else

  551.                 {

  552.                         g_rtv_vote[id - 1] = id

  553.                         g_rtv_count++

  554.        

  555.                         static players[32], num

  556.                         get_players( players, num, "ch" )

  557.  

  558.                         new Float:voteratio = floatclamp( get_pcvar_float ( pcv_votemap_ratio ), 0.0, 1.0 )

  559.  

  560.                         num = floatround( voteratio * num )

  561.  

  562.                         if( num <= g_rtv_count )

  563.                         {

  564.                                 g_rtv = true

  565.                                 voteNextmap( )

  566.  

  567.                                 return PLUGIN_CONTINUE

  568.                         }

  569.  

  570.                         static name[32]

  571.                         get_user_name( id, name, charsmax( name ) )

  572.        

  573.                         ColorPrint( 0, "%L", LANG_PLAYER, "RTV_ADDVOTE", name, num - g_rtv_count, floatround( voteratio * 100.0 ) )

  574.                 }

  575.         }

  576.  

  577.         return PLUGIN_CONTINUE

  578. }

  579.  

  580. public client_disconnect( id )

  581. {

  582.         if( g_rtv_vote[id - 1] == id )

  583.         {

  584.                 g_rtv_vote[id - 1] = 0

  585.                 g_rtv_count--

  586.         }

  587. }

  588.  

  589. public plugin_end( )

  590. {

  591.         if( g_timelimit )

  592.                 set_pcvar_float( pcv_mp_timelimit, g_timelimit )

  593.  

  594.         new current_map[32]

  595.         get_mapname( current_map, charsmax( current_map ) )

  596.  

  597.         set_localinfo( "lastMap", current_map )

  598.  

  599.         return PLUGIN_CONTINUE

  600. }

  601.  

  602.  

  603. stock ColorPrint(const id, const input[], any:...)

  604. {

  605.          new nCount = 1, nNum[32]

  606.          

  607.          static nMsgs[191]

  608.          

  609.          vformat(nMsgs, 190, input, 3)

  610.          

  611.          replace_all(nMsgs, 190, "!g", "^4")

  612.          replace_all(nMsgs, 190, "!n", "^1")

  613.          replace_all(nMsgs, 190, "!t", "^3")

  614.  

  615.          

  616.          if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")

  617.          {

  618.                 for(new i = 0; i < nCount; i++)

  619.                 {

  620.                         if(is_user_connected(nNum[i]))

  621.                         {

  622.                                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])

  623.                                

  624.                                 write_byte(nNum[i])

  625.                                

  626.                                 write_string(nMsgs)

  627.                                

  628.                                 message_end()

  629.                         }

  630.                 }

  631.         }

  632. }

  633.  
[/pawn][/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
kenZZo
 
Сообщения: 23
Зарегистрирован: 05 май 2012, 14:09
Благодарил (а): 9 раз.
Поблагодарили: 3 раз.

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение BeshenuY » 13 мар 2014, 18:14

а как добавить в него звуки при старте голосования и окончаниии ??
Аватара пользователя
BeshenuY
 
Сообщения: 22
Зарегистрирован: 23 фев 2014, 03:47
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение iYouTouchMe » 16 мар 2014, 17:27

Ништяк, забрал :yahoo:
Неужели нормальный мапчусер.
Аватара пользователя
iYouTouchMe
 
Сообщения: 10
Зарегистрирован: 12 мар 2014, 20:36
Забанен
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение saintriver » 18 мар 2014, 00:06

я не понял как вызывать голосование за карту досрочно ???
Аватара пользователя
saintriver
 
Сообщения: 1
Зарегистрирован: 14 мар 2014, 02:08
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Выбор следующей карты (UFPS Nextmap Chooser)

Сообщение Sorceres » 14 апр 2017, 20:18

Всем Здрасте!!!
Можете подсказать... Сильно ли сложно добавить в этот плагин "продление карты" при ртв? Что бы было меню такое же как и в конце раунда.
Аватара пользователя
Sorceres
 
Сообщения: 1
Зарегистрирован: 14 апр 2017, 20:15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Пред.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11