Король, я понял твой ответ почти так же глубоко, как текст поста. Наверное, ты тоже так задумал.
Ответ не так прост как кажется, где ‰ значит %username%. По приколу аз можно смягчать, в некоторых старославянских словах через юсовидную А+I Азь читалась как Язь или Азь, но это ещё не точна.
Empyreal, неплохо было бы если только кристал поддавался перекраске rgb, но не знаю возможно ли вообще такое в моделях, отключать rgba перекрашивание в некоторых частях) Empyreal:
KingMaximax, хз, там цвета просто тимколором меняются.
Это уже я понял как глянул, но их можно меня средствами Jass.
Больше похоже на стихийные варды, ну и на варды для разной классовой магии. Прям для героя "Стихийный мастер вардов". Под оккультное лишь несколько цветов подходит.Красный, Фиолетовый и Зелёный.
Zahanc, обычно некоторые новички делают ии прямо в триггерах, а не самих ии скриптах, он даже не описал где именно он вставил код. На сколько я знаю, ии-поток отличается от игрового, и некоторые функции не работают в игровом. Если судить на скидку, он точно пытался запустить её в триггерах. Поэтому я написал своё предположение и предложил либо подключить её, либо использовать ExecuteFunc. Но в игровом она работает криво.
Если использовать в обычном WE, то лучше объявить нативом в начале всей карты в custom сценарии в первых строках.
Может фаталить если, запустить через переменную от code, при том если функция выше вызова StartThread, хотя может и так выпустить фатал. Оно применяется только внутри ИИ скриптов. см. common.ai
можно ограничиться ExecuteFunc, если пишете в сценарии карты .j, а не в .ai...
Константнтая функция - синтаксический сахар в джассе, но из-за своих ограничений совсем незначительно быстрее обычной функции, но медленнее доступа к константной переменной.
это каждые 10 сек, отдавать приказы единице, при этом проверять расстояние между целью и нападающим. Если R[m] > R[t] || 500. aoe, то нападаем, иначе ничего не делаем.
это приказывать опр. отрядам двигаться, нападать или стоять, в зависимости от положения дела на поле брани, если слишком много передвигаются, то часть будет просто стоять и ждать, другая нападать, третья просто передвигаться. Можно конечно так же спроверкой расстояния, только если меньше расстояние то сразу ринуться атаковать в чистую, при этом не приказывается вообще если orderid != 0 или имеет stop, attack, smart.
Чуть не забыл, ты же ещё четкий список целей для каждого отряда не делал. Можно ещё Targets запилить для каждой волны, чтобы строго шли к цели, пока та не сдохнет. Можно даже конечно по опр. кол-во мобов из отряда дать по цели например на отряд из 30 лучников .5 или 10 целей.
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
"Одинокой горе" лавы не хватило до победы, Амон Сул так себе. Озерный город не дотянул до озёрного города, печаль. Минас Моргул неплохо кстати особенно на тему повелителя душ, ведьм и крепости тёмных сил, но маловато готичности. Остальные с пивком потянут, хотя город гавань ничего так.
BrEd Pitt, немного поправил текст. Не с той версии заготовок скопировал. Сон всегда бывает абы"черти-что". Не всегда он бывает ясен, однако нетуманность его протекает редко..
очертание дынек, я подумаю.
Да, с пропорциями я тоже подумаю)
Надеюсь, вы сделаете её как можно более женственной, при этом останется женская отвага во взгляде, который будет показывать её решимость и готовность ко битве.
KingMaximax, не могу говорить за всех, конечно, но лично я крайне рад, что меня не пытались научить АСМ в качестве первого языка.
Я лишь предлагал как вариант его. Ну для начало же можно и простенькие для понимания принципов, а потом уже на сложные. Хотя велосипедствовать тоже вредно, но порой некоторым нужен свой велосипед, покуда есть платные. Подходящий под своё мышление, и для воплощения своих идей яп, не так уж просто найти. Не потому, что их много, а потому, что может измениться идея, или появится новая задумка, и бывает так, в одном она легко осуществима, а в этом тяжело.
KingMaximax, про то насколько чист и оптимален код написанный нубом на ассемблере я даже спорить не хочу
Причём здесь новичок? Я не говорю же "Ага прочитали написали и обделалися", а обо правильном использовании, как опора понимания взаимодействия программа-устройство. Хотя скорее тут самое важное будет "Дизассемблирование и отладка", "Максимальная гибкость при работе с аппаратными ресурсами.", "Оптимизация программ по скорости выполнения.". Хотя ему врядли пока пригодится в ближайшее время.
Можно просто использовать заготовку на основе особого фильра, и управлять при помощи дамми юнита. В Ткоке есть подобие диалога, когда нажимаешь на npc.
Для дамика сделать иконки типа 1 2 3 4, A B C D, или I, II III IV. Использовать в инвентаре как предметы-кнопки или на общей панели приказ,. где у даммика не отображаются стандартные приказы.
В общем там Blp файл или Tga с альфа каналом, где обрамление диалога прозрачно, DisplayText с различными манипуляциями, дами и способности\Предметы для выбора варианта ответа. Как-то так.
Облегчу задачу для нашего вопросителя: Выживаемость, навык, ум. Разве нет специальных сайтов по подобному вопросу, где описаны всевозможное виды характеристик?
Ред. Волчачка
» Кузня Волчачки / Родокос
Ред. Волчачка
» Кузня Волчачки / Родокос
» Кузня Волчачки / Родокос
» Heaven's Gallery / Кристальный вард
Empyreal: Это уже я понял как глянул, но их можно меня средствами Jass.
» Heaven's Gallery / Кристальный вард
» WarCraft 3 / CollieWarrior
Ещё один фуррфаг пожаловал.» Во власти наживы / Глава 15. Гилберт 3
» WarCraft 3 / Проблема с ИИ
» WarCraft 3 / Проблема с ИИ
Может фаталить если, запустить через переменную от code, при том если функция выше вызова StartThread, хотя может и так выпустить фатал. Оно применяется только внутри ИИ скриптов. см. common.ai
можно ограничиться ExecuteFunc, если пишете в сценарии карты .j, а не в .ai...
» WarCraft 3 / constant function
Ред. Волчачка
» WarCraft 3 / Проблема с ИИ
» Он вам не клоун! / 7 вещей от которых мы отказались
ZlaYa1000,
Вот мне интересно, кто заставил козырёк форума съехать?
» Он вам не клоун! / 7 вещей от которых мы отказались
» WarCraft 3 / Лучший способ отправить юнитов в атаку
» WarCraft 3 / Лучший способ отправить юнитов в атаку
» WarCraft 3 / Лучший способ отправить юнитов в атаку
Chosen2, а вообще лучше систему, могу пример на vJass:e скинуть.. Есть одна заготовка.
» WarCraft 3 / Конкурс ландшафтеров Средиземья завершен!
» Кузня Волчачки / Потрошение XGM: Хроники Белых Цепей
» 2D Арт / Alleria
» WarCraft 3 / Jass как первый ЯП?
» WarCraft 3 / Jass как первый ЯП?
» WarCraft 3 / Система диалогов
В общем там Blp файл или Tga с альфа каналом, где обрамление диалога прозрачно, DisplayText с различными манипуляциями, дами и способности\Предметы для выбора варианта ответа. Как-то так.
» Icons Library / Icons Library
» WarCraft 3 / Система атрибутов
» WarCraft 3 / Не отображается декорация