33

» WarCraft 3 / Create your Kingdom

Всегда в говнокарты играет Вадим, и каждый кичуется этим достижением!
Хотя в этой очень симпотичный ландшафт на скринах
33

» WarCraft 3 / Проверка способности Сокрушение

Centyrion, я ж написал, не использовать событие "юнит атакован"
Условие на предмет сделано верно, если там есть способность, можно проверять на "уровень способности сокрушение >= 1"
33

» WarCraft 3 / Проверка способности Сокрушение

Принятый ответ
как как:
  • Детектите урон с руки (если это сложно можно событие ЮНИТ АТАКОВАН, для самого простого варианта (но так не надо, это плохо))
  • проверяете шанс
  • играете анимацию
  • создаёте эффект
  • наносите урон
33

» XGM Конкурсы / Конкурс ландшафтеров - Уютное Средиземье

Очень неудобно голосовать:
перейти на 1 страницу, вспомнить какой участник мне нравился, прокрутит всех в голове, некоторые пикчи увеличить, покрутить ещё раз...
АЖ ЦЕЛЫХ 40 секунд потратил!
33

» WarCraft 3 / помогите изучить картостроение

yblidok, ну вот ты и показал себя во всех красе, советую для начала просто, посидеть на форуме и ознакомится недельки 3, параллельно ковыряя редактор, на сайте есть ответ почти на любой вопрос, и почти все, о чем ты мог подумать уже поднималось и обсуждалось, поиграй в хорошие карты, и пооткрывай карты карты Близзард, они на гуи
33

» WarCraft 3 / помогите изучить картостроение

yblidok, а можно некоторые личные данные о тебе узнать:?
  • возраст
  • род занятий
  • владение языками (програмирования, мб хоть бейсик же был в школе?)
От этих параметров будет зависит уровень подхода к тебе, уверен ли ты, что хочешь заняться картостроением на игре которая возможно старше тебя? А если это не так, то где ты раньше был???
Почему тебя вообще это привлекло? увидев ГУИ триггеры и кучу классных карт у тебя появилось желание делать свои? Какова мотивация твоя? стать картостроителем в 2019+ году?
33

» Гильдия «Черамор» / Бестиарий XGM

Так не будет явного представления, кто есть кто, это просто те, кого вы смогли придумать согласно текущим наблюдениям?
33

» Гильдия «Черамор» / Бестиарий XGM

Если даже по 1 дать каждому пользователю XGM (я не говорю про "каждому члену гильдии"), то всё равно останутся свободные.
Это будет назначать ваш Гильдмастер? или пользователь должен сам выбрать кто он?
33

» WarCraft 3 / Краш из-за Границ Карты

Drynwhyl, SetUnitPosition вообще отстойный, он буд-то приказ стоп отдаёт, на гору не залететь, сквозь дерево не пройти, на воде застрянет
33

» WarCraft 3 / Краш из-за Границ Карты

Принятый ответ
p.s это ответ на lua
Вот на jass
function Out takes real x, real y returns boolean
return ((GetRectMinX(bj_mapInitialPlayableArea)<=x)and(x<=GetRectMaxX(bj_mapInitialPlayableArea))and(​GetRectMinY(bj_mapInitialPlayableArea)<=y) and (y<=GetRectMaxY(bj_mapInitialPlayableArea))) or IsTerrainPathable(x,y, PATHING_TYPE_WALKABILITY)==false
endfunction
33

» WarCraft 3 / Присваивание способности по введённой строке в чат

ты как раз таки хороший программист, исходя из моего уровня знаний о программистах, но если ты здесь, то ты больше фанат варкрафта
33

» WarCraft 3 / Присваивание способности по введённой строке в чат

NazarPunk, Собственно говоря поэтому он и занимается вар3модмейкингом, потому что тут есть ГУИ, человек умеющий писать код, пойдёт делать свою игру на полноценном движке (Юнити/Анриал), скорее всего туда все и ушли, а тут или гуишники или отбитые фанатики, которые может никогда и не были программистами... и как же это всё печально =(
33

» WarCraft 3 / Самый производительный Bullet Hell

Принятый ответ
то скорость разная, то вылетают не из героя а из какой то псевдо центральной точки
в общем я полностью добился желаемого результата, никакого прерывания, ни каких лагов и странных поведений (то что снаряды врезаются в трупы так и задумано =))
вот мой код
//! beginusercode

--какие то общие функции
function MoveX (x,  Dist,  Angle)
    return x+Dist*Cos(Angle*0.0175)
end
function MoveY (x,  Dist,  Angle)
    return x+Dist*Sin(Angle*0.0175)
end
function AbilityId(id)
    return id:byte(1) * 0x1000000 + id:byte(2) * 0x10000 + id:byte(3) * 0x100 + id:byte(4)
end

function Out(x,y)
    return ( ( GetRectMinX(bj_mapInitialPlayableArea) <= x ) and ( x <= GetRectMaxX(bj_mapInitialPlayableArea) ) and ( GetRectMinY(bj_mapInitialPlayableArea) <= y ) and ( y <= GetRectMaxY(bj_mapInitialPlayableArea) ) ) or IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false
end

GetTerrainZ_location = Location(0, 0)
function GetTerrainZ(x,y)
    MoveLocation(GetTerrainZ_location, x, y);
    return GetLocationZ(GetTerrainZ_location);
end

function ehandler( err )
    print( "ERROR:", err )
end
--/////// глобалки (хотя какая разница где объявить то)
perebor=CreateGroup()

--/////// триггер

    local trigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
        TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
    end
    TriggerAddCondition(trigger, Condition(function() return
        GetOwningPlayer(GetTriggerUnit()) == Player(0)
    end))
local d=0
TriggerAddAction(trigger, function()
    local u=GetTriggerUnit()
    local z=GetTerrainZ(GetUnitX(u),GetUnitY(u))
        print("perodstart")
        TimerStart(CreateTimer(), 0.1, true, function()
        d=d+1

 --print("abiclick "..d)
 -- будущая фукция запуска снаряда
 local x=GetUnitX(u)
 local y=GetUnitY(u)
 local eff=AddSpecialEffect("Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl", x, y)
 local d2=1000
 local a=GetUnitFacing(u)

 TimerStart(CreateTimer(), 0.032, true, function()
 d2=d2-10
 x=MoveX(x,25,a)
 y=MoveY(y,25,a)
 BlzSetSpecialEffectPosition(eff, x, y, GetTerrainZ(x,y)+30)
-- урон
local e=nil
GroupEnumUnitsInRange(perebor,x,y,80,null)
while true do
	e = FirstOfGroup(perebor)
	if e == nil then break end
if IsUnitEnemy(e, GetOwningPlayer(u)) then
    UnitDamageTarget( u, e, BlzGetUnitBaseDamage(u, 1), false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
   -- print("наносим урон")
    DestroyEffect(eff)
    eff=nill 
end

	GroupRemoveUnit(perebor,e)
end

--print(d2)

 if d2<=0 or  Out(x,y)==false or eff==nil then
  --  print("УМРИ!")
    DestroyEffect(eff)
    DestroyTimer(GetExpiredTimer())
 end

 end)

    end)
end)





//! endusercode
а вот и карта
Выражаю огромную благодарность NazarPunk, и Prog за оказанную помощь и наставления
Выводы:
Более навороченные (в техническом плане) способы не всегда самые оптимальные
Точно также можно двигать эффекты и на мемхаке, так что 126 пат так же может удостоится высокой производительностью для огромного количества снарядов
Мой комп держит на 1 экране около 700 объектов в режиме 60+ FPS (с отключенной вертикальной синхронизацией, это когда макс фпс за 200)
Загруженные файлы
33

» WarCraft 3 / Самый производительный Bullet Hell

NazarPunk, угар, я понял тебя =) не в ту функцию угол поворота передал
NazarPunk:
local e
while true do
e = FirstOfGroup(perebor)
if e == nil then breal end
--наносим урон
GroupRemoveUnit(perebor,e)
end
спасибо, щас попробую
33

