29

» WarCraft 3 / Проблема с ИИ

quq_CCCP:
Эт функция же вроде не работает...
Она только работает во внутренней системе ии, аналог внутри-игрового ExecuteFunc.
29

» Он вам не клоун! / 7 вещей от которых мы отказались

KingMaximax, это крутитель кода
Понятно.
ZlaYa1000,
Вот мне интересно, кто заставил козырёк форума съехать?
29

» Он вам не клоун! / 7 вещей от которых мы отказались

Хеллкор
Сначала продумал, что хеллхот. На счёт этого кухонного набора, а разве его, или же один из егошных инструментов кто-то брал во промысел творческой?
29

» WarCraft 3 / Лучший способ отправить юнитов в атаку

Хотя можно сделать двумя способами:
  1. это каждые 10 сек, отдавать приказы единице, при этом проверять расстояние между целью и нападающим. Если R[m] > R[t] || 500. aoe, то нападаем, иначе ничего не делаем.
  2. это приказывать опр. отрядам двигаться, нападать или стоять, в зависимости от положения дела на поле брани, если слишком много передвигаются, то часть будет просто стоять и ждать, другая нападать, третья просто передвигаться. Можно конечно так же спроверкой расстояния, только если меньше расстояние то сразу ринуться атаковать в чистую, при этом не приказывается вообще если orderid != 0 или имеет stop, attack, smart.
Чуть не забыл, ты же ещё четкий список целей для каждого отряда не делал. Можно ещё Targets запилить для каждой волны, чтобы строго шли к цели, пока та не сдохнет. Можно даже конечно по опр. кол-во мобов из отряда дать по цели например на отряд из 30 лучников .5 или 10 целей.
29

» WarCraft 3 / Лучший способ отправить юнитов в атаку

Chosen2, это просто пример, правда был другой вариант, но случайно удалил карту с ним, когда перестанавливал вар.
Base
globals
    
    //
    constant integer MAX_BOTTLES = 12
    //
    unit Duos = null
    unit newUnit = null
    player NPC = Player(3)
    player DPC = Player(0)
    boolean waveoff = true
    boolean array check
    boolean array check2[100][100]
    boolean array offps
    real array SPAWN_X
    real array SPAWN_Y
    integer RAND = 0
    hashtable H = InitHashtable()
    group G = CreateGroup()
    timer T = null
    
    integer DELICACY_EASY = 1
    integer DELICACY_NORMAL = 2
    integer DELICACY_HARD = 3
    integer DELICACY_PEDANAR = 4
    integer DELICACY_VOLKOEB = 5
    
    integer DELICACY_SELECTED = 1
    
    string EF_DUOS_Q = "Abilities\\Weapons\\BrewmasterMissile\\BrewmasterMissile.mdl"
    
    real MXX = 5301.6
    real MIX = -5527.5
    real MXY = 5066.
    real MIY = -5516.9
   
endglobals

