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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Редактирование здания
Редактирование здания
redaktorДата: Четверг, 18 Октября 2012, 20:25:25 | Сообщение # 1
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
как сделать чтобы можно было захватить здание например как в Лорды европы.
 

[SeKtOR]Дата: Четверг, 18 Октября 2012, 21:02:05 | Сообщение # 2
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
С: А unit умирает(generic unti event)
У: Unit-type of Dying Unit равно твой юнит
Д: Боевая единица - change ownership of Dying Unit to Owner of Killing unit and Сменить цвет


 

Brut@lusДата: Пятница, 19 Октября 2012, 12:04:58 | Сообщение # 3
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
[SeKtOR], Эээ? А оживить его не? Трупом будем руководить?

 

vov68Дата: Пятница, 19 Октября 2012, 12:14:14 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 1329
Награды: 3
Блокировки:
отловить момент (по атаке на него), когда у здания будет меньше 50% жизни и сменить его цвет, хозяина (на атаковавшего) и дать 100% жизни. :D

Зачем делать для других новые карты...
... лучше устроить коту божественный почесон. :)
 

Brut@lusДата: Воскресенье, 21 Октября 2012, 11:24:28 | Сообщение # 5
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Code
function Trig_building_Actions takes nothing returns nothing
      local unit b = GetTriggerUnit()
      local unit u = GetAttacker()
      local real life = GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100
      if IsUnitInGroup(b, udg_building) and life <= 30.0 then
          call SetUnitOwner( b, GetOwningPlayer(u), true )
          call SetWidgetLife(b, GetUnitState(b, UNIT_STATE_MAX_LIFE))  
      endif
endfunction

function InitTrig_building takes nothing returns nothing
      local integer i = 0
      set gg_trg_building = CreateTrigger()
      loop
          call TriggerRegisterPlayerUnitEvent(gg_trg_building, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null)
          set i = i + 1
          exitwhen i == bj_MAX_PLAYER_SLOTS
      endloop
      call TriggerAddAction( gg_trg_building, function Trig_building_Actions )
endfunction

Триггер назвать building, переконвертировать в текст, вставить это, создать переменную "Отряд" с названием building, При инициализации карты добавить в building крепости.




Сообщение отредактировал Brut@lus - Воскресенье, 21 Октября 2012, 11:54:57
 

SirNikolasДата: Воскресенье, 21 Октября 2012, 11:43:03 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Brut@lus)
GetUnitState(b, UNIT_STATE_LIFE)
GetWidgetLife(b)
Quote (Brut@lus)
b != null
Не понял, это зачем? Атакованный юнит всегда существует.
Quote (Brut@lus)
IsUnitInGroup(b, udg_building) == true
IsUnitInGroup(b, udg_building)
Quote (Brut@lus)
call SetUnitState(b, UNIT_STATE_LIFE, GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100 * 0.01)
call SetWidgetLife(b, GetUnitState(b, UNIT_STATE_MAX_LIFE))


 

Brut@lusДата: Воскресенье, 21 Октября 2012, 12:06:46 | Сообщение # 7
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Спасибо, исправил)

Добавлено (21 Октября 2012, 11:54:53)
---------------------------------------------
А обнулять нужно, нет?
Просто это событие-то за игру овер8412-934812-49712 раз будет выполняться.

Добавлено (21 Октября 2012, 11:57:08)
---------------------------------------------
Code
function Trig_building_Actions takes nothing returns nothing
        local unit b = GetTriggerUnit()
        if IsUnitInGroup(b, udg_building) and (GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100) <= 30.0 then
            call SetUnitOwner( b, GetOwningPlayer(GetAttacker()), true )
            call SetWidgetLife(b, GetUnitState(b, UNIT_STATE_MAX_LIFE))    
        endif
endfunction

function InitTrig_building takes nothing returns nothing
        local integer i = 0
        set gg_trg_building = CreateTrigger()
        loop
            call TriggerRegisterPlayerUnitEvent(gg_trg_building, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null)
            set i = i + 1
            exitwhen i == bj_MAX_PLAYER_SLOTS
        endloop
        call TriggerAddAction( gg_trg_building, function Trig_building_Actions )
endfunction

И так даже лучше наверное. Все равно u и life используются 1 раз

Добавлено (21 Октября 2012, 12:03:18)
---------------------------------------------
опа опа
понял одну фичу. надо вставить проверку - атакующий не является ли владельцем замка. а то может чит получиться.

Добавлено (21 Октября 2012, 12:06:46)
---------------------------------------------
Code
function build_actions takes nothing returns nothing
        local unit b = GetTriggerUnit()
        if GetOwningPlayer(b) != GetOwningPlayer(GetAttacker()) and IsUnitInGroup(b, udg_building) and (GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100) <= 30.0 then
            call SetUnitOwner( b, GetOwningPlayer(GetAttacker()), true )
            call SetWidgetLife(b, GetUnitState(b, UNIT_STATE_MAX_LIFE))    
        endif
endfunction

function InitTrig_building takes nothing returns nothing
        local integer i = 0
        set gg_trg_building = CreateTrigger()
        loop
            call TriggerRegisterPlayerUnitEvent(gg_trg_building, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null)
            set i = i + 1
            exitwhen i == bj_MAX_PLAYER_SLOTS
        endloop
        call TriggerAddAction( gg_trg_building, function build_actions )
