Через полгода-год после выхода игры, смысл делать скидку на ПРЕДЗАКАЗ нет. Одно дело, когда ты купил игру, а через полгода она стала дешевле -- ты-то мог играть в неё полгода. А тут играть не во что! Ну и что за Battele.net...
Русификатор триггеров стоит? Если да, его нужно снести и поставить FNWE. Camby:
include "cj_antibj_base.j" ничего не дала
А cJass при этом был включён? С отключённым cJass это вообще ничего не делает.
Ещё раз. Карта полностью на GUI? Если да, то cJass стоит отключить. Если нет, то используется ли cJass в написании кода карты?
Включён ли vJass, как я показал?
Будь добр, ответь на все эти вопросы. Camby:
Кстати, пробовал стоковый редактор от варика 1.29, там в одной из карт смог создать хеш таблицу. Правда нужная карта не открывается из за "функция триггера отсутствует в базе данных"
Потому что в 1.29 нет UMSWE, который добавляет доп. функции в GUI.
globals
player TransPlayer
unit LastEnemyUnit
endglobals
function filter takes nothing returns boolean
if IsUnitEnemy(GetFilterUnit(), TransPlayer) then
set LastEnemyUnit = GetFilterUnit()
endif
return false
endfunction
function EnemyInRange takes unit u, real x, real y, real range returns unit
set TransPlayer = GetOwningPlayer(u)
set LastEnemyUnit = null
call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, range, Filter(function filter))
return LastEnemyUnit
endfunction
Только если это локальная переменная, тип которой наследник handle. Если локальная другого типа, или это аргумент функции, или это глобальная, то утечек не будет.
Это, кстати, обещают исправить в будущих патчах.
Если снять галки, то ошибки при сохранении нет. Правда карта так не запускается. Просто при выборе этой карте в игре выкидывает обратно в выбор карт
А карта использует cJass? Если да, то включи cJass назад и где-нибудь пропиши include "cj_antibj_base.j". Если же это где-то уже прописано, то, наоборот, убери.
В этой библиотеке есть замены всех плохие вещи из Blizzard.j, в частности call InitHashtableBJ() заменится на bj_lastCreatedHashtable = InitHashtable().
Больше о библиотеках cJass тут.
Чтобы включить cJass назад, нужно поставить в этом меню первую галку.
Скриншот
Если cJass не используется, то включи vJass вот так.
Скриншот
Вот common.j и Blizzard.j для патча 1.26а, нужно их скопировать в папку jasshelper, заменяя имеющиеся, и поставить в атрибутах "Только чтение".
Но тут ведь тоже в случае наличия противника будет утечка в u, ибо она не обнуляется (баг такой пока есть). Нужно использовать глобалку вместо локальной. Ну и мой вариант получше, там возвращается boolean, а один из вражеских юнитов записан в LastEnemyUnit.
В папке с jasshelper есть файл Blizzard.j? Также выше совершенно верно заметили про присвоение переменной. В ГУИ надо буде после создания хеш-таблицы занести bj_LastCreatedHashtable в свою переменную.
Я полагаю, что дело в битмапах, ведь именно они являются уменьшенными вариантами текстуры, каждый раз вдвое, потому и текстура должна иметь размер кратный 2.
unit EnemyInGroup (unit u, float x, float y, float range) {
group enemies = CreateGroup()
unit u_e
GroupEnumUnitsInRange(enemies, x, y, range, Condition(function SimpleCond))
loop
u_e = FirstOfGroup(enemies)
exitwhen u_e == null
if IsUnitEnemy(u_e, GetOwningPlayer(u)) then
DestroyGroup(enemies)
enemies = null
return u_e // утечка переменной u_e, используй глобалку.
// exitwhen true // зачем это, когда есть return?
else
GroupRemoveUnit(enemies, u_e)
endif
endloop
DestroyGroup(enemies)
enemies = null
u_e = null
return null // нет враждебного юнита.
}
А вообще, что находится в функции SimpleCond? Тут можно всё упростить.
code
globals
player TransPlayer
unit LastEnemyUnit
endglobals
function filter takes nothing returns boolean
if IsUnitEnemy(GetFilterUnit(), TransPlayer) then
set LastEnemyUnit = GetFilterUnit()
endif
return false
endfunction
function EnemyInRange takes unit u, real x, real y, real range return boolean
set TransPlayer = GetOwningPlayer(u)
set LastEnemyUnit = null
call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, range, Filter(function filter))
return LastEnemyUnit != null
endfunction
замечание от Raised: 1.4 (злоупотребление форматированием) используйте каты
А зачем инициализировать null, "" или 0? Все глобалки, что имеют присвоение в своём определении, выполняются в то время, как игрок кликнул на карту в списке карт. Потому лучше либо вообще ничего не прописывать, либо прописать нормальные значения, например:
Однако не для всех это работает. GetLocalPlayer(), CreateRegion(), CreateLeaderboard, CreateMultiboard() нельзя использовать в определении глобалок, они крашнут игру, как только игрок кликнет на карту. А, вот например, InitHashtable(), CreateTimer(), CreateTrigger() карту не крашат, потому можно сделать так:
я почти всем глобалкам ставлю при объявлении null или 0 или ""
ну это ты зря
Тогда остаётся только инициализацию мультибоарда передвинуть, а также проверить вызовы ExecuteFunc (что имя вызываемой функции точно есть в карте) на всякий случай.
Проще простого же. Пусть abil является действием в триггере, который ловит каст твоего спела.
function filter takes nothing returns nothing
local unit u = GetFilterUnit()
if /* нужные условия */ then
// нужные действия
endif
set u = null
endfunction
function abil takes nothing returns nothing
...
call GroupEnumUnitsInRect(bj_lastCreatedGroup, bj_mapInitialPlayableArea, Condition(function filter))
...
endfunction
» WarCraft 3 / Что делать?
» WarCraft 3 / Когда бываю скидки на Battele.net?
Ну и что за Battele.net...
» WarCraft 3 / Какая последняя версия warcraft 3 на данный момент?
Заходим на официальный сайт, покупаем игру и скачиваем лаунчер, он и поставит последнюю версию.
Ред. PT153
» WarCraft 3 / Что делать?
А потом статьи на сайте прочитать про Jass.
Ред. PT153
» WarCraft 3 / Вопрос по хеш таблице
Camby:
Включён ли vJass, как я показал?
Будь добр, ответь на все эти вопросы.
Camby:
» WarCraft 3 / Свиток регенерации с отрицательным восстановлением
» WarCraft 3 / missing return
Это, кстати, обещают исправить в будущих патчах.
Ред. PT153
» WarCraft 3 / Вопрос по хеш таблице
В этой библиотеке есть замены всех плохие вещи из Blizzard.j, в частности call InitHashtableBJ() заменится на bj_lastCreatedHashtable = InitHashtable().
Больше о библиотеках cJass тут.
Чтобы включить cJass назад, нужно поставить в этом меню первую галку.
Ред. PT153
» WarCraft 3 / Не могу убрать способность у юнита. Продажа юнита.
Ты отнимаешь способность у юнита, что был куплен.
» WarCraft 3 / Реально вернуть инициализацию в нормальный вид
При добавлении новых триггеров делай по стандарту, а эти так оставь.
» WarCraft 3 / Вопрос по хеш таблице
Ред. PT153
» WarCraft 3 / missing return
Там это и параметр, и локальная, параметр не заметил. Аргументы да, не утекают.
» WarCraft 3 / missing return
» WarCraft 3 / Слишком агрессивные крипы
» WarCraft 3 / Слишком агрессивные крипы
» WarCraft 3 / Вопрос по хеш таблице
» WarCraft 3 / Движение, jass
» WarCraft 3 / missing return
LainMikoroso:
» WarCraft 3 / Крашится игра при низких настройках из за этой модели
Ред. Raised
» WarCraft 3 / missing return
» WarCraft 3 / Вылет на полосе загрузки у некоторых игроков
Ред. PT153
» WarCraft 3 / Вылет на полосе загрузки у некоторых игроков
Ред. PT153
» WarCraft 3 / Вылет на полосе загрузки у некоторых игроков
Ред. PT153
» WarCraft 3 / Вылет на полосе загрузки у некоторых игроков
Какие глобалки у тебя сразу имеют значение? например constant integer A = 1
Ред. PT153
» WarCraft 3 / Способность которая действует по все карте