Хочу взяться за нелёгкое дело, заменить 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
26
6 лет назад
0
Потому что они утечны и непродуманны, но стоит их переделать, как предпочтения изменятся. Потому что проще написать одну строку вызова функции чем городить...
Все знают что проблема в BJ-функциях!
да никто не использует бж функции если знает jass! ало!
делают свои функции, и это не занимает много времени
зачем лезть туда где вы абсолютно невежественны?
0
7
6 лет назад
0
quq_CCCP, да на карту наплевать! Я её могу вам отдать за так, делайте с ней что хотите! Она была как "разведка боем"! Меня интересует более серьёзный проект, даже не игрушки уже... Скажи только куда выложить её, и правьте сами, если хотите.
Я хочу только обратить твоё внимание на то, чтобы уточнить. Я имею ввиду что мне нужно подстроиться под стандартный GUI, что не менять названия функций, что в GUI всё останется как есть и ничего не трогаем, и что Я хочу переделать чисто нутро каждой функции, чтобы при вызове GUI вызывал свою функцию, но попадал на её "замену-двойника"! И что эти "двойники" должны быть в библиотеке, и будут ли они подгружаться от туда как стандартные? Вот что Я хотел узнать у тебя!
А hack редактора используется только если что-то принципиально новое хочу добавить, и это понятно, оставим это для варианта с модом.
Hate, это замкнутый круг, непонятно? Не делают потому что не работают они как надо! Но функция, сама по себе, уже готовая, лучше чем самому городить, не важно, BJ или MJ на конце названия функции.
Hate:
да никто не использует бж функции если знает jass! ало!
Вот именно что ало! Подсунь толпе другие функции-BJ и она изменит свои предпочтения!

Что, никому не понятно что в корень надо бить, а не ловить этих тараканов когда они расползлись?
Даже вам, не проще ли переписать сердце, и вместо этих слов писать код, нежели каждому тут расписывать что вот, мол, никак нельзя сделать, и нужно переделывать, и бла-бла-бла? Те же буквы, только на другом языке и в другом месте!

quq_CCCP, обрати внимание, хак и подстройка, это разные вещи! Жду ответ.
3
26
6 лет назад
Отредактирован Hate
3
Вот именно что ало! Подсунь толпе другие функции-BJ и она изменит свои предпочтения!
да эта толпа даже не знает что они существуют! а кто знает просто их не использует ввиду бессмысленности.
не догоняете? это никому не нужно
уже один человек сделал AntiLeakLibrary которая делает точно то что вы хотите, что в итоге? вы даже не догнали как с ней обращаться! а такие наполеонские планы уже строите
Даже вам, не проще ли переписать сердце, и вместо этих слов писать код, нежели каждому тут расписывать что вот, мол, никак нельзя сделать
а как ты думаешь, что делают те кто знает jass? правильно, делают свои функции и не используют бж. потому что это проще гораздо чем пытаться засунуть непонятно что непонятно куда ради ГУИ
да никому не нужно это бже ты мой
0
7
6 лет назад
0
вы даже не догнали как с ней обращаться!
Под вашим руководством всё делал, не Наполеон а солдат!
Hate:
это никому не нужно
Ну как не нужно? Есть у людей карты, которые были построены на стандартном редакторе (за 15 лет их набралась туча), но которые лагают. Загрузили библиотеку - всё заработало без лагов. Но не надо меня, с моим аналитическим мышлением, сравнивать с тем кто делал ту библиотеку!
1
26
6 лет назад
Отредактирован Hate
1
из всех кого я знал использующих ALL - только у вас она "не работает"
так что я бы помолчал про "аналитическое мышление"
Загрузили библиотеку - всё заработало без лагов
Anti Leak Library в помощь....
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
вейт ты никак не переделаешь на таймеры банальной библиотекой
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.