endfunction  

О.




Сообщение отредактировал Brut@lus - Воскресенье, 21 Октября 2012, 12:07:35
 

Brut@lusДата: Воскресенье, 21 Октября 2012, 12:58:19 | Сообщение # 8
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Вот наработка
Прикрепления: test.w3x (53.9 Kb)


 

SirNikolasДата: Воскресенье, 21 Октября 2012, 14:17:27 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Brut@lus)
(GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100) <= 30.0
GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) <= .3
Quote (Brut@lus)
А обнулять нужно, нет?
Вообще нужно, но я посчитал, что ты пишешь под последнюю версию AdicHelper (он сам обнуляет).


 

ExtrematorДата: Воскресенье, 21 Октября 2012, 15:35:00 | Сообщение # 10
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Здание получает дамаг...

если "этот дамаг + 0.405" больше или равно "текущее Хп здания"

то хильнуть его и дать нового владельца )))
 

WedeR00Дата: Воскресенье, 21 Октября 2012, 17:13:36 | Сообщение # 11
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Прямиком из Лордов Европы:

Code

function OnCityCaptured takes nothing returns nothing
   local player old_owner
   local player new_owner

   local unit city
   local string capture_msg

   set city = GetTriggerUnit()
   set new_owner = GetOwningPlayer(GetAttacker())
   set old_owner = GetOwningPlayer(city)

   if new_owner == old_owner then
    return
   endif

   if not IsCity(city) or GetUnitStateSwap(UNIT_STATE_LIFE, city) > 500. then
    return
   endif

   set capture_msg = country_capture_msg[player_country[GetPlayerId(new_owner)]]

   call SetUnitLifePercentBJ(GetTriggerUnit(), 100.)
   call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS, 10., GetPlayerName(new_owner) + " |cffCDB79E" + capture_msg + " " + GetUnitName(city) + " |cffCDB79E(" + GetPlayerName(old_owner) + "|cffCDB79E).")
   call PingMinimapForForceEx(bj_FORCE_ALL_PLAYERS, GetUnitX(city), GetUnitY(city), 3., 0, 100, 50., .0)

   call SetUnitOwner(city, new_owner, true)

   call PlayerCityTaken(new_owner, city)
   call PlayerCityLost(old_owner, city)
endfunction

function InitTriggers takes nothing returns nothing
          set tgr_city_captured = CreateTrigger()
   call TriggerRegisterAnyUnitEventBJ(tgr_city_captured, EVENT_PLAYER_UNIT_ATTACKED)
   call TriggerAddAction(tgr_city_captured, function OnCityCaptured)
endfunction


А если объяснить словами ГУИ, то:
Событие: Юнит атакован.
Условие: 1) Если ХП юнита меньше или равно 500
2) Если владелец (атакованный юнит) не равно владелец (атакованный юнит)
Действие: 1) Боевая единица - сменить владельца (атакованный юнит) на (Игрок(владелец атакующий юнит).
2) Боевая единица - установить здоровье (атакованный юнит) как 100%


Сообщение отредактировал WedeR00 - Воскресенье, 21 Октября 2012, 17:14:17
 

Brut@lusДата: Воскресенье, 21 Октября 2012, 18:07:16 | Сообщение # 12
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Quote (WedeR00)
Событие: Юнит атакован.
Условие: 1) Если ХП юнита меньше или равно 500
2) Если владелец (атакованный юнит) не равно владелец (атакованный юнит)
Действие: 1) Боевая единица - сменить владельца (атакованный юнит) на (Игрок(владелец атакующий юнит).
2) Боевая единица - установить здоровье (атакованный юнит) как 100%

у меня в коде совершенно тоже самое, только коротко и красиво.

Добавлено (21 Октября 2012, 18:07:16)
---------------------------------------------

Quote (SirNikolas)
Quote (Brut@lus)
(GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) * 100) <= 30.0
GetWidgetLife(b) / GetUnitState(b, UNIT_STATE_MAX_LIFE) <= .3

а какая разница?


 

WedeR00Дата: Воскресенье, 21 Октября 2012, 18:23:24 | Сообщение # 13
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (Brut@lus)
у меня в коде совершенно тоже самое, только коротко и красиво.

Но он не сможет отредактировать твой код, а так ему будет более понятно.
 

SirNikolasДата: Воскресенье, 21 Октября 2012, 18:35:38 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Brut@lus)
а какая разница?
Отсутствие умножения. Экономия процессорного времени.
Quote (WedeR00)
Но он не сможет отредактировать твой код, а так ему будет более понятно.
Код Brut@lus'а вполне понятен.


 

WedeR00Дата: Воскресенье, 21 Октября 2012, 18:56:04 | Сообщение # 15
6 уровень
Группа: Проверенные
Сообщений: 162
Награды: 0
Репутация: 29
Блокировки:
Quote (SirNikolas)
Код Brut@lus'а вполне понятен.


Для нас - да, а вот товарищ redaktor вряд ли сможет добавить к этому коду что-то новое.
 

Brut@lusДата: Воскресенье, 21 Октября 2012, 19:34:54 | Сообщение # 16
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Quote (WedeR00)
Сообщение # 11

Угу, код из этого поста куда понятней ***sarcasm


 

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

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