XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Советуем ознакомиться со всей базой статей по триггерам редактора (и не только).

Закрытая тема
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
struck\обучение Jass
» primer,ADOLF'a

Код:
struct spell
 unit caster
 unit target
 integer lvl
endstruct

// --->
function Spl takes nothing returns nothing
 local timer t=GetExpiredTimer()
 local spell s=*attach get*(t)
 //
 // action with s.caster and s.target
 //
 call s.destroy()
 call DestroyTimer(t)
 set t=null
endfunction

function SpellAction takes nothing returns nothing
 local spell s=spell.create()
 local timer t=CreateTimer()

 set s.caster=GetSpellAbilityUnit()
 set s.target=GetSpellTargetUnit()
 set s.level=GetUnitAbilityLevel(s.caster, 'A000')

 call *attach*(t, integer(s))
 call TimerStart(t, 2., false, function Spl)
 set t=null
endfunction

вопросы для освоения:
1)call s.destroy() - есть очищение как в хешах call Flush?
2)в фильтрах как не через глобалку писать юнита который наносит урон?
то-есть
function FilterKunay takes nothing returns boolean
local unit u=GetFilterUnit() \\кого будем дмж
if IsPlayerEnemy(GetOwningPlayer(как без глобалки ввести значение),GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_FLYING) then
call UnitDamageTarget(как без глобалки ввести значение,u,20,true,false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
endif
return false
endfunction
3)call *attach*(t, integer(s)) это аттач к таймеру, аналогично будет ли если аттачить к триггерам и другому?
Старый 19.03.2010, 22:53
XOR

offline
Опыт: 38,284
Активность:
  1. нет все сам
  2. тогда хэш 0_0
  3. к определ. таймеру хотя легко изменить
Старый 19.03.2010, 22:59
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
XimikS,
Цитата:
тогда хэш 0_0

:D попался
скажи пожалуйста как тогда хешем вытащить, еще не понимаю как в фильтрах
вот у меня будет ф-ция
[code]
function 1 takes nothing returns nothing
local unit u=...
call SaveUnitHandle(udg_Hash,GetHandleId(а к чему приатачить?))
call GroupEnumUnits...
endfunction

function FilterKunay takes nothing returns boolean
local unit u=GetFilterUnit() \\кого будем дмж
local unit load=LoadUnit(udg_Hash,GetHandleId(а к чему приатачить?))
return false
endfunction

AlexKARASb добавил:
Цитата:
1 нет все сам

как очищать тогда опиши хоть одну переменную =\
Старый 19.03.2010, 23:10
XOR

offline
Опыт: 38,284
Активность:
..
spell.caster = null
spell.destroy()

Отредактировано XimikS, 19.03.2010 в 23:28.
Старый 19.03.2010, 23:14
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
спасибо, дальше на примерах попробую
Старый 19.03.2010, 23:20
XOR

offline
Опыт: 38,284
Активность:
Вообще то "struct"
Старый 19.03.2010, 23:28
Sebra

offline
Опыт: 5,603
Активность:
Ну во первых, структуры тут - глобальные массивы.
  1. call s.destroy() не очищение, а освобождение экземпляра структуры.
Очищать элементы можно как обычно в null.
Хотя в данном случае это не обязательно - при следующем занятии элемента ячейки перезапишутся и хэндлы освободятся.
  1. так как структуры глобальны, вопрос лишается смысла :)
  2. call *attach*(t, integer(s)) - имеется в виду выбранный тобой способ прикрепления структуры к таймеру.
Пример через хэш:
call SaveInteger(udg_Hash,GetHandleId(твой таймер или к чему ты хочешь крепить),любое целое число например 0, прикрепляемое целое)
*attach get*(t) - получение прикреплённого
call LoadInteger(udg_Hash,GetHandleId(тот же таймер или к чему ты крепил),то же целое число например 0)
Не забывай чистить хэш!

Отредактировано Sebra, 20.03.2010 в 15:35.
Старый 20.03.2010, 09:30
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Пробный код, скажите пожалуйста что не правильно, так как компилятор выдает ошибку в "local project pr=*attach get*(t)" этой строке, Syntax Error, unexpected: "*"?
Код:
function CondPrLine takes nothing returns boolean
    return GetSpellAbilityId()=='A00E'
endfunction

struct project
    real speed=20.
    real xc
    real yc
    real angle
    unit hand
    unit caster
endstruct

