1 nov
2022
Предназначение:
Работа с картами

Warcraft 3 Custom Object Converter

This program converts Warcraft's .w3u, .w3t, .w3b, .w3d, .w3a, .w3h, .w3q files to JSON/Lua for editing and back. This allows you to edit all custom (modified) game objects like units, abilities, upgrades etc. as a text file, without WorldEdit. It's similar to w3x2lni, but more low-level.
This is a CLI (command-line interface) tool. The output is printed to STDOUT and must be redirected to be saved to file.
The output is not roundtrip-able. The order of elements is not guaranteed.

How to run:

Run from console (cmd.exe or Shell on Linux).
Requirements: Lua 5.3+ (included for Windows)

Options:

--from-json <json data file> - converts to a war3 file
--from-lua <lua data file> - converts to a war3 file
--to-json <war3 data file> - converts to a JSON data file
--to-lua <war3 data file> - converts to a Lua data file

Usage example:

lua w3u-run.lua --to-lua war3map.w3u > unit-data.lua
lua w3u-run.lua --from-lua unit-data.lua > war3map-modified.w3u
lua w3u-run.lua --help
Powershell (Lua not installed system-wide): .\lua w3u-run.lua --help

How to launch on Windows?

  • Option A: Press Win+R, enter cmd.exe and run it. Use cd <folder> to navigate to a folder where you'll work.
  • Option B: In Explorer, Shift+Right Click the folder where you have a .w3u file, select "Open command window here" or in Windows 10 "Open PowerShell window here".

Please report any bugs

I haven't tested this much, please contact me to report bugs if you find anything.

Output example: --to-lua

	utip = {
	  rawcode_unused = "edob",
	  type = 3,
	  type_explanation = "string",
	  value = "Башня бабла 4 (|cffffcc00S|r)"
	} --[[table: 000000000063ee10]],
	utub = {
	  rawcode_unused = "edob",
	  type = 3,
	  type_explanation = "string",
	  value = "Эта башня добывает по |c00FFFF0010 ед|r  золота каждые 10 сек.\13\n\13\n\13\n|cffc3dbffВремя Строительства|r:  2 cекунды"
	} --[[table: 000000000063e590]],
	uubs = {
	  rawcode_unused = "\0\0\0\0",
	  type = 3,
	  type_explanation = "string",
	  value = "OSMA"
	} --[[table: 0000000000614010]],
	uupt = {
	  rawcode_unused = "\0\0\0\0",
	  type = 3,
	  type_explanation = "string",
	  value = "e006"
	} --[[table: 0000000000614a10]]
  } --[[table: 000000000063df50]],
  fields_modified_count = 38,
  rawcode_custom = "e003",
  rawcode_default = "edob"

Output example: --to-json

	"utip": {
	  "rawcode_unused": "edob",
	  "type": 3,
	  "type_explanation": "string",
	  "value": "Башня бабла 4 (|cffffcc00S|r)"
	},
	"utub": {
	  "rawcode_unused": "edob",
	  "type": 3,
	  "type_explanation": "string",
	  "value": "Эта башня добывает по |c00FFFF0010 ед|r  золота каждые 10 сек.\r\n\r\n\r\n|cffc3dbffВремя Строительства|r:  2 cекунды"
	},
	"uubs": {
	  "rawcode_unused": "\u0000\u0000\u0000\u0000",
	  "type": 3,
	  "type_explanation": "string",
	  "value": "OSMA"
	},
	"uupt": {
	  "rawcode_unused": "\u0000\u0000\u0000\u0000",
	  "type": 3,
	  "type_explanation": "string",
	  "value": "e006"
	}
  },
  "fields_modified_count": 38,
  "rawcode_custom": "e003",
  "rawcode_default": "edob"
