|
|
|
|
[ВАЖНО] Помощь по JASS
|
|
FlaReoN | Дата: Пятница, 19 Февраля 2010, 19:36:49 | Сообщение # 151 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| ну H_A_PK например нихрена не шарит... на самом деле надо юзать ивент UNIT_DAMAGED, т.е. вешать на юнита триггер с таким ивентом и всё будет ok
|
|
|
|
kaisar | Дата: Суббота, 20 Февраля 2010, 09:40:58 | Сообщение # 152 |
9 уровень
Группа: Проверенные
Сообщений: 814
Награды: 0
Репутация: 91
Блокировки:
| Quote (kaisar) Quote (kaisar)как сделать скилл у наикса в доте, он бьет и ему добавляется 7 % от хп атакованного юнита, я так понел без jass это реализовать правильно нельзя, Kartoha, сказал что если обойтись без jass то некоторые особо умные игроки смогут восстановить все хп если будут юзать атаку и тут же H таким образом быстрее восстановить ХП. помогите, идею подкиньте ой ёмаё зачем джас мучать Событие Атокован Условие Есть такаято абила у Атакующего юнита. Действие Установить переменную ХП(0) = здаровье текущее у Атокованого юнита Ждать условие хп(0) > здаровье текущее у Атокованого юнита проверяя каждые 0.10 установить переменую ХП(1) = (здаровье текущее у Атокованого юнита / 100)*7) // дальше прибовляй хп H_A_PK, какой тип переменной? в Quote (kaisar) Установить переменную ХП(0) = здаровье текущее у Атокованого юнита
|
|
|
|
Svyaga | Дата: Суббота, 20 Февраля 2010, 11:38:56 | Сообщение # 153 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (kaisar) как сделать скилл у наикса в доте, он бьет и ему добавляется 7 % от хп атакованного юнита, я так понел без jass это реализовать правильно нельзя, Kartoha, сказал что если обойтись без jass то некоторые особо умные игроки смогут восстановить все хп если будут юзать атаку и тут же H таким образом быстрее восстановить ХП. помогите, идею подкиньте ой ёмаё зачем джас мучать Событие Атокован Условие Есть такаято абила у Атакующего юнита. Действие Установить переменную ХП(0) = здОровье текущее у АтАкованого юнита Ждать условие хп(0) > здОровье текущее у Атокованого юнита проверяя каждые 0.10 установить переменую ХП(1) = (здаровье текущее у Атокованого юнита / 100)*7) // дальше прибовляй хп Это не сработает, так как если врагу будет нанесён урон от кого-то ещё (а это возможно), то оно будет также добавлено в +ХП. Скорее всего эта система задействуется с событием "юнит получает урон" вместо "юнит атакован", и при условии что у дамагера есть этот скил и тип урона == нормальному (только вот не знаю точно можно такое условие сделать или нет, так как сам не юзал подобное, это условие чтоб срабатывало только при атаках), то дамагеру прибавляется хп в зависимости от уровня скила и нанесённого урона, и ТАК ЖЕ наносится дополнительный урон врагу, равный +ХП, как и делается в скиле наикса. P.S. Полностью ошибки из цитаты исправлять грамматические стало лень
Сообщение отредактировал Svyaga - Суббота, 20 Февраля 2010, 11:39:11 |
|
|
|
kaisar | Дата: Суббота, 20 Февраля 2010, 14:54:16 | Сообщение # 154 |
9 уровень
Группа: Проверенные
Сообщений: 814
Награды: 0
Репутация: 91
Блокировки:
| Svyaga, будет еще условие типа атакующий юнит имеет спелл кровопийца.
|
|
|
|
Svyaga | Дата: Суббота, 20 Февраля 2010, 19:31:10 | Сообщение # 155 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (kaisar) Svyaga, будет еще условие типа атакующий юнит имеет спелл кровопийца. Quote (Svyaga) при условии что у дамагера есть этот скил
|
|
|
|
H_A_PK | Дата: Воскресенье, 21 Февраля 2010, 14:18:54 | Сообщение # 156 |
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
| Quote (FlaReoN) ну H_A_PK например нихрена не шарит... на самом деле надо юзать ивент UNIT_DAMAGED, т.е. вешать на юнита триггер с таким ивентом и всё будет ok можно ещё на основе сферы замедления , так как там каст идёт строга после удара.Quote (FlaReoN) ну H_A_PK например нихрена не шарит... кстате, у меня подобный спел так и сделан, и всё нормально работает.
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
|
|
|
|
FlaReoN | Дата: Воскресенье, 21 Февраля 2010, 14:55:58 | Сообщение # 157 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| Quote можно ещё на основе сферы замедления , так как там каст идёт строга после удара. получаем никому ненужный эффект сферы Quote и всё нормально работает. свиду может и так. но в серьезных картах такой способ лучше обходить стороной
|
|
|
|
H_A_PK | Дата: Воскресенье, 21 Февраля 2010, 15:41:57 | Сообщение # 158 |
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
| Quote (FlaReoN) получаем никому ненужный эффект сферы но ведь это один из способов Quote (FlaReoN) свиду может и так. но в серьезных картах такой способ лучше обходить стороной Дооо. но ведь пашет :/ хотя ты прав как лучший вариант это естественно джаз. вешаю на атакованного юнита триггер)
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
|
|
|
|
Svyaga | Дата: Воскресенье, 21 Февраля 2010, 19:01:39 | Сообщение # 159 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (H_A_PK) вешаю на атакованного юнита триггер) И снова не так понял :/ Не EVENT_PLAYER_UNIT_ATTACKED , а EVENT_UNIT_DAMAGED.
|
|
|
|
FlaReoN | Дата: Воскресенье, 21 Февраля 2010, 19:19:06 | Сообщение # 160 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| Code Не EVENT_PLAYER_UNIT_ATTACKED , а EVENT_UNIT_DAMAGED. при ивенте ATTACKED вешаем DAMAGED но! не создавая новый триггер, а юзая уже созданный где-то в начале
|
|
|
|
Svyaga | Дата: Воскресенье, 21 Февраля 2010, 19:21:22 | Сообщение # 161 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (FlaReoN) при ивенте ATTACKED вешаем DAMAGED интересно как=)
|
|
|
|
FlaReoN | Дата: Воскресенье, 21 Февраля 2010, 19:46:19 | Сообщение # 162 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| function Init takes nothing returns nothing local trigger t= CreateTrigger() set sometrig = CreateTrigger() set somegroup = CreateGroup() call TriggerAddAction(sometrig , function VampiricDamage) call TriggerAddCondition(sometrig , Condition(function SomeConditions)) call TriggerRegisterAnyUnitEventBJ(t , EVENT_PLAYER_UNIT_ATTACKED) call TriggerAddCondition(t , Condition(function SomeConditions2)) call TriggerAddAction(t , function SomeActions) set t = null endfunction в SomeActions делаешь такое: local unit t= GetTriggerUnit() call GroupAddUnit(somegroup , t) call TriggerRegisterUnitEvent(sometrig , t , EVENT_UNIT_DAMAGED) set t = null в условиях триггера т добавить что атакованый юнит не принадлежит группе somegroup Добавлено (21-02-2010, 19:46) --------------------------------------------- здесь конечно есть еще куча всяких ньюансов. но я слишком крут для того, чтобы тратить время на вас
|
|
|
|
Svyaga | Дата: Воскресенье, 21 Февраля 2010, 19:48:50 | Сообщение # 163 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| "call TriggerAddAction(sometrig , function VampiricDamage) " А это что? И напиши уж тогда полностью всю систему, и с атакованным и с дамагом, чтобы я хоть оценить мог и посмотреть будет полностью работать или нет, а то кусок кода не поможет
|
|
|
|
FlaReoN | Дата: Воскресенье, 21 Февраля 2010, 20:15:09 | Сообщение # 164 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| Quote "call TriggerAddAction(sometrig , function VampiricDamage) " с одной из своих систем выхватил в общем - это действие в котором происходит нанесение урона и там ты должен выполнять нужные дамми-касты и т.п. Code чтобы я хоть оценить мог и посмотреть будет полностью работать или нет ну у меня в Эвиксе все работает =) вот идеальный вариант этой системы: Code scope VOKRUG_ODNI_NUBI initializer Init
globals private player test_p = Player(0x00) private trigger test_t = CreateTrigger() private timer test_ti = CreateTimer() private group test_g = CreateGroup() endglobals
private function OMFG takes nothing returns boolean return not(IsUnitInGroup(GetTriggerUnit(),test_g)) endfunction
private function VampiricRemove takes nothing returns nothing call EnableTrigger(test_t) call PauseTimer(test_ti) endfunction
private function DAMAGE takes nothing returns nothing local unit t = GetTriggerUnit() local unit a = GetEventDamageSource()
call DisableTrigger(test_t) call DisplayTextToPlayer(test_p,0.,0.,R2S(GetEventDamage()))
call TimerStart(test_ti,0.,false,function VampiricRemove)
set t = null set a = null
endfunction
private function ACTIONWTF takes nothing returns nothing local unit t = GetTriggerUnit() call GroupAddUnit(test_g,t) call TriggerRegisterUnitEvent(test_t, t, EVENT_UNIT_DAMAGED) set t = null endfunction
private function Init takes nothing returns nothing local trigger t = CreateTrigger()
call TriggerAddAction(test_t, function DAMAGE) call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ATTACKED) call TriggerAddCondition(t, Condition(function OMFG)) call TriggerAddAction(t, function ACTIONWTF)
set t = null endfunction
endscope если нужно муи - делайте через структуры, там ничего сложного нет Добавлено (21-02-2010, 20:15) --------------------------------------------- система офк моя
|
|
|
|
Svyaga | Дата: Воскресенье, 21 Февраля 2010, 20:23:38 | Сообщение # 165 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Эта система далека от идеала. Вот пример: Если у героя с этой способностью будет предмет типа дагона в доте, то ---> если в момент замаха на атаку (когда начинается работа триггера) применить этот предмет, то система сработает относительно урона от дагона. Про не муи молчу, так как это указано уже =) "scope VOKRUG_ODNI_NUBI initializer Init " Просто мысли читать никто не умеет, так же как и оценивать систему, которую не видят.
Сообщение отредактировал Svyaga - Воскресенье, 21 Февраля 2010, 20:24:10 |
|
|
|
FlaReoN | Дата: Воскресенье, 21 Февраля 2010, 20:39:53 | Сообщение # 166 |
7 уровень
Группа: Проверенные
Сообщений: 456
Награды: 0
Репутация: 144
Блокировки:
| Quote Если у героя с этой способностью будет предмет типа дагона в доте, то ---> если в момент замаха на атаку (когда начинается работа триггера) применить этот предмет, то система сработает относительно урона от дагона. это и есть та куча ньюансов, о которых я говорил выше. для таких вещей - да, надо расширять систему, дописыванием 1-2 структур.
|
|
|
|
Svyaga | Дата: Воскресенье, 21 Февраля 2010, 20:51:20 | Сообщение # 167 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Кста, ещё один "ньюанс". Когда ты замахиваешься, и ему кто-то другой наносит урон любым способом, то ему будет +ХП а не тебе (допустим есть ещё 1 юнит с такой способностью и с предметом как дагон) Я не говорю о том что здесь вообще нет даже нанесения урона и +ХП. Хоть это и не сложно добавить, но раз уж написал систему то доделай хотя бы... Quote (FlaReoN) это и есть та куча ньюансов Ну а зачем тогда писать сюда систему, которая не работает? P.S. Quote (FlaReoN) но я слишком крут для того, чтобы тратить время на вас Ну а зачем вообще тогда в эту тему писать. о_О kaisar, Я подумаю что можно сделать(так как мне самому могла бы пригодиться подобная система), но ничего не обещаю =)
Сообщение отредактировал Svyaga - Воскресенье, 21 Февраля 2010, 23:53:14 |
|
|
|
DoctorGester | Дата: Понедельник, 22 Февраля 2010, 10:57:39 | Сообщение # 168 |
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
| Svyaga, делается так: пишем одну систему отлова урона, переделываем все спелы карты на жасс так, чтобы урон наносился с помощью дамми, тогда у тебя будет разделение на физический и магический урон, с помощью системы отлова урона добавляем ивенты в нужный триггер, в этом триге проверяем тип урона, далее твои действия, довольно просто пишется за 15-30 минут, в зависимости от твоих познаний в жассе. Это стоит сделать, так как будет возможность делать пассивки, которые реагируют на получение урона, оперировать уроном от заклинаний и т.д. Допустим триггерный крит ~15 строк.
|
|
|
|
Svyaga | Дата: Понедельник, 22 Февраля 2010, 11:08:36 | Сообщение # 169 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (DoctorGester) переделываем все спелы карты на жасс так, чтобы урон наносился с помощью дамми Это далеко не самый правильный способ Quote (DoctorGester) в этом триге проверяем тип урона Как проверить тип урона? Мне кажется если бы это было возможно, то и спорить на эту тему не пришлось, так как с наличием такого способа сделать такую систему не составляло труда о_О
|
|
|
|
DoctorGester | Дата: Понедельник, 22 Февраля 2010, 21:16:32 | Сообщение # 170 |
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
| Svyaga, лол Quote переделываем все спелы карты на жасс так, чтобы урон наносился с помощью дамми не понятно чтоли? С помощью типа юнита нанесшего урон, определяем тип урона. Школоло...
|
|
|
|
[DUОS] | Дата: Понедельник, 22 Февраля 2010, 21:35:31 | Сообщение # 171 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (DoctorGester) Школоло... Лолмоё, джасс не все сразу понимают))
|
|
|
|
Svyaga | Дата: Понедельник, 22 Февраля 2010, 22:18:38 | Сообщение # 172 |
7 уровень
Группа: Проверенные
Сообщений: 472
Награды: 0
Репутация: 65
Блокировки:
| Quote (DoctorGester) не понятно чтоли? С помощью типа юнита нанесшего урон, определяем тип урона. Школоло... Я понял и с первого раза, но это не решение. Точнее есть и другое решение, просто нужно до него додуматься. Quote (|DUОS|) Svyaga, лол Я посмотрел все функции, связанные с уроном, и ничего, что могло распознать тип урона (не говоря о том что нет инфы о типе урона, только GetEventDamage(), что является реальной). Напиши уж код чтобы понятно было такму школоло как мне xDDD Кстати урон от способности должен быть физическим, т.е. таким же как от атаки, так что проверка типа урона не пойдёт. Quote (|DUОS|) Лолмоё, джасс не все сразу понимают)) P.S. У меня вся карта на джассе, работаю с джассом года 2 минимум.
Сообщение отредактировал Svyaga - Понедельник, 22 Февраля 2010, 23:18:31 |
|
|
|
DoctorGester | Дата: Вторник, 23 Февраля 2010, 10:41:25 | Сообщение # 173 |
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
| Svyaga, мне так хочется выругаться матом и сказать тебе много нехорошего. Quote P.S. У меня вся карта на джассе, работаю с джассом года 2 минимум. С трудом верится. Иди гуи учить. Code
function DamageTarget takes unit dmr, unit target, real dmg returns nothing local unit u = CreateUnit(GetOwningPlayer(dmr), 'dmgr', 0, 0, 0) call UnitApplyTimedLife(u, 0, 0.1) call UnitDamageTarget(u,target,dmg,true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_METAL_HEAVY_SLICE) set u = null endfunction
library DamSys initializer i
globals public trigger DamageTrig private hashtable ht = InitHashtable() private group g = CreateGroup() endglobals
private function c takes nothing returns nothing local unit u = GetEnumUnit() if IsUnitInGroup(u,g) == false then call GroupAddUnit(g,u) call TriggerRegisterUnitEvent(DamageTrig, u, EVENT_UNIT_DAMAGED) endif set u = null endfunction
private function a takes nothing returns nothing local group gr = CreateGroup() call GroupEnumUnitsInRect(gr,bj_mapInitialPlayableArea,null) call ForGroup(gr,function c) call GroupClear(gr) call DestroyGroup(gr) set gr = null endfunction
private function i takes nothing returns nothing local timer tim = CreateTimer() call TimerStart(tim,0.1,true,function a) set tim = null endfunction
endlibrary
scope CriticalHit initializer i
private function c takes nothing returns boolean local unit u = GetEventDamageSource() local real i = 0 if GetUnitAbilityLevel(u, 'crht') > 0 and GetRandomInt(0,100) < 8 then set i = ((GetUnitAbilityLevel(u, 'crht')*0.2) + 0.5) * GetHeroAgi(u, true) call DamageTarget(u, GetTriggerUnit(), i) return true endif set u = null return true endfunction
private function i takes nothing returns nothing call TriggerAddCondition(DamSys_DamageTrig, Condition(function c)) endfunction
endscope Незачто.
|
|
|
|
H_A_PK | Дата: Вторник, 23 Февраля 2010, 14:53:07 | Сообщение # 174 |
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
| Code function Trig_CameraActions_Actions takes nothing returns nothing local real Z1 local real Z2 local unit u = udg_unit local real Angle1 = 350 local real offset local real Angle2 local real x local real y local real x2 local real y2 set x = GetUnitX(u)-400*Cos(GetUnitFacing(u)*bj_DEGTORAD) set y = GetUnitY(u)-400*Sin(GetUnitFacing(u)*bj_DEGTORAD) set x2 = GetUnitX(u) set y2 = GetUnitY(u) set Z1 = GetLocationZ(Location(x2, y2)) set Z2 = GetLocationZ(Location(x, y)) if(Z1+100>=Z2)then set offset = GetCameraField(CAMERA_FIELD_ZOFFSET)+GetUnitFlyHeight(u)+300+Z1-GetCameraEyePositionZ() set Angle1 = Angle1 - 15 else set offset = R2I(GetCameraField(CAMERA_FIELD_ZOFFSET))+250+GetUnitFlyHeight(u)+Z2-R2I(GetCameraEyePositionZ()) set Angle1 = Angle1 - 40 endif set Angle2 = GetUnitFacing(u) call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_TARGET_DISTANCE, 400, 0.50 ) call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_ANGLE_OF_ATTACK, Angle1, 0.50 ) call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_FIELD_OF_VIEW, 2200.00, 0.50 ) call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_ROTATION, Angle2, 0.50 ) call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_ZOFFSET, offset, 0.50 ) set u = null endfunction
//=========================================================================== function InitTrig_CameraActions takes nothing returns nothing set gg_trg_CameraActions = CreateTrigger( ) call TriggerRegisterTimerEventPeriodic( gg_trg_CameraActions, 0.05 ) call TriggerAddAction( gg_trg_CameraActions, function Trig_CameraActions_Actions ) endfunction почему лагает О_о ? мб кто упростит код ? зарание спасибо.Добавлено (23-02-2010, 14:53) ---------------------------------------------
Code function Trig_sd_Func001A takes nothing returns nothing local unit u = GetEnumUnit() local real x = GetUnitX(u)+80*Cos(GetUnitFacing(u)*bj_DEGTORAD) local real y = GetUnitY(u)+80*Sin(GetUnitFacing(u)*bj_DEGTORAD) local real z = GetLocationZ(Location(x, y)) local real z2 = GetLocationZ(Location(GetUnitX(u), GetUnitY(u))) local real z3Rb = z - z2 if IsUnitType(u, UNIT_TYPE_GROUND) == true or IsUnitType(u, UNIT_TYPE_HERO) == true then if z3Rb > 30 and z3Rb < 69 then call SetUnitMoveSpeed( u, ( GetUnitDefaultMoveSpeed(u) * 0.30 )) endif if z3Rb > 70 and z3Rb < 179 then call SetUnitMoveSpeed( u, ( GetUnitDefaultMoveSpeed(u) * 0.10 )) endif if z3Rb > 180 and z3Rb < 999 then call SetUnitMoveSpeed( u, 0.00) endif if z3Rb >= -15 and z3Rb <= 15 then call SetUnitMoveSpeed( u, GetUnitDefaultMoveSpeed(u)) endif if z3Rb < -30 and z3Rb > -69 then call SetUnitMoveSpeed( u, ( GetUnitDefaultMoveSpeed(u) * 1.50 )) endif if z3Rb < -80 and z3Rb > -999 then call SetUnitMoveSpeed( u, ( GetUnitDefaultMoveSpeed(u) * 2.00 )) endif endif set u = null endfunction
function Trig_Hill_Actions takes nothing returns nothing call ForGroupBJ( GetUnitsInRectAll(GetEntireMapRect()), function Trig_sd_Func001A ) endfunction
//=========================================================================== function InitTrig_Hill takes nothing returns nothing set gg_trg_Hill = CreateTrigger( ) call TriggerRegisterTimerEventPeriodic( gg_trg_Hill, 0.20 ) call TriggerAddAction( gg_trg_Hill, function Trig_Hill_Actions ) endfunction и этот заодно =)
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
Сообщение отредактировал H_A_PK - Вторник, 23 Февраля 2010, 14:50:09 |
|
|
|
DoctorGester | Дата: Вторник, 23 Февраля 2010, 19:16:36 | Сообщение # 175 |
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
| Так, чуть ошибся, заменяем это Code globals public trigger DamageTrig = CreateTrigger() private group g = CreateGroup() endglobals
|
|
|
|
|
|
|
|
|
|
|