Вопрос такой: можно ли в своих функциях использовать любые переменные по типу, а не те локалки, указывающиеся в начале функции(как в нативках)? Читал про создание своих нативок, но для меня это не очень понятно...
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
29
7 лет назад
0
Можно плиз пример того как ты примерно хочешь это видеть в коде?
0
10
7 лет назад
0
Doc:
Можно плиз пример того как ты примерно хочешь это видеть в коде?
как сделаны нативки, вот простой пример: UnitDamageTarget(u1,u2,dmg,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
берет два юнита, при том не важно в каких они переменных
0
29
7 лет назад
0
Что значит не важно?
0
10
7 лет назад
0
Doc:
Что значит не важно?
native UnitDamageTarget takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean
берет юнит, при том не важно, он занесен в переменную u1 или u2 или какую-либо еще
0
29
7 лет назад
0
Все функции так работают, включая твои
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?
если это локалка в другой функции, то конечно она не видна
0
10
7 лет назад
0
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,, вобщем на этом закрываю свой вопрос,, сам затупил конкретно:)
0
29
7 лет назад
0
ну какбы в вопросе код на сжасс я и ответил на сжасс
Чтобы оставить комментарий, пожалуйста, войдите на сайт.