function TimerMoveStruck takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local project pr=*attach get*(t)
    local real x=GetUnitX(pr.hand)
    local real y=GetUnitY(pr.hand)
    local real d=(pr.xc-x)*(pr.xc-x)+(pr.yc-y)*(pr.yc-y)
    if d>=1000000 then
    call PauseTimer(t)
    call RemoveUnit(pr.hand)
    set pr.hand=null
    call pr.destroy()
    call DestroyTimer(t)
    else
    set x=x+pr.speed*Cos(pr.angle)
    set y=y+pr.speed*Sin(pr.angle)
    call SetUnitX(pr.hand,x)
    call SetUnitY(pr.hand,y)
    endif
    set t=null
endfunction

function Trig_b_Actions takes nothing returns nothing
    local project pr=projectiles.create()
    local timer t=CreateTimer()
    local location l=GetSpellTargetLoc()
    local real x=GetLocationX(l)
    local real y=GetLocationY(l)
    set pr.caster=GetSpellAbilityUnit()
    set pr.xc=GetUnitX(pr.caster)
    set pr.yc=GetUnitY(pr.caster)
    set pr.angle=Atan2(y-pr.yc,x-pr.xc)
    set pr.hand=CreateUnit(GetOwningPlayer(pr.caster),'h006',pr.xc+35*Cos(pr.angle),pr.y  c+35*Sin(pr.angle),pr.angle*bj_RADTODEG)
    call *attach*(t, integer(pr))
    call RemoveLocation(l)
    call TimerStart(t,.025,true,function TimerMoveStruck)
    set t=null
    set l=null
endfunction
//===========================================================================
function InitTrig_ProjectLine takes nothing returns nothing
    set gg_trg_ProjectLine = CreateTrigger(  )
    call TriggerAddCondition(gg_trg_ProjectLine,Condition(function CondPrLine))
    call TriggerAddAction(gg_trg_ProjectLine, function Trig_b_Actions )
endfunction
Старый 20.03.2010, 15:10
Sebra

offline
Опыт: 5,603
Активность:
Я ж тебе сказал, чем звёздочки заменить!
Старый 20.03.2010, 15:34
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Sebra, все понял спасибо, (чем я читал тот пост до этого =\)
Старый 20.03.2010, 15:46
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Последний вопрос по struct
почему на массив юнитов в структуре компилятор выставляет ошибку? "Expected[size]"
пишу так:
struct circus
unit array u
endstruct
Старый 28.03.2010, 15:12
Nekit1234007

offline
Опыт: 11,916
Активность:
Пиши так:
struct circus
    unit array u[8190]
endstruct
Старый 28.03.2010, 15:13
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Nekit1234007, тоесть внутри я должен указать максимальное кол-во юнитов в триггере?
Старый 28.03.2010, 15:16
ScorpioT1000
Работаем
online
Опыт: отключен
ахаха вы что
! делай как можно меньше )
Nekit1234007, я не буду говорить куда тебе засунуть эти 8190 в степени 8190 переменных
ScorpioT1001 добавил:
AlexKARASb, пользуясь случаем, xgm.ru/p/wc3/w3_special_programming
Старый 28.03.2010, 15:42
Nekit1234007

offline
Опыт: 11,916
Активность:
Имелось ввиду максимум, при котором жассхелпер не будет строить всякие конструкции, позволяющие хранить over 8192 значений в массиве.
Nekit1234007 добавил:
Вообще юзать массивы в структурах не красиво.
Старый 28.03.2010, 15:48
agentex

offline
Опыт: 34,534
Активность:
struct circus
unit array u[8190]
endstruct
ахаха! и тебе будет доступен ОДИН экземпляр структуры!
прикол, да
p.s. не делай так никогда
Старый 28.03.2010, 15:49
DioD

offline
Опыт: 45,184
Активность:
как всё запущенно...
  1. Глобалки обнулять не нужно.
  2. Удаление объектов настраивается в методе onDestroy()
  3. Структура уже массив
  4. vJass имеет прекрасный мануал, который еще и в добавок был переведён, потратьте ваши драгоценные секунды на его чтение
пс. RTFMNOOB
Старый 28.03.2010, 15:49
ScorpioT1000
Работаем
online
Опыт: отключен
кароче
struct classname
{
	type name_0
	type name_1
	type name_2
	type name_3
	type name_4
	type name_5
	type name_6
	type name_7
	type name_8
	type name_9
	type name_10
	type name_11
	type name_12
	type name_13
	type name_14
	type name_15
	int nameNumber
	static constant int nameMax =16

	thistype New(...) {
		thistype this = thistype.create()
		nameNubmer =0

		//и поехали..

		return this
	}
}
Старый 28.03.2010, 16:48
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Удаление объектов настраивается в методе onDestroy()
имхо не стоит его юзать,т.к для него создаётся отдельный триггер
Старый 28.03.2010, 17:11
ScorpioT1000
Работаем
online
Опыт: отключен
юзайте свои методы New и Delete или перегружайте create/destroy (в наследовании)
Старый 28.03.2010, 17:34
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:50.