Сейчас 17:35:21 Пятница, 19 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Нанести 1 раз
Нанести 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
Репутация: 5041
Блокировки:
пламя феникса?
и как это - без группы?
как ты наносить урон будешь врагам? Damage area дамажит всех, без группы никак. 1 будет создавать при каждом выполнении триггера и 1 - 1 раз за каст. То что ты уберёшь эту 1 ни-че-го не спасёт


CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

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й" :D
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Нанести 1 раз
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz