| 
				
				Добавление рандомных звуков к готовому плагину
				 |   |  
| 
ORdli
 | 
Дата: Вторник, 25.01.2022, 21:26:51 | Сообщение # 1 |  
  
  |  
Сообщений: 11
 
Репутация: 0 [ +/- ]
 |   
 | 
 Имеется готовый рабочий плагин который проигрывает звук при убийстве с ножа, но я бы хотел сделать так что бы звуков было несколько а не 1, что мне нужно для этого добавить и с какой строки? помогите кто чем может.
  Вот плагин.
  #include <sourcemod> #include <sdktools>
  public Plugin:myinfo = { name = "Knife Kill Sound", version = "1.0", }
  public OnPluginStart() { HookEvent("player_death", Death); }
  public OnMapStart() { AddFileToDownloadsTable("sound/your_sound.mp3"); AddToStringTable(FindStringTable("soundprecache"), "*your_sound.mp3"); }
  public Death(Handle:event, const String:name[], bool:dontBroadcast) { decl String:str[32]; GetEventString(event, "weapon", str, sizeof(str)); if(strcmp(str, "knife", true) == 0) { decl clients[MaxClients]; new total = 0;
  for (new i=1; i<=MaxClients; i++) { if (IsClientInGame(i)) { clients[total++] = i; } } EmitSound(clients, total, "*your_sound.mp3"); } } 
 
 Сообщение отредактировал ORdli - Вторник, 25.01.2022, 21:27:39  | 
 
|   | 
 |    |  
| 
_wS_
 | 
Дата: Среда, 26.01.2022, 02:22:38 | Сообщение # 2 |  
  
 | 
Код #pragma semicolon 1 #pragma newdecls required
  #include <sdktools_sound> #include <sdktools_stringtables>
  public Plugin myinfo = {     name = "Knife Kill Sound",     version = "1.0" };
  #define SOUND_LENGTH 128
  ArrayList g_hAr; int g_iCount = 0; int g_iCurrent = -1;
  int g_soundprecache; bool g_bCSGO;
  public void OnPluginStart() {     if((g_soundprecache = FindStringTable("soundprecache")) == INVALID_STRING_TABLE) {         SetFailState("!soundprecache");     }          g_bCSGO = GetEngineVersion() == Engine_CSGO;     g_hAr   = new ArrayList(ByteCountToCells(SOUND_LENGTH));          /////          // Звуки без "sound/" и без *:     AddSound("folder/sound1.mp3");     AddSound("folder/sound2.mp3");          /////          if (g_iCount < 1) {         SetFailState("!g_iCount");     }          HookEvent("player_death", Event_player_death, EventHookMode_Post); }
  static void AddSound(const char[] sound) {     if (g_bCSGO)     {         char s[SOUND_LENGTH];         FormatEx(s, sizeof(s), "*%s", sound);         g_hAr.PushString(s);     }     else{         g_hAr.PushString(sound);     }     g_iCount++; }
  public void OnMapStart() {     int index = g_bCSGO ? 1 : 0;          char sound[SOUND_LENGTH];     char path [SOUND_LENGTH + 8];          for (int i = 0; i < g_iCount; i++)     {         g_hAr.GetString(i, sound, sizeof(sound));         AddToStringTable(g_soundprecache, sound);                  FormatEx(path, sizeof(path), "sound/%s", sound[index]);         AddFileToDownloadsTable(path);     } }
  void Event_player_death(Event event, const char[] name, bool dontBroadcast) {     char w[32];     event.GetString("weapon", w, sizeof(w));          if (w[0] && (strcmp(w, "bayonet") == 0 || StrContains(w, "knife") != -1))     {         if (++g_iCurrent >= g_iCount) {             g_iCurrent = 0;         }                  char sound[SOUND_LENGTH];         g_hAr.GetString(g_iCurrent, sound, sizeof(sound));                  EmitSoundToAll(sound);     } }  AddSound 
 | 
 
|   | 
 |    |  
| 
ORdli
 | 
Дата: Среда, 26.01.2022, 06:10:24 | Сообщение # 3 |  
  
  |  
Сообщений: 11
 
Репутация: 0 [ +/- ]
 |   
 | 
 Хотел прояснить что я в создании плагинов вообще не шарю, всегда просто редактировал лишь пути и названия файлов, так что заранее пардон. такой вот вопрос еще а можно на другую игру этот плагин перенести, раньше кто-то делал из друзей давно, но сейчас игра обновилась и ничего не работает, может как то по другому надо делать, просто не понимаю в этом, игра Zombie Panic Source, нужно сделать также звук на убийство оружием, любым, всего один звук, раньше использовал на старых версиях игры плагин из кс го, который кинул выше и всё работало, сейчас плагин этот тоже работает, звуки скачиваются, в Plugins list тоже всё ок, но прикол в том что после убийства ничего не происходит, звук просто не проигрывается, не каких ошибок в консоли нет, лишь надпись события по типу Player1 killed The Player2 with crowbar. сами разработчики не занимаются Sourcemod'ом по их же словам, и направляют на форумы соурсмода за помощью. 
 
 Сообщение отредактировал ORdli - Среда, 26.01.2022, 06:17:50  | 
 
|   | 
 |    |  
| 
_wS_
 | 
Дата: Среда, 26.01.2022, 07:06:57 | Сообщение # 4 |  
  
 | 
Ничего не знаю про Zombie Panic Source. Судя по символу * перед именем звука, я подумал это для csgo.
  Если раньше работали "*такие_звуки.mp3", то попробуй вместо этого:
 Код g_bCSGO = GetEngineVersion() == Engine_CSGO; 
  Сделать это:
 
  Попробуй после:
 Код event.GetString("weapon", w, sizeof(w)); 
  Добавить для теста:
 Код PrintToChatAll("weapon = '%s'", w); 
  Может там не "knife", а что-то другое (в чат будет всем писать имя оружия после каждой смерти).
  Ещё можешь попробовать удалить всё, что связано с g_soundprecache, и это:
 Код AddToStringTable(g_soundprecache, sound); 
  Заменить на это:
  
 | 
 
|   | 
 |    |  
| 
ORdli
 | 
Дата: Среда, 26.01.2022, 07:30:55 | Сообщение # 5 |  
  
  |  
Сообщений: 11
 
Репутация: 0 [ +/- ]
 |   
 | 
 Да это не поможет, мне вообще хотелось бы это для Zombie Panic source сделать, изначально тему просто не так создал, а тот плагин просто который я выше кинул подходит абсолютно для всех игр, он универсальный, в Half-life 2 deathmatch проверял работает, и в большинстве модов на движке Source, (Проверено) просто вместо knife меняю названия оружия например на rpg или crowbar, и пишу названия звукового файла, этот плагин и сейчас работает для Half-life 2 Deathmatch Хотя сделан якобы под кс го, но вот в zombie panic проблема полная, там еще говорят плагины теперь на AngelScript, может мне у кого то спросить кто в AngelScript Разбирается? возможно вообще создать звук убийства на AngelScript, по типу того что я скинул? просто играл на серверах и там были рабочие плагины на AngelScript, ладно буду дальше искать, спасибо что хотя бы ответили. 
 | 
 
|   | 
 |    |     
		
		
 
 |