17

» WarCraft 3 / Убрать ману

ClotPh:
Проверял так:
Вжух и нет потока :D
Помню наткнулся на бесконечный луп, если после
GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),400+75,null)
сразу не убирать caster'а из группы, то варик начинает бесконечно передобавлять кастера в эту группу
Загруженные файлы
17

» WarCraft 3 / Убрать ману

ClotPh:
загонять ману в минус не оч гуд
лучше через предметный метод (с абилой. за раз отнимающей по 1 ману) сгонять ее ровно в 0 и так поддерживать
потому что ятп если как-то герою посчитать макс. ману, то оно и выдаст отрицательное, а не 0
а вдруг там например что-то дамажит по кол-ву макс. маны? надо будет 0, а оно продамажит как по -дохрена... или вдруг будет деление на количество макс. маны?
Ну если так подумать, то слишком костыльно получается.
Я ленив, поэтому думаю просто чекать мп через свою функцию, которая будет возвращать 0, если мп меньше нуля
Проверил, GetUnitState возвращает минусовое число :d
UPD:
Проверил ещё раз, вар обрубает поток при делении на ноль :d
Загруженные файлы
17

» WarCraft 3 / авторский перевод WarCraft 3

Если ты пробуешь на кампаниях, то тебе нужно лезть в скрипт каждой миссии кампании и править всё это.
Но удачи в редактировании озвучки для соответствия с текстом.
17

» WarCraft 3 / Мемхак

Пошарив ещё немного, нашёл pjass.exe, поставил его в едитор и начал крашиться по кд.
Ребутнув пк и переоткрыв эдитор, всё магическим образом заработало =\
17

» WarCraft 3 / Как узнать кол-во единиц атаки у юнита?

Если только своей системой атаки, через переменные.
либо если герой - то например базовая атака + основной стат * множитель
например - 5 + 2*20(аги) = 45 атаки
А так - мемхак чудеса...
17

» WarCraft 3 / Как сделать -zoom в карте?

или код:
function Trig_cam_Actions takes nothing returns nothing
    call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_TARGET_DISTANCE, S2R(SubStringBJ(GetEventPlayerChatString(), 6, 9)), 0.60 )
endfunction

//===========================================================================
function InitTrig_cam takes nothing returns nothing
    set gg_trg_cam = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_cam, Player(0), "-cam ", false )
    call TriggerAddAction( gg_trg_cam, function Trig_cam_Actions )
endfunction
17

» WarCraft 3 / Перевод карты без предоставления исходников

Бордер, Открываете карту через WEX(он не подгружает скрипт), делаете экспорт всей даты (через РО-юниты/абилки/грейды/шмот), переводите их в текстовике - потом импортируете назад, все строки заменяются на ваши.
Cкрипт - отдельно, закидываете в карту через mpq эдитор.
Перевод скрипта - возможно только ручками c:
8gabriel8, со скриптом боролся с utfizer'ом под рукой :D
17

» WarCraft 3 / Главное меню

8gabriel8, Речь о 3д меню игры (плоском, для вставки картинки)
Картинка высокого качества, превращённая в текстуры (png/tga -> blp)
17

» WarCraft 3 / Скилл под лупу (Утечки)

Пушистый, Ну вы что, думаете так легко я отдам вам свой план захвата мира, используя милых котиков?
Сама карта и есть полигон со всеми системами, но делиться ими я пока не готов
17

» WarCraft 3 / Атакуемый юнит

Drynwhyl, ЫЫЫ, спасибо, работает
Видимо пора завязывать с варом и идти спать :d
17

» WarCraft 3 / Способность на продажу юнита

Делать БД, занося стоимость юнита в ХТ, и юзая соответствующие поля при касте абилки.
пример:
Футмен - 80 голды, 30 дерева
в базе данных проверка:
Юнит, кастующий спелл продажи = Футмен (проверка по айди, или по имени, без разницы)
Проверяем игровой режим, и данные из ХТ
Допустим стоит 70% возвращение стоимости за юнита:
Читаем данные из ХТ, умножаем числа на 0.7, и возвращаем это кол-во золота и дерева игроку.
17

» WarCraft 3 / Скилл под лупу (Утечки)

ClotPh, По идее, GetAbilityName(GetSpellAbilityId()) берёт строку из поля Name .
Поле Tip - использующееся в игре как название способности - остаётся нетронутым.
Так что в теории можно просто именовать абилки как Q,W,E,R и так далее (по хоткею например), а доп проверкой делать имя юнита.
17

» WarCraft 3 / Переброс игры при ливе хоста

Гарена Лан эмулирует локалку между игроками.
Т.е. если хост ливает из игры в гарене лан, или же закрывает сам лан геймс то игра прекращается мгновенно.
Eurobattle, Iccup, Battle.net работают по другому принципу:
Если ливает изначальный хост (при условии что игра создана не через /host, а через кнопку создать игру) то игра перебрасывается на следующего в списке игрока с открытыми портами.
Список - красный,синий,бирюзовый.. по цветам сверху вниз.
Если же игрок с открытыми портами не найден, то игра прекращается.
В вашей карте же просто указана система команд по типу хоста что выбирает моды.
Т.е. если красного нет в игре, то "хостом" становится синий, но даже при условии что настоящий хост сидит на розовом.
Т.е у вас - "хост" это просто игрок с повышенными правами на команды (кик, установка модов).
17

» WarCraft 3 / Краши (Баг?)

quq_CCCP, Что-то я не в ту сторону ушёл в плане станов.
Думал что через аурку торнадо оно будет работать, но (внезапно) понял что это просто баф, по которому уже триггерно нужно отлавливать действие.
Кстати, если допустим сделать молоток на 10 секунд стана, и спустя например 2 секунды убирать баф стана, то выйдет ли цель из под него?
Просто сейчас пробовал с вариантом - баш на 0.25 секунд, и каждые 0.2 секунды баш обновлялся кастом нового молотка, но выглядит это совсем не круто в спеллах, где нужен один но долгий стан.
17

» WarCraft 3 / Как сделать предмет подбираемым только одним игроком?

Сохранение в хендл предмета хендл юнита (или номер игрока) и проверка этого хендла при поднятии предмета.
Юнит поднимает предмет
Взять хендл героя поднявшего предмет
Совпадает с хендлом на предмете - Оставить
Не совпадает - дропнуть
17

» WarCraft 3 / Краши (Баг?)

quq_CCCP, Юнит жив и выделен мной (ибо тест мапа)
Extremator, сек, проверю, ибо на первом скилле поле "Область воздействия" было на 600
(хоть сам скилл идёт в панельки лвл апа, и он не выучен, но мало ли)
Upd:
Что-то не так с моим юнитом, буду выяснять что именно.
Поставил рядом нового, и на нём не крашится.
Но вот стан почему-то работать не хочет...
Пойду ещё пошаманю.
раскрыть
Загруженные файлы
17

» WarCraft 3 / Кастомный blizzard.j

Ну он будет подгружать скрипт всем игрокам, так что В теории всё должно быть нормально.
Пока возможности проверить нет, но мб ближе к вечеру время появится.
Клятая работа
17

» WarCraft 3 / Выгрузка патча для редактирования

Из личного опыта понял, что замены файлов в mpq архивах просто нет, вместо этого старый файл просто исчезает, а новый появляется на его месте.
Попробуйте "удалить" файл из архива - размер архива не изменится
Иногда даже новый файл не подхватывается, и приходится пересоздавать архив.
17

» WarCraft 3 / Как сделать, чтобы зданием могли пользоваться несколько игроков?

Мб фальшивое здание,и если его выделил красный или синий игрок, то переброска на невыделяемый даммик-лагерь, расположенный в том же месте.
17

» WarCraft 3 / Строка

