Хочу взяться за нелёгкое дело, заменить 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
7
6 лет назад
Отредактирован Dagger667
0
Ну группу обрамил тегами и удаляет, скриншот делал, что ещё нужно? Аналитическое мышление не работает там где всё против логики.
Она работает, когда событий мало, но её не тестировали при большом количестве событий.
Hate, вот смотрел, на сайте того автора, который сделал эту библиотеку, пользователь его библиотеки написал ему красным текстом мат о том что его библиотека не работает! Он делал карту несколько лет, и после загрузки его библиотеки, и добавлении тегов, всё перепуталось. Ну что, у всех всё работает по прежнему? Кривые руки у того кто делал эту библиотеку! Пользователь не должен добавлять даже теги, "загрузил и забыл", а уж добавив теги куда надо, под твоим Hate контролем, и всё равно убедившись что не работает, вопросы о качестве библиотеки снимаются окончательно!
1
21
6 лет назад
Отредактирован scopterectus
1
Зачем что-то делать для GUI, если при сохранении карты это всё превращается в чистый JASS? Не проще ли сразу написать на JASS, при этом полностью контролируя, что пишите. Писать на JASS быстрее, легче и понятнее. Зачем тогда вообще нужен GUI?
ну разве что тем, кто не желает учиться JASS'y.
2
7
6 лет назад
2
ScopteRectuS, Вы будете переписывать 15.000 карт? Или Вы кинете их в топку и начнёте опять писать 15.000 карт? В некоторых даже космос сделан, переделан интерфейс, очень всё красиво сделано, другие как РПГ, годами строились... Или Вы переделаете несколько функций-BJ, таких как "Unit in Range...", "Unit Create At...", или "Wait", загрузите их через библиотеку и выложите на XGM или HIVEWORKSHOP? Что Вам подсказывает Ваш Разум?
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, Да тут "глупые" людишки не шарят и отмахиваются что никому не нужно. Но ты делай, мы все с нетерпением будем ждать правленые бж-функции. Мы до сих пор так мучались с ними... и вот наконец отважный гений положит этому конец.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.