20

» Unryze Jass API / Unryze Jass API

Интересно насколько данный патч пользуется спросом?
Сам не воспользуюсь, так как функционала хватает.
Тяжело сказать точную цифру, ибо нет целевой платформы, но как минимум 3 карты на ужапи есть, 2 из них правда вьетнамские.
20

» Unryze Jass API / UjAPI - Что нового?

Вышла новая версия! Прокрутить к ресурсу

v1.0.23.91

  1. Новые Нативные Функции:
native MathRealClamp takes real value, real min, real max returns real
native MathRealLerp takes real a, real b, real t returns real
native MathIntegerClamp takes integer value, integer min, integer max returns integer
native SetFrameWidth takes framehandle whichFrame, real width returns nothing
native SetFrameHeight takes framehandle whichFrame, real height returns nothing
native SetFrameTextVerticalAlignment takes framehandle whichFrame, textaligntype verticalAlign returns nothing
native SetFrameTextHorizontalAlignment takes framehandle whichFrame, textaligntype horizontalAlign returns nothing
native GetFrameTexture takes framehandle whichFrame, integer textureId returns string
native GetFrameTrackState takes framehandle whichFrame returns boolean
native SetFrameTrackState takes framehandle whichFrame, integer trackState returns nothing 0 - NONE | 1 - Track | 2 - Ignore Track
native SetFrameTextureEx takes framehandle whichFrame, string backgroundTextureFile, string borderTextureFile, integer textureId, boolean blend returns nothing
  1. CSimpleTexture теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXTURE".
  2. CSimpleFontString теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXT".
  3. FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP теперь полноценно работают со CSimpleButtons и со всеми их дочерними типами.
  4. Исправлено нерабочее Frame API для CScrollBar.
  5. Исправлен инверсированный флаг в BlzUnitHideAbility.
  6. Исправлены все нестандартные/новые события, которые работали лишь с последним добавленным действием.
    Спасибо пользователю Radioactive за то, что он заметил и сообщил об этой серьёзной проблеме.
  7. В очередной раз исправлены CSpellbook взимодействия и ABILITY_SF_FIELD_ABILITY_LIST.
  8. Исправлена критическая ошибка на загрузке карт на 1.27a/1.27b/1.28f.
    Пометка: это была новая ошибка, которая "всплыла" в виду снятия лимита RCString (джасс строк).
  9. Исправлена SetAbilityString не вызывающая клонирование UI данных.
  10. Исправлена ошибка, в виду которой StringReplace заменяла лишь 1 символ, заместо всех.
  11. Исправлена ошибка, в виду которой StringReplace не срабатывала, если заменяемая строка была пустой.
  12. Слегка увеличено время ожидания обработки пакетов, это должно исправить проблему, по которой UjAPI иногда не запускало карту, если она была указана в аргументах запуска.
  13. Добавлена Jass секция в UjAPI аппликацию.
  14. Добавлена опция Dev Mode в Jass секцию. Включение этой опции даст UjAPI возможность отображать имя текущей выполняемой функции в консоли.
  15. Добавлена опция Log Actions в Jass секцию. Включение этой опции даст UjAPI возможность отображать каждый шаг выполнения джасс байткода в консоли.
    Пример: ADD real -> -2816.000000 + 512.000000 = -2304.000000.
    Note: there are a total of 43 different types of operations (opcodes).
  16. Добавлена "-jass" CLI опция, для получения доступа к новому функционалу как Dev Mode и Log Actions.
  17. Добавлена "dev" опция для "-jass" CLI опции.
    Пример: "-jass dev".
  18. Добавлена "logactions" опция для "-jass" CLI опции.
    Пример: "-jass logactions".
  19. Get/SetFrameAlpha теперь должны работать с CSimpleFrames, у которых есть текстуры, а также со всеми CSimpleRegions.
20

» Unryze Jass API / UjAPI

Вышла новая версия! Прокрутить к ресурсу

v1.0.23.91

  1. Новые Нативные Функции:
native MathRealClamp takes real value, real min, real max returns real
native MathRealLerp takes real a, real b, real t returns real
native MathIntegerClamp takes integer value, integer min, integer max returns integer
native SetFrameWidth takes framehandle whichFrame, real width returns nothing
native SetFrameHeight takes framehandle whichFrame, real height returns nothing
native SetFrameTextVerticalAlignment takes framehandle whichFrame, textaligntype verticalAlign returns nothing
native SetFrameTextHorizontalAlignment takes framehandle whichFrame, textaligntype horizontalAlign returns nothing
native GetFrameTexture takes framehandle whichFrame, integer textureId returns string
native GetFrameTrackState takes framehandle whichFrame returns boolean
native SetFrameTrackState takes framehandle whichFrame, integer trackState returns nothing 0 - NONE | 1 - Track | 2 - Ignore Track
native SetFrameTextureEx takes framehandle whichFrame, string backgroundTextureFile, string borderTextureFile, integer textureId, boolean blend returns nothing
  1. CSimpleTexture теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXTURE".
  2. CSimpleFontString теперь могут быть созданы через CreateFrameByType, используя фреймтип "SIMPLETEXT".
  3. FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP теперь полноценно работают со CSimpleButtons и со всеми их дочерними типами.
  4. Исправлено нерабочее Frame API для CScrollBar.
  5. Исправлен инверсированный флаг в BlzUnitHideAbility.
  6. Исправлены все нестандартные/новые события, которые работали лишь с последним добавленным действием.
    Спасибо пользователю Radioactive за то, что он заметил и сообщил об этой серьёзной проблеме.
  7. В очередной раз исправлены CSpellbook взимодействия и ABILITY_SF_FIELD_ABILITY_LIST.
  8. Исправлена критическая ошибка на загрузке карт на 1.27a/1.27b/1.28f.
    Пометка: это была новая ошибка, которая "всплыла" в виду снятия лимита RCString (джасс строк).
  9. Исправлена SetAbilityString не вызывающая клонирование UI данных.
  10. Исправлена ошибка, в виду которой StringReplace заменяла лишь 1 символ, заместо всех.
  11. Исправлена ошибка, в виду которой StringReplace не срабатывала, если заменяемая строка была пустой.
  12. Слегка увеличено время ожидания обработки пакетов, это должно исправить проблему, по которой UjAPI иногда не запускало карту, если она была указана в аргументах запуска.
  13. Добавлена Jass секция в UjAPI аппликацию.
  14. Добавлена опция Dev Mode в Jass секцию. Включение этой опции даст UjAPI возможность отображать имя текущей выполняемой функции в консоли.
  15. Добавлена опция Log Actions в Jass секцию. Включение этой опции даст UjAPI возможность отображать каждый шаг выполнения джасс байткода в консоли.
    Пример: ADD real -> -2816.000000 + 512.000000 = -2304.000000.
    Note: there are a total of 43 different types of operations (opcodes).
  16. Добавлена "-jass" CLI опция, для получения доступа к новому функционалу как Dev Mode и Log Actions.
  17. Добавлена "dev" опция для "-jass" CLI опции.
    Пример: "-jass dev".
  18. Добавлена "logactions" опция для "-jass" CLI опции.
    Пример: "-jass logactions".
  19. Get/SetFrameAlpha теперь должны работать с CSimpleFrames, у которых есть текстуры, а также со всеми CSimpleRegions.
