Сейчас 14:37:21 Вторник, 16 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Проблема с кодом (Дубль 2) (Продолжаем)
[Вопрос] Проблема с кодом (Дубль 2)
mazahanДата: Среда, 12 Июня 2013, 16:27:01 | Сообщение # 76
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
Спасибо)

Добавлено (12 Июня 2013, 16:27:01)
---------------------------------------------
Как лучше всего создавать группу и включать в неё всех врагов в радиусе N ?


Сообщение отредактировал mazahan - Среда, 12 Июня 2013, 16:27:09
 

SirNikolasДата: Среда, 12 Июня 2013, 17:06:58 | Сообщение # 77
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Одна глобальная группа, call GroupEnumUnitsInRange(udg_G, x, y, range, null). Пройти по ней циклом и сделать действия с теми, кто враг нужному игроку. Статья.

 

mazahanДата: Суббота, 22 Июня 2013, 14:19:45 | Сообщение # 78
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
Спасибо

Добавлено (13 Июня 2013, 16:52:17)
---------------------------------------------
Код
function grouploo takes real x, real y, real radius returns nothing    
local group g=udg_Temp_Group    
local unit forloop     
call GroupEnumUnitsInRange(g,x,y,radius,null)    
       

loop    
set forloop=FirstOfGroup(g)    
exitwhen forloop==null    
if IsUnitEnemy (forloop,GetOwningPlayer(udg_vodinoy_e_caster))==true then    
call UnitDamageTargetBJ( udg_vodinoy_e_caster, forloop,(I2R(GetHeroStatBJ(bj_HEROSTAT_INT, udg_vodinoy_e_caster, true)) * 11.00 ), ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD )    
endif    
call GroupRemoveUnit(g,forloop)    
endloop    
set g=null    
endfunction
function Trig_p1_Actions takes nothing returns nothing
local integer i = 0
local real x = udg_x2+600*(udg_vodinoy_e_1*bj_DEGTORAD)
local real y = udg_y2+600*(udg_vodinoy_e_1*bj_DEGTORAD)
       set udg_vodinoy_e_caster = GetSpellAbilityUnit()
    set udg_x2 = GetSpellTargetX()
    set udg_y2 = GetSpellTargetY()
       set udg_vodinoy_e_obl = GetSpellTargetLoc()
       set udg_vodinoy_e_1 = 0.00
       set udg_vodinoy_e_2 = 0.00
       set udg_vodinoy_e_3 = 1.00
       set udg_vodinoy_e_4 = 40.00
       set bj_forLoopBIndex = 1
       set bj_forLoopBIndexEnd = 8
loop
    exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
    set bj_forLoopAIndex = R2I(udg_vodinoy_e_3)
    set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4)
           loop
               exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
               call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0)
               set udg_vodinoy_e_dummy[GetForLoopIndexA()] = GetLastCreatedUnit()
               set udg_vodinoy_e_1 = ( udg_vodinoy_e_1 + 9.00 )
               set bj_forLoopAIndex = bj_forLoopAIndex + 1
      set x = udg_x2 + 600*Cos(udg_vodinoy_e_1*bj_DEGTORAD)
      set y = udg_y2 + 600*Sin(udg_vodinoy_e_1*bj_DEGTORAD)
           endloop
           set bj_forLoopAIndex = R2I(udg_vodinoy_e_3)
           set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4)
           loop

               exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
               call SetUnitFlyHeight( udg_vodinoy_e_dummy[GetForLoopIndexA()], ( udg_vodinoy_e_2 + ( I2R(GetForLoopIndexB()) * 100.00 ) ), udg_vodinoy_e_2 )
               set udg_vodinoy_e_2 = 0.00
               set bj_forLoopAIndex = bj_forLoopAIndex + 1

//Изменение высоты
           endloop
           set udg_vodinoy_e_3 = ( udg_vodinoy_e_3 + 40.00 )
           set udg_vodinoy_e_4 = ( udg_vodinoy_e_4 + 40.00 )
           set bj_forLoopBIndex = bj_forLoopBIndex + 1
       endloop
       set udg_vodinoy_e_3 = 1.00
       set udg_vodinoy_e_4 = 40.00
       set bj_forLoopAIndex = R2I(udg_vodinoy_e_3)
       set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4)
