OoMixail | Дата: Вторник, 14 Июня 2011, 13:26:09 | Сообщение # 1 |
3 уровень
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 0
Блокировки:
| Мне для карты необходимо создать ворота которые могут открываться, закрываться, поворачиваться а так же могут быть построены рабом. Открытие, закрытие производятся нажатием кнопки в воротах (они являются зданием), поворот так же (он легко реализуется). Собственно тем на этом форуме с такой проблемой я нашел не мало, но ответа на свой вопрос не нашел.
Проблем с такой казалось бы простой вещью оказалось море. 1) Не понимаю каким образом реализовать открытие ворот если они являются зданием. 2) Ворота не стандартного размера, а карта путей не подгоняется под масштаб модели.Добавлено (14-06-2011, 13:26) --------------------------------------------- Есть кусок кода из взломанной карты где такое реализовано: Code function Trig_Rotate_Gate_and_Wall_Func005001 takes nothing returns boolean return(GetSpellAbilityId()=='A02E') endfunction
function Trig_Rotate_Gate_and_Wall_Func005002 takes nothing returns boolean return(GetSpellAbilityId()=='A02F') endfunction
function Trig_Rotate_Gate_and_Wall_Conditions takes nothing returns boolean if(not GetBooleanOr((GetSpellAbilityId()=='A02E'),(GetSpellAbilityId()=='A02F')))then return false endif return true endfunction
function Trig_Rotate_Gate_and_Wall_Actions takes nothing returns nothing call SetUnitPositionLocFacingBJ(GetSpellAbilityUnit(),GetUnitLoc(GetSpellAbilityUnit()),(GetUnitFacing(GetSpellAbilityUnit())-45.00)) call TriggerSleepAction(0.50) call ShowUnitHide(GetSpellAbilityUnit()) call ShowUnitShow(GetSpellAbilityUnit()) endfunction
function Trig_Well_Finish_Conditions takes nothing returns boolean if(not(GetUnitTypeId(GetConstructedStructure())=='h00A'))then return false endif return true endfunction
function Trig_Well_Finish_Actions takes nothing returns nothing call UnitAddAbilityBJ('A00Y',GetConstructedStructure()) endfunction
function Trig_Open_Gate_Conditions takes nothing returns boolean if(not(GetSpellAbilityId()=='A00Q'))then return false endif return true endfunction
function Trig_Open_Gate_Func001C takes nothing returns boolean if(not(GetUnitTypeId(GetTriggerUnit())=='h013'))then return false endif return true endfunction
function Trig_Open_Gate_Actions takes nothing returns nothing if(Trig_Open_Gate_Func001C())then call ReplaceUnitBJ(GetTriggerUnit(),'h014',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"death alternate") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) else call ReplaceUnitBJ(GetTriggerUnit(),'h00T',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"death alternate") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) endif endfunction
function Trig_Close_Gate_Conditions takes nothing returns boolean if(not(GetSpellAbilityId()=='A00R'))then return false endif return true endfunction
function Trig_Close_Gate_Func001Func001C takes nothing returns boolean if(not(GetUnitTypeId(GetSpellAbilityUnit())=='h014'))then return false endif return true endfunction
function Trig_Close_Gate_Func001Func005001001003 takes nothing returns boolean return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) endfunction
function Trig_Close_Gate_Func001C takes nothing returns boolean if(not(CountUnitsInGroup(GetUnitsInRangeOfLocMatching(75.00,GetUnitLoc(GetSpellAbilityUnit()),Condition(function Trig_Close_Gate_Func001Func005001001003)))!=0))then return false endif return true endfunction
function Trig_Close_Gate_Actions takes nothing returns nothing if(Trig_Close_Gate_Func001C())then call DisplayTextToForce(GetForceOfPlayer(GetTriggerPlayer()),"|cffff0000The gate won't budge! There are units in the way!|r") call TriggerSleepAction(0.10) call SetUnitAnimation(GetSpellAbilityUnit(),"Death Alternate") else if(Trig_Close_Gate_Func001Func001C())then call ReplaceUnitBJ(GetTriggerUnit(),'h013',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"reset") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) else call ReplaceUnitBJ(GetTriggerUnit(),'h00S',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"reset") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) endif endif endfunction
function Trig_Open_Light_Gate_Conditions takes nothing returns boolean if(not(GetSpellAbilityId()=='A03B'))then return false endif return true endfunction
function Trig_Open_Light_Gate_Actions takes nothing returns nothing call ReplaceUnitBJ(GetTriggerUnit(),'h018',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"death alternate") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) endfunction
function Trig_Close_Light_Gate_Conditions takes nothing returns boolean if(not(GetSpellAbilityId()=='A03C'))then return false endif return true endfunction
function Trig_Close_Light_Gate_Func001Func007001001003 takes nothing returns boolean return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) endfunction
function Trig_Close_Light_Gate_Func001C takes nothing returns boolean if(not(CountUnitsInGroup(GetUnitsInRangeOfLocMatching(45.00,GetUnitLoc(GetSpellAbilityUnit()),Condition(function Trig_Close_Light_Gate_Func001Func007001001003)))!=0))then return false endif return true endfunction
function Trig_Close_Light_Gate_Actions takes nothing returns nothing if(Trig_Close_Light_Gate_Func001C())then call DisplayTextToForce(GetForceOfPlayer(GetTriggerPlayer()),"|cffff0000The gate won't budge! There are units in the way!|r") call TriggerSleepAction(0.10) call SetUnitAnimation(GetSpellAbilityUnit(),"Death Alternate") else call ReplaceUnitBJ(GetTriggerUnit(),'h017',bj_UNIT_STATE_METHOD_RELATIVE) call SetUnitAnimation(GetLastReplacedUnitBJ(),"reset") call SelectUnitForPlayerSingle(GetLastReplacedUnitBJ(),GetOwningPlayer(GetLastReplacedUnitBJ())) endif endfunction
|
|
|
|
Na-na-na-na-na | Дата: Вторник, 14 Июня 2011, 13:44:29 | Сообщение # 2 |
3 уровень
Группа: Пользователи
Сообщений: 48
Награды: 0
Репутация: 21
Блокировки:
| Quote (OoMixail) из взломанной карты Через протектор ломал? Код бтв говно.
Печаль грусть.
|
|
|
|
OoMixail | Дата: Вторник, 14 Июня 2011, 13:47:10 | Сообщение # 3 |
3 уровень
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 0
Блокировки:
| Quote (Na-na-na-na-na) Через протектор ломал? Код бтв говно. А через что еще... Из этого принцип можно понять, в принципе все тут сделано как я и думал. Я так же пытался, но немного не правильно. Думаю через часик разберусь.
|
|
|
|
SirNikolas | Дата: Вторник, 14 Июня 2011, 13:56:13 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Na-na-na-na-na) Код, бтв, ***. +1. Full GUI.Quote (OoMixail) А через что еще... Можно вскрыть карту любым MPQ-архиватором.
Сообщение отредактировал SirNikolas - Вторник, 14 Июня 2011, 13:57:51 |
|
|
|
OoMixail | Дата: Вторник, 14 Июня 2011, 14:00:38 | Сообщение # 5 |
3 уровень
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 0
Блокировки:
| Quote (SirNikolas) +1. Full GUI. В смысле? Вы про то что все на тригерах? Ну так я тоже так делаю т.к. в программировании полный ноль.
|
|
|
|
SirNikolas | Дата: Вторник, 14 Июня 2011, 14:03:33 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Если надо, могу перевести код из первого поста в триггеры.
|
|
|
|
OoMixail | Дата: Вторник, 14 Июня 2011, 14:06:53 | Сообщение # 7 |
3 уровень
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 0
Блокировки:
| Quote (SirNikolas) Если надо, могу перевести код из первого поста в триггеры. Можно конечно, но я и сам попробую разобраться.
|
|
|
|