XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > StarCraft (только чтение)> StarCraft 2 inside
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
agentex

offline
Опыт: 34,834
Активность:
vsparker, а они то тут причем?
Старый 22.02.2010, 14:47
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
agentex, они при том, что если эти сборщики мусора будут работать полностью как обещано, то использование галакси в редакторе может быть отложено очень надолго, поскольку гуи уже модифицирован, большинство возможностей будет доступно без знаний самого галакси, большинство способностей вообще будет без поддержки кода, как ни крути это важный вопрос...
Старый 22.02.2010, 14:53
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
Цитата:
Сообщение от vsparker
~agentex, они при том, что если эти сборщики мусора будут работать полностью как обещано, то использование галакси в редакторе может быть отложено очень надолго, поскольку гуи уже модифицирован, большинство возможностей будет доступно без знаний самого галакси, большинство способностей вообще будет без поддержки кода, как ни крути это важный вопрос...

Однажды попробовав JASS/Galaxy, видеть больше гуи не могу. Не знаю, как вы, а мне уже проще ручками калякать триггеры. :)
Старый 22.02.2010, 15:07
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Гуи в ск ~ горы говнокарт на расширенном РО.
Вам дают в руки что-то около Си, с возможностью объявлять структуры
Include file
Мгм, вот вам пожалуйста что-то около дефайна) Здорово
Интересно, будет ли что-то аналогичное указателю на объект (не хендл), судя по -> должно быть
Инкремент с декрементом это сахар, не надо о нём жалеть.

Отредактировано FellGuard, 22.02.2010 в 15:48.
Старый 22.02.2010, 15:25
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
FellGuard, того же самого противостояния как было в вк3 гуи vs жасс не будет, потому что в ск2 обещали все функции предоставить в гуи варианте, если учесть "сборщики мусора", то галакси может приобрести вторичную роль, + не стоит забывать, что гуи серьёзно модифицируют по поводу эргономичности работы, я так полагаю так долго ск2 делали именно из-за редактора и то, что там будет - совсем не то, что было в вк3.
Можно собрать по пунктам:
  • Мощной поддержки кода для способностей отпадает, большинство реализованного в вк3 через пожу можно будет сделать в РО.
  • Сборщики мусора могут решить ту проблему, которая возникала у многих при редактировании через гуи вариант.
  • На модифицированном гуи можно будет получить почти полную функциональность самого ск2
  • Сам гуи станет значительно удобнее
Да это повлечёт море говнокарт, но за этим морем будет стоять не одна сотня очень хороших и грамотных карт, которые чистого галакси не будут использовать.
Старый 22.02.2010, 15:32
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
dynamic memory allocation unsupported
Жалко.
По поводу гуи - мгм ну напиши на гуи другую игру, замучаешься же. Не знаю.

e_unexpectedSwitch='switch' statements are unsupported
e_unexpectedGoto='goto' statements are unsupported
СкорпиоT, свитча нет скорее всего потому, что нет меток. Берегутся они чтоли, после эксплоита -.-?

» код
order AIForceField (int player, unit aiUnit, unitgroup scanGroup, fixed scanRange, marker m) {
    order ord;
    order enemyOrd;
    unitgroup enemyGroup;
    unitgroup friendlyGroup;
    unitfilter filter;
    unit enemyUnit;
    unit friendlyUnit;
    unit possibleTargetUnit;
    unit bestTargetUnit = null;
    point myPos = UnitGetPosition(aiUnit);
    fixed myFacing = UnitGetFacing(aiUnit);
    point forceFieldTarget;
    int forceFieldMaxRadius = 5;
    int priorityFound = 10;
    bool emergencyCast = false;

    // Loop control
    int enemyCount = 0;
    int friendlyCount = 0;

    // Enemy test values
    int enemyVit = 0;
    point enemyPos;
    fixed enemyFacing = 0;

    // Friendly test values
    int friendlyVit = 0;
    fixed friendlyFacing = 0;

    // Do not proceed if the order is invalid for some reason
    ord = AICreateOrder(player, c_AB_ForceField, 0);
    if (!UnitOrderIsValid(aiUnit, ord)) {
        return ord;
    }

    // Is there a threat in the area
    enemyGroup = UnitGroupFilterThreat(scanGroup, aiUnit, null, 0);
    enemyCount = UnitGroupCount(enemyGroup, c_unitCountAlive);
    if (enemyCount <= 0) {
        return ord;
    }

    // Assess life and energy
    // A good energy buffer is 50 energy left over.  100 energy is needed to cast in any battle
    // If our life is less than 50%, use the energy buffer.
    if (UnitGetPropertyInt(aiUnit, c_unitPropEnergy, c_unitPropCurrent) <= 100) {
        if (UnitGetPropertyInt(aiUnit, c_unitPropLifePercent, c_unitPropCurrent) <= 50) {
            emergencyCast = true;
        }
    }

    // Setup a friendly filter
    filter = UnitFilter(0,0,0,0);
    UnitFilterSetState(filter, c_targetFilterSelf,                      c_unitFilterRequired);
    UnitFilterSetState(filter, c_targetFilterAlly,                      c_unitFilterRequired);

    UnitFilterSetState(filter, c_targetFilterUncommandable,             c_unitFilterExcluded);
    UnitFilterSetState(filter, c_targetFilterWorker,                    c_unitFilterExcluded);
    UnitFilterSetState(filter, c_targetFilterUnderConstruction,         c_unitFilterExcluded);
    UnitFilterSetState(filter, c_targetFilterStructure,                 c_unitFilterExcluded);

    // *** Scan the area for the following, set priority unit when found ***
    // Priority 1: A friendly unit close to death, who has a melee enemy close by
    // Priority 2: An enemy unit close to death, who has a friendly unit close by
    // Priority 3: A friendly ranged unit who has a melee enemy close by
    // Priority 4: Enemy near me
    // Priority 5: Any Enemy close to death, facing away from me
    //
    // Scan enemies
    while (enemyCount > 0) {
        enemyUnit = UnitGroupUnit(enemyGroup, enemyCount);
        enemyCount = enemyCount - 1;

        // Get enemy data
        enemyVit = UnitGetPropertyInt(enemyUnit, c_unitPropLifePercent, c_unitPropCurrent);
        enemyFacing = UnitGetFacing(enemyUnit);
        enemyPos = UnitGetPosition(enemyUnit);
        enemyOrd = UnitOrder(enemyUnit, 0);
    
        friendlyGroup = UnitGroup(null, c_playerAny, RegionCircle(enemyPos, forceFieldMaxRadius), filter, 0);
        friendlyCount = UnitGroupCount(friendlyGroup, c_unitCountAll);

        // Scan friends near enemyUnit
        while (friendlyCount > 0) {
            friendlyUnit = UnitGroupUnit(friendlyGroup, friendlyCount);
            friendlyCount = friendlyCount - 1;
            // Get friendly data
            friendlyVit = UnitGetPropertyInt(friendlyUnit, c_unitPropLifePercent, c_unitPropCurrent);

            if (UnitMarkerCount(friendlyUnit, m) > 0) {
                continue;
            }
            // Test Priority Target 4 first, if we are in a state of saving ourself
            if (emergencyCast) {
                if (PointsInRange(myPos, enemyPos, forceFieldMaxRadius)) {
                    priorityFound = 1;
                    bestTargetUnit = friendlyUnit;
                    break;
                }
            }
            // Test Priority Target 1
            else if (friendlyVit < 25) {
                priorityFound = 1;
                bestTargetUnit = friendlyUnit;
                break;
            }
            // Test Priority Target 2
            else if (priorityFound > 2 && enemyVit < 25) { // && Test for non-ranged only
                priorityFound = 2;
                possibleTargetUnit = enemyUnit;
            }
            // Test Priority Target 3
            else if (false) { //priorityFound > 3
                // Not really able to test for this yet
                // Need to determine if the unit in question has a ranged weapon
            }
            // Test Priority Target 4
            else if (priorityFound > 4 && PointsInRange(myPos, enemyPos, forceFieldMaxRadius)) {
                priorityFound = 4;
                possibleTargetUnit = enemyUnit;
            }
            // Test Priority Target 5
            else if (priorityFound > 5 && enemyVit < 25 && enemyFacing - myFacing < 90) {
                priorityFound = 5;
                possibleTargetUnit = enemyUnit;
            }
            // More tests here
        }

        if (bestTargetUnit) {
            break;
        }
    }

    if (bestTargetUnit != null) {
        if (possibleTargetUnit) {
            bestTargetUnit = possibleTargetUnit;
        }
    }

    // Do some other things here, like if we are targetting a retreating enemy (priority 5)
    // adjust the target offset a bit ahead of the unit based on facing.
    // We would want this for priority 3 as well when that is valid.

    forceFieldTarget = UnitGetPosition(bestTargetUnit);

    if (!forceFieldTarget) {
        return null;
    }
    OrderSetTargetPoint(ord, forceFieldTarget);

    return ord;
}
судя по декларации переменных в начале ф-ии, multiple declaration тоже не поддерживается. Ну или неизвестный программист просто любит объявлять однотипные переменные каждую с новой строчки и просто для лулзов морочит нас :)

А вот и привет от бж, будем надеяться что прочие минусы такого подхода навроде создания утечек из воздуха не встретятся:
» код
//--------------------------------------------------------------------------------------------------​
//  AI Get Full Make Time
//--------------------------------------------------------------------------------------------------​
int AIGetFullMakeTime (int player, string objType) {

    // override any special cases here

    return AIDefaultGetFullMakeTime(player, objType);
}

Ещё я нигде не встретил условного оператора или цикла без фигурных скобок, даже если внутри стоит всего один оператор return; или выов ф-ии скобки всё равно присутствуют. Означать это может опять же что угодно.

Отредактировано FellGuard, 22.02.2010 в 16:50.
Старый 22.02.2010, 16:17
XOR

offline
Опыт: 38,159
Активность:
Как бы не был крут гуи, на стандартном "жестком" событие - действие и т.п. сильно не уедешь особенно если кто нибудь напишет для удобства оп препроц 0_ 0
Старый 22.02.2010, 16:30
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
А судя по тому, что сейчас наблюдается в архивах его писать таки придётся, потому что нет самых базовых вещей, хотя обещали Си. Впечатление складывается такое, как будто там был джасс, но взяли раннюю версию сДжасс-а и привинтили, а общественности сказали, что будет С -.-
FellGuard добавил:
Хотя конечно рано судить ещё.
Старый 22.02.2010, 16:36
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
FellGuard, там же наверняка ещё 100500 патчей впереди, полгода доработок. Вполне могут и доработать. А что не доработают - препроцессором добить.
Старый 22.02.2010, 16:42
XOR

offline
Опыт: 38,159
Активность:
буду сильно удивлен если они изменят это, патчи в том же вц3 редко касались жасс. Самое обидное, отсутствие не то что ооп а даже нормального синтаксиса кпп :/
Старый 22.02.2010, 16:52
ScorpioT1000
Работаем
offline
Опыт: отключен
multiple declaration тоже не поддерживается.
ну и гореть ему в аду, вместе с говнокодингстайлом.
А вот и привет от бж, будем надеяться что прочие минусы такого подхода навроде создания утечек из воздуха не встретятся:
еще одно доказательство, что ты не шаришь. это не просто обертка, это две разные функции. одна - ф-ция доступа, другая - управления. учите матчасть
там же слово Default о чем-то говорит. значит, могут быть и не Default.
структуры файлов очень отличаются. когда в варе был бж, здесь целые цепочки и сети зависимостей, может свиду кажущиеся обертками. но это не так, ведь в большинстве своем там не один return
ScorpioT1001 добавил:
Вам дают в руки что-то около Си, с возможностью объявлять структуры
олол а в си нет структур да? O_O
ScorpioT1001 добавил:
Ещё я нигде не встретил условного оператора или цикла без фигурных скобок, даже если внутри стоит всего один оператор return;
еще один говнокодингстайл устранён. скажите спасибо близзам) они учат вас писать на си правильно))
ScorpioT1001 добавил:
e_unexpectedGoto='goto' statements are unsupported
вобще, готу в ооп - признак мудака, извините)
благо это не ооп
Старый 22.02.2010, 22:06
agentex

