Я создал маленькую функцию, которая должна мне возвращать число. Оно понадобится мне в дальнейшем как универсальная функция, чтоб ее не писать заново в каждом нужном триггере.
Вот первая часть
function ItemIAS takes integer whichItem returns real
    if ( whichItem == 'I01C' ) then
        return 20
    else
        return 0
    endif
endfunction
Вот вторая часть (триггер, где нужна первая func)
function ItemIAS_A takes nothing returns nothing
    local item i=GetManipulatedItem()
    local integer irc=GetItemUserData(GetManipulatedItem())
    local integer pn=GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))
    local real ias=ItemIAS(irc)
    set udg_Unit_IAS[pn] = (udg_Unit_IAS[pn] + R2I(ias))
endfunction
Но у меня ошибка "Cannot convert null to real" на строке "local real ias=ItemIAS(irc)".
Что сделать?

Farrien, попробуй скопировать функции в отдельную карту и глянь будет ли там работать
и зачем ты написал udg_ перед 2 переменными?
`
ОЖИДАНИЕ РЕКЛАМЫ...
11
Точнее тут даже вопрос в том, как узнать равкод предмета и поставить ее в первую функцию. Равкод это integer или string?
28
попробуй не 0 а 0.0
равкод это инт
и вместо
if ( whichItem == 'I01C' ) then
        return 20
    else
        return 0
    endif
лучше
if ( whichItem == 'I01C' ) then
        return 20
endif
return 0
и если ты планируешь делать много таких проверок(с разными равкодами) то лучше юзать бд
11
nvc123:
попробуй не 0 а 0.0
равкод это инт
и вместо
if ( whichItem == 'I01C' ) then
        return 20
    else
        return 0
    endif
лучше
if ( whichItem == 'I01C' ) then
        return 20
endif
return 0
и если ты планируешь делать много таких проверок(с разными равкодами) то лучше юзать бд
попробовал. в первой функции все норм там значит.
проблема во второй
15
возможно вместо переменной типа item вы должно передавать itemtype?
11
LOR_D:
возможно вместо переменной типа item вы должно передавать itemtype?
нет
33
Farrien, а почему ты передаёшь функции юзердату? Что в ней записано? По логике твоей функции она должна принимать ItemTypeId.
(Возможно, если юзердата пустая, она и передаёт null, что вызывает описанную ошибку, но я не уверен.)
29
Не понимаю смысла real, если всеравно потом конвертишь в int
28
alexprey, just for fun
alexprey, функция ведь возвращает всеравно целое значение
11
Кет:
Farrien, а почему ты передаёшь функции юзердату? Что в ней записано? По логике твоей функции она должна принимать ItemTypeId.
(Возможно, если юзердата пустая, она и передаёт null, что вызывает описанную ошибку, но я не уверен.)
Я и GetItemTypeId пробовал. Все равно null. По идее должно передать в виде integer рав код итема, но не хочет.
33
Farrien, может, событие не то? Но это точно GetItemTypeId() должно быть.
29
GetConvertedPlayerId
Разве не просто GetPlayerId?
function ItemIAS takes integer whichItem returns real
    if ( whichItem == 'I01C' ) then
        return 20
    else
        return 0
    endif
endfunction
Функция разве не должна всегда заканчиваться return'ом? перепиши так
function ItemIAS takes integer whichItem returns real
    if ( whichItem == 'I01C' ) then
        return 20
    endif
    return 0
endfunction
33
Функция разве не должна всегда заканчиваться return'ом? перепиши так
Дык главное, чтобы она в любом случае делала return. А так получается в любом варианте.
29
Кет, многие компиляторы это не любят. Честно уже не помню как в jass
11
nvc123:
Farrien, ты проверил код на конфликт имён?
Да. Он просто в вызове функции не хочет брать вот этот код предмета 'I01C'. По идее это integer, но его не понимает как integer.
28
Farrien, попробуй скопировать функции в отдельную карту и глянь будет ли там работать
и зачем ты написал udg_ перед 2 переменными?
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.