Добавлен Dagger667
Хочу взяться за нелёгкое дело, заменить BJ-функции для всех людей на планете Земля, сколько смогу! Коли никто из профессиональных программистов до сих пор за 15 лет на самой известной игре Мира не смог сделать пользу для народа! Заодно это будет неплохой практикой в изучении jass-программирования.
Учебный материал у меня имеется, и какие-то обрывки информации можно найти в интернете. Я не буду спрашивать о каких-то конкретных BJ-функциях, и то, как их исправить, но разъясните мне, новичку, примерную структуру того, как нужно их переписывать и куда конкретно что писать? То есть как сделать это всё в виде библиотеки, чтобы можно было всё подключить одним движением для пользователя? Но на JNGP не желательно думаю, так как там могут быть баги и вирусы (а Я человек суеверный). Прошу обратить внимание что мне нужно чтобы стандартные названия остались, а "внутренняя мякоть" функций вся была переделана и оптимизирована. Как этого добиться?
Принятый ответ
Похожие вопросы:
ответ
вопервых ты в 1 и ту же ячейку пытаешся записать 2 значения (location и integer)
во вторых ты создаёш область по кординатам а следующей строчкой находиш эти же кординаты с помощью функций
в 3 ты сохранял точку в хэш и сразу же удалял её
и в 4 ты не инициализировал хэш
function Trig_SlayerUlt_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00V'
endfunctionfunction 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
endfunctionfunction 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
endfunctionfunction 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
насчет статьи не видел, это придет с пониманием. Главное начать. Сначала тупо конверт, и оптимизация. А дальше можешь сам
что у тебя там не работает скидывай сюда
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Создают проблемы лишь те БЖ где утекает объект и/или не обнулена переменная.
Основной источник проблем это неправильные алгоритмы и неправильная работа с памятью (читай утечки которые мапмейкер допускает сам).
Dagger667:
Что касается алгоритмических ошибок, то в Джассе их допускать немного сложнее, так как ты явно видишь что и когда вызывается, обнуляется и так далее.
Dagger667:
Проблема в тебе и твоих кривых руках.
Dagger667:
Dagger667:
Отредактирован Dagger667
quq_CCCP:
AlexSan:
AlexSan:
AlexSan:
AlexSan:
AlexSan:
Пытаться что то там сделать - глупость, это никому не надо (тебе это тоже не надо, ты даже не сможешь), те кто делали руссификаторы и расширенные гуи тоже это поняли, их используют единицы и внезапно делают все те же костыли с утечками и вейтами + дурью. Отказ от развития есть деградация. Пошаришся по бж функциям и до тебя дойдет.
Переписать кару на jass не долго, особенно если тебе ничего нового выдумывать ненужно (футманы же у тебя, там дел на пару дней)
Hate, это замкнутый круг, непонятно? Не делают потому что не работают они как надо! Но функция, сама по себе, уже готовая, лучше чем самому городить, не важно, BJ или MJ на конце названия функции.
Hate:
Даже вам, не проще ли переписать сердце, и вместо этих слов писать код, нежели каждому тут расписывать что вот, мол, никак нельзя сделать, и нужно переделывать, и бла-бла-бла? Те же буквы, только на другом языке и в другом месте!
Отредактирован Hate
Hate:
Отредактирован Hate
Отредактирован Dagger667
Она работает, когда событий мало, но её не тестировали при большом количестве событий.
Hate, вот смотрел, на сайте того автора, который сделал эту библиотеку, пользователь его библиотеки написал ему красным текстом мат о том что его библиотека не работает! Он делал карту несколько лет, и после загрузки его библиотеки, и добавлении тегов, всё перепуталось. Ну что, у всех всё работает по прежнему? Кривые руки у того кто делал эту библиотеку! Пользователь не должен добавлять даже теги, "загрузил и забыл", а уж добавив теги куда надо, под твоим Hate контролем, и всё равно убедившись что не работает, вопросы о качестве библиотеки снимаются окончательно!
Отредактирован scopterectus
ну разве что тем, кто не желает учиться JASS'y.