offline
Опыт: 34,834
Активность:
vsparker, я о том, что если сборщик и будет, то на уровне движка. И галакси или гуи тут непричем. (просто твой вопрос звучал несколько странно)
agentex добавил:
хотя обещали Си.
Кто обещал? тт пруфлинк в студию. Там говорилось про си-подобный язык с имитацией ооп.
И да, гуи не будет рулить в любом случае. (просто времени на понимание этого уйдет больше)
Старый 23.02.2010, 01:21
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
олол а в си нет структур да? O_O
где я такое сказал? ткни пальцем, что за дурацкие домыслы? я выделил по смыслу значимое.
ScorpioT1001, тт ой какие мы злые, if(E) S; не знакомо? В курсе, что фигурные скобочки в Си это составной оператор, и после ифа стоит именно один оператор в языке Си? А брать в фигурные скобочки в смысле составления из одного оператора составного это не тру стайл, а глупость. Смысл имеет разве что для красоты или удобочитаемости, что сомнительно, тот же результат может быть достигнут простым индентом. Просто близзы заменили then на {, а endif и else на }, такое впечатление.
одна - ф-ция доступа, другая - управления.
как будет угодно -.-
ну и гореть ему в аду
Т.е. ты предпочтёшь писать
real a
real b
...
real z
вместо
real a, b, ..., z;
?
вобще, готу в ооп - признак мудака, извините)
Вообще не увидел там ооп, извините.
И в таком случае, если уж фигурные скобочки и объявление однотипных переменных столбиком вы считаете признаком тру стиля, то что же вы возмущаетесь отсутствием свитча о_О разве последовательность ифов не ласкает глаз больше)?

Отредактировано FellGuard, 23.02.2010 в 12:45.
Старый 23.02.2010, 10:12
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Кто нибудь РЕАЛЬНО щупал уже галакси?
Старый 23.02.2010, 10:16
XOR

offline
Опыт: 38,159
Активность:
Дак редактора то еще нету.. Или ты насчет изменения стандартных скриптов?
Старый 23.02.2010, 10:21
DioD

offline
Опыт: 45,134
Активность:
сравните апи бетки варкрафта с релизом, это чуть ли не разные языки, если сравнивать бетку с последней версией то совсем много различий.


да и еще, там судя по всему ретурн баг назван тупкастом и разрешен по умолчанию для ряда типов.
Старый 23.02.2010, 11:34
agentex

offline
Опыт: 34,834
Активность:
ну впринципе када взломают синглу, можно потренироваться в написании своего аи
Старый 23.02.2010, 12:11
GadenbIsh
Просто Гад
offline
Опыт: 70,930
Активность:
FellGuard, по поводу скобок согласен со скорпом
if(E)
{
S;
}
в коде читать куда понятнее, чем однострочное if(E) S;
да и при внезапном расширении одного оператора до двух никаких лишних действий предпринимать не надо.
Кстати говоря, все условные операторы на хгм написаны со скобками=) Этому меня еще зибада научил
Старый 23.02.2010, 13:59
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Я имел в виду то, что по стандартам языка надо бы оставить возможность писать и так, и так. То, что в коде я не увидел альтернативы даже в таких местах
if (mainSubState == e_mainSubState_GndA)          { ZergMidGndA(player);  }
else if (mainSubState == e_mainSubState_GndB)     { ZergMidGndB(player);  }
else if (mainSubState == e_mainSubState_AirA)     { ZergMidAirA(player);  }
else if (mainSubState == e_mainSubState_AirB)     { ZergMidAirB(player);  }
наводит на мысли, что её просто нет. Судить понятно что рано и все мы тут толчём воду в ступе, но мало ли.
Прошу прощения за пустую полемику в теме.
Старый 23.02.2010, 14:39
YellowStar
poon
offline
Опыт: 15,144
Активность:
Ждать игры и потом горевать что нет половины обещаного, а не гадать впустую чего нет в бетке.
Старый 23.02.2010, 21:44

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:55.