library Functional
    
    function IsAlive takes unit u returns boolean
    
        return IsUnitType( u, UNIT_TYPE_DEAD ) == false and GetWidgetLife(u) > 0. and u != null
            
    endfunction
    
    function PS takes string soundName returns nothing
        local sound snh = CreateSound(soundName, false, false, true, 12700, 12700, "")
        call StartSound(snh)
        call KillSoundWhenDone(snh)
        set snh = null
    endfunction

    function IsNT takes unit good, unit bad returns boolean
        return IsUnitType(bad,UNIT_TYPE_STRUCTURE)==false and IsUnitEnemy(bad, GetOwningPlayer(good)) == true and IsAlive(bad) and GetUnitAbilityLevel(bad,1097625443) == 0 and GetUnitAbilityLevel(bad,1097691750) == 0
    endfunction 
    
    function FAU takes unit u, string effname returns nothing
        call DestroyEffect(AddSpecialEffectTarget( effname, u, "origin" ))
    endfunction 
    
    function FAR takes real x, real y, string effname returns nothing
        call DestroyEffect(AddSpecialEffect( effname, x, y ))
    endfunction 
    
    function X takes real x returns real
    
        if x > MXX then
            return MXX
        endif
        
        if x < MIX then
            return MIX
        endif
        
            return x
            
    endfunction

    function Y takes real y returns real
        
        if y > MXY then
            return MXY
        endif
        
        if y < MIY then
            return MIY
        endif

        return y

    endfunction
    
    function PZ takes real h, real d, real x returns real
        return ( 4 * h / d ) * ( d - x ) * ( x / d )
    endfunction

    function dc takes real x, real y, real xx, real yy returns real
        return SquareRoot( (x - xx) * (x - xx) + (y - yy) * (y - yy) )
    endfunction

    function Ang takes real x, real y, real cx, real cy returns real
        return Atan2( y - cy, x - cx )
    endfunction

    function SetTriggerCustomValue takes integer ttype, trigger t returns nothing
        call SaveInteger( H, GetHandleId(t), StringHash("TRIGG"), ttype )
    endfunction

    function GetTriggerCustomValue takes trigger t returns integer
        return LoadInteger( H, GetHandleId(t), StringHash("TRIGG") )
    endfunction

    function ClearTriggerCutomValues takes trigger t returns nothing
        call FlushChildHashtable( H, GetHandleId(t) )
    endfunction

    function SetTimerCustomValue takes integer ttype, timer t returns nothing
        call SaveInteger( H, GetHandleId(t), StringHash("TIMER"), ttype )
    endfunction

    function GetTimerCustomValue takes timer t returns integer
        return LoadInteger( H, GetHandleId(t), StringHash("TIMER") )
    endfunction

    function ClearTimerCutomValues takes timer t returns nothing
        call FlushChildHashtable( H, GetHandleId(t) )
    endfunction

    function NewTimer takes real tm, code callback returns timer
        set T = CreateTimer()
        call TimerStart( T, tm, true, callback )
        return T
        
    endfunction


    function InitResources takes nothing returns nothing

        set SPAWN_X[0] = -4035.4
        set SPAWN_Y[0] = 3906.5
        set SPAWN_X[1] = -4802.8
        set SPAWN_Y[1] = 1891.3
        set SPAWN_X[2] = -1478.
        set SPAWN_Y[2] = 2050.4
        set SPAWN_X[3] = -524.5
        set SPAWN_Y[3] = -3289.3
        set SPAWN_X[4] = 4734.6
        set SPAWN_Y[4] = -5115.2
        set SPAWN_X[5] = 4295.7 
        set SPAWN_Y[5] = 1532.1
        set SPAWN_X[6] = -382.3
        set SPAWN_Y[6] = 4611.5
        set SPAWN_X[7] = -159.5
        set SPAWN_Y[7] = -5215.
        set SPAWN_X[8] = -397.4
        set SPAWN_Y[8] = -2952.6
        set SPAWN_X[9] = -4575.9
        set SPAWN_Y[9] = -4164.5
        
    endfunction

    function NewUnit takes player wp, integer ui, real cx, real cy, real uf returns unit

        set newUnit = CreateUnit(wp,ui,cx,cy,uf)

        return newUnit
        
    endfunction

    function GetNewUnit takes nothing returns unit

        return newUnit
        
    endfunction

    function RandSpawnXY takes nothing returns nothing
    set RAND = GetRandomInt(0,9)
    endfunction

    function GetRandSpawnX takes nothing returns real

        return SPAWN_X[RAND]
        
    endfunction

    function GetRandSpawnY takes nothing returns real

        return SPAWN_Y[RAND]
        
    endfunction

    function GetRandSpawnFace takes nothing returns real

        return GetRandomReal(0.,359.)
        
    endfunction