20

» Блог им. WriteCoin / Встречная агрессия

Судя о цвету ников это не хигама
Это на моём сервере, куда он залетел видать после того как его позвал goodlyhero, зачем-то. Сам же проскроллил вверх, заскриншотил, обиделся и сделал то, что сделал. В целом предсказуемо.
Я бы скорее сказал, что большинство программистов - замкнутые люди ввиду специфики своей профессии, а замкнутость порождает кратковременные вспышки агрессии и порой неадекватное поведение к окружающим.
Линус Торвальдс, Билл Гейтс, Грейс Хоппер, Кен Томпсон и закончу Джеймс Гослингом. Это к тому, что ты судишь людей базируясь на вырванном контексте или на личном опыте - перестань, не уподобляйся райткоину, именно вот по таким высказываниям они и заслужил ту рецензию, которую имеет.
Когда человек на 1 слово бежит писать целый блог желчи и горения - это и называется быть ментально неуравновешенным, однако даже не это была причина использования слова "больной", ибо я ему это слово неоднократно уже говорил, когда он был озабочен cJass'ом и пытался сделать свой псевдоязык (наверное пробелы в памяти мешают ему это вспомнить), где он пытался сократить написание любой функции и т.д., хотя по итогу получалась каша-кашей.
Ну и подкрепим мои слова в его же стиле:
Ей богу, сходи к психологу, а то по итогу тебе понадобится психиатр.
Загруженные файлы
20

» Unryze Jass API / UjAPI

Да изи, рынок шмота в браузере между всеми игроками карты.
Кому ещё что-то продавать в СНГ то...
Загруженные файлы
20

» Unryze Jass API / UjAPI

Ну, это всё конечно интересно, но юзкейс очень тяжело оправдать, а так, ну +- да, можно сделать.
20

» Unryze Jass API / UjAPI

Теперь никакого трахания с арифметикой

TextFileOpen
Если это есть, должен быть и SendHttpRequest xD ну или хотябы socket/bind/accept/send
TextFileOpen ограничен очень сильно в плане папок, а вот ограничить SendHttpRequest, чтобы не было "ддос" атак или банально флуда - куда сложнее. Я и так хожу на ОЧЕНЬ тонкой грани безопасности и такое давать думаю - слишком дикий риск отстрелить не только себе, но и другим пятую точку.
20

» Unryze Jass API / UjAPI - API Юнитов

SetUnitPortrait нету что-ли?
Через SetUnitStringField и UNIT_SF_PORTRAIT.
20

» Unryze Jass API / UjAPI - API Заклинаний

Добавлено в Заклинания:
native IsAbilityBaseTargetAllowed 						takes integer abilityId, widget source, widget target returns boolean // source can be null
Добавлено в Баффы:
native GetBuffTypeId									takes buff whichBuff returns integer
native GetBuffBaseTypeId								takes buff whichBuff returns integer
native GetBuffOwner										takes buff whichbuff returns unit
native GetBuffLevel										takes buff whichBuff returns integer
native SetBuffLevel										takes buff whichBuff, integer level returns nothing

native GetFilterBuff									takes nothing returns buff
native GetEnumBuff										takes nothing returns buff

native EnumUnitBuffs									takes unit whichUnit, boolexpr whichBoolexpr, code whichCode returns boolean

native GetTriggerBuff									takes nothing returns buff
native GetTriggerBuffSourceAbility						takes nothing returns ability
native GetTriggerBuffSourceUnit							takes nothing returns unit
native GetTriggerBuffTarget								takes nothing returns unit
20

» Unryze Jass API / UjAPI - API Юнитов

Добавлено:
	native GetUnitCollisionType 							takes unit whichUnit returns collisiontype
	native SetUnitCollisionType 							takes unit whichUnit, collisiontype collisionType returns nothing
Удалено:
native SetUnitMoveTypeByIndex 							takes unit whichUnit, integer moveIndex returns nothing
20

» Unryze Jass API / UjAPI - Тайпкастеры

Добавлено:
	native IntToChar										takes integer i returns string
	native BitwiseSetBit									takes integer i, integer bitIndex, integer bitValue returns integer
	native BitwiseSetByte									takes integer i, integer byteIndex, integer byteValue returns integer
	native BitwiseToInteger									takes integer byte1, integer byte2, integer byte3, integer byte4 returns integer
20

» Unryze Jass API / UjAPI - Константы

Добавлено:
	constant pathingaitype	   			PATHING_AI_TYPE_FOOT				  						= ConvertPathingAIType(0)
	constant pathingaitype	   			PATHING_AI_TYPE_AMPHIBIOUS				  					= ConvertPathingAIType(64)
	constant pathingaitype	   			PATHING_AI_TYPE_FLOAT				  						= ConvertPathingAIType(128)
	constant pathingaitype	   			PATHING_AI_TYPE_FLY				  							= ConvertPathingAIType(192) // MOVE_TYPE_AMPHIBIOUS | MOVE_TYPE_FLOAT
	constant collisiontype	   			COLLISION_TYPE_NONE			   								= ConvertCollisionType(0)
	constant collisiontype	   			COLLISION_TYPE_ANY			   								= ConvertCollisionType(1)
	constant collisiontype	   			COLLISION_TYPE_FOOT			   								= ConvertCollisionType(2)
	constant collisiontype	   			COLLISION_TYPE_AIR			   								= ConvertCollisionType(4)
	constant collisiontype	   			COLLISION_TYPE_BUILDING			   							= ConvertCollisionType(8)
	constant collisiontype	   			COLLISION_TYPE_HARVESTER			   						= ConvertCollisionType(16)
	constant collisiontype	   			COLLISION_TYPE_BLIGHTED			   							= ConvertCollisionType(32)
	constant collisiontype	   			COLLISION_TYPE_FLOAT			   							= ConvertCollisionType(64)
	constant collisiontype	   			COLLISION_TYPE_AMPHIBIOUS			   						= ConvertCollisionType(128)
	constant collisiontype	   			COLLISION_TYPE_GROUND			   							= ConvertCollisionType(202) // COLLISION_TYPE_FOOT | COLLISION_TYPE_BUILDING | COLLISION_TYPE_FLOAT | COLLISION_TYPE_AMPHIBIOUS
	constant originframetype			ORIGIN_FRAME_INVENTORY_COVER_FRAME							= ConvertOriginFrameType(45)
	constant originframetype			ORIGIN_FRAME_UNIT_TIP										= ConvertOriginFrameType(46)
	constant unitevent 					EVENT_UNIT_DECAY_FINISHED				 					= ConvertUnitEvent(318)
	constant playerunitevent 			EVENT_PLAYER_UNIT_DECAY_FINISHED				 			= ConvertPlayerUnitEvent(319)
	constant frameeventtype		 		FRAMEEVENT_CHECKBOX_CHANGED		 							= ConvertFrameEventType(17)
	constant frameeventtype		 		FRAMEEVENT_CONTROL_RELEASE									= ConvertFrameEventType(18)
	constant frameeventtype		 		FRAMEEVENT_CONTROL_DRAG										= ConvertFrameEventType(19)
	constant unitintegerfield 			UNIT_IF_COLLISION_TYPE										= ConvertUnitIntegerField('ucot')
	constant unitintegerfield 			UNIT_IF_PATHING_AI											= ConvertUnitIntegerField('upai')
	constant unitintegerfield 			UNIT_IF_PATHING_TYPE										= ConvertUnitIntegerField('upat')
20

» Unryze Jass API / UjAPI - Конвертаторы

Добавлено:
constant native ConvertPathingAIType takes integer i returns pathingaitype
constant native ConvertCollisionType takes integer i returns collisiontype
20

» Unryze Jass API / UjAPI - Типы/Хендлы

Добавлено:
type pathingaitype extends handle
type collisiontype extends handle
20

» Unryze Jass API / UjAPI - Команды Запуска (CLI)

Добавлено:
-nomapsizelimit | - | Подгружает модуль UnlockMapSize.dll и убирает лимит веса карт в сетевом режиме игры.
20

» Unryze Jass API / UjAPI - Что нового?

Вышла новая версия! Прокрутить к ресурсу

v1.0.22.88

  1. Новые Типы:
type pathingaitype extends handle
type collisiontype extends handle
type textfilehandle extends handle
  1. Новые Конвертеры:
constant native ConvertPathingAIType takes integer i returns pathingaitype
constant native ConvertCollisionType takes integer i returns collisiontype
  1. Новые Константы:
constant pathingaitype PATHING_AI_TYPE_FOOT = ConvertPathingAIType(0)
constant pathingaitype PATHING_AI_TYPE_AMPHIBIOUS = ConvertPathingAIType(64)
constant pathingaitype PATHING_AI_TYPE_FLOAT = ConvertPathingAIType(128)
constant pathingaitype PATHING_AI_TYPE_FLY = ConvertPathingAIType(192) MOVE_TYPE_AMPHIBIOUS | MOVE_TYPE_FLOAT
constant collisiontype COLLISION_TYPE_NONE = ConvertCollisionType(0)
constant collisiontype COLLISION_TYPE_ANY = ConvertCollisionType(1)
constant collisiontype COLLISION_TYPE_FOOT = ConvertCollisionType(2)
constant collisiontype COLLISION_TYPE_AIR = ConvertCollisionType(4)
constant collisiontype COLLISION_TYPE_BUILDING = ConvertCollisionType(8)
constant collisiontype COLLISION_TYPE_HARVESTER = ConvertCollisionType(16)
constant collisiontype COLLISION_TYPE_BLIGHTED = ConvertCollisionType(32)
constant collisiontype COLLISION_TYPE_FLOAT = ConvertCollisionType(64)
constant collisiontype COLLISION_TYPE_AMPHIBIOUS = ConvertCollisionType(128)
constant collisiontype COLLISION_TYPE_GROUND = ConvertCollisionType(202) COLLISION_TYPE_FOOT | COLLISION_TYPE_BUILDING | COLLISION_TYPE_FLOAT | COLLISION_TYPE_AMPHIBIOUS
constant originframetype ORIGIN_FRAME_INVENTORY_COVER_FRAME = ConvertOriginFrameType(45)
constant originframetype ORIGIN_FRAME_UNIT_TIP = ConvertOriginFrameType(46)
constant unitevent EVENT_UNIT_DECAY_FINISHED = ConvertUnitEvent(318)
constant playerunitevent EVENT_PLAYER_UNIT_DECAY_FINISHED = ConvertPlayerUnitEvent(319)
constant frameeventtype FRAMEEVENT_CHECKBOX_CHANGED = ConvertFrameEventType(17)
constant frameeventtype FRAMEEVENT_CONTROL_RELEASE = ConvertFrameEventType(18)
constant frameeventtype FRAMEEVENT_CONTROL_DRAG = ConvertFrameEventType(19)
constant unitintegerfield UNIT_IF_COLLISION_TYPE = ConvertUnitIntegerField('ucot')
constant unitintegerfield UNIT_IF_PATHING_AI = ConvertUnitIntegerField('upai')
constant unitintegerfield UNIT_IF_PATHING_TYPE = ConvertUnitIntegerField('upat')
  1. Удалённые Нативные Функции:
native SetUnitMoveTypeByIndex takes unit whichUnit, integer moveIndex returns nothing
  1. Новые Нативные Функции:
native IntToChar takes integer i returns string
native BitwiseSetBit takes integer i, integer bitIndex, integer bitValue returns integer
native BitwiseSetByte takes integer i, integer byteIndex, integer byteValue returns integer
native BitwiseToInteger takes integer byte1, integer byte2, integer byte3, integer byte4 returns integer

native GetTimeStamp takes boolean isLocalTime, integer isMiliseconds returns string
native ConsoleEnable takes boolean flag returns nothing
native ConsolePrint takes string s returns nothing

native TextFileOpen takes string filePath returns textfilehandle
native TextFileGetPath takes textfilehandle whichTextFile returns string
native TextFileClose takes textfilehandle whichTextFile returns nothing
native TextFileClear takes textfilehandle whichTextFile returns nothing
native TextFileErase takes textfilehandle whichTextFile returns nothing
native TextFileCountLines takes textfilehandle whichTextFile returns integer
native TextFileReadLine takes textfilehandle whichTextFile, integer lineNumber returns string
native TextFileReadAll takes textfilehandle whichTextFile returns string
native TextFileWriteLine takes textfilehandle whichTextFile, string text returns nothing

native IsCursorEnabled takes nothing returns boolean
native SetCursorEnabled takes boolean enable returns nothing
native IsCursorAnimationLocked takes nothing returns boolean
native SetCursorAnimationLocked takes boolean isLock returns nothing
native IsFrameDraggable takes framehandle whichFrame returns boolean
native SetFrameDraggable takes framehandle whichFrame, boolean enabled returns nothing
native GetFrameModel takes framehandle whichFrame returns string
native SetFrameSpriteMaterialScale takes framehandle whichFrame, real sizeX, real sizeY, real sizeZ returns nothing
native IsWidgetTipEnabled takes nothing returns boolean
native SetWidgetTipEnabled takes boolean enable returns nothing
native IsAbilityBaseTargetAllowed takes integer abilityId, widget source, widget target returns boolean source can be null
native IsWidgetTargetAllowed takes widget source, widget target, targetflag whichFlags returns boolean

native GetUnitCollisionType takes unit whichUnit returns collisiontype
native SetUnitCollisionType takes unit whichUnit, collisiontype collisionType returns nothing
  1. Изменение Констант:
JASS_MAX_ARRAY_SIZE increased from 8192 to 262144.
  1. Исправлена IsSpecialEffectVisible, ранее возвращала инверсное значение.
  2. Исправлена ShowFrame, теперь она полноценно работает с CSimpleRegion/CSimpleTexture/CSimpleFrame и со всеми их дочерними типами.
  3. SetFrameTexture изменено имя аргумента "flag" на "textureId".
  4. SetFrameTexture теперь работает на CConsoleUI.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01.blp", 0, false )
Пояснение: Консоль имеет 4 "части" потому индексы 0-3.
  1. Исправлена IsAbilityTargetAllowed, теперь она правильно определяет все флаги целей.
  2. Тип хендла targetflag type теперь работает по принципу CDataFieldWar3, чтобы избежать критической ошибки на флагах выше 0x100000 конвертируемые через ConvertTargetFlag.
  3. Исправлено поле ITEM_SF_ABILITY_LIST возвращающая "<null>".
  4. Исправлена критическая ошибка вызванная ABILITY_SLF_SPELL_LIST.
  5. ABILITY_SLF_SPELL_LIST опция теперь так же работает и на базовом заклинании и на интстанцируемом (Get и Set).
Примечание: данное поле игнорирует минимальное/максимальное количество заклинании, потому что мне было лень это делать.
Пример использования: call SetAbilityStringLevelField( GetUnitAbility( u, 'Aspb' ), ABILITY_SLF_SPELL_LIST, 0, "AHad,AHhb,AHbz,AUau" )
  1. SetFrameTexture теперь автоматически будет проверять расширения .tga/.blp (в этом порядке) если в пути файла отсутствует расширение файла.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01", 0, false ), автоматически добавит .blp в конец пути.
  1. Исправлено по-большей части сломанное API синхронизации, пометка для себя попытка инстансирования CGameWar3 - была ужасно тупой затеей.
  2. Исправлен очень-очень старый баг со спеллбуком, когда он был частью предмета и этот предмет был переложен из одного слота в другой, тем самым применение предмета не прорисовывало эти заклинания.
Пометка: старый метод "исправления" этой ошибки являлся банальным выбрасыванием и подбором предмета.
  1. Значительно улучшено Frame API для CCursor фрейма.
  2. Удалён (или по крайней мере сильно увеличен) лимит RCString (Джасс строки).
Пометка: оригинальный лимит был 4097 (4096 + 1 для нуль-терминирования).
  1. Отладчик Jass ошибок, теперь печатает ошибки сгруппировано.
  2. Исправлена ошибка ввиду которой функция GetFrameChildByIndex не выдавала фрейм на 0 индексе.
  3. Исправлена критическая ошибка с SetFrameEnabled и BlzSetFrameEnable на Backdrop фреймах.
  4. Исправлен нерабочий внутренний обработчик ITEM_IF полей. (одним из этих полей являлся ITEM_IF_GOLD_COST).
  5. Переделаны GetFrameChild и GetFrameChildrenCount.
  6. FRAMEEVENT_MOUSE_ENTER и FRAMEEVENT_MOUSE_LEAVE теперь могут быть применены с IconDamage, IconHero, IconArmor, и т.д..
  7. Исправлены некоторые "неподдерживаемые" клавиши, такие как OSKEY_TAB, VK_SHIFT, и т.д..
  8. Потенциально полностью исправлена ошибка "паузы игры", которая ломала одиночный режим при альт-табе, если какой-либо KeyEvent был зарегистрирован.
Пояснение: этот баг только "преследовал" режим одиночной игры и никак не мог произойти в локальной/мультиплеерном режиме.
  1. Исправлены нерабочие события FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP для всех CControl фреймов.
  2. Исправлена RegisterFrameMouseButton неправильно обрабатывающая mousebuttontype, MIDDLE считывался как RIGHT, а RIGHT как MIDDLE.
  3. Исправлена ошибка в UjAPILauncher.exe, которая порой не позволяла запустить игру в виду полноэкранного режима.
  4. Исправлена ошибка в UjAPILauncher.exe, которая не позволяла CLI обработчику запустить игру, если все настройки были пустые.
  5. Поле юнита COLLISION_SIZE теперь работает в уникальном/инстанцируемом типа. Данное поле не меняет базовые данные, для изменения базовых данных используйте SetUnitBaseRealField, и т.д..
  6. Get/SetUnitMoveAIType "Move" переименован в "Pathing" и они теперь используют pathingaitype как аргументы.
  7. Get/SetUnitMoveType "Move" переименован в "Pathing" и они теперь используют pathingtype как аргументы.
  8. Добавлен модуль UnlockMapSizeLimit.dll.
  9. Добавлена опция Remove Map Size Limit в UjAPILauncher.
  10. Добавлена CLI команда -nomapsizelimit, для загрузки UnlockMapSizeLimit модуля
20

» Unryze Jass API / UjAPI

Вышла новая версия! Прокрутить к ресурсу

v1.0.22.88

  1. Новые Типы:
type pathingaitype extends handle
type collisiontype extends handle
type textfilehandle extends handle
  1. Новые Конвертеры:
constant native ConvertPathingAIType takes integer i returns pathingaitype
constant native ConvertCollisionType takes integer i returns collisiontype
  1. Новые Константы:
constant pathingaitype PATHING_AI_TYPE_FOOT = ConvertPathingAIType(0)
constant pathingaitype PATHING_AI_TYPE_AMPHIBIOUS = ConvertPathingAIType(64)
constant pathingaitype PATHING_AI_TYPE_FLOAT = ConvertPathingAIType(128)
constant pathingaitype PATHING_AI_TYPE_FLY = ConvertPathingAIType(192) MOVE_TYPE_AMPHIBIOUS | MOVE_TYPE_FLOAT
constant collisiontype COLLISION_TYPE_NONE = ConvertCollisionType(0)
constant collisiontype COLLISION_TYPE_ANY = ConvertCollisionType(1)
constant collisiontype COLLISION_TYPE_FOOT = ConvertCollisionType(2)
constant collisiontype COLLISION_TYPE_AIR = ConvertCollisionType(4)
constant collisiontype COLLISION_TYPE_BUILDING = ConvertCollisionType(8)
constant collisiontype COLLISION_TYPE_HARVESTER = ConvertCollisionType(16)
constant collisiontype COLLISION_TYPE_BLIGHTED = ConvertCollisionType(32)
constant collisiontype COLLISION_TYPE_FLOAT = ConvertCollisionType(64)
constant collisiontype COLLISION_TYPE_AMPHIBIOUS = ConvertCollisionType(128)
constant collisiontype COLLISION_TYPE_GROUND = ConvertCollisionType(202) COLLISION_TYPE_FOOT | COLLISION_TYPE_BUILDING | COLLISION_TYPE_FLOAT | COLLISION_TYPE_AMPHIBIOUS
constant originframetype ORIGIN_FRAME_INVENTORY_COVER_FRAME = ConvertOriginFrameType(45)
constant originframetype ORIGIN_FRAME_UNIT_TIP = ConvertOriginFrameType(46)
constant unitevent EVENT_UNIT_DECAY_FINISHED = ConvertUnitEvent(318)
constant playerunitevent EVENT_PLAYER_UNIT_DECAY_FINISHED = ConvertPlayerUnitEvent(319)
constant frameeventtype FRAMEEVENT_CHECKBOX_CHANGED = ConvertFrameEventType(17)
constant frameeventtype FRAMEEVENT_CONTROL_RELEASE = ConvertFrameEventType(18)
constant frameeventtype FRAMEEVENT_CONTROL_DRAG = ConvertFrameEventType(19)
constant unitintegerfield UNIT_IF_COLLISION_TYPE = ConvertUnitIntegerField('ucot')
constant unitintegerfield UNIT_IF_PATHING_AI = ConvertUnitIntegerField('upai')
constant unitintegerfield UNIT_IF_PATHING_TYPE = ConvertUnitIntegerField('upat')
  1. Удалённые Нативные Функции:
native SetUnitMoveTypeByIndex takes unit whichUnit, integer moveIndex returns nothing
  1. Новые Нативные Функции:
native IntToChar takes integer i returns string
native BitwiseSetBit takes integer i, integer bitIndex, integer bitValue returns integer
native BitwiseSetByte takes integer i, integer byteIndex, integer byteValue returns integer
native BitwiseToInteger takes integer byte1, integer byte2, integer byte3, integer byte4 returns integer

native GetTimeStamp takes boolean isLocalTime, integer isMiliseconds returns string
native ConsoleEnable takes boolean flag returns nothing
native ConsolePrint takes string s returns nothing

native TextFileOpen takes string filePath returns textfilehandle
native TextFileGetPath takes textfilehandle whichTextFile returns string
native TextFileClose takes textfilehandle whichTextFile returns nothing
native TextFileClear takes textfilehandle whichTextFile returns nothing
native TextFileErase takes textfilehandle whichTextFile returns nothing
native TextFileCountLines takes textfilehandle whichTextFile returns integer
native TextFileReadLine takes textfilehandle whichTextFile, integer lineNumber returns string
native TextFileReadAll takes textfilehandle whichTextFile returns string
native TextFileWriteLine takes textfilehandle whichTextFile, string text returns nothing

native IsCursorEnabled takes nothing returns boolean
native SetCursorEnabled takes boolean enable returns nothing
native IsCursorAnimationLocked takes nothing returns boolean
native SetCursorAnimationLocked takes boolean isLock returns nothing
native IsFrameDraggable takes framehandle whichFrame returns boolean
native SetFrameDraggable takes framehandle whichFrame, boolean enabled returns nothing
native GetFrameModel takes framehandle whichFrame returns string
native SetFrameSpriteMaterialScale takes framehandle whichFrame, real sizeX, real sizeY, real sizeZ returns nothing
native IsWidgetTipEnabled takes nothing returns boolean
native SetWidgetTipEnabled takes boolean enable returns nothing
native IsAbilityBaseTargetAllowed takes integer abilityId, widget source, widget target returns boolean source can be null
native IsWidgetTargetAllowed takes widget source, widget target, targetflag whichFlags returns boolean

native GetUnitCollisionType takes unit whichUnit returns collisiontype
native SetUnitCollisionType takes unit whichUnit, collisiontype collisionType returns nothing
  1. Изменение Констант:
JASS_MAX_ARRAY_SIZE increased from 8192 to 262144.
  1. Исправлена IsSpecialEffectVisible, ранее возвращала инверсное значение.
  2. Исправлена ShowFrame, теперь она полноценно работает с CSimpleRegion/CSimpleTexture/CSimpleFrame и со всеми их дочерними типами.
  3. SetFrameTexture изменено имя аргумента "flag" на "textureId".
  4. SetFrameTexture теперь работает на CConsoleUI.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01.blp", 0, false )
Пояснение: Консоль имеет 4 "части" потому индексы 0-3.
  1. Исправлена IsAbilityTargetAllowed, теперь она правильно определяет все флаги целей.
  2. Тип хендла targetflag type теперь работает по принципу CDataFieldWar3, чтобы избежать критической ошибки на флагах выше 0x100000 конвертируемые через ConvertTargetFlag.
  3. Исправлено поле ITEM_SF_ABILITY_LIST возвращающая "<null>".
  4. Исправлена критическая ошибка вызванная ABILITY_SLF_SPELL_LIST.
  5. ABILITY_SLF_SPELL_LIST опция теперь так же работает и на базовом заклинании и на интстанцируемом (Get и Set).
Примечание: данное поле игнорирует минимальное/максимальное количество заклинании, потому что мне было лень это делать.
Пример использования: call SetAbilityStringLevelField( GetUnitAbility( u, 'Aspb' ), ABILITY_SLF_SPELL_LIST, 0, "AHad,AHhb,AHbz,AUau" )
  1. SetFrameTexture теперь автоматически будет проверять расширения .tga/.blp (в этом порядке) если в пути файла отсутствует расширение файла.
Пример: call SetFrameTexture( frm, "UI\\Console\\Orc\\OrcUITile01", 0, false ), автоматически добавит .blp в конец пути.
  1. Исправлено по-большей части сломанное API синхронизации, пометка для себя попытка инстансирования CGameWar3 - была ужасно тупой затеей.
  2. Исправлен очень-очень старый баг со спеллбуком, когда он был частью предмета и этот предмет был переложен из одного слота в другой, тем самым применение предмета не прорисовывало эти заклинания.
Пометка: старый метод "исправления" этой ошибки являлся банальным выбрасыванием и подбором предмета.
  1. Значительно улучшено Frame API для CCursor фрейма.
  2. Удалён (или по крайней мере сильно увеличен) лимит RCString (Джасс строки).
Пометка: оригинальный лимит был 4097 (4096 + 1 для нуль-терминирования).
  1. Отладчик Jass ошибок, теперь печатает ошибки сгруппировано.
  2. Исправлена ошибка ввиду которой функция GetFrameChildByIndex не выдавала фрейм на 0 индексе.
  3. Исправлена критическая ошибка с SetFrameEnabled и BlzSetFrameEnable на Backdrop фреймах.
  4. Исправлен нерабочий внутренний обработчик ITEM_IF полей. (одним из этих полей являлся ITEM_IF_GOLD_COST).
  5. Переделаны GetFrameChild и GetFrameChildrenCount.
  6. FRAMEEVENT_MOUSE_ENTER и FRAMEEVENT_MOUSE_LEAVE теперь могут быть применены с IconDamage, IconHero, IconArmor, и т.д..
  7. Исправлены некоторые "неподдерживаемые" клавиши, такие как OSKEY_TAB, VK_SHIFT, и т.д..
  8. Потенциально полностью исправлена ошибка "паузы игры", которая ломала одиночный режим при альт-табе, если какой-либо KeyEvent был зарегистрирован.
Пояснение: этот баг только "преследовал" режим одиночной игры и никак не мог произойти в локальной/мультиплеерном режиме.
  1. Исправлены нерабочие события FRAMEEVENT_MOUSE_DOWN и FRAMEEVENT_MOUSE_UP для всех CControl фреймов.
  2. Исправлена RegisterFrameMouseButton неправильно обрабатывающая mousebuttontype, MIDDLE считывался как RIGHT, а RIGHT как MIDDLE.
  3. Исправлена ошибка в UjAPILauncher.exe, которая порой не позволяла запустить игру в виду полноэкранного режима.
  4. Исправлена ошибка в UjAPILauncher.exe, которая не позволяла CLI обработчику запустить игру, если все настройки были пустые.
  5. Поле юнита COLLISION_SIZE теперь работает в уникальном/инстанцируемом типа. Данное поле не меняет базовые данные, для изменения базовых данных используйте SetUnitBaseRealField, и т.д..
  6. Get/SetUnitMoveAIType "Move" переименован в "Pathing" и они теперь используют pathingaitype как аргументы.
  7. Get/SetUnitMoveType "Move" переименован в "Pathing" и они теперь используют pathingtype как аргументы.
  8. Добавлен модуль UnlockMapSizeLimit.dll.
  9. Добавлена опция Remove Map Size Limit в UjAPILauncher.
  10. Добавлена CLI команда -nomapsizelimit, для загрузки UnlockMapSizeLimit модуля
20

» WarCraft 3 / Циклы и их лимиты (+ способы обхода лимитов)

  1. TriggerRegisterTimerEvent создаёт CTimerEventReg, который так же используется в CTimerWar3
Скриншоты
  1. Разброс скорости ты создаёшь сам, ибо у тебя разница текстов и переменных и т.д.:
Перед тем как читать дальше, прошу заметить, что тесты делаются на UjAPI, где более точное сравнение времени, нежели чем через мемхак, потому скорость операций значительно быстрее. Так же все тесты делаются на 10000 итераций, получаемый результат в ms, конечный результат будет указан в ns или же ms / 1000000 / 10000 (Количество итераций).
Для начала изучим сколько скорости мы теряем из-за ClearTextMessages( ) и I2S( ), получаем:
ClearTextMessages( ) = 400ns на 1 операцию.
I2S( ) = 600ns на 1 операцию.
Теперь сравним I2S( 0 ) и I2S( k ) и I2S( l[k] ).
I2S( 0 ) и I2S( k ):
раскрыть
I2S( 0 ) = 500ns
I2S( k ) = 600ns
I2S( k ) и I2S( l[k] ):
I2S( k ) = 600ns
I2S( l[k] ) = 600ns
На удивление они выдали одинаковый результат. А теперь посмотрим вывод текстов с использованием ClearTextMessages, чтобы не дать игре "зависать".
А теперь к сравнению текстов, которые у тебя в Loop12 и Loop13, к сожалению оба вместе тестировать не получалось, потому решил проверить их отдельно, вот результат:
Для начала сравним сами тексты:
I2S( l[k] ) против "Timer "+ I2S( k ) + " - " + I2S( l[k] )
раскрыть
I2S( l[k] ) = 600ns
"Timer "+ I2S( k ) + " - " + I2S( l[k] ) = 2000ns
Что значит разницу в 3.33~, примерно то, что у тебя и получилось.
Теперь же сравним всё через BJDebugMsg...
раскрыть
call BJDebugMsg( I2S( l[k] ) )
call BJDebugMsg( "Timer "+ I2S( k ) + " - " + I2S( l[k] ) )
call BJDebugMsg( I2S( l[k] ) ) = 26300ns
call BJDebugMsg( "Timer "+ I2S( k ) + " - " + I2S( l[k] ) ) = 70300ns
Разница в 2.67~ раз но это с большими погрешностями, так что разница будет ближе к 3.
Итог:
Скриншот
Получаем ожидаемый результат, что у них НЕТ разницы по скорости.
Собственно вот код:
Код
globals
    timer tStopWatch = CreateTimer( )
    timer tIterator = CreateTimer( )
    trigger trTrig = CreateTrigger( )
    
    integer iTimerTestValue = 0
    integer iTriggerTestValue = 0
    integer iLimitValue = 400000
    
    integer iElapsedTime = 0
endglobals

function TimeAction takes nothing returns nothing
    set iElapsedTime = iElapsedTime + 1
endfunction

function IterateValue takes nothing returns nothing
    set iTimerTestValue = iTimerTestValue + 1
    
    if iTimerTestValue >= iLimitValue then
        call PauseTimer( tIterator )
        call BJDebugMsg( "IterateValue Elapsed Time: " + R2S( I2R( iElapsedTime ) / 1000. ) + "s" )
    endif
endfunction

function IterateTriggerValue takes nothing returns nothing
    set iTriggerTestValue = iTriggerTestValue + 1

    if iTriggerTestValue >= iLimitValue then
        call DisableTrigger( trTrig )
        call BJDebugMsg( "IterateTriggerValue Elapsed Time: " + R2S( I2R( iElapsedTime ) / 1000. ) + "s" )
    endif
endfunction

function StartTest takes nothing returns nothing
    call TimerStart( tStopWatch, .001, true, function TimeAction )
    call TimerStart( tIterator, .001, true, function IterateValue )
    call TriggerRegisterTimerEvent( trTrig, .001, true )
    call TriggerAddAction( trTrig, function IterateTriggerValue )
endfunction
По итогу вот из-за таких извини, невнимательных тестов и рождаются мифы...
20

» Unryze Jass API / UjAPI - Что нового?

Вышла новая версия! Прокрутить к ресурсу

v1.0.21.85

  1. Новые Константы:
    constant targetflag TARGET_FLAG_SELF = ConvertTargetFlag(4096)
    constant targetflag TARGET_FLAG_PLAYER_UNITS = ConvertTargetFlag(8192)
    constant targetflag TARGET_FLAG_ALLIED = ConvertTargetFlag(16384)
    constant targetflag TARGET_FLAG_FRIEND = ConvertTargetFlag(24576) ALLIED | PLAYER_UNITS
    constant targetflag TARGET_FLAG_NEUTRAL = ConvertTargetFlag(32768)
    constant targetflag TARGET_FLAG_ENEMY = ConvertTargetFlag(65536)
    constant targetflag TARGET_FLAG_NOT_SELF = ConvertTargetFlag(122880) ENEMY | NEUTRAL | FRIEND
    constant targetflag TARGET_FLAG_VULNERABLE = ConvertTargetFlag(1048576)
    constant targetflag TARGET_FLAG_INVULNERABLE = ConvertTargetFlag(2097152)
    constant targetflag TARGET_FLAG_HERO = ConvertTargetFlag(4194304)
    constant targetflag TARGET_FLAG_NON_HERO = ConvertTargetFlag(8388608)
    constant targetflag TARGET_FLAG_ALIVE = ConvertTargetFlag(16777216)
    constant targetflag TARGET_FLAG_DEAD = ConvertTargetFlag(33554432)
    constant targetflag TARGET_FLAG_ORGANIC = ConvertTargetFlag(67108864)
    constant targetflag TARGET_FLAG_MECHANICAL = ConvertTargetFlag(134217728)
    constant targetflag TARGET_FLAG_NON_SUICIDAL = ConvertTargetFlag(268435456)
    constant targetflag TARGET_FLAG_SUICIDAL = ConvertTargetFlag(536870912)
    constant targetflag TARGET_FLAG_NON_ANCIENT = ConvertTargetFlag(1073741824)
    constant targetflag TARGET_FLAG_ANCIENT = ConvertTargetFlag(2147483648)
    constant targetflag TARGET_FLAG_EMPTY = ConvertTargetFlag(4294967295)

    constant abilityrealfield ABILITY_RF_AURA_REFRESH_TIME = ConvertAbilityRealField('artm')
    constant abilityintegerlevelfield ABILITY_ILF_TARGETS_ALLOWED = ConvertAbilityIntegerLevelField('atar')

    constant playerunitevent EVENT_PLAYER_UNIT_ATTACK_FINISHED = ConvertPlayerUnitEvent(317)
    constant unitevent EVENT_UNIT_ATTACK_FINISHED = ConvertUnitEvent(316)
  2. Новые Нативные Функции:
    native IsAbilityTargetAllowed takes ability whichAbility, widget whichWidget returns boolean
    native GetSpecialEffectModelObjectPositionX takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionY takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionZ takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionLoc takes effect whichEffect, string whichObject returns location
    native GetTrackableModelObjectPositionX takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionY takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionZ takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionLoc takes trackable whichTrackable, string whichObject returns location
    native GetWidgetModelObjectPositionX takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionY takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionZ takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionLoc takes widget whichWidget, string whichObject returns location
    native GetDestructableModelObjectPositionX takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionY takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionZ takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionLoc takes destructable whichDestructable, string whichObject returns location
    native GetItemModelObjectPositionX takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionY takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionZ takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionLoc takes item whichItem, string whichObject returns location
    native GetUnitModelObjectPositionX takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionY takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionZ takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionLoc takes unit whichUnit, string whichObject returns location
    native GetProjectileModelObjectPositionX takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionY takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionZ takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionLoc takes projectile whichProjectile, string whichObject returns location
    Frame API
    native GetFrameCheckState takes fremehandle whichFrame returns boolean
    native SetFrameCheckState takes framehandle whichFrame, boolean isCheck returns nothing
    native GetTriggerFrameMouseButton takes nothing returns mousebuttontype
    native RegisterFrameMouseButton takes framehandle whichFrame, mousebuttontype whichButton, boolean isAdd returns nothing
  3. Исправлены CLI команды, которые порой не посылались/приходили с ошибкой.
  4. Исправлена ошибка "дочерних" приложений UjAPI, которая мешала им посылать CLI команды главному приложению.
  5. Исправлена IsTextTagVisible, которая возвращала инверсное значение.
  6. Исправлена CastAbilityTarget вызывающая критическую ошибку при применении на поддерживаемой целевом заклинании.
  7. Переделана SetUnitSelectable, теперь она более не имитирует "смерть", чтобы достигнуть невыделяемого/ненаводимого состояния.
  8. SetFrameTexture теперь работает с CSimpleButton/CCommandButton/CSimpleCheckBox.
  9. CSimpleCheckBox теперь поддерживается, так же добавлена поддержка CLICK/CHECK событий, вместе с RegisterFrameMouseButton.
  10. CONTROL_CLICK и MOUSE_DOUBLECLICK события теперь могут быть применены к CListBoxWar3 фреймам.
  11. Исправлены почти все ABILITY_RLF_ поля, которые имеют цифру в конце их typeId, они теперь должны работать как и задумывалось.
20

» Unryze Jass API / UjAPI

Вышла новая версия! Прокрутить к ресурсу

v1.0.21.85

  1. Новые Константы:
    constant targetflag TARGET_FLAG_SELF = ConvertTargetFlag(4096)
    constant targetflag TARGET_FLAG_PLAYER_UNITS = ConvertTargetFlag(8192)
    constant targetflag TARGET_FLAG_ALLIED = ConvertTargetFlag(16384)
    constant targetflag TARGET_FLAG_FRIEND = ConvertTargetFlag(24576) ALLIED | PLAYER_UNITS
    constant targetflag TARGET_FLAG_NEUTRAL = ConvertTargetFlag(32768)
    constant targetflag TARGET_FLAG_ENEMY = ConvertTargetFlag(65536)
    constant targetflag TARGET_FLAG_NOT_SELF = ConvertTargetFlag(122880) ENEMY | NEUTRAL | FRIEND
    constant targetflag TARGET_FLAG_VULNERABLE = ConvertTargetFlag(1048576)
    constant targetflag TARGET_FLAG_INVULNERABLE = ConvertTargetFlag(2097152)
    constant targetflag TARGET_FLAG_HERO = ConvertTargetFlag(4194304)
    constant targetflag TARGET_FLAG_NON_HERO = ConvertTargetFlag(8388608)
    constant targetflag TARGET_FLAG_ALIVE = ConvertTargetFlag(16777216)
    constant targetflag TARGET_FLAG_DEAD = ConvertTargetFlag(33554432)
    constant targetflag TARGET_FLAG_ORGANIC = ConvertTargetFlag(67108864)
    constant targetflag TARGET_FLAG_MECHANICAL = ConvertTargetFlag(134217728)
    constant targetflag TARGET_FLAG_NON_SUICIDAL = ConvertTargetFlag(268435456)
    constant targetflag TARGET_FLAG_SUICIDAL = ConvertTargetFlag(536870912)
    constant targetflag TARGET_FLAG_NON_ANCIENT = ConvertTargetFlag(1073741824)
    constant targetflag TARGET_FLAG_ANCIENT = ConvertTargetFlag(2147483648)
    constant targetflag TARGET_FLAG_EMPTY = ConvertTargetFlag(4294967295)

    constant abilityrealfield ABILITY_RF_AURA_REFRESH_TIME = ConvertAbilityRealField('artm')
    constant abilityintegerlevelfield ABILITY_ILF_TARGETS_ALLOWED = ConvertAbilityIntegerLevelField('atar')

    constant playerunitevent EVENT_PLAYER_UNIT_ATTACK_FINISHED = ConvertPlayerUnitEvent(317)
    constant unitevent EVENT_UNIT_ATTACK_FINISHED = ConvertUnitEvent(316)
  2. Новые Нативные Функции:
    native IsAbilityTargetAllowed takes ability whichAbility, widget whichWidget returns boolean
    native GetSpecialEffectModelObjectPositionX takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionY takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionZ takes effect whichEffect, string whichObject returns real
    native GetSpecialEffectModelObjectPositionLoc takes effect whichEffect, string whichObject returns location
    native GetTrackableModelObjectPositionX takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionY takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionZ takes trackable whichTrackable, string whichObject returns real
    native GetTrackableModelObjectPositionLoc takes trackable whichTrackable, string whichObject returns location
    native GetWidgetModelObjectPositionX takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionY takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionZ takes widget whichWidget, string whichObject returns real
    native GetWidgetModelObjectPositionLoc takes widget whichWidget, string whichObject returns location
    native GetDestructableModelObjectPositionX takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionY takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionZ takes destructable whichDestructable, string whichObject returns real
    native GetDestructableModelObjectPositionLoc takes destructable whichDestructable, string whichObject returns location
    native GetItemModelObjectPositionX takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionY takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionZ takes item whichItem, string whichObject returns real
    native GetItemModelObjectPositionLoc takes item whichItem, string whichObject returns location
    native GetUnitModelObjectPositionX takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionY takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionZ takes unit whichUnit, string whichObject returns real
    native GetUnitModelObjectPositionLoc takes unit whichUnit, string whichObject returns location
    native GetProjectileModelObjectPositionX takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionY takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionZ takes projectile whichProjectile, string whichObject returns real
    native GetProjectileModelObjectPositionLoc takes projectile whichProjectile, string whichObject returns location
    Frame API
    native GetFrameCheckState takes fremehandle whichFrame returns boolean
    native SetFrameCheckState takes framehandle whichFrame, boolean isCheck returns nothing
    native GetTriggerFrameMouseButton takes nothing returns mousebuttontype
    native RegisterFrameMouseButton takes framehandle whichFrame, mousebuttontype whichButton, boolean isAdd returns nothing
  3. Исправлены CLI команды, которые порой не посылались/приходили с ошибкой.
  4. Исправлена ошибка "дочерних" приложений UjAPI, которая мешала им посылать CLI команды главному приложению.
  5. Исправлена IsTextTagVisible, которая возвращала инверсное значение.
  6. Исправлена CastAbilityTarget вызывающая критическую ошибку при применении на поддерживаемой целевом заклинании.
  7. Переделана SetUnitSelectable, теперь она более не имитирует "смерть", чтобы достигнуть невыделяемого/ненаводимого состояния.
  8. SetFrameTexture теперь работает с CSimpleButton/CCommandButton/CSimpleCheckBox.
  9. CSimpleCheckBox теперь поддерживается, так же добавлена поддержка CLICK/CHECK событий, вместе с RegisterFrameMouseButton.
  10. CONTROL_CLICK и MOUSE_DOUBLECLICK события теперь могут быть применены к CListBoxWar3 фреймам.
  11. Исправлены почти все ABILITY_RLF_ поля, которые имеют цифру в конце их typeId, они теперь должны работать как и задумывалось.
