[ ZP6 ] звуки окончания раундов из Biohazard v2.0Beta3

Программирование, примеры собственного кода. Синтаксис, помощь новичкам и пр. примеры..
Правила форума
В разделе запрещяется создавать посты которые явно не относятся к тематике раздела. Модераторы вправе удалять такие топики без разъяснения причин.
Ответить
Аватара пользователя
*** ROOT ***
Администратор
Администратор
Сообщения: 96
Зарегистрирован: 02 дек 2014, 12:38
Откуда: Шелехов
Возраст: 29
Контактная информация:
Статус: Не в сети

[ ZP6 ] звуки окончания раундов из Biohazard v2.0Beta3

Сообщение *** ROOT *** » 18 янв 2017, 09:58

 ! Сообщение из: forum.moonsiber.org

 

 

 

 

Открываем файл roundend.cpp и находим функцию CS_OnTerminateRound. В ней необходимо добавить наши звуки, в событие конца раунда. Перед этим не забываем добавить звуки на сервер и в конфигурационный файл sounds.ini
Строчки вставить в конфигурационный файл sounds.ini

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

// Zombie win sounds
ZOMBIE_WIN_SOUNDS = "zp/zwin/1.mp3", "zp/zwin/2.mp3", "zp/zwin/3.mp3"

// Human win sounds
HUMAN_WIN_SOUNDS = "zp/hwin/1.mp3", "zpmstest/hwin/2.mp3", "zp/hwin/3.mp3", "zp/hwin/4.mp3", "zp/hwin/5.mp3"
Звуки скачаете здесь: https://yadi.sk/d/VMtF_VdEy9bd8

Находите функцию CS_OnTerminateRound и заменяете её на этот код
  1. public Action CS_OnTerminateRound(float &flDelay, CSRoundEndReason &CReason)
  2. {
  3.     // If round didn't started
  4.     if(!startedRound)
  5.     {
  6.         return ACTION_CHANGED;
  7.     }
  8.    
  9.     // Initialize team score
  10.     static int nScore[2];
  11.    
  12.     // Get amount of total playing players
  13.     int nPlayers = fnGetPlaying();
  14.    
  15.     // If there aren't clients on both teams, then stop
  16.     if (!nPlayers)
  17.     {
  18.         return ACTION_CHANGED;
  19.     }
  20.    
  21.     // Initialize bonuses
  22.     int nZombieBonus;
  23.     int nHumanBonus;
  24.    
  25.     char sSound[BIG_LINE_LENGTH];
  26.  
  27.     // Switch end round reason
  28.     switch(CReason)
  29.     {
  30.         case RoundEnd_ZombiesWin :  
  31.         {
  32.             // Increment T score
  33.             nScore[0]++;
  34.            
  35.             // Calculate bonuses
  36.             nZombieBonus = GetConVarInt(gCvarList[CVAR_AMMOPACKS_ZOMBIE_WIN]);
  37.             nHumanBonus  = GetConVarInt(gCvarList[CVAR_AMMOPACKS_HUMAN_FAIL]);
  38.            
  39.             SoundsGetRandomSound(sSound, sizeof(sSound), "ZOMBIE_WIN_SOUNDS");
  40.             Format(sSound, sizeof(sSound), "*/%s", sSound);
  41.            
  42.             for (int i = 1; i <= MaxClients; i++)
  43.             {
  44.                 // Validate client
  45.                 if(!IsPlayerExist(i, false))
  46.                     continue;              
  47.                 EmitSoundToClient( i, sSound, SOUND_FROM_PLAYER, SNDCHAN_STATIC, SNDLEVEL_NORMAL, SND_NOFLAGS, SNDVOL_NORMAL, SNDPITCH_NORMAL, -1, NULL_VECTOR, NULL_VECTOR, false, 0.0 );
  48.             }
  49.         }
  50.  
  51.         case RoundEnd_HumansWin :
  52.         {
  53.             // Increment CT score
  54.             nScore[1]++;
  55.            
  56.             // Calculate bonuses
  57.             nZombieBonus = GetConVarInt(gCvarList[CVAR_AMMOPACKS_ZOMBIE_FAIL]);
  58.             nHumanBonus  = GetConVarInt(gCvarList[CVAR_AMMOPACKS_HUMAN_WIN]);
  59.            
  60.             SoundsGetRandomSound(sSound, sizeof(sSound), "HUMAN_WIN_SOUNDS");
  61.             Format(sSound, sizeof(sSound), "*/%s", sSound);
  62.            
  63.             for (int i = 1; i <= MaxClients; i++)
  64.             {
  65.                 // Validate client
  66.                 if(!IsPlayerExist(i, false))
  67.                     continue;              
  68.                 EmitSoundToClient( i, sSound, SOUND_FROM_PLAYER, SNDCHAN_STATIC, SNDLEVEL_NORMAL, SND_NOFLAGS, SNDVOL_NORMAL, SNDPITCH_NORMAL, -1, NULL_VECTOR, NULL_VECTOR, false, 0.0 );
  69.             }
  70.         }
  71.  
  72.         default : return ACTION_CHANGED;
  73.     }
  74.  
  75.     // Set score in scoreboard
  76.     SetTeamScore(ZP_TEAM_ZOMBIE, nScore[0]);
  77.     SetTeamScore(ZP_TEAM_HUMAN,  nScore[1]);
  78.    
  79.  
  80.     //*********************************************************************
  81.     //*                 GIVE BONUSES AND SHOW OVERLAYS                    *
  82.     //*********************************************************************
  83.    
  84.     // i = client index
  85.     for (int i = 1; i <= MaxClients; i++)
  86.     {
  87.         // Get real player index from event key
  88.         CBasePlayer* cBasePlayer = CBasePlayer(i);
  89.        
  90.         // Validate client
  91.         if (!IsPlayerExist(cBasePlayer->Index, false))
  92.             continue;
  93.  
  94.         // Display overlay to client
  95.         ToolsOverlays(cBasePlayer, (CReason == RoundEnd_ZombiesWin) ? Overlay_ZombieWin : Overlay_HumanWin);
  96.  
  97.         // Give bonus ammopacks
  98.         cBasePlayer->m_nAmmoPacks += cBasePlayer->m_bZombie ? nZombieBonus : nHumanBonus;
  99.     }
  100.    
  101.     // Allow to terminate
  102.     return ACTION_CHANGED;
  103. }
Так же советую установить значение ROUNDEND_DELAY выше чем 5 секунд, для того что бы звуки более менее проигрывались полностью, иначе начало нового раунда их будет обрывать. Это можно сделать так же в файле roundend.cpp

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

#define ROUNDEND_DELAY 7.0



Ответить