loop
           exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
     set x = udg_x2 + 600
        set y = udg_y2 + 600
           call CreateDestructable( 'YTfc', x,y, udg_vodinoy_e_1, 1.00, 0 )
           set udg_vodinoy_e_dec[GetForLoopIndexA()] = GetLastCreatedDestructable()
           set udg_vodinoy_e_1 = ( udg_vodinoy_e_1 + 9.00 )
           set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
       call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h008', udg_x2,udg_y2,0 )
       set udg_vodinoy_e_dummy1 = GetLastCreatedUnit()
       call IssuePointOrderLoc( udg_vodinoy_e_dummy1, "silence", udg_vodinoy_e_obl )
    loop
    exitwhen i>15
       call grouploo(udg_x2,udg_y2,600)
    call TriggerSleepAction( 0.90 )
    set i = i+1
    endloop
          
       set udg_vodinoy_e_3 = 1.00
       set udg_vodinoy_e_4 = 40.00
       set bj_forLoopBIndex = 1
       set bj_forLoopBIndexEnd = 8
loop
           exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
           set bj_forLoopAIndex = R2I(udg_vodinoy_e_3)
           set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4)
           loop
               exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
               call RemoveUnit( udg_vodinoy_e_dummy[GetForLoopIndexA()] )
               call RemoveDestructable( udg_vodinoy_e_dec[GetForLoopIndexA()] )
               set bj_forLoopAIndex = bj_forLoopAIndex + 1
           endloop
           set udg_vodinoy_e_3 = ( udg_vodinoy_e_3 + 40.00 )
           set udg_vodinoy_e_4 = ( udg_vodinoy_e_4 + 40.00 )
           set bj_forLoopBIndex = bj_forLoopBIndex + 1
       endloop
       set bj_forLoopAIndex = 1
       set bj_forLoopAIndexEnd = 40
loop
           exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
           call RemoveDestructable( udg_vodinoy_e_dec[GetForLoopIndexA()] )
           set bj_forLoopAIndex = bj_forLoopAIndex + 1
       endloop
        
       call RemoveUnit( udg_vodinoy_e_dummy1 )
       
    set x = 0
set y = 0
endfunction
function Trig_p1_Conditions takes nothing returns boolean
       return GetSpellAbilityId() == 'A00D'    
              
endfunction

//===========================================================================
function InitTrig_p1 takes nothing returns nothing
local integer i = 0
       set gg_trg_p1 = CreateTrigger(  )
           call TriggerAddCondition( gg_trg_p1, Condition( function Trig_p1_Conditions ) )
       call TriggerAddAction( gg_trg_p1, function Trig_p1_Actions )
    loop    
             call TriggerRegisterPlayerUnitEvent( gg_trg_p1, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )    
             set i = i + 1    
exitwhen i > 11    
endloop     
endfunction

Думми почему-то не меняют высоту...

Добавлено (22 Июня 2013, 14:19:45)
---------------------------------------------
Есть ли функция создания юнита по 3 осям ? (x,y,z).
Всё о той же высоте...

Сообщение отредактировал mazahan - Четверг, 13 Июня 2013, 18:19:07
 

SirNikolasДата: Суббота, 22 Июня 2013, 14:43:47 | Сообщение # 79
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Чтобы менять юниту высоту, он должен иметь тип передвижения "Летающий".
Либо, если это нежелательно, нужно добавить и сразу отнять способность превращения в летающее существо (например, 'Amrf').


 

mazahanДата: Суббота, 22 Июня 2013, 15:01:10 | Сообщение # 80
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
Цитата (SirNikolas)
Чтобы менять юниту высоту, он должен иметь тип передвижения "Летающий".
Либо, если это нежелательно, нужно добавить и сразу отнять способность превращения в летающее существо (например, 'Amrf').

Это всё давно сделал , с помощью способности сфинкс , добавленной через редактор объектов(когда-то давно, ещё в триггерах, пробовал с типом передвижения "Летающий" , не помогало)
ошибку уже сам нашёл
Код

  call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0)  
  set udg_vodinoy_e_dummy[GetForLoopIndexA()] = GetLastCreatedUnit()  

а надо
Код

set udg_vodinoy_e_dummy[GetForLoopIndexA()] =  call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0)  

Хотя особой разницы не вижу , видимо GetLastCreatedUnit() не связан с CreateUnit ...

И да
Цитата
Есть ли функция создания юнита по 3 осям ? (x,y,z).
 

GoodieДата: Воскресенье, 23 Июня 2013, 15:52:01 | Сообщение # 81
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
Цитата
видимо GetLastCreatedUnit() не связан с CreateUnit ...

