XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
Маленкий вопрос:что возвращает return например в этом скрипте объясните пожайлуста:function Func011 takes nothing returns nothing
local unit i
if IsUnitDeadBJ(i)
return
endif
set i=null
endfunction
А так же как и для чего ее использовать дальше.
И если не в лом то напишите хотя-бы одну функцию которая бы наглядно демонстрировала return - сы.С и этот пример примерно.ESLI
Старый 07.01.2005, 05:28
User

offline
Опыт: 79
Активность:
Я не специалист в этом языке, но судя по статьям которые я читал и моим скромным школьным познаниям паскаля, ничего не возвращает - просто выходит из функции если выполняется условие IsUnitDeadBJ(i).
Старый 07.01.2005, 06:10
Markiz

offline
Опыт: 11,432
Активность:
какая-то глупая функция. если юнит мертв - выходит, если юнит жив - выходит.
Странно.
Старый 07.01.2005, 11:00
zibada

offline
Опыт: отключен
эта функция ничего не возвращает, а вешает игру, т.к. обращается к неинициализированной переменной.
(прямо вопрос для теста =))
Старый 07.01.2005, 13:07
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
(1)return ничего не возвращает а но стоит после проверки IsUnitDeadBJ(j) но зачем ее здесь ставить и что с ней можно сделать дальше.
(2)глобальные переменные можно использовать только в файле *j.
globals
local real s=1
endglobals
но нельзя использовать в триггерах и custom text-ах это верно????
(3)КАК ПРАВИЛЬНО ПРОПИСЫВАТЬ В ИГРОВОЙ БУФЕР.
function I2Trigger takes integer r returns gamecache
return r
return null
endfunction
set gg_trg_(имя триггера) = I2Trigger(InitGameCache("здесь писать имя карты или что??"))
(4)FlushStored(имя)=что делает эта функция
(5)Если установить вот так.
function Func01 takes nothing returns nothing'
local group g=GetUnitsInRangeOfLocAll(400,локация)
Это значит что тепер в группе g юниты все в которые быле установлены теперь в группе и их можно удалят из этой группы???
endfunction
БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ!!!
Старый 07.01.2005, 14:19
zibada

offline
Опыт: отключен
  1. я вообще не понимаю, откуда ты эту функцию взял, и в чем ее глубокий смысл..
  1. глобальные переменные задаются в начальной части скриптов (common.j, blizzard.j, в карте - war3map.j)
из редактора их можно задать только через меню, тогда они получают префикс udg_. через редактирование custom text-а их задать невозможно.
к тому же, у тебя ошибка.. в блоке globals..endglobals переменные идут без слова local :)
  1. смотря, что тебе надо прописать..
для типов boolean, integer, real, string, и unit (то бишь для логических, целых и вещественных переменных, а также для строк и юнитов) существуют функции
StoreBoolean
StoreInteger
StoreReal
StoreString
StoreUnit
всем передается 4 параметра: ссылка на кэш, 2 строки - ключа, и само значение.
ссылку на кэш можно получить вызовом InitGameCache, куда передается строка - имя файла с кэшем.
другие типы можно привести, например, к integer-у при помощи описывавшегося выше бага, затем записать как обычный integer.
  1. FlushGameCache - удаляет ВСЕ записи из кэша.
FlushStoredMission - удаляет все записи, относящиеся к опреденной "миссии" (первому из пары ключей).
FlushStored*** - удаляет одну запись, относящуюся к определенному ключу.
  1. при вызове GetUnitsInRangeOfLocAll у тебя образуется новый объект типа "группа юнитов", и далее можно что угодно делать с юнитами из этой группы.
важно не забыть в конце функции уничтожить эту группу, чтобы освободить память.
(примечание: удаление юнита из группы, как и удаление самой группы на самих юнитов никак не влияет!)
Старый 07.01.2005, 15:12
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
Спасибо за объяснение.


(1)-function test1 takes nothing returns unit
set udg_caster=CreateUnit(Player(0),0,0,0)
return udg_caster - зачем эта функция объясни пожалуйста
endfunction

function test2 takes nothing returns integer
local integer i
if i=1
return i-а это что :)
endif
endfunction

ЗАРАНИЕ СПАСИБО!!!
ПОДПИСЬ :
.Drakvius.
Старый 07.01.2005, 16:24
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
(1)-в чем отличие этих действий
function T takes nothing returns nothing
local unit cast
set cast=CreateUnit(Player(1),0,0,0)
endfunction
function T2 takes nothing returns nothing
local unit cast
call CreateUnit(Player(1),0,0,0)
set cast=GetLastCreatedUnit()
endfunction
поправь если не прав
function T - cast созданный юнит не может быть кем то другим кроме установленной переменной cast=unit - созданный
function T2 - cast просто созданным юнитом последним а в это время другой юнит может прировнятся к cast
я прав или нет
(2) - если поставить эту функций
function A takes unit p,real number returns nothing
local timer ling=CreateTimer()
local real dur
call TimerStart(ling,Dur,false,null)
loop
exitwhen TimerGetRemaining(ling)==0
call SetUnitState(p,GetUnitState(p,UNIT_STATE_LIFE)+number)
call TriggerSleepAction(0)
endloop
endfunction
function A - все время лечит юнита на number,но если противник атакует то p теряет жизнь и востонавливает ее и убывание и возростание жизни видно,но почему ведь юнит лечится момоентально,и как мне сделать так что жизнь вообще не убывала а тобиш это небыло видно.
(3) - DimonT - я уже давно увидел твой jassscript FullScreen Inventory и мне он очень понравился но он совершенно непрегоден для карт в которых больше одного игрока т.к когда спобность используется то юниты которые служут у тебя как пустые отделения видны всем, и любой может использовать их может есть возможность скрыть их.A??
(4)Для всех: Все кто знает как создавать jass functions в редакторе или в файлах *j. то напишите пожалуйста несколько jass примеров только с объяснением Буду очень признателен.
Старый 07.01.2005, 23:21
zibada

