0
6
5 месяцев назад
0

» WarCraft 3 / Русификатор редактора карт Warcraft 3 Reforged

Sinistra на этом проблемы не закончились. Уже вручную и почти случайно обнаружила поломанные типы, используемые игрой (должны остаться английскими, т. к. это идентификаторы).
Что делает редактор в этом случае? Не уверена насчет проблем с наполнением списка в меню и поиском, но как минимум редактор скатывается в англоязычный файл. То ли встроен где-то, то ли как.
Пример правильный. Тут типы не переведены:
Кэш-игры: Восстановить угол поворота боевой единицы
_RestoreUnitLocFacingAngleBJ_Parameters="Восстановить ",~Label," ",~Category," из ",~Game Cache," для ",~Player," в ",~Location," поворот ",~Angle
Пример неправильного перевода, испорчены типы:
Хэш-таблица: Save Gamecache Handle
_SaveGameCacheHandleBJ_Parameters="Сохранить ",~кэш игры," как ",~значение," - ",~значение," в ",~Hashtable,"."
По-простому, всё что вне двойных скобок - это может восприниматься игрой не как текст. Потому работают запятые и названия ~customtype. Поэтому для корректной работы этого русификатора надо восстановить эти названия из англ. файла. А таких мест много.
Оглашаю весь список, пожалуйста
Номер строки в файле
3677:_TriggerRegisterDeathEvent_Parameters=~Разрушаемый объект," уничтожен"
3683:_TriggerRegisterDestDeathInRegionEvent_Parameters="Уничтожены в ",~области,""
3691:_TriggerRegisterDialogEventBJ_Parameters="Нажата кнопка диалогового окна ",~кнопка диалогового окна
3706:_TriggerRegisterVariableEvent_Parameters=~Действительное число," становится ",~Operation," ",~Value
3730:_TriggerRegisterCommandEvent_Parameters="Кнопка способности ",~способность," с приказом ",~приказ," нажата"
3736:_TriggerRegisterBuildCommandEventBJ_Parameters="Кнопка строительства ",~здание," нажата"
3742:_TriggerRegisterTrainCommandEventBJ_Parameters="Кнопка найма ",~боевая единица," нажата"
3748:_TriggerRegisterUpgradeCommandEventBJ_Parameters="Кнопка исследования ",~исследование," нажата"
3754:_TriggerRegisterCommonCommandEventBJ_Parameters="Кнопка приказа ",~приказ," нажата"
3774:_TriggerRegisterPlayerChatEvent_Parameters=~Player," напечатал такое сообщение ",~текст," как ",~Match Type
3856:_TriggerRegisterTimerExpireEventBJ_Parameters=~Таймер," истекает"
3864:_TriggerRegisterUnitEvent_Parameters=~Боевая единица," ",~Event
3882:_TriggerRegisterEnterRectSimple_Parameters="Боевая единица входит в область ",~область
3888:_TriggerRegisterLeaveRectSimple_Parameters="Боевая единица покидает область ",~область
3894:_TriggerRegisterUnitInRangeSimple_Parameters="Боевая единица в радиусе ",~Range," от ",~боевой единицы
3901:_TriggerRegisterUnitLifeEvent_Parameters=~У боевой единицы," здоровье становится ",~Operation," ",~Value
3907:_TriggerRegisterUnitManaEvent_Parameters=~У боевой единицы," мана становится ",~Operation," ",~Value
3936:_OperatorCompareBuffId_Parameters=~Значение," ",~Operator," ",~значение
3942:_OperatorCompareDestructible_Parameters=~Значение," ",~Operator," ",~значение
3954:_OperatorCompareButton_Parameters=~Value," ",~Operator," ",~значение
3978:_OperatorCompareItem_Parameters=~Значение," ",~Operator," ",~значение
4066:_OperatorCompareString_Parameters=~Value," ",~Operator," ",~значение
4072:_OperatorCompareTechCode_Parameters=~Value," ",~Operator," ",~значение
4084:_OperatorCompareTrigger_Parameters=~Значение," ",~Operator," ",~значение
4090:_OperatorCompareUnit_Parameters=~Value," ",~Operator," ",~значение
4102:_GetBooleanAnd_Parameters=~Условие 1," и ",~условие 2
4109:_GetBooleanOr_Parameters=~Условие 1," или ",~условие 2
4142:_CommentString_Parameters="-------- ",~Текст," --------"
4148:_CustomScriptCode_Parameters="Личный сценарий: ",~код сценария
4168:_WaitForCondition_Parameters="Ждать ",~условие,", проверяя каждые ",~Interval," секунд"
4183:_SetVariable_Parameters="Установить ",~переменную," = ",~значение
4205:_IfThenElse_Parameters="Если ",~условие,", то делать ",~действие,", иначе ",~действие
4226:_ForLoopVarMultiple_Parameters="Для каждого (Числа ",~целое число,") от ",~Start," до ",~End,", делать"
4233:_ForLoopA_Parameters="Для каждого (числа A) от ",~Start," до ",~End,", делать ",~действие
4240:_ForLoopB_Parameters="Для каждого (числа B) от ",~Start," до ",~End,", делать ",~действие
4247:_ForLoopVar_Parameters="Для каждого (числа ",~целое число,") от ",~Start," до ",~End,", делать ",~действие
4549:_AdjustCameraBoundsForPlayerBJ_Parameters=~Расширить/сузить," границы камеры для ",~Player," на запад ",~West,", на восток ",~East,", на север ",~North,", и на юг ",~South
4699:_SetDialogueTextKey_Parameters="Установить идентификатор текста диалога для звука ",~звук," идентификатор текста диалога ",~текст,"
4705:_SetDialogueSpeakerNameKey_Parameters="Установить идентификатор имени диктора для звука ",~звука," идентификатор имени диктора ",~текст,"
4711:_PlayDialogueFromSpeakerEx_Parameters="Воспроизведение диалога ",~игрок," от ",~боевая единица," с типом ",~боевая единица (тип),". Воспроизвести ",~звук,".  Изменить продолжительность: ",~Method," ",~Time," секунд и ",~Wait/Don't Wait
4718:_PlayDialogueFromSpeakerTypeEx_Parameters="Воспроизведение диалога ",~группе игроков," от ",~игрока," ",~боевой единицей (тип)," к пользовательскому интерфейсу в местоположении ",~местоположение,". Произвести ",~звук,".  Изменить продолжительность: ",~Method," ",~Time," секунд и ",~Wait/Don't Wait
4776:_EnableOcclusionBJ_Parameters=~Включить/Отключить," окклюзию для ",~Player Group
4782:_EnableWorldFogBoundaryBJ_Parameters=~Включить/Отключить," обрезку краев для ",~Player Group
4912:_ModifyGateBJ_Parameters=~Open/Close/Destroy," ",~Ворота
4918:_ChangeElevatorWalls_Parameters=~Open/Close," ",~Walls," ",~Подъёмник
4924:_ChangeElevatorHeight_Parameters=Установить высоту ,~Подъёмника," до ",~Height
5171:_SetTextTagSuspendedBJ_Parameters="Изменить ",~Floating Text,": ",~Включить/Отключить," приостановку"
5177:_SetTextTagPermanentBJ_Parameters="Изменить ",~Floating Text,": ",~Включить/Отключить," постоянство"
5203:_DisplayTextToForce_Parameters="Показывать для ",~Player Group," текст: ",~Текст
5209:_DisplayTimedTextToForce_Parameters="Показывать для ",~Player Group," в течение ",~Time," секунд текст: ",~Текст
5541:_SaveRealBJ_Parameters="Сохранить ",~действительное число," как ",~значение," - ",~значение," в ",~Hashtable
5547:_SaveIntegerBJ_Parameters="Сохранить ",~целое число," как ",~значение," - ",~значение," в ",~Hashtable
5553:_SaveBooleanBJ_Parameters="Сохранить ",~логическое значение," как ",~значение," - ",~значение," в ",~Hashtable
5559:_SaveStringBJ_Parameters="Сохранить ",~строку," как ",~значение," - ",~значение," в ",~Hashtable
5565:_SavePlayerHandleBJ_Parameters="Сохранить ",~игрока," как ",~значение," - ",~значение," в ",~Hashtable,"."
5571:_SaveWidgetHandleBJ_Parameters="Сохранить ",~виджет," как ",~значение," - ",~значение," в ",~Hashtable,"."
5577:_SaveDestructableHandleBJ_Parameters="Сохранить ",~разрушаемый объект," как ",~значение," - ",~значение," в ",~Hashtable,"."
5583:_SaveItemHandleBJ_Parameters="Сохранить ",~предмет," как ",~значение," - ",~значение," в ",~Hashtable,"."
5589:_SaveUnitHandleBJ_Parameters="Сохранить ",~боевую единицу," как ",~значение," - ",~значение," в ",~Hashtable,"."
5595:_SaveAbilityHandleBJ_Parameters="Сохранить ",~способность," как ",~значение," - ",~значение," в ",~Hashtable,"."
5601:_SaveTimerHandleBJ_Parameters="Сохранить ",~таймер," как ",~значение," - ",~значение," в ",~Hashtable,"."
5611:_SaveTriggerHandleBJ_Parameters="Сохранить ",~триггер," как ",~значение," - ",~значение," в ",~Hashtable,"."
5617:_SaveTriggerConditionHandleBJ_Parameters="Сохранить ",~условие триггера," как ",~значение," - ",~значение," в ",~Hashtable,"."
5623:_SaveTriggerActionHandleBJ_Parameters="Сохранить ",~действие триггера," как ",~значение," - ",~значение," в ",~Hashtable,"."
5629:_SaveTriggerEventHandleBJ_Parameters="Сохранить ",~событие триггера," как ",~значение," - ",~значение," в ",~Hashtable,"."
5635:_SaveForceHandleBJ_Parameters="Сохранить ",~группу игроков," как ",~значение," - ",~значение," в ",~Hashtable,"."
5641:_SaveGroupHandleBJ_Parameters="Сохранить ",~отряд," как ",~значение," - ",~значение," в ",~Hashtable,"."
5647:_SaveLocationHandleBJ_Parameters="Сохранить ",~местоположение," как ",~значение," - ",~значение," в ",~Hashtable,"."
5653:_SaveRegionHandleBJ_Parameters="Сохранить ",~область," как ",~значение," - ",~значение," в ",~Hashtable,"."
5659:_SaveRectHandleBJ_Parameters="Сохранить ",~область," как ",~значение," - ",~значение," в ",~Hashtable,"."
5665:_SaveBooleanExprHandleBJ_Parameters="Сохранить ",~логическое значение," как ",~значение," - ",~значение," в ",~Hashtable,"."
5679:_SaveSoundHandleBJ_Parameters="Сохранить ",~звук," как ",~значение," - ",~значение," в ",~Hashtable,"."
5689:_SaveEffectHandleBJ_Parameters="Сохранить ",~эффект," как ",~значение," - ",~значение," в ",~Hashtable,"."
5695:_SaveUnitPoolHandleBJ_Parameters="Сохранить ",~резервную боевую единицу," как ",~значение," - ",~значение," в ",~Hashtable,"."
5701:_SaveItemPoolHandleBJ_Parameters="Сохранить ",~резервный предмет," как ",~значение," - ",~значение," в ",~Hashtable,"."
5707:_SaveQuestHandleBJ_Parameters="Сохранить ",~задание," как ",~значение," - ",~значение," в ",~Hashtable,"."
5713:_SaveQuestItemHandleBJ_Parameters="Сохранить ",~требование задания," как ",~значение," - ",~значение," в ",~Hashtable,"."
5719:_SaveDefeatConditionHandleBJ_Parameters="Сохранить ",~условие поражения," как ",~значение," - ",~значение," в ",~Hashtable,"."
5725:_SaveTimerDialogHandleBJ_Parameters="Сохранить ",~таймер диалога," как ",~значение," - ",~значение," в ",~Hashtable,"."
5731:_SaveLeaderboardHandleBJ_Parameters="Сохранить ",~таблицу рекордов," как ",~значение," - ",~значение," в ",~Hashtable,"."
5737:_SaveMultiboardHandleBJ_Parameters="Сохранить ",~статистическую таблицу," как ",~значение," - ",~значение," в ",~Hashtable,"."
5743:_SaveMultiboardItemHandleBJ_Parameters="Сохранить ",~элемент из статистической таблицы," как ",~значение," - ",~значение," в ",~Hashtable,"."
5749:_SaveTrackableHandleBJ_Parameters="Сохранить ",~трекэбл," как ",~значение," - ",~значение," в ",~Hashtable,"."
5755:_SaveGameCacheHandleBJ_Parameters="Сохранить ",~кэш игры," как ",~значение," - ",~значение," в ",~Hashtable,"."
5761:_SaveDialogHandleBJ_Parameters="Сохранить ",~диалог," как ",~значение," - ",~значение," в ",~Hashtable,"."
5767:_SaveButtonHandleBJ_Parameters="Сохранить ",~кнопку диалога," как ",~значение," - ",~значение," в ",~Hashtable,"."
5781:_SaveTextTagHandleBJ_Parameters="Сохранить ",~текстовый тег," как ",~значение," - ",~значение," в ",~Hashtable,"."
5787:_SaveLightningHandleBJ_Parameters="Сохранить ",~молнию," как ",~значение," - ",~значение," в ",~Hashtable,"."
5793:_SaveImageHandleBJ_Parameters="Сохранить ",~изображение," как ",~значение," - ",~значение," в ",~Hashtable,"."
5799:_SaveUbersplatHandleBJ_Parameters="Сохранить ",~текстуру земли," как ",~значение," - ",~значение," в ",~Hashtable,"."
5805:_SaveFogStateHandleBJ_Parameters="Сохранить ",~туман войны," как ",~значение," - ",~значение," в ",~Hashtable,"."
5811:_SaveFogModifierHandleBJ_Parameters="Сохранить ",~видимость," как ",~значение," - ",~значение," в ",~Hashtable,"."
5888:_SuspendHeroXPBJ_Parameters=~Включить/Выключить," получение опыта для ",~Hero
6084:_SetImageConstantHeight_Parameters="Изменить высоту ",~Image,", который ",~Включить/Отключить," на ",~Height
6102:_SetImageRender_Parameters="Изменить ",~Image,": ",~Включить/Отключить," прорисовку"
6108:_SetImageRenderAlways_Parameters="Изменить ",~Image,": ",~Включить/Отключить," постоянную прорисовку"
6114:_SetImageAboveWater_Parameters="Изменить ",~Image,": ",~Включить/Отключить," над водой, ",~Включить/Отключить," прозрачность от воды"
6306:_CreateMultiboardBJ_Parameters="Создать статистическую таблицу с ",~Columns," колонками и ",~Rows," рядами, под названием ",~название,"."
6343:_MultiboardSetTitleText_Parameters="Изменить название ",~Multiboard," на ",~название
6378:_MultiboardSetItemValueBJ_Parameters="Изменить текст ",~Multiboard," ячейки в ",~Column," колонке, в ",~Row," ряду на текст ",~текст
6427:_WaygateActivateBJ_Parameters=~Enable/Disable," ",~портал
6433:_WaygateSetDestinationLocBJ_Parameters="Определить для ",~портала," место назначения ",~Target
6445:_UnitSetUsesAltIconBJ_Parameters="Переключить специальную иконку мини-карты ",~On/Off," для ",~нейтральное здание
6551:_EnableCreepSleepBJ_Parameters=~Включить/Выключить," сон для всех нейтрально-враждебных"
6569:_SetPlayerAbilityAvailableBJ_Parameters=~Включить/Выключить," ",~Ability," для ",~Player
6649:_CreateCommandButtonEffectBJ_Parameters="Создать кнопку способности для ",~способность," и ",~приказ
6655:_CreateTrainCommandButtonEffectBJ_Parameters="Создать кнопку найма для ",~боевой единицы
6661:_CreateBuildCommandButtonEffectBJ_Parameters="Создать кнопку строительства для ",~здания
6667:_CreateUpgradeCommandButtonEffectBJ_Parameters="Создать кнопку исследования для ",~исследования
6673:_CreateLearnCommandButtonEffectBJ_Parameters="Создать кнопку изучения для ",~способности
6679:_CreateCommonCommandButtonEffectBJ_Parameters="Создать кнопку приказа для ",~приказа
6685:_DestroyCommandButtonEffect_Parameters="Уничтожить кнопку ",~кнопку
8228:_IssueTrainOrderByIdBJ_Parameters="Приказать ",~зданию," нанять ",~боевую единицу,"
8234:_IssueUpgradeOrderByIdBJ_Parameters="Приказать ",~зданию," провести исследование ",~Tech-Type
8240:_IssueBuildOrderByIdLocBJ_Parameters="Приказать ",~рабочему," построить ",~Unit-Type," в ",~Point
8384:_CreateUbersplatBJ_Parameters="Создать ",~Location," тип ",~Type," с цветом (",~Red,"%, ",~Green,"%, ",~Blue,"%) и ",~Transparency,"% прозрачностью (",~Включить/Отключить," неподвижность, ",~Enble/Disable," пропуск времени появления)"
8414:_SetUbersplatRender_Parameters=~Ubersplat,": ",~Включить/Отключить," прорисовку"
8420:_SetUbersplatRenderAlways_Parameters=~Ubersplat,": ",~Включить/Отключить," постоянную прорисовку"
11673:_GetOwningPlayer_Parameters="Владелец ",~боевой единицы
11679:_GetItemPlayer_Parameters="Владелец ",~предмета
11685:_ForcePickRandomPlayer_Parameters="Случайный игрок из ",~группы игроков
Список можно создать тебе самому, команды ripgrep или grep: rg '~[^A-Za-z0-9]' 'путь/к/файлу'
0
6
5 месяцев назад
Отредактирован Lasto4ka
0

» WarCraft 3 / Русификатор редактора карт Warcraft 3 Reforged

Привет! Я тут заметила пару ошибок:
  1. строка 4715 оставлена декларация функции "function PlayDialogueFromSpeakerTypeEx ..." -- надо убрать. Вообще лучше сразу // комментарием вставлять, чтобы случайно проблем не возникло.
  2. строка 11004 по ошибке две двойных скобки, хватит и по одной с каждой стороны ^_^:
_Location_DisplayName=""Преобразовать координаты точки""
И можно исправить уже предшествующие ошибки Близзардов:
  1. _BlzGetAbilityRealLevelField_Limites должно называться "Limits"
У следующих триггеров дважды встречается поле _Defaults, хотя по логике второе из них (где вдвое больше параметров) на самом деле является _Limits:
  1. _TriggerRegisterUnitInRangeSimple_Defaults
  2. _SetTimeOfDayScalePercentBJ_Defaults
  3. _SetUnitLifeBJ_Defaults
  4. _BlzSetAbilityIntegerLevelFieldBJ_Defaults
  5. _CreateFogModifierRadiusLocBJ_Defaults
  6. _BlzSetAbilityIntegerLevelField_Defaults
И надеюсь, ты вовремя заметил, что строки не оканчивающиеся на ...Hint в TriggerStrings.txt на самом деле ничего не делают (и в точности повторяют те из triggerdata.txt). Но их проредили только в версии 1.36 и теперь их там нет. Я не знаю, для чего они там были, видимо, для упрощения жизни переводчикам?
Спасибо за перевод, скоро что-то будет! Желаю мира и добра!
0
6
2 года назад
0

» WarCraft 3 / Warcraft 3 Custom Object Converter

makkad: Powershell ломает кодировку на UTF-16 (при том по-разному), попользуйся пока CMD или bash через Cygwin.
0
6
2 года назад
0

» WarCraft 3 / Warcraft 3 Custom Object Converter

makkad:
  1. rawcode: оно в формате в самом деле не используется. То к какому юниту относится эта часть данных видно в самом конце (обращай внимание на иерархию таблиц):
  1. Ну вот что мне с тобой, заклятым виндузятником, делать? Винда тебе при сохранении через pipe кодировку ломает на UTF-16 LE и тексту конец (сравнение в пред. скриншоте):
Делать-то я знаю что, придется делать опцию --output для особо одаренных систем...
0
6
2 года назад
0

» WarCraft 3 / Странности условиях триггеров

rsfghd я в триггерном коде не шарю, но ты можешь задокументировать: GetUnitsInRangeOfLocAll, ForGroupBJ и при каких махинациях в редакторе оно будет утекать.
2
6
2 года назад
Отредактирован Lasto4ka
2

» WarCraft 3 / Странности условиях триггеров

Все оказалось куда проще, чем я думала. (PS: rsfghd уже это же и написал, но ты его не понял)
В первом варианте у тебя "Units in range matching condition", к ней подсказка
Use 'Matching Unit' to refer to the unit on whom the comparison is being performed.
А ты использовал (Picked unit)! Почему так нельзя? Потому что, matching condition = значит там Filter внутри, а внутри фильтра используется функция GetFilterUnit т.е. (matching unit).
из triggerstrings.txt:
GetEnumUnitHint="When using the 'Pick Every Unit...' action, this refers to each unit as it is picked."
GetFilterUnitHint="Use this to refer to the unit being considered for 'Units Matching Condition' functions."
А вот (Picked unit) можно использовать, когда просто есть проход по группе, как в твоем втором варианте.

Я тут вытащила код триггера из карты из war3map.j
Сгенерированный код триггера
===========================================================================
Trigger: IshillUltimte
===========================================================================
function Trig_IshillUltimte_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A001' ) ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002Func001Func002C takes nothing returns boolean
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
return false
endif
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_GROUND) == true ) ) then
return false
endif
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false ) ) then
return false
endif
if ( not ( IsUnitAlly(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == false ) ) then
return false
endif
if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetEnumUnit()) != GetOwningPlayer(GetSpellAbilityUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002Func001C takes nothing returns boolean
if ( not Trig_IshillUltimte_Func002Func001Func002C() ) then
return false
endif
return true
endfunction
function Trig_IshillUltimte_Func002A takes nothing returns nothing
if ( Trig_IshillUltimte_Func002Func001C() ) then
call GroupAddUnitSimple( GetEnumUnit(), udg_UltimateIshillEffect )
else
endif
endfunction
function Trig_IshillUltimte_Func003A takes nothing returns nothing
call EnableTrigger( gg_trg_IshillPoison )
call UnitAddAbilityBJ( 'A000', GetEnumUnit() )
endfunction
function Trig_IshillUltimte_Func005A takes nothing returns nothing
call DisableTrigger( gg_trg_IshillPoison )
call UnitRemoveAbilityBJ( 'A000', GetEnumUnit() )
endfunction
function Trig_IshillUltimte_Actions takes nothing returns nothing
call QuestMessageBJ( GetPlayersAll(), bj_QUESTMESSAGE_UPDATED, "TRIGSTR_019" )
call ForGroupBJ( GetUnitsInRangeOfLocAll(600.00, GetUnitLoc(GetSpellAbilityUnit())), function Trig_IshillUltimte_Func002A )
call ForGroupBJ( udg_UltimateIshillEffect, function Trig_IshillUltimte_Func003A )
call TriggerSleepAction( 20.00 )
call ForGroupBJ( udg_UltimateIshillEffect, function Trig_IshillUltimte_Func005A )
call GroupClear( udg_UltimateIshillEffect )
endfunction
===========================================================================
function InitTrig_IshillUltimte takes nothing returns nothing
set gg_trg_IshillUltimte = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_IshillUltimte, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_IshillUltimte, Condition( function Trig_IshillUltimte_Conditions ) )
call TriggerAddAction( gg_trg_IshillUltimte, function Trig_IshillUltimte_Actions )
endfunction
Маленькие оптимизации:
  1. IsUnitAlly+GetOwningPlayer(GetSpellAbilityUnit()) и IsUnitEnemy по идее взаимоисключающие, хватило бы только IsUnitEnemy(...)
call ForGroupBJ( GetUnitsInRangeOfLocAll(600.00, GetUnitLoc(GetSpellAbilityUnit())), function Trig_IshillUltimte_Func002A )
  1. Тут утечка локации, потому что GetUnitLoc создает новую, но она потом не удаляется. Решение в ГУИ: записать GetUnitLoc в глобальную (или локальную) переменную, пройтись по группе, и удалить локацию (DestroyLocation).

Проблема: у тебя, как называется в местном жаргоне, триггер не MUI. То есть он работает только с одним юнитом одновременно, если два юнита используют заклинание, то оно сломается.
Посмотри на Trig_IshillUltimte_Actions. Ты там используешь udg_UltimateIshillEffect до засыпания на 20с и после. Что будет если в этот промежуток времени кто-нибудь снова вызовет триггер? Ацская сотона. Я не знаю как принято, но по-моему единственный выход - это локально создать группу, чтобы она у кастующего юнита была своя, а в конце триггера её удалять.
Прочитай пару туториалов про локальные переменные и утечки. Если не прозреешь - перепишу всё на кастомный код за тебя, чтобы как пример был наглядный.
1
6
2 года назад
1

» WarCraft 3 / Preload Reforged

Старая идея, но покою не дает и мне :)
Про 1.32 остается подтвердить: каждый preload файл загружается только ЕДИНОЖДЫ за карту.
1.33, если кто еще не в курсе и будет читать, сломал у прелоадов все, что только можно. Файл загружается ЕДИНОЖДЫ за все время запуска игры. Поэтому автоматический save/load не работает - он на каждом старте карты ожидал обновленные данные из preload.
Впрочем, и то и другое обходится одним путем: при каждом сохранении генерировать другое имя файла, допустим codefile_version_123 - и карта будет подгружать версию 123. После следующего сохранения _124 и т.п. Со стороны карты решается например горячей клавишей, по которой увеличивается версия и грузится последний файл. Осталось эту идею только воплотить.
0
6
2 года назад
0

» Администрация XGM / UX сайта xgm и о новых пользователях

что для макоюзера вызывает отторжение ибо CTRL там редко используется.
Ну тут же очевидно, что "общепринятое" будет отличаться для разных платформ. Мой пример - это когда в одной программе клавиша CTRL+Y, а в другой рядом же CTRL+SHIFT+Z для отмены отката.
а цвет близкий к фону, но чётко отделяющий блоки друг от друга.
Но у тебя в примере разделяется список на переднем плане, тогда и цвет линии должен основываться не на заднем фоне, а на переднем. В этом плане у линии цвет не ближе к заднему фону, а дальше от него, но она и слишком сильно от переднего отличается. С другой стороны, если делать линию полностью прозрачной (равна цвету заднего фона), то, по идее, можно добиться эффекта погружения (immersive).
А подсветка кода мне совсем не понравилась. Я давным-давно подогнала тему Obsidian в N++ под себя и с тех пор все остальные какие-то бесконтрастные, как и на сайте. Обычный текст (например переменные) должны больше отличаться от фона, у меня они почти белые, а не серые как у генератора.
ScorpioT1000 так по-моему в той же аське, скайпе Enter можно было переназначать. Если с кого и пошла мода на Enter=отправить, то с них.
Логика у меня простая: если однополосный ввод, то Enter=Отправить. Если большая форма ввода, то Enter=новая строка. С другой стороны это и есть на модальность, которой следует избегать в интерфейсах. Тем, кто чуть-чуть далеки от компьютера, эта логика не дается, потому что мало опыта.
0
6
2 года назад
0

» Администрация XGM / UX сайта xgm и о новых пользователях

Возьмём элентарное. Enter перенос строки, CTRL+Enter всегда верно?
Пишу не глядя: с тех пор как узнала, что на Facebook (в своё время) SHIFT+Enter = новая строка, а Ctrl+Enter = однозначно отправить, - то да. Enter = по усмотрению/настройкам. Теперь добавлю сноску, что я пользователь IBM-compatible PC, потому что спрашиваешь ты не просто так :D

Насчет линий не понятно (смотрю с телефона если что). Можно начать с другой стороны, какой критерий инородности? Объективный по цвету/контрасту или на глаз? А если на глаз, то какая цель и какие ограничения? Допустим, выбранный цвет не должен быть близким к внутреннему или внешнему фону.
0
6
2 года назад
0

» WarCraft 3 / Скачиваем старые и тестовые релизы игры с blizzget

ScorpioT1000 хорошо, спасибо. Но тогда это не метки, а категории. Ибо категории ∈ теги.
То что неряшливо смотрится - я согласна, но в целом, как пошаговое руководство, ни у кого не должно возникнуть проблем. Тем более, что тут в самом деле нужно было собрать несколько источников воедино, чтобы разобраться и использовать:
  1. Buildconfigs
  2. Использование blizzget, проблемы с ним
  3. Запуск игры с -launch
Не ну конечно можно из каждого пункта делать отдельную статью, только они по отдельности практически бесполезны. (да, не юникс-вейно) Как минимум потому, что альтернатив нет. Да и тут интерес это примерно околонулевая группа пользователей таких как я, Firstrun70 и Unryze, которым может понадобиться копаться в разных версиях. Большинству хватит сборки Богдана, поэтому она вынесена вверх.
0
6
2 года назад
Отредактирован Lasto4ka
0

» XGM Team / Stage 13 и Хэллоуин

PUVer на будущее могу только посоветовать addons.mozilla.org/en-US/firefox/addon/form-history-control - восстанавливает поля ввода.
0
6
2 года назад
0

» WarCraft 3 / Скачиваем старые и тестовые релизы игры с blizzget

Мил человек, как тебе может быть что-либо интересно, если ты даже первых двух параграфов не прочитал? Эльрат Просто скачивает старые/любые релизы игры (из новых). Для обладателей лицензии - сразу могут запускать и играть, в обход лаунчера (ну почти, внутриигровую сессию надо поддерживать, т.е. в игре в аккаунт зайти). Без лицензии - просто в файлах поковыряться.
0
6
2 года назад
0

» Администрация XGM / UX сайта xgm и о новых пользователях

А можно глянуть на гайдлайны относительно xgm?
Это вообще ко мне? Я-то не дизайнер, расписать почему мне нужен бюджет в несколько миллионов на реализацию безумно важного и неотложного собственного шрифта я не умею 😅 Ровно как и то, почему именно я считаю тот или иной подход к структурированию и дизайну наиболее эргономичным. Хотя в книге Раскина Интерфейс по-человечески нашла много откликов. и нет, книгу не рекомендую, хотя там важные моменты есть, которые нашли у меня отклик. писал он её почти как научную статью и буквально зад... свой Canon Cat. Который за пределы одно-функционного компьютера по определению уйти не мог. Половина его рассуждений применимо к этому компьютеру только как редактору текста, для многофункциональной, многопрограммной парадигмы половина книги устарела так же как парусник по сравнению с пароходом.
Да, но мы движемся к прегенерации цветов, чтоб юзеры могли сами нарулить себе тему и тут нужно уж очень сурьёзно всё архитектурить.
Выбор хоткеев видел только в мануалах от JetBrains, остальные вообще свято уверены, что кроме WIN больше не существует десктопных ОС.
Ввиду-то я имела другое, но понимаю боль. Это как разница между переводом и локализацией, в которой не только надо перевести (читай, портировать), но и в нужных местах подогнать. Но даже тут пример есть. До Windows в качестве комбинации копирования (и сейчас в терминалах) использовались Ctrl+Insert, Shift+Insert. Пришел Windows, стало CTRL+C, CTRL+V. Стоило ли перенимать и добавлять виндовые клавиши? Я думаю да. Но использовать в приложениях Super/Win-Key это вообще дикость. (Хотя я мечтаю о клавишах F13-F24 и хотела бы еще один модификатор типа CTRL в добавок, только под себя)
1
6
2 года назад
1

» WarCraft 3 / Warcraft 3 Custom Object Converter

Maxlaid совсем переборщил с центрированием...
0
6
2 года назад
0

» WarCraft 3 / Как забиндить предметы?

Биндить за игрока на цифры плохая идея. На цифрах висят бинды на группы юнитов по дефолту.
В Рефе потом еще учитывать надо, что у некоторых Grid Keys включены (все абилки на трех рядах qwer, asdf, zxcv висят).
Если уж на то пошло, забиндить Numpad на мыше, или наоборот, использовать в CustomKeys мышиные кнопки типа нажатия колесика, browser back/forward на использование первых слотов.
0
6
2 года назад
0

» Администрация XGM / UX сайта xgm и о новых пользователях

С большинством не согласен, но есть часть годных вещей.
Потому что мой идеальный UI design - это примерно Windows Classic, самое главное в нем четкое выделения интерактивных кнопок, также четко-размеченное логическое разделение областей.
Фолловеры хз что делать - мертвый функционал, но если выпилить будет бабах.
Стань Дуровым 😁
Маркдауна не будет - он не покрывает и 30% функций.
Тебе как давнишнему пользователю txt2 знаком. Мне как стороннему пользователю и разработчику, которая параллельно публикует на Github - txt2 -без словаря- мануала на втором мониторе даже комментарий не сверстать. Хоть Markdown я и сама ненавижу, но для простых текстов он хорошо подходит. А там где его функционала не хватает - пусть дальше пользуются txt2.
Цветные кнопки - вообще что-то из 2012, как раз уходить от этого надо
Цветные кнопки - отличная зацепка для глаза. И красиво не значит удобно. Вот мне нравится, что главная кнопка Send выделяется цветом. Не надо глазом ничего искать. Туда же искоренение иконок ото всюду. Вы видели контекстное меню в новом Скайпе (без иконок)? Давным-давно там были пиктограммы. И не надо было ЧИТАТЬ каждый пункт, чтобы найти нужный.
Как вам шикарный способ выровнять изображение по центру в markdown?
Да то дурдом, как и все, что выходит за рамки простейшего текста в МД.
А кто сказал, что эти дизайны хороши?
К базовым элементам пользователь уже привык и знает, как чем пользоваться. Тут как добавлять свой вариант горячей клавиши в программу, потому что "он удобнее", тогда как все используют общепринятый, выученный "неудобный" вариант. И до тех пор, пока твоё нововведение не станет превалировать - именно оно и будет неудобным, непонятным пользователю.
Про запутанность меню ничего не говорю, там все ужасно, если лезть дальше прокрутки ленты.
0
6
2 года назад
0

