Хочу взяться за нелёгкое дело, заменить 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
19
6 лет назад
0
Похожие вопросы:

ответ
вопервых ты в 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
15
6 лет назад
0
Мне кажется что ты не понимаешь толком что такое BJ функции и зачем близзарды их добавили.
Расскажи, что в твоем понимании есть BJ функция?
0
26
6 лет назад
Отредактирован Hate
0
а ALL что по вашему?
Но на JNGP не желательно думаю
тогда можешь забыть
0
7
6 лет назад
0
а ALL что по вашему?
Да, думаю как там сделать. Но как конкретно там всё работает, не подскажите? Заметил что там убирается конфликт с анти-BJ, видимо это уже для JNGP. И ещё, когда закидывал на обычный редактор, то не запускалось из-за какой-то нестандартной функции, но это решаемо - поставить стандартную.
тогда можешь забыть
Ну почему же, там так же можно подключать нестандартные библиотеки. Это же для чего-то сделано!? Вообще для начала нужно приспособиться под стандарт, так как мне нужно чтобы те же функции работали, а не придумывать новые названия, но для того только, чтобы в GUI их можно было вызывать безбоязненно через удобный интерфейс. А вот потом можно приспособить и под редактор Пушистика, и под JNGP, это уже второстепенно. AlexSan:
Расскажи, что в твоем понимании есть BJ функция?
Самое главное, что знаю, это то, что есть native-функции, которые изменять нельзя, которые являются базовыми, и BJ-функции, которые как раз таки изменять можно, но в которых большая задержка на вызовы call и много утечек. Не все утечны BJ-функции, но всё равно требуют переделки и оптимизации.
0
17
6 лет назад
0
оо если взялся давай целый вар мути лутше на каком нить движке
0
7
6 лет назад
0
ledoed, такую тему поднял, про которую Я могу написать тут целую книгу. И не думай что Я не смогу! У меня есть методы как один человек может сделать огромную работу... И мотивы есть интересные... Но давай всё таки не будем отклонятся от этого вопроса, так как возможно, это будет ещё одним аргумент в пользу принятия, или отказа от Warcraft-а!
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.