offline
Опыт: отключен
1.
Цитата:
function T takes nothing returns nothing
local unit cast
set cast=CreateUnit(Player(1),0,0,0)
endfunction

function T2 takes nothing returns nothing
local unit cast
call CreateUnit(Player(1),0,0,0)
set cast=GetLastCreatedUnit()
endfunction


делают они абсолютно одно и тоже - а именно, создают юнита, указатель на которого затем безвозратно теряется (т.к. локальные переменные существуют только до конца работы функции), следовательно, больше с юнитом ничего не сделать, не применяя функций перебора всех юнитов..
примечание: GetLastCreatedUnit() срабатывает только для юнитов, созданных функциями из blizzard.j.

если тебе нужно, чтобы функция создала юнита, а затем вернула указатель на него, для дальнейших с ним действий - функция будет такая:
Код:
function MyCreateUnit takes nothing returns unit
   return CreateUnit(Player(0), ....)
endfunction


2. млин, ты лучше скажи, чего конкретно ты добиваешься, я тебе напишу функцию...

3. Fullscreen Inventory в мультиплеере НЕ работает вообще и скорее всего, мультиплеерной версии никогда не будет, т.к. там слишком много разнообразных проблем возникает. (в частности, проблема с лимитом одновременно выводимых спецэффектов и тексттэгов..)

4. см. скрипт того же инвентаря, например =)) там все на jass'е написано =)
Старый 08.01.2005, 15:32
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
DimonT я написал еще на первой странице этой темы скрипт полета юнита в точку нахождения юнита просмотри его пожалуйста и скажи почему юниты летят не вточку нахождения target а все в одну точку но не в ту которую нужно мне.
Старый 08.01.2005, 17:19
remal
нечто
offline
Опыт: 2,087
Активность:
Drakvius, напиши как именно ты вызываыешь функцию полёта. от этого многое зависит. если ты используешь глобальную переменную, в триггере кот выполняется часто, но медленно(не буду по-нормальному эту фразу писать), то тут у тебя ничего не выйдет

DimonT, к сожалению, локальные переменные засоряют память. не засоряют папмять параметры.
Старый 08.01.2005, 18:54
Markiz

offline
Опыт: 11,432
Активность:
Цитата:
эта функция ничего не возвращает, а вешает игру, т.к. обращается к неинициализированной переменной.
(прямо вопрос для теста =))

димонт,ты ошибаешься. попробуй сделать такое.
Старый 08.01.2005, 19:50
Drakvius
Mozg.dll - не активен
offline
Опыт: 11,146
Активность:
(1)DimonT ты наверное уже видел скрипт vexorian-а UnitPassiveManaShield когда я создавал свой скрипт там должна была присутствовать функция которая востанавливает жизнь юниту.И вот тут у меня возникла большая на первый взгляд проблемма.Вот часть моега скрипта.

function LifeRestore takes nothing returns nothing
call SetUnitState(udg_caster,UNIT_STATE_LIFE,GetUnitState(udg_caster,UNIT_STATE_LIFE) +GetEventDamage())
endfunction

function AbilityUsed takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction

function ActionsList takes nothing returns nothing
local trigger s=CreateTrigger()
set udg_caster=GetTriggerUnit()

call TriggerRegisterUnitEvent(s,udg_caster,EVENT_UNIT_DAMAGED)
call TriggerAddAction(s,function LifeRestore)

endfunction

function InitTrig_((Имя Триггера)) takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition(t,Condition(Ability_Used))
call TriggerAddAction(t,function ActionList)
endfunction

загвоздка лишь в том что при атаки противника по udg_caster,udg_caster теряет урон наносимый противником а потом прибавляет GetEventDamage() к udg_caster в скрипте vexorian-а все наоборот udg_caster терпит урон или жизнь востонавливается настолько быстро что это незаметно.


И ТАК ВОТ МОЙ ВОПРОС: почему у меня в скрипте не так как у vexorian-а где ошибка как сделать как у vexorian-а только с объяснением пожалуйста.СПАСИБО!!!

