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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Ворота (подробности внутри)
Ворота (подробности внутри)
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)
Если надо, могу перевести код из первого поста в триггеры.

Можно конечно, но я и сам попробую разобраться.
 

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

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