Вопросы по JASS кодированию - Wc3-Maps Форум













[ Главная · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: Strateg, Melissa  
Wc3-Maps Форум » Раздел для картостроителей » GUI / Jass » Вопросы по JASS кодированию
Вопросы по JASS кодированию
-
CaturnДата: Четверг, 01-12-2011, 23:38:03 | Сообщение # 1
Темный рыцарь

загрузка наград ...
Группа: Проверенные
Сообщений: 217
Репутация: 128
Статус: Не на сайте
  • 1. не задавать тупых вопросов, мол как снять приписку(ки) BJ с функции.
  • 2. задавать вопросы максимально чётко, если вы хотите получить столь же лаконичный и устраивающий ответ.
  • 3. не задавать не аргументируемых вопросов, если у вас ошибка в коде, то выпишите её в сообщение; если у вас нет знаний как сделать тот или иной спел, ну или систему, то опишите её действие.

    Просьба отвечать на них кто знает.

    2 часть статьи по jass напишу намного позже, примерно пару месяцев. Я щас занят проектом, проект Dotа с открытым исходным кодом.
    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
  •  
    -
    NevermoreДата: Пятница, 09-12-2011, 09:23:00 | Сообщение # 2
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Caturn, я знаю что ты написал не задовать вопросы про BJ но ответь please я немогу понять
    Вот я открыл скрипты blizzard и нашел там как убрать но понять не могу

    Quote
    function AddSpecialEffectLocBJ takes location where, string modelName returns effect
    set bj_lastCreatedEffect = AddSpecialEffectLoc(modelName, where)
    return bj_lastCreatedEffect
    endfunction


    что означают действия?

    Quote
    set bj_lastCreatedEffect


    я немонел как можно установить переменную на спецефкт который потом можно просто создать?
     
    -
    wetalqДата: Пятница, 09-12-2011, 09:54:41 | Сообщение # 3
    Король Мёртвых

    загрузка наград ...
    Группа: V.I.P.
    Сообщений: 1263
    Репутация: 1572
    Статус: Не на сайте
    на джасе лучше использовать координаты, функция будет такая

    Code
    call DestroySpecialEffect(AddSpecialEffect(ModelName, x,y))


    может я немножко ошибся, но примерно так делается удаления спецэффекта


    Покупка предметов через способность
     
    -
    CaturnДата: Пятница, 09-12-2011, 21:04:50 | Сообщение # 4
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    wetalq, Если нужно создать спецэффект в центре области применения заклинания, то нам так и так нужно будет вызвать переменную типа Location, т.к. при действии set realX=GetLocationX(GetSpellTargetLoc()) функция ссылается на данные точки, и если данной локации нет(данные не в переменной), компилятор её создаст, но в последствии не удалит. И это будет равносильно утечки, и при выполнении работы на конкурс, судьи зачтут эту манипуляцию вне вашу пользу, и отнимут бал другой. Так что в данной ситуации юзать Location будет приемлемым.

    local location loc_loc01=(GetSpellTargetLoc())
    local real loc_realX=GetLocationX(loc_loc01)
    local real loc_realY=GetLocationY(loc_loc01)
    call RemoveLocation(loc_loc01)
    иные действия...


    Nevermore, т.к. это ГУИ компилятор, то он тоже должен иметь свой набор "глобальных переменных", bj_lastCreatedEffect и есть та самая переменная. Ведь из вне откуда эффект создаться не может, он имеет тоже свои параметры, как и в виде "активных" переменных которые ссылаются на хиндл объекта, и сам хиндл. Иными словами, в jass мы можем иметь 2 типа эффектов, мгновенные (call DestroyEffect(AddSpecialEffect))) (которые при инициализации сразу удаляются, и в игре мы видим эффект) и длительные (local effect loc_effect01=AddSpecialEffect) (которые при инициализации не дадут нам нужного эффекта, а лишь спустя время, или "вечные"). А в ГУИ близзы всё правильно сделали с одной стороны, зачем делать 2 функции, если можно обойтись одной и не парить заботы картоделам.

    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    -
    NevermoreДата: Суббота, 10-12-2011, 14:21:30 | Сообщение # 5
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Caturn, wetalq, спс вроде понел по эффектам

    вот так должно быть?

    Quote
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIvi\\AIviTarget.mdl", юнит, "chest"))


    Еще вопрос:
    Я где-то читал что можно как-то сократить Jass код вот этом месте

    Quote
    function Trig_Trigger_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'AUan' ) ) then
    return false
    endif
    return true
    endfunction


    подскажите как это зделать?
     
    -
    wetalqДата: Суббота, 10-12-2011, 16:07:38 | Сообщение # 6
    Король Мёртвых

    загрузка наград ...
    Группа: V.I.P.
    Сообщений: 1263
    Репутация: 1572
    Статус: Не на сайте
    Code
    function Trig_Trigger_Conditions takes nothing returns boolean  
    return GetSpellAbilityId() == 'AUan'  
    endfunction


    вот так сокращается


    Покупка предметов через способность
     
    -
    CaturnДата: Суббота, 10-12-2011, 19:18:10 | Сообщение # 7
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    Quote (Nevermore)
    function Trig_Trigger_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'AUan' ) ) then
    return false
    endif
    return true
    endfunction


    Стандартная ГУИшная система условий.
    not части не равно, используется обильно при проверки числовых значений в jasse 2ой записью
    If not integer == 15 then
    if integer != 15 then

    но я её пользуюсь не часто, когда делаю массовые системы.

    Quote (wetalq)
    function Trig_Trigger_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AUan'
    endfunction

    Если ты делаешь условие триггера, то этот вариант будет не совсем правильным.
    Более правильный вариант.
    Code
    function func000_Conditions takes nothing returns boolean  
       if (твоё условие(я) == false(числовые значения)) then
         call func000_Action(аргументы приемлимы)
       endif/else/esleif
       return false
    endfunction

    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    -
    NevermoreДата: Воскресенье, 11-12-2011, 09:51:48 | Сообщение # 8
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    С такими жассерами как wetalq, и Caturn, можно Jass выучить за неделю biggrin

    у меня проблема с эффектом когда я меняю
    Quote
    "Abilities\\Spells\\Items\\AIvi\\AIviTarget.mdl"


    на другой эффект то у меня пишет ошибку

    Quote
    Отсутствует корректный список аргументов


    в чем проблема? С эффектом
    Quote
    "Abilities\\Spells\\Items\\AIvi\\AIviTarget.mdl"
    работает как меняю сразу ошибка.
     
    -
    wetalqДата: Воскресенье, 11-12-2011, 10:44:33 | Сообщение # 9
    Король Мёртвых

    загрузка наград ...
    Группа: V.I.P.
    Сообщений: 1263
    Репутация: 1572
    Статус: Не на сайте
    работает как меняю сразу ошибка.

    Эффект должен быть в "" а также в названии везде где стоит \ нужно ставить еше одну


    Покупка предметов через способность
     
    -
    NevermoreДата: Воскресенье, 11-12-2011, 11:09:31 | Сообщение # 10
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    а спс wetalq,
    Jass всетаки странная штука
     
    -
    wetalqДата: Воскресенье, 11-12-2011, 11:14:46 | Сообщение # 11
    Король Мёртвых

    загрузка наград ...
    Группа: V.I.P.
    Сообщений: 1263
    Репутация: 1572
    Статус: Не на сайте
    Quote (Nevermore)
    С такими жассерами как wetalq, и Caturn, можно Jass выучить за неделю


    Caturn посильнее джасер чем я

    Quote (Nevermore)
    Jass всетаки странная штука


    и в тоже время отличная вещь


    Покупка предметов через способность
     
    -
    NevermoreДата: Воскресенье, 11-12-2011, 11:31:54 | Сообщение # 12
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Quote
    Jass всетаки странная штука

    и в тоже время отличная вещь


    smile
     
    -
    CaturnДата: Воскресенье, 11-12-2011, 23:13:50 | Сообщение # 13
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    Офк, до полного идеала не хватает функций 25-40, впрочем любой jassер знает о чём я)
    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    -
    NevermoreДата: Понедельник, 12-12-2011, 16:44:19 | Сообщение # 14
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Вопрос:

    Когда в гуи устонавливаеш переменную типа Отряд то видно сто одной строчкой но если переводиш в Jass code то получается бесмыслится
    типа такого:

    Quote
    function Trig_Slow_Func004002003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false )
    endfunction

    function Trig_Slow_Func004002003002001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false )
    endfunction

    function Trig_Slow_Func004002003002002001 takes nothing returns boolean
    return ( IsUnitVisible(GetFilterUnit(), GetOwningPlayer(udg_SlowCaster)) == true )
    endfunction

    function Trig_Slow_Func004002003002002002001 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
    endfunction

    function Trig_Slow_Func004002003002002002002 takes nothing returns boolean
    return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_SlowCaster)) == true )
    endfunction

    function Trig_Slow_Func004002003002002002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Slow_Func004002003002002002001(), Trig_Slow_Func004002003002002002002() )
    endfunction

    function Trig_Slow_Func004002003002002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Slow_Func004002003002002001(), Trig_Slow_Func004002003002002002() )
    endfunction

    function Trig_Slow_Func004002003002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Slow_Func004002003002001(), Trig_Slow_Func004002003002002() )
    endfunction

    function Trig_Slow_Func004002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Slow_Func004002003001(), Trig_Slow_Func004002003002() )
    endfunction


    как это убрать или заменить ?
     
    -
    wetalqДата: Понедельник, 12-12-2011, 18:20:48 | Сообщение # 15
    Король Мёртвых

    загрузка наград ...
    Группа: V.I.P.
    Сообщений: 1263
    Репутация: 1572
    Статус: Не на сайте
    Code
    call GroupEnumUnitsInRange(TG, x3, y3, 256., null)  
    loop  
         set u = FirstOfGroup(TG)  
         if IsUnitInGroup(u, DG) == false and IsUnitEnemy(u,GetOwningPlayer(dummy)) == true then  
         call UnitDamageTarget(dummy, u, damage, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, null)  
         endif  
         call GroupAddUnit(DG, u)  
         call GroupRemoveUnit(TG, u)  
         exitwhen u == null  
    endloop


    я делаю тпе


    Покупка предметов через способность
     
    -
    CaturnДата: Понедельник, 12-12-2011, 18:48:08 | Сообщение # 16
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    wetalq, было бы легче объявить в функции лишнего юнита и при инициализации вызвать функцию с возвращающим значением юнита.

    офк, вот тут с объяснением.
    Nevermore, Если тебе нужно вызвать переменную типа группы, и делать действия с ней то вот jass аналог:

    Code
    function fun0002 takes nothing returns nothing
       local unit unit01=GetEnumUnit()/эта функция возвращает выбранного юнита.
       call KillUnit(unit01)
       set unit01=null
    endfunction

    function fun0001 takes nothing returns boolean  
       return (IsUnitAlly(GetFilterUnit(),GetOwningPlayer(udg_Unit000))==false) then
    endfunction

    function fun0001 takes nothing returns boolean  //если мы заюзали хеш-таблицу
       set udg_unit000=LoadUnitHandle(hashtable,GetHandleId(GetTriggeringTrigger(),23)
       return (IsUnitAlly(GetFilterUnit(),GetOwningPlayer(udg_Unit000))==false) then
    //или
       return (IsUnitAlly(GetFilterUnit(),GetOwningPlayer(LoadUnitHandle(hashtable,GetHandleId(GetTriggeringTrigger(),23)))==false) then
    endfunction
        
    function fun0000 takes nothing returns nothing
       local unit unit01=GetTriggerUnit()
       local real X=GetUnitX(unit01)
       local real Y=GetUnitY(unit01)
       local real radius=675
       local group group01=CreateGroup() //без инициализации переменной функция не сможет выполнять работу в триггере, CreateGroup() функция создания группы  
    //если тебе нужно сравнить принадлежность юнита на врага юниту, используем глобальные переменные перед функцией выбора юнитов
       set udg_Unit000=unit01
    //ну или можно воспользоваться хеш-таблицей
       call SaveUnitHandle(hashtable,GetHandleId(GetTriggeringTrigger()),23,unit01)  
    //если мы воспользовались таблицей, то действия будут немного иначе, и придётся юзать глобальные переменные, если у нас в сопоставлении были переменные родительного рода, ну или мучатся и писать в аргументе юнита "загрузка юнита из таблицы"   
       call GroupEnumUnitsInRange(group01,X,Y,radius,Condition(function fun0001)) //выбор юнитов по координатам. там где кондитион, эта функция сопоставления юнитов.
       call ForGroup(group01,function fun0002) //работа с юнитами в функции.
    //если тебе нужно взять всех юнитов в группу, без разбора пользуйся этой функцией  call ForGroup(GroupEnumUnitsInRange(group01,X,Y,radius,null),function function0002)
       set unit01=null
       call DestroyGroup(group01)
    endfunction

    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    -
    NevermoreДата: Среда, 14-12-2011, 15:54:50 | Сообщение # 17
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Вопрос:

    Как создать текст на Jass без утечек и BJ?

    и что это значит?

    Quote
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Trigger, EVENT_PLAYER_UNIT_DEATH )
     
    -
    CaturnДата: Среда, 14-12-2011, 19:36:03 | Сообщение # 18
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    Nevermore, плавающий?
    Quote (Nevermore)
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Trigger, EVENT_PLAYER_UNIT_DEATH )

    функция говорит вроде сама за себя? не?
    офк, функция объявляет эвент(сценарий) для указанного триггера по которому оно будет работать. В данном случаи триггер будет работать когда указанная в условии(или любая) единица умрёт. Если тебе надо избавиться от BJ, то тут он совсем бесполезен(что с BJ, что без него один фиг).
    Есть ещё функции:

    Code
    call TriggerAddCondition(Trigger,Condition(function funccon))


    Condition - параметр отвечающий за истину или лож (если быть точнее то он позволяет проверять истинна или ложь). Тоже самое и с выбором юнитов в группу.

    function - когда было произведено действие в игре, которое заставило работать триггер, триггер включает функцию проверки условий, которая должна обязательно вернуть логическое значение триггеру, FALSE или TRUE. Если функция не вернёт значение то будут утечки, большие.

    GetTriggerEvalCount(Trigger) - на будущее, функция считывающая к-во действий функции триггера которое отвечает за условие, не важно, ложно ли было оно или истинно.

    Ну и функция действия триггера
    Code
    call TriggerAddAction(Trigger,function funact)


    function - если условие истинно то идёт действие триггера.

    GetTriggerExecCount(Trigger) - функция считывающая к-во действий функции триггера которое отвечает за Действие.

    При составлении триггера советую пользоваться таким методом:
    Code
    function fun002 takes nothing returns nothing
       //функции
    endfunction

    function fun001 takes nothing returns boolean
       if (Услвоие) then
         call fun002() //(вызов действие триггера)
       endif  //возможен также elseif и else
       return false
       //можно так же делать более 1 действия в триггере одновременно
    endfunction

    function fun000 takes nothing returns nothing
       local trigger trigger01=CreateTrigger()
       call TriggerRegisterAnyUnitEventBJ(trigger01,Event)
       call TriggerAddCondition(trigger01,Condition(function fun001))
       set trigger01=null
    endfunction

    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    -
    NevermoreДата: Четверг, 15-12-2011, 18:01:37 | Сообщение # 19
    GUI IMBA

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 210
    Репутация: 338
    Статус: Не на сайте
    Quote
    Nevermore, плавающий?


    да
     
    -
    CaturnДата: Четверг, 15-12-2011, 22:05:55 | Сообщение # 20
    Темный рыцарь

    загрузка наград ...
    Группа: Проверенные
    Сообщений: 217
    Репутация: 128
    Статус: Не на сайте
    Nevermore, ГУИшный вариант тоже безутечен.
    Code

       local texttag texttag01=CreateTextTag()
       call SetTextTagText(texttag01,"нужный текст",0.023) //переменная/текст/размер
       call SetTextTagPos(texttag01,X,Y,180)  //переменная/позиции Х и Y, градус
       call SetTextTagColor(texttag01,255,10,10,255)  //цвет
       call SetTextTagVelocity(texttag01,78*0.071/128*Cos(90*bj_DEGTORAD),78*0.071/128*Sin(90*bj_DEGTORAD))  /угл парения. формула 78*0.71/128*... скорость текста, а ...*Cos(90*PI) угл   
       call SetTextTagPermanent(texttag01,false) // блокировка текста
       call SetTextTagLifespan(texttag01,2.00)  // жизнь текста
       set texttag01=null

    Мои статьи:
    1. http://wc3-maps.ru/forum/78-1507-1
    Школа тригеростроения, ГУИ.
    http://wc3-maps.ru/forum/99-1471-1
     
    Wc3-Maps Форум » Раздел для картостроителей » GUI / Jass » Вопросы по JASS кодированию
    • Страница 1 из 5
    • 1
    • 2
    • 3
    • 4
    • 5
    • »
    Поиск:
    Рейтинг@Mail.ru
    Яндекс.Метрика

    Copyright © 2010-2017
    Вакансии :: Контакты
    Мобильная версия сайта
    chat