(2) - DimonT если тебя не затруднит то дай мне пару уроков jass-а с обяснением только непиши мне снова какую функцию тебе нужно,просто я хочу изучить jass язык получше а на сайте этом я очень недавно и мало чего знаю а ты в jass-е отлично разбираешся уроки можешь написать любые.Хорошо??


(3) - Ну и маленький вопрос если нехочешь отвечать или незнаешь ответ то на него можеш не отвечать.И все же я зарегестрировался на сайтах: www.xgm.guru,www.wc3campiagns а вот на www.wc3sear.ch не могу когда я соглашаюсь со всеми условиями сайта и выбираю "регистрация" он пишет мне Invalid_Session.Почему я даже не успевая ввесит свое имя ли пароль а успеваю только выбрать что "я согласен со всеми условиями сайта" и все???

СПАСИБО ЗА ПОМОЩЬ!!!
Подпись
Drakvius
Старый 09.01.2005, 01:09
Markiz

offline
Опыт: 11,432
Активность:
Drakvius, чтобы выбрать подпись открой "Панель Управления" (вверху) и выбери пункт "Подпись"
Старый 09.01.2005, 11:06
Toadcop

offline
Опыт: 54,313
Активность:
Да вот тема уже интересная :)
Я лутче спошу как локалку вот в такой пример втыкать =
function Con takes nothing returns boolean
return GetUnitState(# u #, UNIT_STATE_LIFE)>0 вот суда надо локального !
endfunction
function MyMain takes nothing returns nothing
local trigger trg=GetTriggeringTrigger()
local unit u=GetTriggerUnit()
call TriggerAddCondition(trg,Condition(function Con)) может функция добовления условия не правильно называетьса :)
endfunction
...
Старый 25.10.2005, 17:46
Raz
Click here!
offline
Опыт: 5,714
Активность:
Toadcop
Всякие GetTriggerUnit() работают для всего потока.
Код:
function Con takes nothing returns boolean
 return GetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE) > 0
endfunction

function MyMain takes nothing returns nothing
 local trigger trg = GetTriggeringTrigger()
 local unit u = GetTriggerUnit() // не нужно.
 call TriggerAddCondition(trg, Condition(function Con))
endfunction
Старый 26.10.2005, 23:12
Toadcop

offline
Опыт: 54,313
Активность:
Raz это бы пример ! :) а не данная проблема !

а если MyMain создаёт юнита а не юзает GetTriggerUnit ?

Toadcop добавил:
remal ??? я не один раз тестил !
function test takes nothing returns nothing
local unit u=CreatUnitAtLoc(GetLocalPlayer(),ID,Location(0,0),0)
call RemoveUnit(u)
set u=null
endfunction

// эта функция вызывалась каждые 0.001 сек ! и я втыкал по мультиплаеру точнее создовал на мульти плаере потом загружал карту она работала и потом нажимал Ctrl+Alt+Del (диспетчер задач)
и втыкал как Вар юзал память. потребление НЕ РАСЛО! да и юнит создовальса на один и тотже адрес (handle) !
Старый 27.10.2005, 15:17
Raz
Click here!
offline
Опыт: 5,714
Активность:
Toadcop
В общем случае: кеш.

Код:
function Con takes nothing returns boolean
 return GetUnitState(I2U(GetStoredInteger(udg_Cache, I2S(T2I(GetTriggeringTrigger())), "u")), UNIT_STATE_LIFE) > 0
endfunction

function MyMain takes nothing returns nothing
 local trigger trg = GetTriggeringTrigger()
 local unit u = GetTriggerUnit()
 call StoreInteger(udg_Cache, I2S(T2I(GetTriggeringTrigger())), "u", U2I(u))
 call TriggerAddCondition(trg, Condition(function Con))
endfunction
Где T2I - Trigger 2 Integer, U2I - Unit 2 Integer, I2U - Integer 2 Unit.

Это Return Bug функции.
Старый 27.10.2005, 17:22
Toadcop

offline
Опыт: 54,313
Активность:
Raz ну я уже и не оследний нуб ! Ты может прав, но если создовать таймер и кормить его буль експр то GetTriggeringTrigger() не катит ! хотя да мне надо было сразу полностью ситувцию описать :) ну вот теперь мне интересно как в условия триггера передавать юнита , а сам триггер создан в этом триггере ?
Старый 29.10.2005, 16:43
Raz
Click here!
offline
Опыт: 5,714
Активность:
Toadcop
Ну ты триггер-то создаешь... Т.е. у тебя указатель-то на него есть.

Типа этого:
Код:
function Con takes nothing returns boolean
 return GetUnitState(I2U(GetStoredInteger(udg_Cache, I2S(T2I(GetTriggeringTrigger())), "u")), UNIT_STATE_LIFE) > 0
endfunction

function MyMain takes nothing returns nothing
 local trigger trg = GetTriggeringTrigger()
 local unit u = GetTriggerUnit()
 local trigger t = CreateTrigger() // Вот ты создаешь триггер.
 call StoreInteger(udg_Cache, I2S(T2I(t), "u", U2I(u))
 call TriggerAddCondition(trg, Condition(function Con))
endfunction
Старый 30.10.2005, 01:11
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 14:06.