|
|
|
|
Редактирование здания
|
|
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% жизни.
Зачем делать для других новые карты... ... лучше устроить коту божественный почесон. :)
|
|
|
|
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
Блокировки:
| Вот наработка
|
|
|
|
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) <= .3Quote (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
|
|
|
|
|
|
|
|
|
|
|