call BJDebugMsg(X2S(Переменная(udg_xxx если глобалка)))
Преобразование
R2S -> real to string
I2S -> integer to string
17

» WarCraft 3 / RemoveUnit или KillUnit?

Скорее всего первое, ибо даже в "рамках" не особо использующей переменные доты, настакивание даммиков будет снижать фпс минуте к 120й, даже при условии того, что используются герои с максимальным кол-вом даммиков.
Да и даммики не особо будут заметны, ибо эта нагрузка целиком возлагается на проц, коих в текущем поколении достаточно. (i3 спокойно тянет всё это)
Помню работал с одной картой, так там чар настакивал дичайшее кол-во мусора после себя, в итоге у меня (как у игрока с самым слабым пк на то время) начинались дикие просадки даже после минуты 30й.
Но и при этом, при любом касте спелла там дёргалась половина возможного кода, и некоторые функции были тупо сделаны через одно место (можно было в разы проще сделать), и складывая всё это можно было получить дичайшие просадки в спеллах с кучей instance'ов урона.
Если интересно, могу скинуть эту карту.
17

» WarCraft 3 / Помогите c триггером :c

UrsaBoss:
Примерно так получилось
function Trig_CW_Cast_Actions takes nothing returns nothing
    local unit u    = LoadUnitHandle( какая_нибудь_хештаблица, GetHandleId(GetExpiredTimer()), 0 )
    local real x1   = GetUnitX( u ) //координаты кастера
    local real y1   = GetUnitY( u )
    local real from = 800
    local real a    = GetUnitFacing( u ) //угол поворота юнита
    //local real S = 90 //Ширина угла
    //local real angle = S/2 //Половина ширины угла

    set udg_Angle = a
    set udg_Caster = u
    //set udg_X = angle

    call BJDebugMsg("Угол поворота при касте: "+ R2S(a))

    call GroupEnumUnitsInRange(bj_lastCreatedGroup,x1,y1,from, Condition(function TZZ))
    //call ForGroup( bj_lastCreatedGroup, function TZZ )
    call GroupClear(bj_lastCreatedGroup)
    
    set u = null
endfunction

function TimerOff takes nothing returns nothing
    local timer t  = GetExpiredTimer()
    local timer t2 = LoadTimerHandle( какая_нибудь_хештаблица, GetHandleId(t), 0 )
    
    call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t)  )
    call FlushChildHashtable( какая_нибудь_хештаблица, GetHandleId(t2) )
    call DestroyTimer( t  )
    call DestroyTimer( t2 )
    
    set t  = null
    set t2 = null
endfunction

function Timer takes nothing returns nothing
    local timer t  = CreateTimer()
    local timer t2 = CreateTimer()
    local unit  u  = GetTriggerUnit()
    
    call SaveUnitHandle( какая_нибудь_хештаблица, GetHandleId( t ), 0, u )
    call TimerStart( t, /*Периодичность*/0.04, true, Trig_CW_Cast_Actions )
    
    call SaveTimerHandle( какая_нибудь_хештаблица, GetHandleId(t2), 0, t )
    call TimerStart( t2, /*Время которое будет работать таймер*/36, false, TimerOff )
    
    set t  = null
    set t2 = null
    set u  = null
endfunction

//===========================================================================
function InitTrig_Cast takes nothing returns nothing
    set gg_trg_Cast = CreateTrigger(  )
    set bj_lastCreatedGroup = CreateGroup()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_CW_Cast_Conditions ) )
    call TriggerAddAction( gg_trg_Cast, function Trig_CW_Cast_Actions )
endfunction
Благодарю за помощь :3
17

» WarCraft 3 / Помогите c триггером :c

UrsaBoss:
блин, а я тут дописываю штуку чтобы в течении 36 секунд с любой периодичность вызывалось Trig_CW_Cast_Actions и юзало того самого кастера
Так мне доделывать или нет?
Прощу прощения за убитое вами время :c
Доделывать или нет - на ваше усмотрение :d