| 
 
 
	
		
		
			| Пробемка с плагином |  |  |  | 
| www22 | Дата: Суббота, 23.06.2018, 10:21:18 | Сообщение # 1 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | 1.Решил перевести и сделать мультиязычным плагин, и тут же столкнулся с проблемкой перевода .Код здесь : https://pastebin.com/rvC13cBZ 443 строчка - CreateInfoPanel()
 Что то никак не получается сделать правильно всё , уже перечситал и тему про мультиязычночть и про меню , и всё никак .. Перепробовал кучу васяких вариантов .
 То выводится только название строки , то вообще пусто всё . Помогите правильно расписать его . Весь текст разбил на 4 кусочка = 4 строчки перевода.
 
 2. Почему то не хочет отрабатываться вот этот код 107 строчка - public OnClientDisconnect(iClient).
 Я что подумал , стал смотреть еще 1 файл , с Hooks , может быть нужен для это функции Hooks(HookEvens) , или без него должно всё работать ?
 И вот еще - поставил g_ConVar[MinPlayers] =2 .. По умолчанию в плагине- 6 , минимум-3.Не знаю может влиять на ошибку или нет.
 То есть при дисконекте игрока в особенности кто ищет и он последний, плагин продолжает раунд.
 
 
 Сообщение отредактировал www22 - Суббота, 23.06.2018, 10:28:32 |  |  |  |  |  | 
| _R1KO_ | Дата: Суббота, 23.06.2018, 14:33:18 | Сообщение # 2 |  |   
|  |  | Сообщений: 200 Репутация: 30 [ +/- ]
 |  | www22, 1. Проблема в том что вы создаете 1 панель для всех игроков.У вас 2 способа решения:
 
 
 Создавать не панель, а меню. Ловить MenuAction_Display и MenuAction_DisplayItem и форматировать вывод под конкретного игрока
Создавать панель для каждого персонально только при необходимости его отображения.
 Я рекомендую 2-й вариант
 
 2.
 
 Код if (g_hInfoPanelTimer[iClient] != INVALID_HANDLE){
 KillTimer(g_hInfoPanelTimer[iClient]);
 }
нужно сделать так:
 
 Код if (g_hInfoPanelTimer[iClient] != INVALID_HANDLE){
 KillTimer(g_hInfoPanelTimer[iClient]);
 g_hInfoPanelTimer[iClient] = INVALID_HANDLE);
 }
А то будет ошибка в лог.
 
 А насчет вашей проблемы - добавьте отладку. Выводите все значения в чат/лог и увидите в чем проблема
 |  |  |  |  |  | 
| www22 | Дата: Суббота, 23.06.2018, 15:56:01 | Сообщение # 3 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | _R1KO_, да в том то и дело , что в оригинале , там выводится именно панель , эта панель как бы информация об игре . Вот и хотел просто добавить файл перевода .Чтобы через если вдруг допустил ошибки было проще редактировать , а не полностью менять и заново компилировать. Вот и думал что проще и легче будет , а тут вон как оказалось..
 А по поводу меню , попробую.. но боюсь натворю дел с этим меню :))
 Кстати а сама Панель , я так понимаю менее динамична по функционалу , чем меню ?
 
 По поводу 2-го вопроса , тот код выше
 это к 2ому вопросу ? , а то подумал , что к менюшке !?
 Да я тут на всяк случай думал , сделать дополнительный плагин для такой балансировки , вот код :
 
 То есть , когда посл. игрок отключился из команды искателей "3" , то если больше 2х игроков во "2" команде то тогда перекидывало 1 игрока рнадомно .Код #include <sourcemod>#include <sdktools>
 
 public void OnPluginStart()
 {
 HookEvent("player_disconnect", Event_Disconnect, EventHookMode_Post);
 }
 public Action Event_Disconnect(Event hEvent, const char[] sName, bool bDontBroadcast)
 {
 if (GetTeamClientCount(3) == 0 &&GetTeamClientCount(2) >1)
 {
 for (int i = 1; i <= MaxClients; i++)
 {
 int iClient = GetRandomInt(1, i);
 
 if (GetClientTeam(iClient) == 2 )
 ChangeClientTeam(iClient, 3);
 }
 }
 
 return Plugin_Continue;
 }
Он правильно расписан, при компиляции ошибок нет ?
 
 
 Сообщение отредактировал www22 - Суббота, 23.06.2018, 23:10:29 |  |  |  |  |  | 
| _R1KO_ | Дата: Воскресенье, 24.06.2018, 23:30:27 | Сообщение # 4 |  |   
|  |  | Сообщений: 200 Репутация: 30 [ +/- ]
 |  | Цитата www22 (  )  Кстати а сама Панель , я так понимаю менее динамична по функционалу , чем меню ?угу.
 лучше создавать панель при её отображении.
 
 
 Цитата www22 (  )  тот код вышеэто к 2ому вопросу ?
