21

» WarCraft 3 / функция

Ну вы же проверяете массив групп, я так понял.
Можно было сделать так:
function test takes unit u returns integer
    local integer i = 0
    local integer p = -1
    loop
        exitwhen i > G_max //какая-то переменная обозначающая вершину стека из наших групп
        if (IsUnitInGroup(u, GroupStack[i])) then
            set p = i
            exitwhen true
        endif
       set i = i + 1
    endloop
    return p
endfunction
функция вернет -1 если юнита в группах нет, так же функция предполагает что юнит хранится лишь в одной группе из стека...
но это же велосипед ненужный...
Вот нативки для Custom Value
код
native GetUnitUserData              takes unit whichUnit returns integer

native SetUnitUserData              takes unit whichUnit, integer data returns nothing
а вот нативки для хэш-таблиц
код
native  SaveInteger						takes hashtable table, integer parentKey, integer childKey, integer value returns nothing

native  LoadInteger					takes hashtable table, integer parentKey, integer childKey returns integer

native GetHandleId takes handle h returns integer
21

» WarCraft 3 / функция

Sergant1000, в смысле, что вы несете? Когда поймешь джасс гуи не нужен.
А на гуи все "когда-то" да творили...
Проблема решена? Будете использовать CV?
21

» WarCraft 3 / функция

Sergant1000, Если тебе надо прикрепить индекс массива к юниту, то сделай это через через хеш-таблицу или custom value при добавлении юнита в группу... делов то
21

» WarCraft 3 / Проверьте на ошибки

... будешь плодить ещё такие вопросы, получишь в лоб, читай статьи, я не вижу прогресса
Функции можно использовать только ниже их объявления
function parent takes...
endfunction

function child takes...
call parent(...)
endfunction
Далее,
call TriggerAddAction( udg_SDMS, function SDMS_Actions )
функция SDMS_Actions не должна ничего принимать и возвращать
С-Т-А-Т-Ь-И
все абсолютно...
21

» WarCraft 3 / Локальный юнит

silence_AZ, это как бы надежда на то что до вас и так дойдет -___- не учите джасс
21

» WarCraft 3 / Локальный юнит

silence_AZ, это уже шуточки пошли? лол делаете триггер Effect удаляете все что в нем есть, вставляете код из файла, расставляете юнитов на карте, и попробуйте ними походить.
Госпадзе какой jass...
nvc123, Ну надо же чтоб он наконец-то допер?
21

» WarCraft 3 / Локальный юнит

nvc123, модер жи -_-
секретность наше все
надоело
silence_AZ, пожалуйста, вставьте в игру, убедитесь что все работает
и посмотрите что стоит в ()
21

» WarCraft 3 / Локальный юнит

удалите то что после mdl и до запятой, это автоматом вставляется на сайте
вот код файлом
Создайте триггер Effect и вставьте туда код из файла, а то тут появляются символы из html
Загруженные файлы
21

» WarCraft 3 / Локальный юнит

silence_AZ, просто вставьте в игру и гляньте что будет
exitwhen i == 16
это перебор в БЖ функции для задания события, я бж открыл чтобы не создавать новые процедуры
21

» WarCraft 3 / функция

Итак, полный разбор полетов -_\\ Я не могу понять что нужно автору, объясни мне, что надо сделать и я подскажу как лучше.
быдлокод
function 1_C1 takes unit ruf returns integer
//ИНФОРМАТИВНОЕ НАЗВАНИЕ ФУНКЦИИ??
local integer i=0
local integer p
// ПЕРЕМЕННАЯ НЕ ИНИЦИАЛИЗИРОВАНА
// ПРИ НЕКОТОРЫХ УСЛОВИЯХ ЕЙ ТАК И НЕ УСТАНОВИТСЯ ЗНАЧЕНИЕ                                    
loop
exitwhen Zone[i]==null
//ЧТО ТАКОЕ Zone[i] ДАЖЕ БОГ НЕ ЗНАЕТ
if (IsUnitInGroup(ruf, group[i])==true ) then
//СРАВНЕНИЕ БУЛИНА С БУЛИНОМ ДЛЯ ПОЛУЧЕНИЯ БУЛИНА -_____-
set p=i
endif
set i=i+1
endloop
return p
endfunction
function 1_2 takes nothing returns nothing
//ОПЯТЬ? 1_2 КЛАСС! Я СРАЗУ ПОНЯЛ ЧТО ОНО ДЕЛАЕТ
local integer p=GetPlayerId(GetOwningPlayer(GetEnumUnit()))
local integer i=1_C1(GetEnumUnit())
if ( IsUnitInGroup(GetEnumUnit(), group[i]) == true ) then
//ФУНКЦИЯ GetEnumUnit() ВЫЗЫВАЕТСЯ УЖЕ ТРЕТИЙ РАЗ, МОЖНО БЫЛО ЗАНЕСТИ ЕЁ В ПЕРЕМЕННУЮ
call IssuePointOrderLoc(udg_OilTank, "move", Location(GetRectCenterX(Zone[i]), GetRectCenterY(Zone[i])))
//ПОЧЕМУ НЕ КООРДИНАТЫ?
//ЧТО ТАКОЕ udg_OilTank
//УТЕЧКА ТОЧКИ?
call GroupRemoveUnit(group[i], GetEnumUnit())
//ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА СИНТАКСИСА В НАЗВАНИИ ПЕРЕМЕННОЙ
endif
endfunction
function 1_1 takes nothing returns nothing
//СНОВА
call ForGroupBJ( GetUnitsInRangeOfLocAll(300, GetUnitLoc(GetEnumUnit())), function 1_2 )
//БЕСПОЛЕЗНАЯ БЖ? УТЕЧКА ТОЧКИ? УТЕЧКА ГРУППЫ?
endfunction
function 1_A takes nothing returns nothing
//...
local integer i=0
loop
exitwhen i>10
call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(i), 'юнит1'), function 1_1 )
//УТЕЧКА ГРУППЫ
set i=i+1
endloop
endfunction
function InitTrig_1 takes nothing returns nothing
set gg_trg_1= CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_1, 1, true)
//НЕ УКАЗАН ПЕРИОД, ОШИБКА
call TriggerAddAction( gg_trg_1, function 1_A )
endfunction
silence_AZ, это было давно и неправда, а вам уже дают все на блюдечке, так что сейчас не время задавать вопросы. Тем более глупые.
21