Ну ну.
GetLastCreatedUnit() возращает юнита
CreateUnit... возращает юнита

Добавлено (23 Июня 2013, 15:52:01)
---------------------------------------------

Цитата
Есть ли функция создания юнита по 3 осям ? (x,y,z).

CreateUnit.... - X,Y
SetUnitFlyHeight - Z


cJass рулит!
Power of Mighty[Work In Progress]
 

mazahanДата: Понедельник, 24 Июня 2013, 10:04:33 | Сообщение # 82
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
Цитата (Goodie)
CreateUnit.... - X,Y
SetUnitFlyHeight - Z

Значит это единственный способ.
 

Ty3uKДата: Понедельник, 24 Июня 2013, 10:24:31 | Сообщение # 83
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Да.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

xomachДата: Понедельник, 24 Июня 2013, 12:58:27 | Сообщение # 84
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
mazahan, всегда можно запилить функцию, если настолько влом писать лишнюю строку :)

 

GoodieДата: Понедельник, 24 Июня 2013, 15:56:46 | Сообщение # 85
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
xomach, Именно

define CreateUnit(player,id,x,y,z,angle) = bj_lastCreatedUnit = CreateUnit(player,id,x,y,angle);SetUnitFlyHeight(bj_lastCreatedUnit,z,0.0);


cJass рулит!
Power of Mighty[Work In Progress]
 

Ty3uKДата: Понедельник, 24 Июня 2013, 16:42:42 | Сообщение # 86
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Goodie, к чему такой брутальный и ненужный хук?
Человек пишет сразу на JASS -> bj_lastCreatedUnit ему не нужен.
Что если мне не всех юнитов надо поднимать в воздух? Писать каждый раз #undef и #setdef?


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

GoodieДата: Понедельник, 24 Июня 2013, 16:47:58 | Сообщение # 87
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
Ty3uK, Защем. CreateUnit(Player(0),0,0,0,0) один из вариантов
Можно написать c помощью перегруженных макросов

Добавлено (24 Июня 2013, 16:47:36)
---------------------------------------------
Да и вобще. Зачем что то дефайнить, если можно написать отдельно высоту))

Добавлено (24 Июня 2013, 16:47:58)
---------------------------------------------
Я лично пишу все отдельно)


cJass рулит!
Power of Mighty[Work In Progress]
 

Ty3uKДата: Понедельник, 24 Июня 2013, 18:28:05 | Сообщение # 88
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Goodie, зачем дефайнить то, что может дать бессмысленный лишний вызов? :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Понедельник, 24 Июня 2013, 18:44:36 | Сообщение # 89
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ty3uK, количество аргументов разное. Если тебе не нужно поднимать, ты вызываешь функцию с 5 параметрами.
Цитата (Goodie)
define CreateUnit(player,id,x,y,z,angle) = bj_lastCreatedUnit = CreateUnit(player,id,x,y,angle);SetUnitFlyHeight(bj_lastCreatedUnit,z,0.0);
define CreateUnit(player, id, x, y, z, angle) = { bj_lastCreatedUnit = CreateUnit(player, id, x, y, angle); SetUnitFlyHeight(bj_lastCreatedUnit, z, .0); }
fixed.


 

Ty3uKДата: Понедельник, 24 Июня 2013, 19:33:13 | Сообщение # 90
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
SirNikolas, ну да, затупил. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

GoodieДата: Вторник, 25 Июня 2013, 10:11:55 | Сообщение # 91
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
Цитата
define CreateUnit(player, id, x, y, z, angle) = { bj_lastCreatedUnit = CreateUnit(player, id, x, y, angle); SetUnitFlyHeight(bj_lastCreatedUnit, z, .0); }
fixed.

Точняк.
Цитата
Goodie, зачем дефайнить то, что может дать бессмысленный лишний вызов?

Дефайны не вызывают ничего. Они просто дают упрощенный код
http://cjass.xgm.ru/manual-ru#htoc13


cJass рулит!
Power of Mighty[Work In Progress]
 

Ty3uKДата: Вторник, 25 Июня 2013, 10:32:19 | Сообщение # 92
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Goodie, я знаю. Просто я забыл, что вызов с меньшим количеством аргументов не заменяется.

Добавлено (25 Июня 2013, 10:32:19)
---------------------------------------------
Но в любом случае

Цитата (Ty3uK)
Человек пишет сразу на JASS -> bj_lastCreatedUnit ему не нужен.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Проблема с кодом (Дубль 2) (Продолжаем)
  • Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz