Система - проверка юнита на выход границы карты

Добавлен , не публикуется
Система проверяет юнита вышел ли он за границу карты
Также в системе присутствуют настройки и установка языка а также с блекджеком и прочей штуки
vJass
library UnitLeaveBounds initializer init
   
   /*
   vJass
   --------------------
   By G^M or CLOCK
   --------------------
   ENG
   --------------------
   To check the position of the unit, you need to put a condition string:
    if (CheckPositionUnit(whichunit))
        actions...
    endif
    Also present system settings...
   --------------------
    RUS
   --------------------
   Чтобы проверить позицию юнита, нужно вставить такую строку:
    if (CheckPositionUnit(whichunit))
        Действия...
    endif
    Также присутствуют настройки системы...
   */
   
   globals
       private real maxx
       private real maxy
       private real minx
       private real miny
       //Settings = Настройки
       private bool DebugMessages = false // Display Debug Messages ?             | Показать отладочное сообщение?
       private string Language = "ENG" // Change Language: ENG,RUS                | Выберите язык: ENG,RUS
       private bool DisplayUnitInMinimap = false // Display unit in Mini map?  |Показать юнита на карте?
       private bool DisplayCoords = false // Display Coordinates?                        | Показать координаты?
    endglobals
    
    function CheckPositionUnit takes unit u returns boolean
        local real x=GetUnitX(u)
        local real y=GetUnitY(u)
        local real deX=0.0
        local real deY=0.0
        local bool result = false
        
        if (DebugMessages) then
            set deX = x
            set deY = y
        endif
        
        if (x > maxx) then
            set x = maxx
            set result = true
        elseif (x < minx) then
            set x = minx
            set result = true
        endif
        
        if (y > maxy) then
            set y = maxy
            set result = true
        elseif(y < miny) then
            set y=miny
            set result = true
        endif
        
        if (result and DebugMessages) then
            if (Language == "ENG") then
                call DisplayTimedTextToPlayer(Player(0),0.,0.,4,"|cFFA0FF00[Check Bounds] : Unit =| |r|cFFA000FF" + GetObjectName(GetUnitTypeId(u)) + "|r |cFFA0FF00|= leaved from bound!|r")
            elseif (Language == "RUS") then
                call DisplayTimedTextToPlayer(Player(0),0.,0.,4,"|cFFA0FF00[Check Bounds] : Юнит =| |r|cFFA000FF" + GetObjectName(GetUnitTypeId(u)) + "|r |cFFA0FF00|= вышел за границу!|r")
            endif
            if(DisplayCoords) then
                call DisplayTimedTextToPlayer(Player(0),0.,0.,3.9,"                         |cFFA0FF00X =|r |cFFA000FF" + R2S(deX) + "|r\n                         |cFFA0FF00Y=|r |cFFA000FF" + R2S(deY))
            endif
            if (DisplayUnitInMinimap) then
                call PingMinimap(deX,deY,2.)
            endif
        endif
        
        set u=null
        return result
       endfunction

   private function init takes nothing returns nothing
        set minx=GetCameraBoundMinX() - 500
        set miny=GetCameraBoundMinY() - 500
        set maxx=GetCameraBoundMaxX() + 500
        set maxy=GetCameraBoundMaxY() + 500
   endfunction
   
endlibrary
cJass
library UnitLeaveBounds initializer Start
{
   
       /*
       
       cJASS
       
           --------------------
           By G^M or CLOCK
           --------------------
           ENG
           --------------------
           To check the position of the unit, you need to put a condition string:
            if (CheckPositionUnit(whichunit)){
                actions...
            }
            Also present system settings...
           --------------------
            RUS
           --------------------
           Чтобы проверить позицию юнита, нужно вставить такую строку:
            if (CheckPositionUnit(whichunit)){
                Действия...
            }
            Также присутствуют настройки системы...
       */
       
           #include "cj_types.j"

           private float maxx,maxy,minx,miny
           //Settings = Настройки
           private bool DebugMessages = false // Display Debug Messages ?             | Показать отладочное сообщение?
           private string Language = "ENG" // Change Language: ENG,RUS                | Выберите язык: ENG,RUS
           private bool DisplayUnitInMinimap = false // Display unit in Mini map?  |Показать юнита на карте?
           private bool DisplayCoords = false // Display Coordinates?                        | Показать координаты?
        
        
        bool CheckPositionUnit(unit u){float x=GetUnitX(u),y=GetUnitY(u),deX=0.0,deY=0.0;bool result = false
            if (DebugMessages){deX = x;deY = y}
            if (x > maxx) {x = maxx;result = true;elseif (x < minx) ;x = minx;result = true}
            if (y > maxy) {y = maxy;result = true;elseif(y < miny);y=miny;result = true}
            if (result and DebugMessages){
                if (Language == "ENG") {
                     DisplayTimedTextToPlayer(Player(0),0.,0.,4,"|cFFA0FF00[Check Bounds] : Unit =| |r|cFFA000FF" + GetObjectName(GetUnitTypeId(u)) + "|r |cFFA0FF00|= leaved from bound!|r")
                elseif (Language == "RUS") 
                     DisplayTimedTextToPlayer(Player(0),0.,0.,4,"|cFFA0FF00[Check Bounds] : Юнит =| |r|cFFA000FF" + GetObjectName(GetUnitTypeId(u)) + "|r |cFFA0FF00|= вышел за границу!|r")
                }
                if(DisplayCoords){DisplayTimedTextToPlayer(Player(0),0.,0.,3.9,"                         |cFFA0FF00X =|r |cFFA000FF" + R2S(deX) + "|r\n                         |cFFA0FF00Y=|r |cFFA000FF" + R2S(deY))}
                if (DisplayUnitInMinimap){PingMinimap(deX,deY,2.)}
            }
            u=null;return result
        }

       private void Start(){minx=GetCameraBoundMinX() - 500;miny=GetCameraBoundMinY() - 500;maxx=GetCameraBoundMaxX() + 500;maxy=GetCameraBoundMaxY() + 500}
      
}
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
30
11 лет назад
1
Вышел за границу@словил крит, дебаг уже не нужен.
0
9
11 лет назад
0
Clamp, Дак система для того и нужна, чтобы определить вышел ли он. Вобще система нужна для даммиков, которые летят за границу, а там проверка "вышел" если да, то удалить дамми там или еще что нить
0
30
11 лет назад
0
Он УЖЕ ВЫЙДЕТ, когда дебаг сработает
0
9
11 лет назад
0
Clamp, Странно, использую свою систему и все работает как часы. Ни разу не было фатала
1
30
11 лет назад
Отредактирован Clamp
1
library SafeXY initializer Init
{
    private int a, b, c, d;
    
    real SafeX(real X) {
        if (X <= b) {
            return b;
        } else {
            return X;
        }
        if (X >= a) {
            return a;
        } else {
            return X;
        }
    }

    real SafeY(real Y) {
        if (Y <= d) {
            return d;
        } else {
            return Y;
        }
        if (Y >= с) {
            return с;
        } else {
            return Y;
        }
    }

    private void Init()
    {
        a = GetRectMaxX(bj_mapInitialPlayableArea);
        b = GetRectMinX(bj_mapInitialPlayableArea);
        c = GetRectMaxY(bj_mapInitialPlayableArea);
        d = GetRectMinY(bj_mapInitialPlayableArea);
    }
}
SetUnitX(SafeX(GetUnitX(GetTriggerUnit())+10))
0
16
11 лет назад
0
Goodie, Странно, использую свою систему и все работает как часы.
Вы видимо о разных границах говорите?
0
9
11 лет назад
0
Clamp, Здесь вроде бы как я показываю систему, а не ты. Будь добр создай новую тему и скидывай свои системы
ShamaN26, Возможно он говорит за выходи какой то области, а я говорю за границу карты, дабы избежать фатала. Как юнит проходит черную границу, то условие срабатывает и можно делать с юнитом все что угодно.
2
30
11 лет назад
2
Goodie, Ну показывай, публиковать тясячелетний баян я не буду :3
Давай посмотрим, почему твоя система ненужный хлам:
  1. вручную вбивать границы карты
  2. несмотря на твои Y = MaxY, никакого влияния на движение юнитов система не оказывает и оказать не в состоянии
  3. любой юнит, выходящий за границу карты, вызывает крит, и вбивать в каждое перемещение лишний кусок кода с твоей проверкой просто глупость
  4. зачем здесь дебаг в принципе?
0
9
11 лет назад
Отредактирован Goodie
0
У меня допустим есть такие спеллы которые летят до определенного расстояния, к примеру 1500 ед. Запустил спелл, а он летит за границу и спелл работает и работает. Для этого я и делаю проверку простой строкой, далее она сработала и все. Снаряд уничтожается
Мне лично эта система помогает
Clamp:
любой юнит, выходящий за границу карты, вызывает крит
А эта система проверяет за саму границу,ту что я отметил
, Ну показывай,
Всегда убивал этот ответ =/ Как будто ничего не видишь
публиковать тясячелетний баян я не буду :3
Странно, но ты публикуешь его
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.