» WarCraft 3 / Локальный юнит

silence_AZ,
Вот вам пример, идите разбирайте его и читайте все статьи, что есть.
function UnitAddEffect takes unit u, real x, real y returns nothing
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl", x, y))
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX(u), GetUnitY(u)))
endfunction

function Action takes nothing returns nothing
    local unit u = GetOrderedUnit()
    local real x = GetOrderPointX()
    local real y = GetOrderPointY()
    call UnitAddEffect(u, x, y)
endfunction

function InitTrig_Effect takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null)
        set i = i + 1
        exitwhen i == 16
    endloop
    call TriggerAddAction( t, function Action )
endfunction
Создайте триггер "Effect", конвертируйте в текст, удалите все что там есть, копирните и вставьте мое, запускайте карту и побегайте юнитами.
То что я написал можно и нужно оптимизировать, но так как вам нужен пример создания пользовательский функций, то я сделал именно так.
Вот на всякий случай оптимизированный вариант.
cJass
    define{
        func = function
        void = nothing
        GetX(u) = GetUnitX(u)
        GetY(u) = GetUnitY(u)
        //Constants
        Effect_OnUnit = "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl"
        Effect_OnXY = "Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl"
    }

    void Action(){
        unit u = GetOrderedUnit();
        DestroyEffect(AddSpecialEffect(Effect_OnXY, GetOrderPointX(), GetOrderPointY()));
        DestroyEffect(AddSpecialEffect(Effect_OnUnit, GetX(u), GetY(u)));
    }

    void InitTrig_Effect(){
        trigger t = CreateTrigger()
        integer i = 0
        loop{
            TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null);
            i++;
            exitwhen i == 16;
        }
        TriggerAddAction( t, func Action );
    }
этот вариант будет оптимальнее в туче кода, хоть такая фигня и не нужна никому, но тем не менее..
21

» Блог H / xgm-update

Agren, это моя инициатива, признаю, что на черном фоне режет глаза, но на белом было более-менее. А ссылка на модели от Скорпа - думал кому пригодится, по этому не убирал.
21

» WarCraft 3 / Локальный юнит

чтобы получить атакованного юнита по-моему надо использовать
GetTriggerUnit()
а для получения юнита который атаковал
GetEventDamageSource()
эти функции возвращают юнитов, т. е. переменным можно присваивать сразу эти функции.
Так же следует задать событие триггеру
это
EVENT_UNIT_ATTACKED
или
EVENT_UNIT_DAMAGED
это.
Ну и функции получения юнита - соответственно событию.
21

» WarCraft 3 / Локальный юнит

silence_AZ, что вам надо получить, кастера спелла или что, какого юнита вы пытались получить через триггер?
21

» WarCraft 3 / Локальный юнит

Я не понял что вам нужно...
Опишите что вы хотите сделать и я скажу как это сделать.
Допустим у меня есть функция которая берет неизвестный юнит(takes unit u), то как ее вызвать так,что бы неизвестный юнит задавался локальным из триггера?
не знаю правильно ли понял, но наверное нужно
это
function someFun1 takes unit u returns nothing
  //действия, к примеру:
  SetUnitX(u, 0.)
  SetUnitY(u, 0.)
endfunction

function triggerActionFunc takes nothing returns nothing
  local unit u = someunit
  call someFunc(u)
endfunction

//тут события и прочая бурда
берем юнита в функции триггера и с помощью другой функции двигаем его в центр карты
в ознакомительных целях вариант на cJass (какой раз в жизни... спс Адольфу за сиджасс)
define {
    void = nothing
    SetUnitXY(u, x, y) = {SetUnitX(u, x); SetUnitY(u, y)}
}
void someFun1 takes(unit u){
  SetUnitXY(u, 0., 0.);
}

void triggerActionFunc(){
  unit u = someunit;
  someFunc(u);
}
21

» WarCraft 3 / Война будущего-Бета версия

На публикацию пока заявлять незачем.
Объедините триггеры, почистите импорт, столько всего не требуется, если хотите сделать что-то типа new gen, то надо импортировать текстуры и декор тоже, но опять же все в меру, чтоб не лагало. И не нужно таких полчищ юнитов.
Можно написать свои ИИ для бота на острове, добавить режим союзников и т. д.
Как уже советовал Андреич, можете пока показать вашу карту тут.
21

» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4

IceWolf, руки переустановите. Вы сказали что у вас что-то не работает, но ни скрина с ошибками, ни дополнительной информации...
Вообщем подождите, пока будет выбран победитель N'нного сезона битвы экстрасенсов.
эй народ! мой калькулятор не хочет делить на 0!
nvc123, у меня тоже антивиря нет и что?)