Даро сначала подумал что глаза его подводят, но как это сюда попало?Какой был смысл в загрузке мертвой аниме карты на сайт, про которую уже все давно забыли. Эта карта умерла и была брошена еще в 2014 году. Автор пропал 7 лет назад
Наконец-то контент который мы заслужили. Если вы всегда мечтали создать мили про наруто, то эта модель будет специально для вас, нельзя медлить ни минуты, наруто само себя не создаст.
Bergi, Даро тогда может попробовать перевести свою карту - Lich Defense на англ язык, как раз простая ГУИ+РО карта. Посмотреть что из этого получиться в итоге. Всего 1800 строк wts.
Все же перевод карты даже если ограничиваться файлом .wts долгий и трудоемкий процесс, который так или иначе придется делать в ручную. Привести весь файл ,wts целиком автоматически через какой-то онлайн переводчик , тоже не получится и мало кто захочет так заморачиваться.
Если рассматривать только патч 1.26.То у нас будет куча сложностей, текстовые строки в триггерах и в коде , которые не идут в .wts файл а остаются (пример: local string s = "|c00FF0303Я не могу носить два предмета одного класса!|r"). Так что делать в таком случае, выносить весь игровой текст, который выводится на экран в глобалки? Делать базу перевода в ручную с проверкой локализации?
Дальше заметил такой факт , что wts заполняется странно и довольно таки рандомно, огрызки от описания одной способности могут быть раскиданы очень далеко от друга. Дальше придется как-то обновлять версию перевода (англ) каждый раз после сохранения карты и добавлении изменений. Либо вести параллельно 2 и обновлять 2 версии текста самостоятельно каждый раз.
Все кажется что перевести англ. карту на русский язык для нас будет легче, чем наоборот.
Я не знаю может у кого есть скрипт на Пайтоне и что-то подобное , чтоб автоматически правильно перевести файл wts.
Крутейшая способность для босса ,особенно если докрутить нестандартных эффектов.Но UnitDamagePoint - урон в области это такое себе, небольшая халтурка.
и ты не представляешь как мне будет стыдно если кто-то посмотрит на это и подумает "оо, dfgdfhg такие прикольные штуки делает крута", мысль об этом заставляет застрелиться
Ну тогда давайуже стыдись Даро посмотрел и твой блог и подумал " оо, чел с нечитаемым ником делает такие прикольные штуки , крута вау"..
А может все стоило оформить в виде ресурса , в блоги мало кто заглядывает и мало кто найдет, при текущем захламлении сайта. Например Даро только сейчас случайно увидел твой блог Наработка дуги интересная, пару лет назад бы пригодилась точно, когда пытался построить сферу из даммиков.
Ну да забыл уточнить что дело имеем именно с запротекченными картами. Так в итоге больше часа просидел в сравнении war3map.j файлов тотал командером и ничего это не дало, взлом версии карты били сломаны названия переменных и отличался код генерируемый редактором.
function GetFramePoint takes integer pFrame, integer point returns integer
local integer fid = GetFrameType( pFrame )
if fid > 0 then
return ReadRealMemory( pFrame + 0x4 * point + 0x8 )
endif
return 0
endfunction
// Frame Absolute Point API
function GetFrameAbsolutePoint takes integer pFrame, integer point returns integer
return GetFramePoint( pFrame, point )
endfunction
function GetFrameAbsolutePointX takes integer pFrame, integer point returns real
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return GetRealFromMemory( ReadRealMemory( pFramePoint + 0x4 ) )
endif
return 0.
endfunction
function GetFrameAbsolutePointY takes integer pFrame, integer point returns real
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return GetRealFromMemory( ReadRealMemory( pFramePoint + 0x8 ) )
endif
return 0.
endfunction
//===========================================
// Frame Relative Point API
function GetFrameRelativePoint takes integer pFrame, integer point returns integer
return GetFramePoint( pFrame, point )
endfunction
function GetFrameRelativePointParent takes integer pFrame, integer point returns integer
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return ReadRealMemory( pFramePoint + 0x4 )
endif
return 0
endfunction
function GetFramePointRelativePoint takes integer pFrame, integer point returns integer
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return ReadRealMemory( pFramePoint + 0x8 )
endif
return 0
endfunction
function GetFrameRelativePointX takes integer pFrame, integer point returns real
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return GetRealFromMemory( ReadRealMemory( pFramePoint + 0xC ) )
endif
return 0.
endfunction
function GetFrameRelativePointY takes integer pFrame, integer point returns real
local integer pFramePoint = GetFramePoint( pFrame, point )
if pFramePoint > 0 then
return GetRealFromMemory( ReadRealMemory( pFramePoint + 0x10 ) )
endif
return 0.
endfunction
//===========================================
И да, в некоторых случаях, если же фрейм уже привязан по той или иной точке, нужно в начале вызвать
function ClearFrameAllPoints takes integer pFrame returns integer
return ClearCLayoutFrameAllPoints( pFrame )
endfunction
И потом уже проводить изменения, так как установка новых креплений не уничтожает старые.
rsfghd,
Фреймы не работают на декартовой системе координат, но имеют понятие Абсолютной позиции, но они все транслируются на координатах от -1 до 1, ибо они рисуются на ЭКРАН, а не на МИР, где есть XYZ. У экрана лишь X/Y в пикселях. Очень нелогично делать декартовую систему координат, ибо тогда придётся на каждое разрешение делать свои координаты и т.д.
Для Абсолютной позиции есть GetFrameAbsolutePoint и SetFrameAbsolutePoint, но и она как и описано выше не использует декартовую систему координат, не стоит в общем путать то, что рисуется на CWorldFrameWar3, а что идёт на CGameUI (интерфейс/экран).
GetFrameByName в МемХаке сделан для получения именно фреймов типа CFrame, он не был сделан как в рефорджеде на все фреймы, ибо на момент написания МемХакАПИ оно было банально не нужно.
GetFramePointX/Y принимают значение point не просто так, а подробнее:
TopLeft = 0
TopCenter = 1
TopRight = 2
Left = 3
Center = 4
Right = 5
BottomLeft = 6
BottomCenter = 7
BottomRight = 8
Потому, если фрейм не имеет крепления к TopLeft, а допустим к Center, то нужно вызывать GetFramePointX( frame, 4 ) а не 0. И так далее.
Багов в МемХаке кроме GetTerrainAxisZ не наблюдается, потому не совсем понятно о каких багах речь.
Оффсет для получения CSimpleFrame по имени на 1.26а = 0x61C770
Оффсет для получения CSimpleTexture по имени на 1.26а = 0x61C790
Оффсет для получения CSimpleFontString по имени на 1.26а = 0x61C7B0
Собственно для них есть функции:
function GetCSimpleFrameByName takes string name, integer id returns integer
if pGetCSimpleFrameByName > 0 then
if name != "" then
return fast_call_2( pGetCSimpleFrameByName, GetStringAddress( name ), id )
endif
endif
return 0
endfunction
function GetCSimpleFontByName takes string name, integer id returns integer
if pGetCSimpleFontByName > 0 then
if name != "" then
return fast_call_2( pGetCSimpleFontByName, GetStringAddress( name ), id )
endif
endif
return 0
endfunction
function GetCSimpleTextureByName takes string name, integer id returns integer
if pGetCSimpleTextureByName > 0 then
if name != "" then
return fast_call_2( pGetCSimpleTextureByName, GetStringAddress( name ), id )
endif
endif
return 0
endfunction
Итого, всё что нужно сделать свой враппер и вызвать каждую из функций, пока какая-либо не вернёт адрес отличный от 0.
И получился:
function GetFrameByName takes string name, integer id returns integer
local integer addr = GetCFrameByName( name, id )
if addr == 0 then
set addr = GetCSimpleFrameByName( name, id )
endif
if addr == 0 then
set addr = GetCSimpleTextureByName( name, id )
endif
if addr == 0 then
set addr = GetCSimpleFontByName( name, id )
endif
return addr
endfunction
Спасибо за ваши отзывы, карта еще находится на ранних этапах разработки. Вижу, что большинству карта понравилась. А это однозначно успех и стоит продолжать дальше. Значит точно число игроков будет увеличено до 6.После игры в 4 игрока карта оказалась слишком простая на прохождение, по этому будет еще балансироваться дальше и обрастать новым контентом. Konstantin19:
почему на стороне короля лича альянс?
На все воля Даро, в данном случае это он выступает на стороне Альянса. Подкрепление защищает замок и башни принимая урон на себя.
Моды пока еще не были сделаны.
Хочется пожелать разработчику и всем кто играет в такие карты изучить азы Геймдизайна и поиграть в рпг. Подобные карты игрались на гарене еще 10-15 лет назад.
Я могу сказать точно, почему варкрафт процветает на хгм, а юнити и анриал нет. Потому что для варкрафта есть реальная поддержка, а вот для других движков просто нет - вопросы 3-х летней давности. Если запилить бесплатные обучающие уроки в статейном и видео формате (как альтернатива всяким фуфельным курсам за 100к), то комьюнити Юнити быстро выдавит всё комьюнити варкрафта. А когда появиться реальный народ, то и проекты на Юнити взлетят. Юнити очень популярен , но в других кругах. Но нет централизованной поддержки по юнити на русском языке, нету хаба. Все прекрасно понимают, что в ру сегменте нечего делать и пилят игры на англ. и общаются на иностранных платформах
Ред. Daro
» WarCraft 3 / AniLife
» WarCraft 3 / Наруто рабочий
» WarCraft 3 / Спасобности.
» WarCraft 3 / Локализация карты WC3 для любого патча
» WarCraft 3 / Локализация карты WC3 для любого патча
Если рассматривать только патч 1.26.То у нас будет куча сложностей, текстовые строки в триггерах и в коде , которые не идут в .wts файл а остаются (пример: local string s = "|c00FF0303Я не могу носить два предмета одного класса!|r"). Так что делать в таком случае, выносить весь игровой текст, который выводится на экран в глобалки? Делать базу перевода в ручную с проверкой локализации?
Дальше заметил такой факт , что wts заполняется странно и довольно таки рандомно, огрызки от описания одной способности могут быть раскиданы очень далеко от друга. Дальше придется как-то обновлять версию перевода (англ) каждый раз после сохранения карты и добавлении изменений. Либо вести параллельно 2 и обновлять 2 версии текста самостоятельно каждый раз.
Все кажется что перевести англ. карту на русский язык для нас будет легче, чем наоборот.
Я не знаю может у кого есть скрипт на Пайтоне и что-то подобное , чтоб автоматически правильно перевести файл wts.
» WarCraft 3 / Jass Pseudo Group API
Ред. Daro
» WarCraft 3 / Ярость Бога "скилы под ключ"
» WarCraft 3 / Legion Tower Defence (LTD)
» WarCraft 3 / Шахтерские модели из Dota 2
Ред. Daro
» WarCraft 3 / Lich Defense
» Блог им. rsfghd / движение по безье
» Блог им. rsfghd / движение по безье
» Блог им. rsfghd / Миниспеллпак
» WarCraft 3 / Warsmash аналог WarCraft III развивается полным ходом!
» WarCraft 3 / Сравнение версий карт
» WarCraft 3 / [AA_1.76b] Attack Arena
Вообще забей на арены, просто твоя карта не подходит под жанр арены
Делай другой жанр
Оно тебе не подходит
» WarCraft 3 / Lich Defense
» WarCraft 3 / GetFramePointX|Y
Ред. Daro
» WarCraft 3 / GetFramePointX|Y
Фреймы не работают на декартовой системе координат, но имеют понятие Абсолютной позиции, но они все транслируются на координатах от -1 до 1, ибо они рисуются на ЭКРАН, а не на МИР, где есть XYZ. У экрана лишь X/Y в пикселях. Очень нелогично делать декартовую систему координат, ибо тогда придётся на каждое разрешение делать свои координаты и т.д.
Ред. Daro
» WarCraft 3 / GetFramePointX|Y
TopCenter = 1
TopRight = 2
Left = 3
Center = 4
Right = 5
BottomLeft = 6
BottomCenter = 7
BottomRight = 8
Оффсет для получения CSimpleTexture по имени на 1.26а = 0x61C790
Оффсет для получения CSimpleFontString по имени на 1.26а = 0x61C7B0
И получился:
» WarCraft 3 / Lich Defense
Konstantin19:
Моды пока еще не были сделаны.
» WarCraft 3 / Мозги Макслайда
Ред. Daro
» [X3] Community - Horde VS Alliance X3 / [X3] Community - Horde VS Alliance X3
Ред. Daro
» XGM Team / Стратегия развития контента на XGM в 2022 году