PDA

Просмотр полной версии : REPKA.Commander public beta v1.1



Small_Bee
29.05.2012, 23:36
REPKA.Commander public beta v1.1

Важно! Для корректной работы коммандер требует прав администратора, установленного .NET Framework 4, и на всякий случай, файловую систему NTFS ))

Предыдущая версия: http://www.sukhoi.ru/forum/showthread.php?t=75862&p=1844059&viewfull=1#post1844059

Исправления в версии public beta 1.1

- исправлен запуск карты, которая была отмечена как исключенная из ротации
- исправлена ошибка при запуске сражения в обход ротатора

Изменения в версии public beta 1.1

1. Установка.
Порядок установки не изменился. Если у Вас уже была установлена предыдущая версия, просто скопируйте файлы с заменой. Ваши старые настройки не пострадают

2. Ротатор миссий.
Принцип хранения миссий для ротатора изменился. Теперь сами миссии могут лежать где угодно, а в REPKA.Commander/Missions мы кладем ини-файл, в котором описываем, где вашу миссию искать и некоторые добавочные сведения (подробнее ниже)

3. Новые возможности RSTMission.
Старые методы (DrawnBattle(), RedArmyWon() и BlueArmyWon()) можно считать устаревшими, но они все еще работают. Использовать их в новых миссиях не рекомендуется.

Добавлено свойство public RstMissionHelper MissionHelper;

Доступные свойства MissionHelper:

string HostMissionFolder (только чтение)
Предоставляет путь к папке хост-миссии относительно пользовательской папки игры. Полезно для загрузки субмиссий посредством gpMissionLoad().

public string HostMissionFolderAbs (только чтение)
Абсолютный путь к папке хост-миссии. Полезен для загрузки или сохранения каких то своих файлов.

public int WinnerArmy (только чтение)
Предоставляет армию, которая будет победителем при завершении миссии

public string NextMap (только чтение)
Предоставляет имя ini-файла, в котором указана следующая миссия для загрузки по окончании текущей.
Если не пустое, загрузит следующей указанную миссию (если найдет) даже если она отмечена как исключенная из ротации.

public bool IsBattleWillBeComplete (только чтение)
Означает, что миссия будет завершена максимум через минуту

Доступные методы MissionHelper:

public void SetNextMap(string nextMap)
Устанавливает имя ini-файла (без расширения), в котором указана следующая миссия для загрузки по окончании текущей.

DrawnBattle(), RedArmyWon() и BlueArmyWon() - то же самое, что и аналогичные методы RSTMission

public string lmGetString(string msgKey, string language)
public void lmSendMessageToAll(string msgKey, SendMsgTarget target, params string[] parameters)
public void lmSendMessageToArmy(string msgKey, int army, SendMsgTarget target, params string[] parameters)
public void lmSendMessageToPlayers(string msgKey, maddox.game.Player[] players, SendMsgTarget target, params string[] parameters)

Если общий языковой менеджер включен, возвращает указанную строку для указанного языка, отправляет сообщение всем игрокам, отправляет сообщение команде, отправляет сообщение выбранным игрокам соответственно.

4. Новые классы, которые сможно использовать
LanguageManager, SharedStorage и SharedStorageUnit - примеры их использования смотрите в папке Samples (скопируйте ее предварительно в пользовательскую папку игры)

5. Формат ini-файла для ротатора
Секция [main] (обязательно)
Параметр mission (путь к миссии хосту относительно пользовательской папки игры), обязательный
Секция [additional] (опционально, все параметры в ней также опциональные)
Параметр loc_dir (путь к папке общего языкового менеджера относительно пользовательской папки игры, если не указать - работать менеджер не будет)

Примеры ini файлов ищите в папке Samples

6. Контекстное меню журнала сервера на главной теперь рабочее.

7. Добавлен английский язык интерфейса (-atas-)

Известные проблемы

1. При отправке сообщения в чат из коммандера русскими словами, слетает кодировка.

podvoxx
30.05.2012, 09:03
Спасибо, сегодня вечером надеюсь посмотреть. :thx:
По хранилищу и пример с ресурсами - выглядит очень удобно и многообещающе))

BigREPA
30.05.2012, 09:22
Поставил РК1.1 на Р4, работает... в папке Game теперь 3 dll, на всякий скопировал в папку игры все три.

Charger
30.05.2012, 09:29
Small_Bee отличная новость. Поздравляю. :cool:

Vetochka
30.05.2012, 09:59
Ура!!! :cool:

P.S. Тимофей, а ты случайно не планируешь РН на 109-м починить? ;)

