Хочу взяться за нелёгкое дело, заменить 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
насчет статьи не видел, это придет с пониманием. Главное начать. Сначала тупо конверт, и оптимизация. А дальше можешь сам
что у тебя там не работает скидывай сюда

`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
15
6 лет назад
1
Проблема как раз в БЖ! И не важно на jass или на GUI вы пишете!
И вот ты снова показываешь свое незнание проблемы. БЖ есть лишь обертка над нативками которая выполняет некоторую работу. Если ты хочешь пораскрывать все БЖ, то эту работу тебе нужно будет каждый раз делать руками.
Создают проблемы лишь те БЖ где утекает объект и/или не обнулена переменная.
Основной источник проблем это неправильные алгоритмы и неправильная работа с памятью (читай утечки которые мапмейкер допускает сам).
Dagger667:
Если Я ошибусь на jass - компилятор выдаст ошибку, а если ошибусь на GUI - не ошибусь, потому что там всё лишнее закрыто и замуровано.
Ты опять таки, сравниваешь две разных вещи. Да, в ГУИ допустить ошибку в синтаксисе просто, но синтаксические ошибки есть лишь малая часть ошибок.
Что касается алгоритмических ошибок, то в Джассе их допускать немного сложнее, так как ты явно видишь что и когда вызывается, обнуляется и так далее.
Dagger667:
НЕ РАБОТАЕТ!
У всех работает, а у тебя нет?
Проблема в тебе и твоих кривых руках.
Dagger667:
отвечу если будет смысл
Твое упорство, самоуверенность и игнорирование всего что ты не понимаешь очень смахивает на то как ведут себя маленькие дети (и некоторые так и не выросшие не дети).
Dagger667:
потом выучил много языков программирования
Что-то не верится.
0
7
6 лет назад
Отредактирован Dagger667
0
не использует бж функции делая код на jass
Потому что они утечны и непродуманны, но стоит их переделать, как предпочтения изменятся. Потому что проще написать одну строку вызова функции чем городить...
quq_CCCP:
Находятся эти файлы в war3path.mpq
Они-то находятся там, то можно ли их заменить в нестандартном коде, в подключаемой библиотеке? quq_CCCP:
сложные задачи вы бы хрен реализовали на гуи
Почему нет? ... Да, на GUI не хватает базовых возможностей, таких как прибавление белого и зелёного урона, таймеров, многомерных массивов, создание героя из обычных юнитов, и прочего, но что мешает потом сделать эти функции, когда всё стандартное будет подправлено? Пушистик же занимается этим!? Я бы мог потом присоединиться к нему, когда сделанная работа будет внушительной. Или мог бы пойти по другому пути, есть идеи... И вообще, знаете, одни пытаются маленькой корявой отвёрткой построить самолёт, и делают это долго и мучительно, каждый раз борясь с утечками и прочим, а другие предпочитают поменять сам инструмент, что значительно ускорит и упростит работу, а в некоторых случаях и вообще перейдёт в новое качество! Туда так же можно добавить алгоритмы которые вообще не сравнятся с работай и миллиона модмейкеров! AlexSan:
Основной источник проблем это неправильные алгоритмы и неправильная работа с памятью
Ну, в BJ-функции.
AlexSan:
Да, в ГУИ допустить ошибку в синтаксисе просто,
Видимо опечатка, в jass.
AlexSan:
алгоритмических ошибок
Возможно. На этот случай jass остаётся. Всегда есть возможность, для особо дотошных, написать запутанный клубок кода на jass. Но одно другому не мешает!
AlexSan:
У всех работает, а у тебя нет?
У всех не работает! Я много читал на разных форумах как люди жаловались. Автор этого творения даже спорил на HIVEWORKSHOP о том что 100% или не 100% рабочая библиотка, так как vJass и cJass по разному работают. Хотя Я честно не понимаю причём тут это.
AlexSan:
Твое упорство, самоуверенность и игнорирование всего...
Так пишешь ложное! Все знают что проблема в BJ-функциях!
AlexSan:
Что-то не верится.
Не важно... Пусть не верится.

quq_CCCP, твой ответ жду особенно!
0
32
6 лет назад
0
Dagger667, а зачем ты спрашиваешь если не знаешь? Разумеется нужен хак редактора, чтобы что то там использовать по другому, не так как у близзардов - гуишник который упрямится слезть с гуи не сделает этого, работы там много и знаний нужно много, а не вялые познания там или тут утечка.
Пытаться что то там сделать - глупость, это никому не надо (тебе это тоже не надо, ты даже не сможешь), те кто делали руссификаторы и расширенные гуи тоже это поняли, их используют единицы и внезапно делают все те же костыли с утечками и вейтами + дурью. Отказ от развития есть деградация. Пошаришся по бж функциям и до тебя дойдет.
Переписать кару на jass не долго, особенно если тебе ничего нового выдумывать ненужно (футманы же у тебя, там дел на пару дней)
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? Что Вам подсказывает Ваш Разум?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.