endlibrary
WaveSet
struct Wave
    
    integer wavecount = 0
    integer waveclose = 0
    integer wunittype = 0
    group unitstack = null
    integer stack = 0
    real time = 0.
    boolean isRun = false
    timer waveTimer = null
    
    method destroy takes nothing returns nothing
                    call ClearTimerCutomValues(.waveTimer)
                    call DestroyTimer(.waveTimer)
                    call DestroyGroup(.unitstack)
                    set .unitstack = null
                    call .deallocate()
                    set waveoff = true
                    call BJDebugMsg("|cffFF9900SYSTEM MESSAGE|r: Wave End")
    endmethod
    
    method ReleaseUnit takes unit u returns nothing
    
        call GroupRemoveUnit(.unitstack,u)
    
    endmethod
    
    static method wavemove takes nothing returns nothing
    
    local unit e = GetEnumUnit()
    
    if GetUnitCurrentOrder(e) != 851983 then
        call IssuePointOrderById( e, 851983, GetWidgetX(Duos), GetWidgetY(Duos) )
        call RemoveGuardPosition(e)
    endif
    
    set e = null
    
    endmethod
    
    static method callback takes nothing returns nothing
    
    local thistype this = GetTimerCustomValue(GetExpiredTimer())
    local integer st = 0
    local real tt = 0.
    
    if .wavecount == .waveclose and FirstOfGroup(.unitstack) == null then
        call .destroy()
    else
        if FirstOfGroup(.unitstack) == null then
        
            if .wavecount < .waveclose then
            
                set .wavecount = .wavecount  + 1
                
            endif
            
            loop 
            exitwhen tt == .time 
                loop
                exitwhen st == .stack 
                    call RandSpawnXY()
                    call GroupAddUnit( .unitstack, NewUnit( NPC, .wunittype, GetRandSpawnX(), GetRandSpawnY(), GetRandSpawnFace()) )
                    call SetUnitUserData( GetNewUnit(), 30 ) // код моба волны
                    set st = st + 1
                endloop
                set tt = tt + .5
            endloop
                
            set st = 0
            set tt = 0.
            
        else
        
            call ForGroup( .unitstack, function thistype.wavemove )
            
        endif
        
    endif
   
    endmethod
    
    method wavelaunch takes nothing returns nothing

        if .isRun == false then
            
            set .isRun = true
            set .waveTimer = NewTimer( 1., function thistype.callback )
            call SetTimerCustomValue( this ,.waveTimer )
        endif
                
    
    endmethod
    
    static method create takes integer maxwave, integer typewave, integer delicacy returns thistype 
        
        local thistype this = thistype.allocate()
        
        set .wavecount = 0
        set .waveclose = maxwave
        set .wunittype = typewave
        set .unitstack = CreateGroup()
        set .stack = 25 + (5 * delicacy )
        if delicacy < 4 then
            set .time = .5 // (0.5 times = 1 wave 1 times = double wave ) 
        else
            set .time = 1.
        endif
        set .isRun = false
        set waveoff = false
        call .wavelaunch()
        
        return this

        
    endmethod
    
endstruct 

globals
    Wave Twave
endglobals

function Trig_WaveI_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_WaveSet takes nothing returns nothing
    set gg_trg_WaveSet = CreateTrigger(  )
    call TriggerAddAction( gg_trg_WaveSet, function Trig_WaveI_Actions )
endfunction
WavesDeathUnreg
function Trig_WavesDeathUnreg_Actions takes nothing returns nothing

    local unit d = GetDyingUnit()
    
    if GetUnitUserData(d) == 30 then
        call SetUnitUserData(d,0)
        call Twave.ReleaseUnit(d)
    set d = null
    
endfunction

//===========================================================================
function InitTrig_WavesDeathUnreg takes nothing returns nothing
    set gg_trg_WavesDeathUnreg = CreateTrigger(  )
    call TriggerAddAction( gg_trg_WavesDeathUnreg, function Trig_WavesDeathUnreg_Actions )
    call TriggerRegisterPlayerUnitEvent( gg_trg_WavesDeathUnreg, NPC, EVENT_PLAYER_UNIT_DEATH, null )
endfunction
29

» WarCraft 3 / Лучший способ отправить юнитов в атаку

Принятый ответ
avuremybe:
IssuePointOrder( unit whichUnit, string order, real x, real y )
А как же:
RemoveGuardPosition(unit whichUnit) 
Чтобы единицы назад не убегали.
Chosen2, а вообще лучше систему, могу пример на vJass:e скинуть.. Есть одна заготовка.
29

» WarCraft 3 / Конкурс ландшафтеров Средиземья завершен!

"Одинокой горе" лавы не хватило до победы, Амон Сул так себе. Озерный город не дотянул до озёрного города, печаль. Минас Моргул неплохо кстати особенно на тему повелителя душ, ведьм и крепости тёмных сил, но маловато готичности. Остальные с пивком потянут, хотя город гавань ничего так.
29

» Кузня Волчачки / Потрошение XGM: Хроники Белых Цепей

BrEd Pitt, немного поправил текст. Не с той версии заготовок скопировал. Сон всегда бывает абы"черти-что". Не всегда он бывает ясен, однако нетуманность его протекает редко..
29

» 2D Арт / Alleria

очертание дынек, я подумаю.
Да, с пропорциями я тоже подумаю)
Надеюсь, вы сделаете её как можно более женственной, при этом останется женская отвага во взгляде, который будет показывать её решимость и готовность ко битве.
29

» WarCraft 3 / Jass как первый ЯП?

KingMaximax, не могу говорить за всех, конечно, но лично я крайне рад, что меня не пытались научить АСМ в качестве первого языка.
Я лишь предлагал как вариант его. Ну для начало же можно и простенькие для понимания принципов, а потом уже на сложные. Хотя велосипедствовать тоже вредно, но порой некоторым нужен свой велосипед, покуда есть платные. Подходящий под своё мышление, и для воплощения своих идей яп, не так уж просто найти. Не потому, что их много, а потому, что может измениться идея, или появится новая задумка, и бывает так, в одном она легко осуществима, а в этом тяжело.
29

» WarCraft 3 / Jass как первый ЯП?

KingMaximax, про то насколько чист и оптимален код написанный нубом на ассемблере я даже спорить не хочу
Причём здесь новичок? Я не говорю же "Ага прочитали написали и обделалися", а обо правильном использовании, как опора понимания взаимодействия программа-устройство. Хотя скорее тут самое важное будет "Дизассемблирование и отладка", "Максимальная гибкость при работе с аппаратными ресурсами.", "Оптимизация программ по скорости выполнения.". Хотя ему врядли пока пригодится в ближайшее время.
Да, мне нужно как можно четче понимать принцип программирования, хочу получить максимально широкий и мощный старт.
Тогда лучше C++, C# или то, что Doc предложил.
29

» WarCraft 3 / Система диалогов

Можно просто использовать заготовку на основе особого фильра, и управлять при помощи дамми юнита. В Ткоке есть подобие диалога, когда нажимаешь на npc.
Для дамика сделать иконки типа 1 2 3 4, A B C D, или I, II III IV. Использовать в инвентаре как предметы-кнопки или на общей панели приказ,. где у даммика не отображаются стандартные приказы.
В общем там Blp файл или Tga с альфа каналом, где обрамление диалога прозрачно, DisplayText с различными манипуляциями, дами и способности\Предметы для выбора варианта ответа. Как-то так.
29

» Icons Library / Icons Library

Roy Mustang, почему бы вам не замутить свои обрамления? Можно по примеру некоторых, которые вложены в папках генератора иконок.
29

» WarCraft 3 / Система атрибутов

Облегчу задачу для нашего вопросителя: Выживаемость, навык, ум. Разве нет специальных сайтов по подобному вопросу, где описаны всевозможное виды характеристик?
29

» WarCraft 3 / Не отображается декорация

biridius:
Chudo Derewo, модель стандартная варовская, камень с вариациями
просто я поставил ее разрушаемой декорации - и ее видно только в редакторе
с всякими цветами и грибами все работает, а камни - нет
А но основе пологового дерева пробовали? Мне помогало...
29

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

Принятый ответ
Если у вас не анло-язычный jpng, а xgm'ский(5d), то это бесполезно. Всегда будет ночь, лучше попробуйте новую сборку jpng: Jass New Gen Pack - Rebuild 1.3 , надеюсь поможет.
29

» WarCraft 3 / Вовремя сменить владельца, чтобы союзник надамажил союзника

Мне кажется он просто опыт набивает, нормальный человек уже давно сам всё проверил.
Сударь ClotPh, не соблаговолите задавать вопросы на те задачи, которые вы не можете разрешить сам за правду, оные требуют более дельного и детального обсуждения. Хватит уже абузить опыт.
29

» WarCraft 3 / Jass как первый ЯП?

nvc123:
KingMaximax, а причём тут сложнее?
и чем же полезен ассемблер?
Чистой оптимизацией, и код чище кстати. Вдобавок, он помогает выявлять куда более глубокие проблемы. А так же важных да более сложных операций, которые могут потребоваться для определённых задач, которые должны быть быстрыми, чем даст нам интерпретатор или комипилятор т.го. или иноно яп. Хотя я ничего не имею против того же lisp'a или питона. А вообще неплохо было автору определиться какой ему именно нужен яп и под какие задачи, я решил что ему просто нужно понимать принцип программирования или что-то во этом духе. Однако можно и в кросс.
29

» WarCraft 3 / Jass как первый ЯП?

nvc123:
а смысл учить то что проще если потом всеравно придётся переучиваться?
только время теряешь
но если так хочешь яп для изучения программирования то советую lisp
по нему есть хорошая книга SICP
Тогда уж ассемблер, это куда сложнее и полезнее. Тогда любой яп будет подвластен новоиспечённому само злому гению.
29

» WarCraft 3 / Jass как первый ЯП?

Лучше начинать с простых, типа Basic, QBasic или Visual Basic. А потом переходить на более сложные, кстати jass схож со синтаксисом basic, почти...Но jass это не то, что нужно для изучения.
29

» WarCraft 3 / type key

Не проще ли использовать перечисление enum при помощи cJassa?
29

» WarCraft 3 / Вовремя сменить владельца, чтобы союзник надамажил союзника

Тут лучше jass заклинание "Молнии" сделать, т.е. исккуственного молнию, которая будет поражать, как ты хочешь. Это можно провернуть с хеш-таблицей, или структуры. А применение такого рода без jass-подменок труден, ловкое смена владельца не катит. Разве, что через даммик, но и он может подвести. По этому лучше jass, или триггеры, как нравитсо.
Вот при помощи жассовой молнии, можно как сделать? Особую переменную, которая определяет стиль применения способности, от себя или под контролем вражеских чар. Да мы меняем тогда во этом случае владельца, потом забиваем в данные, что целью не может быть кастер и враги, но могут быть друзья. Молния поражает союзников, а для врага ещё и опыт, если союзник цели был убит. Правда, это довольно много пилить столько jass заклинаний, похожих даже на стандарт. Но это будет стоить того, может пригодится и для других операций.
Если я правильно понял, чтобы он кастовал и чтобы у него абилка перезаряжалась, что-то вроде некой подлости, да? Ну тут только jass пот и кровь.
29

» Edemium / Edemium – Trailer

Игра года! Осталось побольше примочек во движок варика, с добавлением более крутых видов абилок. Ещё больше характеристик в UI, больше видов энергии!
Осталось ещё заставлять героя реалистичн, ходить по воздуху, особенно ввысь, чтобы мочить драконов и пр. летающую нечисть. Неплохо бы ещё клифы крошить, не только декор.
29

» 2D Арт / Alleria

Если честно нарисовано интересно, даже хорошо, но немного не хватает женственности Аллерии, она через-чур мужественно. А так тянет на 10 из 10. Просто ощущение, что это эльф-мужик похожий на неё.
Кстати, очертание дынек будет?
29

» Кузня Волчачки / Вкусняшка [1.2]

Кет:
кокое
Иностранное, зарубежное. Некоторые слова подсказывают название страны автора, и его произведения. Детектив Кет, думайте, многосмысл можно разгадать.