Вопрос такой: можно ли в своих функциях использовать любые переменные по типу, а не те локалки, указывающиеся в начале функции(как в нативках)? Читал про создание своих нативок, но для меня это не очень понятно...
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') //узнаем уровень героя
и честно не понял вопрос темы?
`
ОЖИДАНИЕ РЕКЛАМЫ...

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

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

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

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

doTheThing(unitOne)
doTheThing(unitTwo)
Это?
естественно читал, а остальное что-то не совсем понял, то есть ты предлагаешь для всевозможных юнитов сделать копию функции с разным аргументами?
29
Значит естественно плохо читал. Где ты увидел здесь копию?
10
Doc:
Значит естественно плохо читал. Где ты увидел здесь копию?
значит я тебя не понял, непонял этот код =_=
27
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') //узнаем уровень героя
и честно не понял вопрос темы?
Принятый ответ
22
ImbaStyle:
а где у тебя объявлена переменная u1?
если это локалка в другой функции, то конечно она не видна
10
Steal nerves:
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') //узнаем уровень героя
и честно не понял вопрос темы?
Эта функция берет переменную u, а что если я вызываю функцию, где этот юнит записан не в u, а напримерв в caster, тут конечно все просто, можно перед вызовом функции записать переменную caster в u,, вобщем на этом закрываю свой вопрос,, сам затупил конкретно:)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.