20

» WarCraft 3 / Игровая платформа War3 (исходники)

А если серьезно, то на первый вариант, что бы начал запускаться, я потратил от силы одну неделю, остальное пошло на улучшение функционала и багфиксы.
Второй вариант, т.к я не очень разбирался в xaml и вообще в дизайне, потратил куда больше времени, ну и как видите зря :).
Тестеры тоже намучались, днями и ночами тестировали все, и тоже впустую:)
Ну, второй вариант как не крути во всех планах лучше первого, ибо максимальный отказ от UI игры + зависимостей игры, то бишь можно своё лобби делать как душе угодно с преферансом и куртизанками, о чём я давно-давно ещё говорил, сделано как не крути не зря (в плане показа функционала), всему своё время, думаю всё-таки скоро Кирилл таки начнёт делать в этой же стилистике и все эти финтифлюшки будут наконец-то задействованы.
Делать конкурента ракапу - это очень низкая планка (о чём я тоже давно говорил), ровно так же как и упираться строго в 1 карту. Поверь, твои наработки не пропадут, а коли ещё и желание появится опять этим заниматься (вон я тоже зарекался, что с концами забил, в итоге выкатил UjAPI xD), то думаю будет вариант объединить усилия (но это так, идеи в воздух).
А про войс чат, я не знаю, как по мне лучше интегрировать Mumble. :D
20

» WarCraft 3 / Игровая платформа War3 (исходники)

ну да забыл :(
Ахахх да)) столько лет лежали исходники, думаю кому-нибудь это больше понадобится, не пропадать же наработкам всем :)
Я так кое у кого спрашивал перед публикацией, никто особо не рвется сервер по вар3 открывать, так что залил на гитхаб, пусть мои исходники берут те кому они понадобится, может откроется какой-нибудь нормальный вар3 сервер :)
Ну, надежды есть, вон Кирилл (IrinaBot) по чуть-чуть следует тому же пути, на который я хотел перевести Rebirth (что в итоге ты и сделал, чем я тебе кровь пил). :D
Ну и мои наработки = туча функционала, постепенно может всё это пойдёт в работу.
Ещё раз, спасибо тебе за всё время и усилия, что ты вложил и да реально обидно, что всё пошло не так как я планировал. :C
20

» WarCraft 3 / Игровая платформа War3 (исходники)

karaul0v, на каком сервере, сколько игр? Если реально на линуксе поднять, можем поиграться.

Потребуется твоя помощь, можем предоставить небольшие мощности
Игрa была только варкрафт, планировалось больше но все заглохло :)
Мы там ещё AoE планировали и C&C и ещё парочку RTS, но да, в виду одного недалёкого "умника" и приведённой им "супердурой" всё пошло коту под хвост. Но обидно, что про меня ты вообще не вспомнил, я с тобой всё тестировал и с кнутом за тобой бегал T_T.
20

» WarCraft 3 / Jass MythBusters

TriggerSleepAction страдает от разности производительности процессоров, но уловить когда именно происходит десинх - не особо легко, ибо оно занимает разное время, всё что реально "железнобетонно" - это то, что разница по времени обычно в .0001мс или что-то в этом духе, короче говоря оно косячное - бесспорно, но измерять это практически невозможно.
TimerStart не имеет погрешностей, ибо создаётся отдельный "поток" для каждого таймера, проверять нечего.
TriggerRegisterTimerEventPeriodic использует Timer под капотом, опять же измерять нечего.
TriggerAddAction добавляет коллбек триггеру, который вызывает Timer который привязан через TriggerRegisterTimerEventPeriodic.
20

» WarCraft 3 / WFE - Warcraft Feature Extender

Unryze, У меня проблема не могу сохранить изменение в WFE что делать помогите.
Нужно сменить имя профиля и нажать на "+", в дефолтном профиле изменения не воспринимаются, ибо на то он и дефолтный профиль.
host_pi:
  1. Потому что инжект делается во множество окон и проверять это - супер бесполезно.
  2. Вин 7 пользуются множество вьетнамцев, проблем у них не наблюдается и учитывая то, что поддержку Win7 уже "отменили", то мне на эту винду уже фиолетово тоже.
  3. Не помню прямо волны проблем с кнопками, а краши были вылечены почти в тот же день, когда их репортили.
  4. Я не собираюсь тратить своё время ради вин 7, который уже буквально игнорируется всеми. И разница между вин 7 и вин 10 в плане работы почти нулевая, ибо Win10 является той же семёркой, разница лишь в поддержке .NET фреймворка и https протоколов (которая уже вообще там не пашет).