Small_Bee
30.05.2012, 11:41
Поставил РК1.1 на Р4, работает... в папке Game теперь 3 dll, на всякий скопировал в папку игры все три.
Эээ. В архиве -два. И должно быть два. То какой-то левый пассажир, как его зовут?
Ээ блин, мой ошибка, сейчас поправлю, сорри.

BigREPA
30.05.2012, 11:45
REPKA.Stat.dll

Small_Bee
30.05.2012, 11:50
REPKA.Stat.dll
Это как раз нужный пассажир, RstCommander.dll удали из папки игры, это движок самого коммандера. Перезалил правильный архив.
И все, кто скачивал и ставил до этого сообщения - то же самое сделайте.

podvoxx
31.05.2012, 09:16
Small_Bee, а ты уже назначил какой-то пункт меню для командера? Вчера на тестах просто при нажатии Tab+4+1+1 на экран выдавалось сообщение со временем до конца миссии. Я поставил туда свой пункт меню(с таким же назначением, но он был до красоты до этого открытия) .

И сейчас только досрочно можно завершить миссию? Или есть возможность по истечение времени миссии подсчитать очки и выбрать победителя?

В остальном вроде все понятно и работает. Ротатор не шалит, контекстное меню работает(спасибо за пукт "Очистить журнал").

BigREPA
31.05.2012, 11:30
После нажатия кнопки "Остановить сервер" в окне появляется вот такое, в логе же этого нет.
155098

Small_Bee
31.05.2012, 13:04
После нажатия кнопки "Остановить сервер" в окне появляется вот такое, в логе же этого нет.
155098
это нормально.

--- Добавлено ---


Small_Bee, а ты уже назначил какой-то пункт меню для командера? Вчера на тестах просто при нажатии Tab+4+1+1 на экран выдавалось сообщение со временем до конца миссии. Я поставил туда свой пункт меню(с таким же назначением, но он был до красоты до этого открытия) .

И сейчас только досрочно можно завершить миссию? Или есть возможность по истечение времени миссии подсчитать очки и выбрать победителя?

В остальном вроде все понятно и работает. Ротатор не шалит, контекстное меню работает(спасибо за пукт "Очистить журнал").

Да, есть такое, я пока не определился еще, как точно это делать, а обработку пункта меню убрать забыл. ) Пока подставляй сам нужное название под него, если не сложно.

podvoxx
31.05.2012, 13:06
Да, есть такое, я пока не определился еще, как точно это делать, а обработку пункта меню убрать забыл. ) Пока подставляй сам нужное название под него, если не сложно.
Так и получилось) Только я не понял, как так два меню накладываются одно на другое?

Small_Bee
31.05.2012, 13:14
Так и получилось) Только я не понял, как так два меню накладываются одно на другое?
Никак. Я пока убрал свое меню, но обработка определенного id и индекса меню осталась. Представляю твои глаза, когда сделал "для красоты" а оно бац и заработало )))))

podvoxx
31.05.2012, 13:15
Никак. Я пока убрал свое меню, но обработка определенного id и индекса меню осталась. Представляю твои глаза, когда сделал "для красоты" а оно бац и заработало )))))

Замешательство было, я даже скрипт меню проверил, мало ли - вдруг ночью лунатил да дописал несколько строк :)

BigREPA
01.06.2012, 16:53
На Р1



Приложение: CommanderUI.exe
Версия платформы: v4.0.30319
Описание. Процесс был завершен из-за необработанного исключения.
Сведения об исключении: System.Reflection.TargetInvocationException
Стек:
в System.RuntimeMethodHandle._InvokeMethodFast(System.IRuntimeMethodInfo, System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeType)
в System.RuntimeMethodHandle.InvokeMethodFast(System.IRuntimeMethodInfo, System.Object, System.Object[], System.Signature, System.Reflection.MethodAttributes, System.RuntimeType)
в System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, Boolean)
в System.Delegate.DynamicInvokeImpl(System.Object[])
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
в System.Threading.ExecutionContext.runTryCode(System.Object)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
в MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
в System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
в MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
в System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
в System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
в System.Windows.Threading.DispatcherOperation.Wait(System.TimeSpan)
в System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
в CommanderUI.ui.LauncherContext.LauncherContext_GameEventReceived(System.Object, RstCommander.Core.GameEventReceivedEventArgs)
в RstCommander.Core.GameEventReceivedEventHandler.Invoke(System.Object, RstCommander.Core.GameEventReceivedEventArgs)
в RstCommander.RstCommanderBasic.OnGameEventReceived(RstCommander.Core.GameEventReceivedEventArgs)
в RstCommander.RstCommanderBasic.RstCommanderBasic_LauncherStateChanged(System.Object, RstCommander.Core.LauncherStateChangedEventArgs)
в RstCommander.Core.LauncherStateChangedEventHangler.Invoke(System.Object, RstCommander.Core.LauncherStateChangedEventArgs)
в RstCommander.Core.LauncherController.OnLauncherStateChanged(RstCommander.Core.LauncherStateChangedEventArgs)
в RstCommander.Core.LauncherController._controllerStateChanged(System.Object)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
в System.Windows.Threading.DispatcherOperation.InvokeImpl()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
в System.Threading.ExecutionContext.runTryCode(System.Object)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
в System.Windows.Threading.DispatcherOperation.Invoke()
в System.Windows.Threading.Dispatcher.ProcessQueue()
в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
в MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
в System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
в MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
в System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
в System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
в System.Windows.Application.RunDispatcher(System.Object)
в System.Windows.Application.RunInternal(System.Windows.Window)
в System.Windows.Application.Run(System.Windows.Window)
в CommanderUI.App.Main()


Имя сбойного приложения: CommanderUI.exe, версия: 1.1.0.0, отметка времени: 0x4fc517af
Имя сбойного модуля: KERNELBASE.dll, версия: 6.1.7601.17651, отметка времени 0x4e211319
Код исключения: 0xe0434352
Смещение ошибки: 0x0000b9bc
Идентификатор сбойного процесса: 0x588
Время запуска сбойного приложения: 0x01cd3fbe72f98f0a
Путь сбойного приложения: C:\Users\Cod\Desktop\rc\CommanderUI.exe
Путь сбойного модуля: C:\Windows\syswow64\KERNELBASE.dll
Код отчета: 83d029ed-abe7-11e1-91f7-000c29565998


--- Добавлено ---

На Р4 тоже самое - Одновременно!

--- Добавлено ---

Перед вылетом на обоих хостах цпу - 100 процентов было. Народу - о, миссии разные, с чего это интересно...

Small_Bee
01.06.2012, 17:02
Произошло в момент смены состояния лончера - запуск/остановка была. Так сразу и не скажешь, буду пытаться воспроизвести. Причем.. При запуске самого коммандера, что-ли?

BigREPA
02.06.2012, 12:24
Опять падало... и вместе и Р4 одна.

BigREPA
07.06.2012, 22:40
155486
Вот то о чем мы говорили, но в 1102 немного по другому, все летает и стреляет но процесса Два:)

Small_Bee
07.06.2012, 23:12
155486
Вот то о чем мы говорили, но в 1102 немного по другому, все летает и стреляет но процесса Два:)
Угу. В логе (в папке коммандера) ошибки есть какие-то? Удали плиз старые, если остались, ибо пишет только последнюю, ну и на почту мне.

BigREPA
08.06.2012, 10:43
Упс, а логов то и нет... последний имеет имя 20120526_03.30.11-20120604_17.42.32(30) и на этом все.
В самой консоли не видел ничего криминального. Иногда Null, но редко...

Small_Bee
08.06.2012, 10:47
Упс, а логов то и нет... последний имеет имя 20120526_03.30.11-20120604_17.42.32(30) и на этом все.
В самой консоли не видел ничего криминального. Иногда Null, но редко...

Не не, ErrorLog.txt (вроде так) в корне коммандера.
Кстати, у тебя в confs.ini стоит перезапись лога?

BigREPA
08.06.2012, 12:10
System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.IndexOutOfRangeException: Индекс находился вне границ массива.
в CommanderUI.ui.LauncherContext.<>c__DisplayClassa.<LauncherContext_GameEventReceived>b__4()
--- Конец трассировки внутреннего стека исключений ---
в System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
в System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
в System.Delegate.DynamicInvokeImpl(Object[] args)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
System.IndexOutOfRangeException: Индекс находился вне границ массива.
в CommanderUI.ui.LauncherContext.<>c__DisplayClassa.<LauncherContext_GameEventReceived>b__4()

Ну ессесно LOG=0 а было 1... поэтому раньше и ставил реадонли на confs.ini

podvoxx
26.06.2012, 10:52
Small_Bee, а планируется такую функцию добавить?

Может все-таки еще один метод ввести, который вызывается автоматически за одну минуту до конца миссии(и куда можно прописать выдачу результата)?

Small_Bee
26.06.2012, 10:57
Small_Bee, а планируется такую функцию добавить?

Вообще он и сейчас есть, однако присуждение победы в нем не поменяешь. Будут изменения - вызываться будет до "щелчка" на завершение и можно будет поменять победителя как раз в этот момент. Правда когда не скажу - сейчас к коммандеру прикручивается стата в первую очередь.