29

» Битва Зимой / Пеладин

Почему гг не Чак Норрис, а какой-то Баблан?
Если найдуться фанаты карты и решать единогласно, чтобы ещё ему добавили имя Чак Норис - добавим. xd
Однообразно звучит. Божественный удар?
Просто чтобы они намекают: "Мне дан дар бога, чтобы дать тебе удар от бога". Хотя мог забыть переименовать под божественный удар.
Почему "Пеладины"?
Потому, что мне так захотелось и мой друг Дима говорил пр игрока с таким ником в WoW. Он так прикольно рассказывал, что я решил сделать Пеладина в БЗ. (Типа особого почти сверх Паладина)
29

» WarCraft 3 / Обязательно ли чистить хэш?

FlushChildHashtable() очищает определённую строку по id, полученного от хендла в хеш таблице.
Если вы больше не используете его т.е. при окончании работа таймера или смерти юнита, на котором висели данные через хеш таблицу, погиб и он не геройского типа.
То рекомендуется использовать.
Если в ней сохраняются много данных.
Ну кончено рекомендуется зачищать, однако при условии что данные в хеш таблице используются для таймеров управляющих нест. способностями, системой возрождения и т.д.
Если хотите что-то постоянное - лучше использовать массивы или структуры для данных операций.
Будьте любезны, изъясняться как можно точнее.
29

» WarCraft 3 / Увеличение количества текста в кнопках диалога

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

» WarCraft 3 / Как добавить на карте стихии и виды урона?

