|
|
|
|
Нанести 1 раз
|
|
demon_nrt | Дата: Воскресенье, 15 Сентября 2013, 13:42:22 | Сообщение # 1 |
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
| Парни помогите как разобраться с уроном. Пример: летит снаряд который двигается по направлению указанных в триггерах, и наносит урон. Мне нужно чтобы когда снаряд задевал юнитов наносился целый урон. Если задавать таймер то урон будет наноситься каждую долю времени указанное в таймере. А мне надо, чтобы наносилось всего 1 раз каждому задетому юниту.
Летит снаряд с областью пика юнитов 250 ед. Задан таймер время 0.05 снаряд летит и задевает юнитов нанося им по 250 ед урона. Но не как не 3000 или 6000, чтобы урон нанеся только 1 раз каждому задетому юниту.
|
|
|
|
nvc123 | Дата: Воскресенье, 15 Сентября 2013, 14:01:20 | Сообщение # 2 |
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
| надо помечать юнитов которым нанесли урон
научите нуба писать на jass пишу игры под андроид за еду
|
|
|
|
Extremator | Дата: Воскресенье, 15 Сентября 2013, 14:13:58 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| заноси их в группу при выборе целей проверь что цель НЕ в группе... то - нанести урон и занести в группу
|
|
|
|
nvc123 | Дата: Воскресенье, 15 Сентября 2013, 14:18:47 | Сообщение # 4 |
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
| Extremator, добавлять в группу и проверять наличие в группе каждые 0,04 секунды каждого юнита и если одновременно летит 500 снарядов комп не накроется?
научите нуба писать на jass пишу игры под андроид за еду
|
|
|
|
Extremator | Дата: Воскресенье, 15 Сентября 2013, 14:27:49 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (nvc123) комп не накроется? если у тебя будет 500 снарядов одновременно - даже без групп будут лаги, ибо это много а в разумных пределах - будет всё нормально, лишняя проверка (даже 10 проверок) роли не сыграют
|
|
|
|
nvc123 | Дата: Воскресенье, 15 Сентября 2013, 14:36:23 | Сообщение # 6 |
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
| 500 не лагает проверено
научите нуба писать на jass пишу игры под андроид за еду
|
|
|
|
Extremator | Дата: Воскресенье, 15 Сентября 2013, 14:38:31 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (nvc123) 500 не лагает проверено ну значит и с проверкам будет так же
|
|
|
|
demon_nrt | Дата: Воскресенье, 15 Сентября 2013, 14:44:47 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
| Покажите пж. пример на jass занесение в группу после урона, я понял. А вот как пикать группу локальную и проверять ее юнитов на нанесение урона слегка неясна.
|
|
|
|
nvc123 | Дата: Воскресенье, 15 Сентября 2013, 14:55:59 | Сообщение # 9 |
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
| demon_nrt, Extremator, не надо группу есть много других способов например бафыДобавлено (15 Сентября 2013, 14:55:59) --------------------------------------------- у меня был где то скил фаербол огненный шарик летит и дамажит всем на своём пути,потом когда долетает взрывается
научите нуба писать на jass пишу игры под андроид за еду
|
|
|
|
Melodia | Дата: Воскресенье, 15 Сентября 2013, 15:01:40 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5051
Блокировки:
| пламя феникса? и как это - без группы? как ты наносить урон будешь врагам? Damage area дамажит всех, без группы никак. 1 будет создавать при каждом выполнении триггера и 1 - 1 раз за каст. То что ты уберёшь эту 1 ни-че-го не спасёт
|
|
|
|
demon_nrt | Дата: Воскресенье, 15 Сентября 2013, 15:17:15 | Сообщение # 11 |
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
| Я заношу юнитов в группу которые попадаются на пути. Группа сохраняется но я не понимаю как ее вызвать. Вот код объясните по нему пж. Код function Ledenay_zvezda takes nothing returns nothing [code] function Ledenay_zvezda takes nothing returns nothing local integer h=GetHandleId(GetExpiredTimer()) local unit Lzu=LoadUnitHandle(udg_Hash,h,1) local unit Lzu1=LoadUnitHandle(udg_Hash,h,2) local real a=GetUnitFacing(Lzu1) local real x1=LoadReal(udg_Hash,h,3) local real y1=LoadReal(udg_Hash,h,4) local real x2=GetWidgetX(Lzu1)+25.*Cos(a*bj_DEGTORAD) local real y2=GetWidgetY(Lzu1)+25.*Sin(a*bj_DEGTORAD) local unit Lzu2 = GetEnumUnit() local player owner = GetOwningPlayer(Lzu) call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_3635" ) call SetUnitX(Lzu1,x2) call SetUnitY(Lzu1,y2) if IsUnitEnemy(Lzu, owner) and not IsUnitType(Lzu2, UNIT_TYPE_STRUCTURE) and GetWidgetLife(Lzu2) > .405 then call UnitDamageTargetBJ( Lzu, Lzu2, ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A05U', Lzu)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) endif if SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))>900. then call RemoveUnit(Lzu1) call FlushChildHashtable(udg_Hash,h) call PauseTimer(GetExpiredTimer()) call DestroyTimer(GetExpiredTimer()) endif set Lzu = null set Lzu1 = null set Lzu2 = null set owner = null endfunction function Ledenay_zvezda_pick takes nothing returns nothing local integer h=GetHandleId(GetExpiredTimer()) local group g = CreateGroup() local unit Lzu1 = LoadUnitHandle(udg_Hash,h,2) local real x = GetWidgetX(Lzu1) local real y = GetWidgetY(Lzu1) call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_3636" ) call GroupEnumUnitsInRange(g,x, y, 250.0, null) call ForGroup(g, function Ledenay_zvezda) call DestroyGroup(g) set g = null endfunction function Ledenay_zvezda_Actions takes unit Lzu, timer Lzt returns nothing local integer h = GetHandleId(Lzt) local real x=GetWidgetX(Lzu) local real y=GetWidgetY(Lzu) local unit Lzu1=CreateUnit(GetTriggerPlayer(),'e00T',x,y,GetUnitFacing(Lzu)) call SetUnitAbilityLevel(Lzu1,'A05V',GetUnitAbilityLevel(Lzu,'A05U')) call SaveUnitHandle(udg_Hash,h,1,Lzu) call SaveUnitHandle(udg_Hash,h,2,Lzu1) call SaveReal(udg_Hash,h,3,x) call SaveReal(udg_Hash,h,4,y) call TimerStart(Lzt,0.05,true, function Ledenay_zvezda_pick ) set Lzu1 = null set Lzu = null set Lzt = null endfunction
//=========================================================================== function Ledenay_zvezda_Cond takes nothing returns boolean if GetSpellAbilityId()=='A05U'then call Ledenay_zvezda_Actions(GetTriggerUnit(),CreateTimer()) endif return false endfunction function InitTrig_Ledenay_zvezda takes nothing returns nothing local trigger t=CreateTrigger() local integer i=0 loop call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) exitwhen i>14 set i=i+1 endloop call TriggerAddCondition(t,Condition(function Ledenay_zvezda_Cond)) set t=null endfunction Добавлено (15 Сентября 2013, 15:17:15) --------------------------------------------- Код изменил
Сообщение отредактировал demon_nrt - Воскресенье, 15 Сентября 2013, 15:16:59 |
|
|
|
nvc123 | Дата: Воскресенье, 15 Сентября 2013, 15:28:20 | Сообщение # 12 |
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
| demon_nrt, код бред,причём полный ледяная звезда вызывается через фо гроуп но ты пытаешься найти хэндл таймера которого нету вобще за подобный юз хэша банить надо
научите нуба писать на jass пишу игры под андроид за еду
|
|
|
|
[SeKtOR] | Дата: Воскресенье, 15 Сентября 2013, 15:33:16 | Сообщение # 13 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| [code=jass]globals group Ledenay_zvezda_g = CreateGroup() endglobals
function Ledenay_zvezda takes nothing returns nothing local timer t = GetExpiredTimer() local integer h = GetHandleId(t) local unit Lzu1=LoadUnitHandle(udg_Hash, h, 1) local real a= LoadReal(udg_Hash, h, 3) local real x =GetWidgetX(Lzu1)+25.*Cos(a*bj_DEGTORAD) local real y =GetWidgetY(Lzu1)+25.*Sin(a*bj_DEGTORAD) local group g = LoadGroupHandle(udg_Hash, h, 4) local unit f local player p local real dis = LoadReal(udg_Hash, h, 9999) local real dmg if(dis > 900.) then call KillUnit(Lzu1) call DestroyGroup(g) call FlushChildHashtable(udg_Hash, h) call PauseTimer(t) call DestroyTimer(t) else // Сюдаб немашало добавить проверку на проходимость, чтобы избежать возможность краша игры в случае вылета снаряда за карту. call SetUnitX(Lzu1,x) call SetUnitY(Lzu1,y) call GroupEnumUnitsInRange(Ledenay_zvezda_g, x, y, 250., null) set dmg = LoadReal(udg_Hash, h, 5) set p = LoadPlayerHandle(udg_Hash, h, 2) loop set f = FirstOfGroup(Ledenay_zvezda_g) exitwhen f == null if(IsUnitEnemy(f, p) and GetWidgetLife(f) > .405 and not IsUnitInGroup(f, g) and not IsUnitType(f, UNIT_TYPE_STRUCTURE)) then call UnitDamageTarget(Lzu1, f, dmg, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) call GroupAddUnit(g, f) endif call GroupRemoveUnit(Ledenay_zvezda_g, f) endloop call SaveReal(udg_Hash, h, 9999, dis + 25.) set p = null endif set Lzu1 = null set t = null set g = null endfunction
function Ledenay_zvezda_Actions takes unit Lzu returns nothing local timer t = CreateTimer() local integer h = GetHandleId(Lzt) local real x=GetWidgetX(Lzu) local real y=GetWidgetY(Lzu) local player p = GetOwningPlayer(Lzu) local real angle = GetUnitFacing(Lzu) local unit Lzu1=CreateUnit(p,'e00T',x,y, angle) call SetUnitAbilityLevel(Lzu1,'A05V',GetUnitAbilityLevel(Lzu,'A05U')) call SaveAgentHandle(udg_Hash,h,1,Lzu1) call SaveAgentHandle(udg_Hash, h, 2, p) call SaveReal(udg_Hash, h, 3, angle) call SaveAgentHandle(udg_Hash, h, 4, CreateGroup()) call SaveReal(udg_Hash, h, 5, GetUnitAbilityLevel(Lzu,'A05U') * 50.) call TimerStart(t,.05,true, function Ledenay_zvezda) set t = null set p = null set Lzu1 = null set Lzt = null endfunction
//=========================================================================== function Ledenay_zvezda_Cond takes nothing returns boolean if GetSpellAbilityId()=='A05U'then call Ledenay_zvezda_Actions(GetTriggerUnit()) endif return false endfunction
function InitTrig_Ledenay_zvezda takes nothing returns nothing local trigger t=CreateTrigger() local integer i=0 loop call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) exitwhen i>14 set i=i+1 endloop call TriggerAddCondition(t,Condition(function Ledenay_zvezda_Cond)) set t=null endfunction[/code] P.S. Возможно где-то ошибки писалось в блокноте :3
Сообщение отредактировал [SeKtOR] - Воскресенье, 15 Сентября 2013, 15:34:23 |
|
|
|
demon_nrt | Дата: Воскресенье, 15 Сентября 2013, 15:51:43 | Сообщение # 14 |
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
| Большое спасибо, подровнял под себя и все круто!
|
|
|
|
Extremator | Дата: Воскресенье, 15 Сентября 2013, 16:47:16 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Цитата (nvc123) не надо группу есть много других способов например бафы Ага, да... это из разряда " я кидаю 5 тёмный стай, а дамаг проходит только от 1й"
|
|
|
|
|
|
|
|
|
|
|