» Администрация XGM / UX сайта xgm и о новых пользователях

Опять поменять нельзя. Без понятия, откуда взялись картинки в самом верху. Вставляла вручную только в нужных местах...
0
6
2 года назад
0

» WarCraft 3 / Как выбрать язык игры и редактора

Язык запечен в карты, т.е. тебе придется и все карты тоже выкачивать. А обычные файлы локализации тебе только меню переведут. Проще через blizzget скачать русскую версию и на нее накатить старую озвучку.
1
6
2 года назад
Отредактирован Lasto4ka
1

» WarCraft 3 / Почему вылетает карта (Reforget)

В игре какой-то баг, ACCESS_VIOLATION от тебя не зависит. Ну то есть, карта может его и вызывает, но быть такого не должно. Разве что на более старых версиях попробывать поиграть, может в 1.33 что-то эдакое добавили. Сомневаюсь, что у кого-то есть желание лезть в код 1.33, тот десяток человек, кто работают с дисассемблированным варом, все новые версии из-за защит стараются избегать.
Тестировать карту на высокой скорости xgm.guru/p/wc3/wgc-utility
Скачать старые версии вара www.hiveworkshop.com/threads/how-to-use-blizzget-to-download-off...
<Exception.Summary:>
ACCESS_VIOLATION DBG-OPTIONS<FunctionsOnly SingleLine> DBG-ADDR<00007FF7C3EE5D50>("Warcraft III.exe") <- DBG-ADDR<00007FF7C49AC735>("Warcraft III.exe") <- DBG-ADDR<00007FF7C56D72BE>("Warcraft III.exe")  DBG-OPTIONS<>
<:Exception.Summary>

<Exception.Assertion:>
Thread 0x000025f0 "Main Thread" [Stack Base: 0x000000A176800000 Used Space: 45216/2097152 bytes]
DBG-ADDR<00007FF7C3EE5D50>("Warcraft III.exe")
0
6
2 года назад
0

» WarCraft 3 / Как открыть и изменить файл формата .w3a не в WE?

Отправила в ЛС пока что. Потестируй.
0
6
2 года назад
0

» WarCraft 3 / 6. Логические выражения.

  • 6.7. Функция rawequal без введения в метатаблицы тут вообще не к месту. Лучше убрать.
  • 6.9. "Хотя 3 уже подразумевает это: если вы исходите из других языков, помните, что 0, а, пустая строка считается как true в условных контекстах в Lua." - может "что 0 и пустая строка"?
Таблицы истинности, а не правды. Далее: "Как вы можете видеть," вообще-то "Как видите", без кальки с английского 😤
А вот и оригинал: riptutorial.com/lua/example/13833/truth-tables
0
6
2 года назад
0

» WarCraft 3 / 4. Несколько полезных базовых функций Lua.

require делается через эту систему сборки github.com/ceres-wc3/ceres наример. Есть ещё какая-то китайская на гитхабе. В самой игре - лучшее, что можно сделать, это через прелоад файлы. И то, им нельзя быть чистыми Луа скриптами, а иметь специально написанные комментарии, чтобы Lua-код преобразование через jass2lua пережил.
Короче говоря, нету require в WC3, работы с файлами у карт тоже нет. То что есть - новичкам не по зубам.
0
6
2 года назад
0

» WarCraft 3 / Как открыть и изменить файл формата .w3a не в WE?

Так а сам .w3a файл и т. п. ничем не защищаются и не портятся. Я конечно могу на скорую руку набросать программу для текстового редактирования... Ты карту отдельными файлами редактируешь чтоли? Чтобы карта снова открывалась обычно много ума не надо. Архив MPQ новый создать и файлы туда перенести. В файле регионов обычно херь прописывается, т.е. его пустым заменить надо (все регионы в war3map.j конвертируются).
А там уже можно будет нормально редактором пользоваться.
0
6
2 года назад
Отредактирован Lasto4ka
0

» WarCraft 3 / 6. Логические выражения.

if a and b and c then  
  ...  
end
Там ниже по тексту говорится только про nil. Но забыл, что false тоже как nil будет воспринят. Т.е.:
if false then
-- и
if nil then
Это одно и то же - внутрь условие не попадешь, потому что оно ложное
0
6
2 года назад
Отредактирован Lasto4ka
0

» WarCraft 3 / 4. Несколько полезных базовых функций Lua.

dofile объясняется, только его в WC3 нет. Как и require, если не программировать под какую-нибудь систему сборки карт. Как минимум напомнить об этом надо.