Graf_Men9999, всё куда проще. Можно просто всё хранить в массиве, или структуре. с наименованиями Fire, Earth, Water и т.д. можно наносить урон костылём методом ссылок
Допустим у нас есть функция костыль Damage( id1, id2, dmg, Type )
И массив данных от игрока или массив со стеком на все войска...
Так же можно отлавливать урон через EventDamage, если воин который наносит уроном, и его атака относиться к стихии.
Где пример:
real array Fire
constant integer FIRE = 0x0
Примерно внутри костыля Damage()
//
	if Type = FIRE then
		call UnitDamageTarget( Unit[id1], Unit[id2], dmg - (dmg * Fire[id2], true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN, null)
	endif
//
29

» Битва Зимой / Герои

Night_Sta1ker:
лучше D вместо G, поудобнее будет
(да, по доте убедился)
Хорошо, исправлено.
Ведь эта ключевая клавиша будет для более мощной способности. Раз считаешь так будет удобнее - да будет так.
29

» WarCraft 3 / Оптимизация

Yury13:
Ох щи
function InitTrig_check takes nothing returns nothing
set gg_trg_check = CreateTrigger( )
call TriggerRegisterTimerEvent( gg_trg_check, 0.1, true )
call TriggerAddAction ( gg_trg_check, function Trig_check_Actions )
endfunction
Вставь ниже
и переименуй ту триггерную вкладку "Безымянный триггер 001" на "check"
НЗМ: Вам сударь, учить и ещё раз учить JASS
Лучше используйте JPNG XGM'a (cJass,vJass) или HiveWorkShop'а в котором только vJass
29

» WarCraft 3 / Оптимизация

Вот так лучше, 0x10000 - взято из TimerUtils (Где считывается кол-во таймеров по хендлу, возможно не учли внутренние таймеры BJ)

function Trig_check_Actions takes nothing returns nothing
	local timer Timer = CreateTimer ()
	local string S = I2S(GetHandleId(Timer)-0x10000)
	call BJDebugMsg(S)
	call DestroyTimer (Timer)
	set S = null
	set Timer = null
	
endfunction
29

» WarCraft 3 / Blizzard выпустит 1.27 для WarCraft 3

  1. Надувалово это или нет мы не знаем.
  2. Погубит ли патч некоторые фичи, к примеру баг с добавлением доп. запаса здоровья
  3. Появятся ли такие функции как: GetUnitArmorDef\GetUnitArmor; GetUnitAttack, GetUnitAttackMedium и т.п. как и реакция GetTriggeringPlayer() на события с типом tracktable, или вообще не будет трек типа а возможно что новое либо просто.
  4. Совершенные диалоговые окна? мб.
  5. Он сказал вроде что-то про правки баланса -> скорее всего это будет..
  6. Однако когда он рассказывал про выход патча, однозначно что-то хотят добавить ещё новое(???)
  7. Что я думаю об этом:
Хорошо было бы, чтобы принцип скрипотвания не меняли, но добавили бы парочку полезных функций, улучшили вар от утечек внутренних. Ну ещё чтобы у игры появились новые типы, и ещё чтобы можно было создавать структуры.
Чтобы можно было редактировать файл, где хранятся больше тексты для заданий, и различный описаний для прочего..
STRING_001
{
text
}
А так же чтобы у него была собственная подсветка кода + создание отдельных листов не GUI, а для скриптов. Было бы здорово.. XD
Я закончил, конечно всего этого вряд можно ожидать хорошего. Мои друзья говорили, что будет тупо правка баланса, они так считают.
НЗМ: Так ожидаешь нововведений, которые будут шикарны, но потом возможно окажется лажа...
29

» WarCraft 3 / Сделать Таймер в %

Можно примерно так: Jass
function TimerSet takes timerdialog td, timer t, real max, string tname returns nothing
    local real rm = TimerGetRemaining(t)
    local integer pc = R2I((rm/max)*10.)
    TimerDialogSetTitle(td, tname + " [|cff03FF03"+SubString("IIIIIIIIII",0,pc)+"|r|cffFF0303"+SubString("__________",0,10-pc)+"|r]")
endfunction 
Пример GUI:
inside
Загруженные файлы
29

» Кузня Волчачки / Как я представляю свою разметку jass

Clamp:
Берёшь такой, просишь исходники cJass у ADOLF'а и радостно переписываешь под себя.
раньше они на cjass.xgm.guru были, не нашёл почему-то.

ifexit
"Если выход"
проще просто "exit" (что я, кстати, сам использую).
Вообще часть этого можно дефайнами сделать, но не всё.
Дефайны хороши, что нет у в vJass. Особенно объявлять псевдотипы объявлять.
Мне без разницы на чем кодить vJass, сJass или JASS2...
Добавлю:
Хоть я и позабавился с дефайнами, но все равно не хватает несколько фишек....
code
Тестил define, ничего так. Но немного не так. XD
#include "cJassKing_MaximaxVers.j"
//#include "kj_lib.j"


library TimerGroup initializer Ini{
    ^pointer(TimerGroup)
    ^add pointer(TimerGroup,^t,Timer)
    ^add pointer(TimerGroup,^i,Step)
    
    _no tgClear(^pointer i){
        pointer(TimerGroup,Timer,i) = _nl
        pointer(TimerGroup,Step,i) = _ni
    }
    
    ^no Ini(){
        ^init pointer(TimerGroup)
        
    }
}

library TimerSetting initializer Ini{
    ^pointer ts_Tmr = _ni
    ^h Hash
    
    ^pointer trhd(^pointer Timer){
        _re LoadInteger( Hash, _hi(pointer(TimerGroup,Timer,Timer)), _ni )
    }
    
    ^pointer NewTimer(^pointer px, ^r ix, ^c fcode ){
        ts_Tmr =  ^p_loc(TimerGroup)
        pointer(TimerGroup,Timer,ts_Tmr) = cr ^t
        SaveInteger( Hash, _hi(pointer(TimerGroup,Timer,ts_Tmr)),_ni, px )
        _tRun( pointer(TimerGroup,Timer,ts_Tmr), ix, false, fcode )
        _re ts_Tmr
    }
    
    ^pointer NewTimerEx(^pointer px, ^r ix, ^c fcode ){
        ts_Tmr =  ^p_loc(TimerGroup)
        pointer(TimerGroup,Timer,ts_Tmr) = cr ^t
        _tRun( pointer(TimerGroup,Timer,ts_Tmr), ix, true, fcode )
        _re ts_Tmr
    }
    
    _no CrashTime(^pointer Timer){
        clear ^h(Hash,_hi(pointer(TimerGroup,Timer,Timer)))
        free ^t(pointer(TimerGroup,Timer,Timer))
        ^p_unloc(TimerGroup,Timer)
    }
    
    ^no Ini(){
        
        Hash = cr ^h
    }
}
29

» WarCraft 3 / Не работает loop(цикл)

nvc123, У него там отсутствует CreateGroup()
А ещё она в заголовке globals не null'ась

Я о group G
29

» WarCraft 3 / Прога для текстур

Blp Lab
Button Manager
Эти программы можно скачать на этом сайте, HiveWorkShop, "Сайт, о котором здесь не говорят".
Поисковик в помощь, я названия уже дал.
29

» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup

NekoriDes,
Примерно так должно быть:
scope Creeps initializer IniCreeps
    
    globals
            constant    player          CreepsPlayer    = Player(11)
                        integer         CreepsMax       = 0
                        integer array   CreepStack
                        integer         iCreep          = 0
                        integer array   crTypeId
                        real array      crX
                        real array      crY
                        boolean array   crIsDeead
                        timer           crTimer         = null        
    endglobals
    
    function CreepsDeadAction takes nothing returns nothing
        local unit      d       = GetTriggerUnit()
        local integer   data    = GetUnitUserData(d)
        set crIsDeead[iCreep] = true
        set d = null
        set data = 0
    endfunction

    function CreepsRespawn takes nothing returns nothing
        set iCreep = 0
        loop
            if crIsDeead[iCreep] then
                set crIsDeead[iCreep] = false
                call SetUnitUserData(CreateUnit( CreepsPlayer, crTypeId[iCreep], crX[iCreep], crY[iCreep], 0. ), iCreep )
            endif
            set iCreep = iCreep + 1
        exitwhen iCreep == CreepsMax
        endloop
    endfunction
    
    function IniCreeps takes nothing returns nothing
        local group g = CreateGroup()
        local unit p = null
        set gg_trg_Creeps = CreateTrigger(  )
        call TriggerAddAction( gg_trg_Creeps, function CreepsDeadAction )
        call TriggerRegisterPlayerUnitEvent( gg_trg_Creeps, CreepsPlayer, EVENT_PLAYER_UNIT_DEATH, null ) 
        set iCreep = -1
        call GroupEnumUnitsOfPlayer( g, CreepsPlayer, null )
		loop
            set p = FirstOfGroup(g)
        exitwhen p == null
            set iCreep = iCreep + 1
            set crX[iCreep] = GetWidgetX(p)
            set crY[iCreep] = GetWidgetY(p)
            set crTypeId[iCreep] = GetUnitTypeId(p)
            set crIsDeead[iCreep] = false
            call SetUnitUserData( p, iCreep )
            call GroupRemoveUnit( g, p )
        endloop
        set CreepsMax = iCreep + 1
        set iCreep = 0
        call DestroyGroup(g)
        set crTimer = CreateTimer()
        call TimerStart( crTimer, .20, true, function CreepsRespawn )
        set g = null
        set p = null
    endfunction
endscope
29

» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup

Примерно так, но я немного изобразил по наркомански, т.к. на скорую руку.
Просмотреть
Загруженные файлы
29

» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup

Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
Разве, что запускает две функции одновременно, делая всего лишнюю операцию.
И так:
  1. Нужен массив для хранение TypeId
  2. Лучше глобальную группу использовать, а то локальная у тебя только на инициализации выполнилась.
  3. Используем loop endloop для большей эффективности
  4. Проверять лучше всё таки стеком,
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
  1. Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
29

» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup

Попробуйте использовать:
call GroupClear( g ) // не обязятельно
call DestroyGroup( g )
//
set g = null
	//1
	call TriggerRegisterTimerEvent(gg_trg_rCrips, 0.20, false)
    call TriggerAddAction(gg_trg_rCrips, function Trig_rCrips_Actions)
	// 2
    call TriggerRegisterAnyUnitEventBJ(gg_trg_rCrips, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddAction(gg_trg_rCrips, function css_Respawn)
Лучше использовать разные триггеры для них..
А ещё поясните, что вы хотите именно с крипами делать, а то просто без отдельного стека вам не обойтись...
29

» WarCraft 3 / Юнит покидает транспорт

Проще отслеживать по способностям выгрузить и погрузить боевую единицу на борт, и ещё проверяя того, кто погружает и выгружает.
29

» WarCraft 3 / Светляк над древе мечты и страданий боли утопления

Пример Jass:
// native SetDoodadAnimationRect   takes rect r, integer doodadID, string animName, boolean animRandom returns nothing

call SetDoodadAnimationRect( gg_rct_VarName, 'D000', "stand lumber", false )
Пример GUI:
Посадить можно, лучше используй на основе грибов вид декорации "Окружение". Ну это, чтобы посадить светляков куда надо.
Загруженные файлы
29

» WarCraft 3 / Редактирование поведение нейтралов

Можно использовать
//
// native RemoveGuardPosition takes unit hUnit returns nothing
//

call RemoveGuardPosition( this_unit )
В GUI
ИИ - Ignore Guard Postition (Игнорировать место охраны)
29

» WarCraft 3 / Как стыковать одинаковые(схожие) ауры?

Нужно сделать два разных баффа двум способностям типа ауры - профит. У этой свой бафф, у той свой бафф.
Как и было примерно сказано пользователем Pippetz.
Pippetz:
Насчёт первого: а разве разные баффы не помогают?
29

» WarCraft 3 / Сбой переменной

Попробуй заменить,
EVENT_PLAYER_UNIT_SPELL_ENDCAST
на
EVENT_PLAYER_UNIT_SPELL_EFFECT
И да, nvc123 прав на счёт координат.
Зачем использовать наркоманский wait, когда можно всё сделать в таймере?
29

» WarCraft 3 / Сбой переменной

Megacomp:
KingMaximax, Способность сделана на основе канал, с параметром точка . Скинул скриншот моего кода.
В вашем много утечек и лишнего мусора. А ещё хотел бы увидеть что в TrigUltra_Conditions и InitTrig_ultra

// Будьте любезны добавить свой код:
// В блоке переменных
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()

// ниже блока
call BJDebugMsg("SX: " + R2SW(x,8,2) + "SY: " +  R2SW(y,8,2) )
call BJDebugMsg("LX: " + R2SW(GetLocationX(l),8,2) + "LY: " + R2SW(GetLocationY(l),8,2) )
Потом покажите результат, выведенный на экране.
29

» WarCraft 3 / Сбой переменной

nvc123:
Fa1korn, это типо быстрый способ забить оперативку?
если да то создать 10000 юнитов циклом будет быстрее
Скорее он не знает о существовании (пр. ниже), али просто троллит.
GetSpellTargetX()
GetSpellTargetY()
29

» WarCraft 3 / Сбой переменной

Не хочет правильно запоминать переменную local location l = GetSpellTargetLoc() . Вместо правильной позиции запоминает центр карты, пересмотрел почти весь код, вроде все нормально, не пойму в чем проблема.
Причины: У заклинание нет цели, т.е. не указывается точка. Или заклинание может быть нацелено на боевую единицу или предмет или разрушаемое. (Во большинстве случаев возвращает 0.,0. при указании на декорацию или предметы)
Лучше использовать способность на основе канала с параметром цели "боевая единица или точка"
GetSpellTargetLoc - получает току(местоположения) для заклинания.
В центр карты возвращает по умолчанию, если её нет.
Требую изъяснить, для чего используете сие данную переменную и при каких действиях и событиях.