Перейти к содержимому


Фотография

pushBack


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 OFFLINE   BLEKWORT

BLEKWORT

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 06 June 2017 - 00:32

Скрипт проверяет город и его маркер.
А именно ведёт поиск юнитов вокруг города и относит их к определённой фракции, считает их и затем локации присваивает сторону.
 

locations = nearestLocations [[0,0,0], ["Airport","NameVillage","NameCity", "NameCityCapital"], 300000];
_mrk        = "";
_MarkerType = "";
_MarkerColor= "";
 
{
 
if ( (getMarkerType  (str(_x))) == "") then
{
_mrk = createMarker [(str(_x)), (locationPosition _x ) ];
}
else
{
_mrk = str(_x);
 
};
 
 
_pos_loc = locationPosition _x;
 
 
_winner = 0;
 
_Man = nearestObjects [locationPosition _x, ["Man"], 128];
 
if (count _Man > 0) then {
 
_westArr = [];
_eastArr = [];
_indArr = [];
 
{
 
_sid = side _x;
 
switch (_sid) do 
    {
        case WEST: {
_westArr pushBack _x
};
 
case EAST: {
_eastArr pushBack _x
 
};
 
case INDEPENDENT: {
_indArr pushBack _x
};
};
 
} forEach _Man;
 
_cW = count _westArr;
_cE = count _eastArr;
_cI = count _indArr;
 
if ((_cW > 0) && (_cE > 0) && (_cI > 0)) then {_winner = 0};
if ((_cW > 0) && (_cE isEqualTo 0) && (_cI isEqualTo 0)) then {_winner = 1};
if ((_cW isEqualTo 0) && (_cE > 0) && (_cI isEqualTo 0)) then {_winner = 2};
if ((_cW isEqualTo 0) && (_cE isEqualTo 0) && (_cI > 0)) then {_winner = 3};
if ((_cW > 0) && (_cE > 0)) then {_winner = 0};
if ((_cW > 0) && (_cI > 0)) then {_winner = 0};
if ((_cI > 0) && (_cE > 0)) then {_winner = 0};
 
}else{
_winner = 0;
};
 
switch (_winner) do 
    {
        case 1: {
_MarkerType = "mil_dot";
_MarkerColor = "ColorBlue";
        _x setSide WEST;
};
 
case 2: {
_MarkerType = "mil_dot";
_MarkerColor = "ColorRed";
        _x setSide EAST;
};
 
case 3: {
_MarkerType = "mil_dot";
_MarkerColor = "ColorGreen";
        _x setSide INDEPENDENT;
};
 
case 4: {
_MarkerType = "mil_dot";
_MarkerColor = "ColorCIV";
        _x setSide CIVILIAN;
};
 
case 0: {
_MarkerType = "mil_dot";
_MarkerColor = "ColorWhite";
        _x setSide CIVILIAN;
};
 
    };
_mrk setMarkerType  _MarkerType;
_mrk setMarkerColor  _MarkerColor;
 
} foreach locations;

Это холера работает почему-то только с Синими и Зелёными. По каким-то причинам пропускает красных. Перепробывал множество способов... В итоге запутался в конец.

А вызывается командой "call"
 

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1808 сообщений

Отправлено 06 June 2017 - 16:17

Оформи код как код, а то неудобно разбираться.


  • 0




Яндекс.Метрика