это просто между прочим
 
 
 Цитата www22 (  )  То есть , когда посл. игрок отключился из команды искателей "3" , то если больше 2х игроков во "2" команде то тогда перекидывало 1 игрока рнадомно .Он правильно расписан, при компиляции ошибок нет ?
нет
 
 
 Код public void Event_Disconnect(Event hEvent, const char[] sName, bool bDontBroadcast){
 if (GetTeamClientCount(3) == 0 &&GetTeamClientCount(2) >1)
 {
 int[] iClients = new int[MaxClients];
 int iPlayers = 0;
 for (int i = 1; i <= MaxClients; i++)
 {
 if(IsClientInGame(i) && GetClientTeam(i) == 2)
 iClients[iPlayers++] = i;
 }
 
 ChangeClientTeam(iClients[GetRandomInt(0, iPlayers-1)], 3);
 }
 }
 |  |  |  |  |  | 
| www22 | Дата: Воскресенье, 24.06.2018, 23:44:34 | Сообщение # 5 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | Цитата _R1KO_ (  )  угу.лучше создавать панель при её отображении.
Что то не понял .. Эта панель создается 1 раз в начале загрузки карты и больше мы её не видим .. там в коде 60 строчка (https://pastebin.com/rvC13cBZ). Вроде так это работает .
 _R1KO_, Ясно , все таки неправильно с кодом ..
 Спасибо..
 
 И можно ли в одной плагине поймать Собитие(event) из другого ?
 
 Сообщение отредактировал www22 - Понедельник, 25.06.2018, 11:18:22 |  |  |  |  |  | 
| _R1KO_ | Дата: Понедельник, 25.06.2018, 11:30:14 | Сообщение # 6 |  |   
|  |  | Сообщений: 200 Репутация: 30 [ +/- ]
 |  | Цитата www22 (  )  И можно ли в одной плагине поймать Собитие(event) из другого ?смотря какое.
 
 
 Цитата www22 (  )  Что то не понял .. Эта панель создается 1 раз в начале загрузки карты и больше мы её не видим .. там в коде 60 строчка (https://pastebin.com/rvC13cBZ). Вроде так это работает .немного не так.
 Она создается 1 раз, а потом просто отображается когда. Но проблема в том что тебе требуется мультиязычность, поэтому лучше было бы создавать перед отображением, форматируя под конкретного игрока, а после отображения - убивать панель.
 |  |  |  |  |  | 
| www22 | Дата: Понедельник, 25.06.2018, 12:29:20 | Сообщение # 7 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | Цитата _R1KO_ (  )  в том что тебе требуется мультиязычностьне я уже отказался от неё , просто внутри файла все переводил .. А то как раз на этой панели и застрял , а там еще и меню есть , думаю так же встряну и с ней .
 А то есть еще кое какие моменты с переменными запутался. К примеру с переменной %N, что ставить уже в sp-файл %t или %s. Какие в плагин, какие в файл перевода . Плюс с этим format, тоже некоторые моменты не могу понять.
 
 В итоге решил - просто русифицировать плагин.Тем более как бы есть уже по отдельности и английская французская версии . А мультиязычность , сначала оказалось проще чем то ,но вот потом, уже пошли сюрпризы из за незнания , а так написал выше. В итоге проще оказалось сделать всё так, может парочку строчек изменить. Плюс добавить хочу кое что ..
 Вот к примеру это :
 
 Код     RemoveWeapons(iClient);.....................
 new iWeapon = GivePlayerItem(iClient, "weapon_amerknife");  - это я правильно понимаю, дает определенное оружие игроку
 SetEntData(iWeapon, g_iOffset_Effects, EF_NODRAW); - а здесь его в игре чтобы видно было или нет  или наверное прорисовка его ?!
 
Просто хочу по квару g_ConVar[Random], чтобы это оружие давать (1), не давать(0) или рандом (2) был. У меня как бы вопрос , достаточно 1 строчку в условие закинуть или же лучше 2 ..
 Типа так, написал на коленке :
 
 Код ...................if (GetConVarInt(g_ConVar[Random])>0)
 {
 new randomweapon=GetRandomInt(0, 1) ;
 if (randomweapon==1||GetConVarInt(g_ConVar[Random])==1) {   ///Вот здесь не намудрил ?
 new iWeapon = GivePlayerItem(iClient, "weapon_amerknife");  // 1
 SetEntData(iWeapon, g_iOffset_Effects, EF_NODRAW);  // 2
 }
 
 }
 .............
То есть просто заменить строчки 1 и 2 , на это код ..
  Кстати правильно ???Проверил у себя , где то не так сделал.
 Здесь полностью код https://pastebin.com/HXjH5D4Q ..
 И Кстати Спасибо за помощь ..
 
 Сообщение отредактировал www22 - Вторник, 26.06.2018, 16:58:55 |  |  |  |  |  
 |