Пробемка с плагином
| |
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]);
}
1 2 3 4
нужно сделать так:
if (g_hInfoPanelTimer[iClient] != INVALID_HANDLE)
{
KillTimer(g_hInfoPanelTimer[iClient]);
g_hInfoPanelTimer[iClient] = INVALID_HANDLE);
}
1 2 3 4 5
А то будет ошибка в лог.
А насчет вашей проблемы - добавьте отладку. Выводите все значения в чат/лог и увидите в чем проблема
|
|
| |
www22
|
Дата: Суббота, 23.06.2018, 15:56:01 | Сообщение # 3 |
|
Сообщений: 84
Репутация: -1 [ +/- ]
|
|
_R1KO_, да в том то и дело , что в оригинале , там выводится именно панель , эта панель как бы информация об игре . Вот и хотел просто добавить файл перевода . Чтобы через если вдруг допустил ошибки было проще редактировать , а не полностью менять и заново компилировать. Вот и думал что проще и легче будет , а тут вон как оказалось.. А по поводу меню , попробую.. но боюсь натворю дел с этим меню :)) Кстати а сама Панель , я так понимаю менее динамична по функционалу , чем меню ?
По поводу 2-го вопроса , тот код выше это к 2ому вопросу ? , а то подумал , что к менюшке !? Да я тут на всяк случай думал , сделать дополнительный плагин для такой балансировки , вот код :
#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;
}
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
То есть , когда посл. игрок отключился из команды искателей "3" , то если больше 2х игроков во "2" команде то тогда перекидывало 1 игрока рнадомно . Он правильно расписан, при компиляции ошибок нет ?
Сообщение отредактировал 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 );
}
}
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
|
|
| |
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 |
|
| | |
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); - а здесь его в игре чтобы видно было или нет или наверное прорисовка его ?!
1 2 3 4
Просто хочу по квару 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" );
SetEntData(iWeapon, g_iOffset_Effects, EF_NODRAW);
}
}
.............
01 02 03 04 05 06 07 08 09 10 11
То есть просто заменить строчки 1 и 2 , на это код .. Кстати правильно ??? Проверил у себя , где то не так сделал. Здесь полностью код https://pastebin.com/HXjH5D4Q .. И Кстати Спасибо за помощь ..
Сообщение отредактировал www22 - Вторник, 26.06.2018, 16:58:55 |
|
| |
|