Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Пробемка с плагином
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ому вопросу ? , а то подумал , что к менюшке !?
Да я тут на всяк случай думал , сделать дополнительный плагин для такой балансировки , вот код :
Код
#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;
}
То есть , когда посл. игрок отключился из команды искателей "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);
    }
}
 
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
 
  • Страница 1 из 1
  • 1
Поиск: