Просто чтобы они намекают: "Мне дан дар бога, чтобы дать тебе удар от бога". Хотя мог забыть переименовать под божественный удар.
Почему "Пеладины"?
Потому, что мне так захотелось и мой друг Дима говорил пр игрока с таким ником в WoW. Он так прикольно рассказывал, что я решил сделать Пеладина в БЗ. (Типа особого почти сверх Паладина)
FlushChildHashtable() очищает определённую строку по id, полученного от хендла в хеш таблице.
Если вы больше не используете его т.е. при окончании работа таймера или смерти юнита, на котором висели данные через хеш таблицу, погиб и он не геройского типа.
То рекомендуется использовать.
Если в ней сохраняются много данных.
Ну кончено рекомендуется зачищать, однако при условии что данные в хеш таблице используются для таймеров управляющих нест. способностями, системой возрождения и т.д.
Если хотите что-то постоянное - лучше использовать массивы или структуры для данных операций.
Никак, это у тебя не получится. Ну чтобы не восходил за рамки - нужно разрешение экрана по больше.
А ещё можно сделать совместно с таблицей или доской лидеров, или текст игры на неограниченное время, потом очистив от него экран. Просто оформив так, чтобы смотрелось и текст в кнопках из 1-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
//
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
Вот так лучше, 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
Погубит ли патч некоторые фичи, к примеру баг с добавлением доп. запаса здоровья
Появятся ли такие функции как: GetUnitArmorDef\GetUnitArmor; GetUnitAttack, GetUnitAttackMedium и т.п. как и реакция GetTriggeringPlayer() на события с типом tracktable, или вообще не будет трек типа а возможно что новое либо просто.
Совершенные диалоговые окна? мб.
Он сказал вроде что-то про правки баланса -> скорее всего это будет..
Однако когда он рассказывал про выход патча, однозначно что-то хотят добавить ещё новое(???)
Что я думаю об этом:
Хорошо было бы, чтобы принцип скрипотвания не меняли, но добавили бы парочку полезных функций, улучшили вар от утечек внутренних. Ну ещё чтобы у игры появились новые типы, и ещё чтобы можно было создавать структуры.
Чтобы можно было редактировать файл, где хранятся больше тексты для заданий, и различный описаний для прочего..
STRING_001
{
text
}
А так же чтобы у него была собственная подсветка кода + создание отдельных листов не GUI, а для скриптов. Было бы здорово.. XD
Я закончил, конечно всего этого вряд можно ожидать хорошего. Мои друзья говорили, что будет тупо правка баланса, они так считают.
НЗМ: Так ожидаешь нововведений, которые будут шикарны, но потом возможно окажется лажа...
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
"Если выход"
проще просто "exit" (что я, кстати, сам использую).
Вообще часть этого можно дефайнами сделать, но не всё.
Дефайны хороши, что нет у в vJass. Особенно объявлять псевдотипы объявлять.
Мне без разницы на чем кодить vJass, сJass или JASS2...
Добавлю:
Хоть я и позабавился с дефайнами, но все равно не хватает несколько фишек....
Blp Lab
Button Manager
Эти программы можно скачать на этом сайте, HiveWorkShop, "Сайт, о котором здесь не говорят".
Поисковик в помощь, я названия уже дал.
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
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
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) )
Не хочет правильно запоминать переменную local location l = GetSpellTargetLoc() . Вместо правильной позиции запоминает центр карты, пересмотрел почти весь код, вроде все нормально, не пойму в чем проблема.
Причины: У заклинание нет цели, т.е. не указывается точка. Или заклинание может быть нацелено на боевую единицу или предмет или разрушаемое. (Во большинстве случаев возвращает 0.,0. при указании на декорацию или предметы)
Лучше использовать способность на основе канала с параметром цели "боевая единица или точка"
GetSpellTargetLoc - получает току(местоположения) для заклинания.
В центр карты возвращает по умолчанию, если её нет.
Требую изъяснить, для чего используете сие данную переменную и при каких действиях и событиях.
» Битва Зимой / Пеладин
Почему "Пеладины"?
Потому, что мне так захотелось и мой друг Дима говорил пр игрока с таким ником в WoW. Он так прикольно рассказывал, что я решил сделать Пеладина в БЗ. (Типа особого почти сверх Паладина)
» WarCraft 3 / Обязательно ли чистить хэш?
Если вы больше не используете его т.е. при окончании работа таймера или смерти юнита, на котором висели данные через хеш таблицу, погиб и он не геройского типа.
То рекомендуется использовать.
Если в ней сохраняются много данных.
Ну кончено рекомендуется зачищать, однако при условии что данные в хеш таблице используются для таймеров управляющих нест. способностями, системой возрождения и т.д.
» WarCraft 3 / Увеличение количества текста в кнопках диалога
А ещё можно сделать совместно с таблицей или доской лидеров, или текст игры на неограниченное время, потом очистив от него экран. Просто оформив так, чтобы смотрелось и текст в кнопках из 1-3 слов был отсылкой к этим описаниям.
Ред. Волчачка
» WarCraft 3 / Как добавить на карте стихии и виды урона?
И массив данных от игрока или массив со стеком на все войска...
Так же можно отлавливать урон через EventDamage, если воин который наносит уроном, и его атака относиться к стихии.
» Битва Зимой / Герои
Ведь эта ключевая клавиша будет для более мощной способности. Раз считаешь так будет удобнее - да будет так.
» WarCraft 3 / Оптимизация
и переименуй ту триггерную вкладку "Безымянный триггер 001" на "check"
НЗМ: Вам сударь, учить и ещё раз учить JASS
Лучше используйте JPNG XGM'a (cJass,vJass) или HiveWorkShop'а в котором только vJass
Ред. Волчачка
» WarCraft 3 / Оптимизация
» WarCraft 3 / Blizzard выпустит 1.27 для WarCraft 3
Чтобы можно было редактировать файл, где хранятся больше тексты для заданий, и различный описаний для прочего..
Ред. Волчачка
» WarCraft 3 / Сделать Таймер в %
Ред. Волчачка
» Кузня Волчачки / Как я представляю свою разметку jass
Мне без разницы на чем кодить vJass, сJass или JASS2...
Добавлю:
Хоть я и позабавился с дефайнами, но все равно не хватает несколько фишек....
Ред. Волчачка
» WarCraft 3 / Не работает loop(цикл)
А ещё она в заголовке globals не null'ась
» WarCraft 3 / Прога для текстур
Button Manager
Эти программы можно скачать на этом сайте, HiveWorkShop, "Сайт, о котором здесь не говорят".
Поисковик в помощь, я названия уже дал.
Ред. Волчачка
» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup
Примерно так должно быть:
» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup
» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup
Ред. Волчачка
» WarCraft 3 / Невереное значение глобалки, установленное с помощью ForGroup
» Кузня Волчачки / Как я представляю свою разметку jass
» WarCraft 3 / Юнит покидает транспорт
Ред. Волчачка
» WarCraft 3 / Светляк над древе мечты и страданий боли утопления
» WarCraft 3 / Редактирование поведение нейтралов
ИИ - Ignore Guard Postition (Игнорировать место охраны)
Ред. Волчачка
» WarCraft 3 / Как стыковать одинаковые(схожие) ауры?
Pippetz:
» WarCraft 3 / Сбой переменной
EVENT_PLAYER_UNIT_SPELL_ENDCAST
EVENT_PLAYER_UNIT_SPELL_EFFECT
» WarCraft 3 / Сбой переменной
Ред. Волчачка
» WarCraft 3 / Сбой переменной
» WarCraft 3 / Сбой переменной
Лучше использовать способность на основе канала с параметром цели "боевая единица или точка"