0
Голосов: 0
build - 1 month ago
0
Голосов: 0
А разве на XGM еще много лет назад не было правила про ресурсы на русском только?
0
Голосов: 0
Ruti Ragnason - 1 month ago
0
Голосов: 0
build, можно писать на двух языках. Причем писать на английском эффективнее
1
Голосов: 1
Lasto4ka - 4 weeks ago
1
Голосов: 1
Maxlaid совсем переборщил с центрированием...
1
Голосов: 1
makkad - 3 weeks ago
1
Голосов: 1
Для Windows при запуске через PowerShell нужно прописывать ".\lua", а не "lua"
0
Голосов: 0
makkad - 2 weeks ago
0
Голосов: 0
Не получилось скормить свои данные на примере данных о способностей. В итоговом json'е очень много полей пропущено. В полях не отображается по большей части правильный равкод (rawcode_unused = "\0\0\0\0"). Обратный перевод из json или lua не производится из полученных файлов. И ещё кириллицу преобразовал в аброкадабру, но это мелочь. Аналогично если кириллицу убрать, то тоже самое.
Скидываю примеры.
0
Голосов: 0
Lasto4ka - 1 week ago
0
Голосов: 0
makkad:
  1. rawcode: оно в формате в самом деле не используется. То к какому юниту относится эта часть данных видно в самом конце (обращай внимание на иерархию таблиц):
  1. Ну вот что мне с тобой, заклятым виндузятником, делать? Винда тебе при сохранении через pipe кодировку ломает на UTF-16 LE и тексту конец (сравнение в пред. скриншоте):
Делать-то я знаю что, придется делать опцию --output для особо одаренных систем...
0
Голосов: 0
Lasto4ka - 1 week ago
0
Голосов: 0
makkad: Powershell ломает кодировку на UTF-16 (при том по-разному), попользуйся пока CMD или bash через Cygwin.
0
Голосов: 0
PT153 - 1 week ago
0
Голосов: 0
Lasto4ka, ну кодировку в PowerShell настроить можно.

Option A: Press Win+R, enter cmd.exe and run it. Use cd <folder> to navigate to a folder where you'll work.
Option B: In Explorer, Shift+Right Click the folder where you have a .w3u file, select "Open command window here" or in Windows 10 "Open PowerShell window here".
Option C: открыть папку, в адресной строке проводника написать cmd или powershell, нажать enter. PowerShell ещё можно запустить через меню Файл.
0
Голосов: 0
makkad - 1 week ago
0
Голосов: 0
Lasto4ka, Проблема не только в кирилиице. Данные о способностях всё равно теряются. Я убрал всю кирилицу и зупускаю скрипт. Вот, пример. У способности 'A0TH' есть поле DataE2 со значением 175. В итоговых файлах такого значения не находиться.

PT153, Я через скрипт в VS запускаю Power Shell
0
Голосов: 0
PT153 - 1 week ago
Edited by
0
Голосов: 0
makkad, если ты используешь powershell (есть в любой винде, не путать с pwsh), то тебе надо в папке документов юзера создать папку WindowsPowerShell, внутри неё создать profile.ps1 с таким кодом:
$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Решит все проблемы с кодировкой.
ВАЖНО: после этого нужно открыть PowerShell (НЕ от админа) и выполнить это:
Set-ExecutionPolicy RemoteSigned
Это разрешит выполнять скрипты .ps1, в том числе и указанный выше profile.ps1. Без этого каждый запуск PowerShell будет сопровождаться ошибками, о невозможности выполнения profile.ps1.

Если же используется pwsh (PowerShell Core), то тогда делается всё тоже самое, но в этом случае папка носит имя PowerShell.
0
Голосов: 0
makkad - 1 week ago
Edited by
0
Голосов: 0
PT153, Использую скрипты в VS. Попробую. А вообще, с другими программами и скриптами не было проблем пока.
0
Голосов: 0
makkad - 1 week ago
0
Голосов: 0
PT153, Спасибо. Это помогло разобраться с кириллицей.
Lasto4ka, Данные вcе ещё потеряны и пересобранный файл war3map-modified.w3a обратно не импортируется (редактор 1.26 вылетает с ошибкой).
To leave a comment please sign in to the site.