Вопрос такой: можно ли в своих функциях использовать любые переменные по типу, а не те локалки, указывающиеся в начале функции(как в нативках)? Читал про создание своих нативок, но для меня это не очень понятно...
upd: native UnitDamageTarget takes unit whichUnit - здесь мы можем подставить любую переменную типа юнит, которая нам необходима в этом месте, в своих же изначально есть локальная или глобальная переменная, и при обращении к функции можно использовать именно ее и никакую другую. Как моэно добиться того, чтобы свою функция принимала любые переменные типа юнит как натвка?

Принятый ответ

void - это nothing то есть ничего не возвращает функция, а саму функции называют doTheThing, а unit u - аргументы функции, мануалы про cjass почитай (хотя я тоже соглашусь, что написано очень плохо в мануалах. Нужно попробовать немного самим пописать коды)
можно представить как (если хорошо понимаешь jass)
function doTheThing takes unit u returns nothing
... //что-то делаешь с юнитом u (берем аргумент функции - unit u)
endfunction
GetMyUnit - такой не существует, видимо Док имеет в виду подставить свою переменную
пример
например составил пример функции - определить уровень абилы юнита. Функция называется LV, u - юнит, id - целое число, равкод абилы. Возвращает целое число (уровень абилы).
function LV takes unit u, integer id returns integer
return GetUnitAbilityLevel(u, id)
endfunction 
'A000' - равкод абилы
local integer lv = LV(GetTriggerUnit(), 'A000') //узнаем уровень героя
и честно не понял вопрос темы?

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
10
7 лет назад
0
Doc:
Все функции так работают, включая твои
Загруженные файлы
0
20
7 лет назад
0
переменная по сути - адрес к ячейке памяти с той или иной информацией
можно использовать переменные, но если тебе нужно делать действия с юнитом - нужен сам юнит - нужна ссылка на него
вопрос не совсем мне понятен
нужно использовать глобалки?
0
10
7 лет назад
0
ssbbssc:
переменная по сути - адрес к ячейке памяти с той или иной информацией
можно использовать переменные, но если тебе нужно делать действия с юнитом - нужен сам юнит - нужна ссылка на него
вопрос не совсем мне понятен
нужно использовать глобалки?
смотри: native UnitDamageTarget takes unit whichUnit - здесь мы можем подставить любую переменную типа юнит, которая нам необходима в этом месте, в своих же изначально есть локальная или глобальная переменная, и при обращении к функции можно использовать именно ее и никакую другую. Как моэно добиться того, чтобы свою функция принимала любые переменные типа юнит как натвка?
0
20
7 лет назад
0
на ум приходит разве что мемхак
если я правильно понимаю и ты пытаешься писать на более "примитивном, машинном" уровне и получить быстродействия
0
10
7 лет назад
Отредактирован ImbaStyle
0
ssbbssc:
на ум приходит разве что мемхак
если я правильно понимаю и ты пытаешься писать на более "примитивном, машинном" уровне и получить быстродействия
не быстродействие, а многогранность использования функций, мемхак вообще нехочу использовать (хотя он дает очень многое, что мне нужно, но я стараюсь добиться всего без него). Вопрос пока не закрываю, мб что-то можно сделать без хака
0
29
7 лет назад
Отредактирован Doc
0
Ты это пытался читать?
Показываю на пальцах
void doTheThing(unit u) {
// ...
}

unit unitOne = GetTriggerUnit()
unit unitTwo = GetMyUnit()

doTheThing(unitOne)
doTheThing(unitTwo)
Это?
0
10
7 лет назад
Отредактирован ImbaStyle
0
Doc:
Ты это пытался читать?
Показываю на пальцах
void doTheThing(unit u) {
// ...
}

unit unitOne = GetTriggerUnit()
unit unitTwo = GetMyUnit()

doTheThing(unitOne)
doTheThing(unitTwo)
Это?
естественно читал, а остальное что-то не совсем понял, то есть ты предлагаешь для всевозможных юнитов сделать копию функции с разным аргументами?
0
29
7 лет назад
0
Значит естественно плохо читал. Где ты увидел здесь копию?
0
10
7 лет назад
0
Doc:
Значит естественно плохо читал. Где ты увидел здесь копию?
значит я тебя не понял, непонял этот код =_=
0
27
7 лет назад
Отредактирован MpW
0
void - это nothing то есть ничего не возвращает функция, а саму функции называют doTheThing, а unit u - аргументы функции, мануалы про cjass почитай (хотя я тоже соглашусь, что написано очень плохо в мануалах. Нужно попробовать немного самим пописать коды)
можно представить как (если хорошо понимаешь jass)
function doTheThing takes unit u returns nothing
... //что-то делаешь с юнитом u (берем аргумент функции - unit u)
endfunction
GetMyUnit - такой не существует, видимо Док имеет в виду подставить свою переменную
пример
например составил пример функции - определить уровень абилы юнита. Функция называется LV, u - юнит, id - целое число, равкод абилы. Возвращает целое число (уровень абилы).
function LV takes unit u, integer id returns integer
return GetUnitAbilityLevel(u, id)
endfunction 
'A000' - равкод абилы
local integer lv = LV(GetTriggerUnit(), 'A000') //узнаем уровень героя
и честно не понял вопрос темы?
Принятый ответ
0
20
7 лет назад
0
ImbaStyle:
а где у тебя объявлена переменная u1?
если это локалка в другой функции, то конечно она не видна
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.