Хочу взяться за нелёгкое дело, заменить BJ-функции для всех людей на планете Земля, сколько смогу! Коли никто из профессиональных программистов до сих пор за 15 лет на самой известной игре Мира не смог сделать пользу для народа! Заодно это будет неплохой практикой в изучении jass-программирования.
Учебный материал у меня имеется, и какие-то обрывки информации можно найти в интернете. Я не буду спрашивать о каких-то конкретных BJ-функциях, и то, как их исправить, но разъясните мне, новичку, примерную структуру того, как нужно их переписывать и куда конкретно что писать? То есть как сделать это всё в виде библиотеки, чтобы можно было всё подключить одним движением для пользователя? Но на JNGP не желательно думаю, так как там могут быть баги и вирусы (а Я человек суеверный). Прошу обратить внимание что мне нужно чтобы стандартные названия остались, а "внутренняя мякоть" функций вся была переделана и оптимизирована. Как этого добиться?

Принятый ответ

Похожие вопросы:

ответ
вопервых ты в 1 и ту же ячейку пытаешся записать 2 значения (location и integer)
во вторых ты создаёш область по кординатам а следующей строчкой находиш эти же кординаты с помощью функций
в 3 ты сохранял точку в хэш и сразу же удалял её
и в 4 ты не инициализировал хэш
function Trig_SlayerUlt_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00V'
endfunction
function Ultaction takes nothing returns nothing
local timer st = GetExpiredTimer()
local integer sid = GetHandleId(st)
local unit su = LoadUnitHandle (udg_Hash, sid, 0)
if IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false and IsUnitEnemy( GetEnumUnit(), GetOwningPlayer(su)) == true then
call UnitDamageTargetBJ( su, GetEnumUnit(), 210.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
endif
set su = null
endfunction
function UltimateRun takes nothing returns nothing
local timer st = GetExpiredTimer()
local integer sid = GetHandleId(st)
local unit su = LoadUnitHandle (udg_Hash, sid, 0)
local integer suid = GetHandleId(su)
local location suloc = LoadLocationHandle(udg_Hash, sid, 1)
local effect sueff = LoadEffectHandle (udg_Hash, sid, 2)
local real x = GetLocationX( suloc )
local real y = GetLocationY( suloc )
local rect surect = Rect( x - 600.00*0.5, y - 600.00*0.5, x + 600.00*0.5, y + 600.00*0.5 )
local location random = Location (GetRandomReal(x-600*.5,x+600*.5), GetRandomReal (y-600*.5, y+600*.5))
local integer sc = LoadInteger (udg_Hash, sid, 10)
call SetUnitPositionLoc( su, random )
call SetUnitAnimation( su, "attack" )
call AddSpecialEffectLocBJ( random, "Abilities\\Spells\\Human\\Thunderclap \\ThunderClapCaster.mdl" )
call DestroyEffectBJ ( GetLastCreatedEffectBJ() )
call AddSpecialEffectLocBJ( random, "Abilities\\Spells\\Items\\AIil\\AIilTarget.mdl" )
call DestroyEffectBJ ( GetLastCreatedEffectBJ() )
call ForGroupBJ ( GetUnitsInRangeOfLocAll(250.00, suloc), function Ultaction )
set bj_wantDestroyGroup=true
call SaveInteger(udg_Hash,sid,10,sc + 1)
if sc >= 10 then
call SetUnitPositionLoc( su, suloc )
call DestroyEffectBJ( sueff )
call SetUnitPathing( su, true )
call SetUnitInvulnerable( su, false )
call PauseUnitBJ( false, su )
call SetUnitVertexColorBJ( su, 100, 100, 100, 0.00 )
call PauseTimer(st)
call DestroyTimer(st)
call FlushChildHashtable(udg_Hash, sid)
endif
set suloc = null
set random = null
set st = null
set su = null
set sueff = null
endfunction
function Trig_SlayerUlt_Actions takes nothing returns nothing
local timer st = CreateTimer()
local integer sid = GetHandleId(st)
local unit su = GetTriggerUnit()
local integer suid = GetHandleId(su)
local location suloc = GetUnitLoc(su)
local effect sueff
local real x=GetUnitX(su)
local real y=GetUnitY(su)
call AddSpecialEffectTargetUnitBJ ( "hand right", su, "Abilities\\Weapons \\PhoenixMissile\\Phoenix_Missile.mdl" )
set sueff = GetLastCreatedEffectBJ()
call SetUnitPathing( su, false )
call SetUnitInvulnerable( su, true )
call PauseUnitBJ( true, su )
call SetUnitVertexColorBJ( su, 100, 100, 100, 50.00 )
call SaveUnitHandle(udg_Hash, sid, 0, su)
call SaveAgentHandle(udg_Hash, sid, 1, suloc)
call SaveAgentHandle(udg_Hash, sid, 2, sueff)
call SaveAgentHandle(udg_Hash, suid, 0, st)
call SaveInteger (udg_Hash, sid, 10, 1)
call TimerStart( st, .3, true, function UltimateRun )
set suloc = null
set st = null
set su = null
set sueff = null
endfunction
===========================================================================
function InitTrig_SlayerUlt takes nothing returns nothing
set gg_trg_SlayerUlt = CreateTrigger ( )
set udg_Hash=InitHashtable()
call TriggerRegisterAnyUnitEventBJ ( gg_trg_SlayerUlt, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition ( gg_trg_SlayerUlt, Condition( function Trig_SlayerUlt_Conditions ) )
call TriggerAddAction ( gg_trg_SlayerUlt, function Trig_SlayerUlt_Actions )
endfunction
ответ
Steal nerves:
filterGetUnitsOfTypeIdAll - фильтр, вместо него должно быть написано либо null или Condition( function XXX) Короче зачем нужен фильтр? Фильтр при выборе всех юнитов сразу отсеивает не нужных, если по условию не подходит, то выкидывает.. Вам сразу достается готовая группа с нужными юнитами
А в качестве переменных используй GetFilterUnit, GetFilterPlayer. На гуи по-другому называют MatchingUnit
где XXX - название функции, эта функция возвращает boolean (то есть истину или ложь)
вбей в поиск названии функции, может найдешь ответ
например выделяем все здания UNIT_TYPE_STRUCTURE, а те, кто не является зданием отсеиваем
function XXX takes nothing returns boolean
    return IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)
endfunction
насчет статьи не видел, это придет с пониманием. Главное начать. Сначала тупо конверт, и оптимизация. А дальше можешь сам
что у тебя там не работает скидывай сюда


Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
6 лет назад
Отредактирован scopterectus
0
ЛОЛ, Dagger667, зачем мне переделывать 15000 карт, если они не мои? Все хорошие карты защищены, если их взломать, то там не будет никакого GUI! Если Вы хотели сделать доброе дело и оптимизировать 15000 карт одной своей библиотекой для GUI, которого не будет во взломанных картах, то удачи!
0
7
6 лет назад
0
ачем мне переделывать 15000 карт, если они не мои
А это очень важный момент! Потому что если мы не будем друг другу помогать, то скатимся к деградации и пустоте в картостроении!
И возможно, лично Вы не сыграете во что-то интересное!
1
26
6 лет назад
1
вейт ты никак не переделаешь на таймеры банальной библиотекой
1
21
6 лет назад
1
А это очень важный момент!
это не важный момент!
Важный момент в том, что во всех этих картах Вы не увидите никакого GUI. Потому что все оптимизаторы его удаляют!
0
7
6 лет назад
0
вейт ты никак не переделаешь на таймеры банальной библиотекой
-Почему?
-А другие значит можно?
ScopteRectuS:
во всех этих картах Вы не увидите никакого GUI. Потому что все оптимизаторы его удаляют!
Всмысле? Когда пройдёт компиляция карты? Значит Вы не поняли что Я написал.
1
15
6 лет назад
1
Значит Вы не поняли что Я написал.
Нет, это ты сам не понимаешь почему то о чем тебе все говорят не есть возможно/не есть нужно.
И повторюсь.
Твое упорство, самоуверенность и игнорирование всего что ты не понимаешь очень смахивает на то как ведут себя маленькие дети (и некоторые так и не выросшие не дети).
0
7
6 лет назад
Отредактирован Dagger667
0
AlexSan, да ладно не бузи. Я знаю что маленькие дети несут истину всегда, потому что их намерения чисты. Не думай что они такие простые и глупенькие, а ты, взрослый, самый умный.
Короче, раз идёт такая массированная бомбардировка, причём единогласная, значит дальнейшие выпытывания информации бессмысленны. Вопрос пора закрывать. Для себя Я всегда сделаю BJ-функции в файле Blizzard.j.
7
13
6 лет назад
7
Dagger667, Да тут "глупые" людишки не шарят и отмахиваются что никому не нужно. Но ты делай, мы все с нетерпением будем ждать правленые бж-функции. Мы до сих пор так мучались с ними... и вот наконец отважный гений положит этому конец.
1
29
6 лет назад
Отредактирован Doc
1
Хорошие или плохие - пользоваться ими на джассе никто особо не будет, большинство функций бж - однострочные врапперы. Весь их смысл - поддерживать гуи со всяким говном типа lastCreatedUnit етц. Твои старания будут тратой времени, т.к. ничего лучше и менее костыльнее чем all.j ты по факту не сделаешь.
all.j требует обрамления всех глобалок и мест где есть ожидание в ALL_REMOVE = false/true. Т.е. ты не можешь просто вставить её в карту и наслаждаться меньшим количеством утечек. Но по-другому просто не получится на клиентском уровне, лучшее решение - написать тулзу которая парсит жасс и анализирует скоуп переменных в коде, автоматически удаляя те, что не выходят из локальных скоупов. Прямо как делает компилятор для нормальных языков.
0
32
6 лет назад
0
Dagger667, у тебя нету 15000 карт как и нужны что то там делать. Это раз, два серьезный проект в 2018 на гуи? чет не веристя, дота лтд с гуи спрыгнули году этак в 2006-2008 полностью. Кастл файты и ютд изначально на jass писались и уровень там весьма высокий, по сей день эти карты популярны и известны. У тебя есть или нет карты, пишим на jass и улыбаемся, конвертируй триггер в текст и посмотри какой там мусор и кавардак от твоего гуи. Это еще с вашими вейтами и утечками лагать будет и игроки будут в мультиплеере отваливаться.
Гуи создан для кампаний и небольших аркад, не больше - сами близзарды не спроста писали гран при азерота и бомбардировщики чисто на jass.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.