» WarCraft 3 / Самый производительный Bullet Hell

NazarPunk, ничего не происходит, проверь работоспособность
кстати я не хочу наносить урон через фильтр, как мне наносить урон через
call GroupEnumUnitsInRange(perebor,x,y,80,null)
loop  
set e=FirstOfGroup(perebor)
exitwhen e==null 

//наносим урон

call GroupRemoveUnit(perebor,e)
endloop
а каонкретно перевести это на цикл for ЛУА
33

» WarCraft 3 / Краш карты

Ну поэтому и протектит, чтобы наш труд и наше время, не достались кому либо, ещё раз чтоле скинуть наработку с выбором героя ? которая не фаталит и делает всё что нужно
33

» WarCraft 3 / Самый производительный Bullet Hell

Пока что двигаюсь в правильном направлении
раскрыть
//! beginusercode

--какие то общие функции
function MoveX (x,  Dist,  Angle)
    return x+Dist*Cos(Angle*0.0175)
end
function MoveY (x,  Dist,  Angle)
    return x+Dist*Sin(Angle*0.0175)
end
function AbilityId(id)
    return id:byte(1) * 0x1000000 + id:byte(2) * 0x10000 + id:byte(3) * 0x100 + id:byte(4)
end

function Out(x,y)
    return ( ( GetRectMinX(bj_mapInitialPlayableArea) <= x ) and ( x <= GetRectMaxX(bj_mapInitialPlayableArea) ) and ( GetRectMinY(bj_mapInitialPlayableArea) <= y ) and ( y <= GetRectMaxY(bj_mapInitialPlayableArea) ) ) or IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false
end

GetTerrainZ_location = Location(0, 0)
function GetTerrainZ(x,y)
    MoveLocation(GetTerrainZ_location, x, y);
    return GetLocationZ(GetTerrainZ_location);
end

function ehandler( err )
    print( "ERROR:", err )
end

--/////// триггер

    local trigger = CreateTrigger()
    for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
        TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
    end
    TriggerAddCondition(trigger, Condition(function() return
        GetOwningPlayer(GetTriggerUnit()) == Player(0)
    end))
local d=0
TriggerAddAction(trigger, function()
    local u=GetTriggerUnit()
    local z=GetTerrainZ(GetUnitX(u),GetUnitY(u))
        print("perodstart")
        TimerStart(CreateTimer(), 0.1, true, function()
        d=d+1

 print("abiclick "..d)
 -- будущая фукция запуска снаряда
 local x=GetUnitX(u)
 local y=GetUnitY(u)
 local eff=AddSpecialEffect("Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl", x, y)
 local d2=1000
 local a=GetUnitFacing(u)
 TimerStart(CreateTimer(), 0.032, true, function()
 d2=d2-10
 x=MoveX(x,25,a)
 y=MoveY(y,25,a)
 BlzSetSpecialEffectPosition(eff, x, y, GetTerrainZ(x,y)+30)
--print(d2)

 if d2<=0 or  Out(x,y)==false then
  --  print("УМРИ!")
    DestroyEffect(eff)
    DestroyTimer(GetExpiredTimer())
 end

 end)

    end)
end)





//! endusercode
новый таймер на движение каждого снаряда, тестировал до 50 к вызовов, пока что проблем не обнаружено
33

» Защитники Хелерии / Обзор героя: Нострим - Магистр

также снижая сопротивляемость задетых врагов на 10 / 14 / 18 / 22 / 26% , а что такое сопротивляемость? магическое сопротивление?