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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [ВАЖНО] Помощь по JASS
[ВАЖНО] Помощь по JASS
СорнемусДата: Воскресенье, 20 Декабря 2009, 23:30:03 | Сообщение # 51
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (inhuman89)
в начале

Только надо
Code
local unit u

И в самом конце
Code
set u = null
 

inhuman89Дата: Воскресенье, 20 Декабря 2009, 23:35:06 | Сообщение # 52
5 уровень
Группа: Пользователи
Сообщений: 106
Награды: 0
Репутация: 5
Блокировки:
я понял что надоел уже, но не играет анимацию ни в какую :(

Добавлено (20-12-2009, 23:35)
---------------------------------------------
как я этого не хотел но похоже придется модель лишать всех аним кроме attack 2 :'(


 

peinДата: Понедельник, 21 Декабря 2009, 22:12:32 | Сообщение # 53
9 уровень
Группа: Проверенные
Сообщений: 1114
Награды: 1
Репутация: 272
Блокировки:
ребят сори что тут пишу но нужно чтоб кто то обяснил толком как избежать утечки памяти
 

H_A_PKДата: Понедельник, 21 Декабря 2009, 22:26:49 | Сообщение # 54
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Короче.
чтоб избежать утечек
нужно ширако использовать переменные , так как я приведу пример.
любая переменная засоряет память и любой обьект
и спользую постояно "применяющий юнит" мы каждый рас создаём переменую и она засоряяет память.
а если занеси "применяющий юнит" в переменную и использовать её всегда и витоге
онулить её с памощью функции
set udg_(название переменой) = null
мы не засори память.
или пример когда мы создаём спецэфект не удоляя его.
думая , что он сам уничтожился, нет он порожнему занимает память , и поэтому его необходимо удолять, тожесамое с мобами в доте. они удоляются после смери , чтоб он не занимал память.
нк ты понял?


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

peinДата: Вторник, 22 Декабря 2009, 11:32:57 | Сообщение # 55
9 уровень
Группа: Проверенные
Сообщений: 1114
Награды: 1
Репутация: 272
Блокировки:
H_A_PK, болия мения понял спс огромное,
и щё 1 вопрос а аптимизировать можна токо на жасс иле на гуи тодже можно?
 

СорнемусДата: Вторник, 22 Декабря 2009, 18:59:46 | Сообщение # 56
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (pein)
и щё 1 вопрос а аптимизировать можна токо на жасс иле на гуи тодже можно?

На ГУИ многие действия ограничены. Например, ГУИ не даёт обнулять некоторые типы переменных. Так что предпочтительней джасс.

H_A_PK, я плакал...

Quote (H_A_PK)
Короче. чтоб избежать утечек нужно ширако использовать переменные , так как я приведу пример. любая переменная засоряет память и любой обьект

Утечки вызывают далеко не только это.
Quote (H_A_PK)
и спользую постояно "применяющий юнит" мы каждый рас создаём переменую и она засоряяет память.

О бог мой... "GetSpellAbilityUnit()" возвращает константу, а они почти не засоряют память. Локалки тут используют для удобства.
Quote (H_A_PK)
тожесамое с мобами в доте. они удоляются после смери , чтоб он не занимал память.

Где-то видел как писали, что ходячие юниты доты не вызывают утечек, так как после исчезания трупа они сами обнуляются

Самые страшные утечки - создание тонн точек. Если неопытный человек начнёт делать плавное перемещение то после 4-5 таких перемещений вар ляжет. По-этому надо использовать координаты.

pein, я тебе посоветую лучше поискать статьи по утечкам (ещё глянь в статье Sergey'я про утечки, там неплохо описано что это).

 

[DUОS]Дата: Вторник, 22 Декабря 2009, 21:13:29 | Сообщение # 57
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (inhuman89)
call SetUnitAnimationByIndex(GetSpellAbilityUnit(),2)

inhuman89,
Попробуй строкой задать.

Сорнемус,

Quote (Сорнемус)
"применяющий юнит"

Quote (Сорнемус)
Локалки тут используют для удобства.

Ненене, не катит... Тут мы уменьшаем вызовы функции. Вот скажи мне, что лучше использовать:
Code
local integer i = 1
loop
     exitwhen i > 10
     call BJDebugMsg(I2S(i))
     set i = i + 1
endloop
или же
Code
local integer i = 1
loop
     exitwhen i > 10
     call BJDebugMsg(I2S(i))
     call BJDebugMsg(I2S(i + 1))
     set i = i + 2
endloop
Этот вопрос был задан MaSer'ом мне. Ответь на него и ты. Если не поймёшь, разъясню.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

inhuman89Дата: Вторник, 22 Декабря 2009, 21:25:41 | Сообщение # 58
5 уровень
Группа: Пользователи
Сообщений: 106
Награды: 0
Репутация: 5
Блокировки:
Quote (|DUОS|)
inhuman89,
Попробуй строкой задать.

извини не понял.
как строкой? это разве не строкой?

Добавлено (22-12-2009, 21:25)
---------------------------------------------
и еще вопрос, при перемещении через set x\y происходят тн утечки?
например:

Code
Custom script:   set udg_x1 = udg_x1 + udg_H_offset[1] * Cos(udg_H_angle_1)


 

СорнемусДата: Вторник, 22 Декабря 2009, 23:00:53 | Сообщение # 59
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (inhuman89)
и еще вопрос, при перемещении через set x\y происходят тн утечки? например:

Если всё правильно, то нет.
Quote (|DUОS|)
Попробуй строкой задать.

Ненене. Алексей писал что надо именно индекс, а не название тега.
Quote (|DUОS|)
Этот вопрос был задан MaSer'ом мне. Ответь на него и ты. Если не поймёшь, разъясню.

Без разницы. Так как в 1 варианте цикл идёт 10 раз и вызов функций "BJDebugMsg" и "I2S" происходит по 10 раз, а во 2 варианте цикл идёт 5 раз, но вызовов функций по 2, так что и в сумме вызов также будет 10.


Сообщение отредактировал Сорнемус - Вторник, 22 Декабря 2009, 23:01:03
 

RAYMANTO16Дата: Среда, 23 Декабря 2009, 13:11:55 | Сообщение # 60
9 уровень
Группа: Проверенные
Сообщений: 1018
Награды: 0
Репутация: 362
Блокировки:
а подскажите как сделать ИИ.ну чтоб он копил армии,нападал и все такое делал.ну когда не все юниты и улучшения открыты

 

inhuman89Дата: Четверг, 24 Декабря 2009, 01:47:47 | Сообщение # 61
5 уровень
Группа: Пользователи
Сообщений: 106
Награды: 0
Репутация: 5
Блокировки:
вот попросил я на хайве сделать мне системку отбрасывания врагов. сделать сделалиб но как ее использовать сказать забыли) я понимаю что мне самому нужно учить джасс, а не просить постоянно.
по сабжу.
скажите как ее собственно запустить? мне например нужно при касте абилки.

Code

library Knockback

globals
     private constant real Interval = 0.01

     private constant string effekt = "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl"

     private constant string blood = "Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl"
endglobals

private struct data
unit u
real d1
real d2

real sin
real cos

boolean r
endstruct

globals
     private timer Tim = CreateTimer()
     private data array DATAS
     private integer Total = 0
endglobals

private function IsCoordPathable takes real x, real y returns boolean
     local item u = CreateItem( 'wolg', x,y )
     local real xx = GetItemX( u ) - x
     local real yy = GetItemY( u ) - y
     call RemoveItem(u)
     set u = null
     if xx < 1 and xx > -1 and yy < 1 and yy > -1 then
         return true
     endif
     return false
endfunction

private function Execute takes nothing returns nothing
     local data dat
     local integer i = 0
     local real x
     local real y
     loop
         exitwhen i >= Total
         set dat = DATAS[i]
         set x = GetUnitX(dat.u) + dat.d1 * dat.cos
         set y = GetUnitY(dat.u) + dat.d1 * dat.sin
         if IsCoordPathable(x, y) then
             if dat.r then
                 call SetUnitX(dat.u, x)
                 call SetUnitY(dat.u, y)
             else
                 call SetUnitPosition(dat.u,x,y)
             endif
         endif
         set dat.d1 = dat.d1 - dat.d2
if dat.d1 <= 0 or not IsCoordPathable(x, y) then
             set DATAS[i] = DATAS[Total - 1]
             set Total = Total - 1
             call dat.destroy()
         endif
         set i = i + 1
     endloop
     if Total == 0 then
         call PauseTimer(Tim)
     endif
endfunction

function Knockback takes unit u, real d, real a, real t, boolean resist returns nothing
     local data dat = data.create()
     local integer q = R2I(t / Interval)
     set a = a*bj_DEGTORAD
     set dat.u = u
     set dat.d1 = 2 * d / (q + 1)
     set dat.d2 = dat.d1 / q
     set dat.sin = Sin(a)
     set dat.cos = Cos(a)
     set dat.r = resist
     if Total == 0 then
         call TimerStart(Tim, Interval, true, function Execute)
     endif
     set Total = Total + 1
     set DATAS[Total - 1] = dat
endfunction

endlibrary


 

Ak0n™Дата: Суббота, 26 Декабря 2009, 07:27:17 | Сообщение # 62
10 уровень
Группа: Проверенные
Сообщений: 1575
Награды: 0
Репутация: 568
Блокировки:
Я далеко не знаю возможности джаза(ток гуи) поэтому у меня к вам есть пару вопросов:
1.Можно сделать так,чтобы скажем при использовании спела,чел успел станцевать как майкл джексон?)))) )) )))
2.Ну или когда чела бьют,враг загорается?
3.Я инода видел что шеи у моделий шевелятся в разные стороны,это джаз?


 

inhuman89Дата: Понедельник, 28 Декабря 2009, 03:49:47 | Сообщение # 63
5 уровень
Группа: Пользователи
Сообщений: 106
Награды: 0
Репутация: 5
Блокировки:
Quote (Ak0n™)
что шеи у моделий шевелятся

это как?


 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 16:30:10 | Сообщение # 64
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (inhuman89)
при перемещении через set x\y происходят тн утечки?

Никогда!
Quote (Сорнемус)
Без разницы. Так как в 1 варианте цикл идёт 10 раз и вызов функций "BJDebugMsg" и "I2S" происходит по 10 раз, а во 2 варианте цикл идёт 5 раз, но вызовов функций по 2, так что и в сумме вызов также будет 10.

Нет, ни в коем разе. Второй вариант лучше, ест меньше тактов процессора.

Добавлено (28-12-2009, 16:30)
---------------------------------------------
Ak0n™,

Quote (Ak0n™)
2.Ну или когда чела бьют,враг загорается?

Пламя феникса дай атакующему.
Про остальное - тебе ответят в моделировании.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

H_A_PKДата: Понедельник, 04 Января 2010, 21:48:44 | Сообщение # 65
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
давай раскрой я пример с тебя возьму [DUОS],
PingMinimapLocForForceEx


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

[DUОS]Дата: Понедельник, 04 Января 2010, 21:55:40 | Сообщение # 66
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
H_A_PK,
function PingMinimapForForceEx takes force whichForce, real x, real y, real duration, integer style, real red, real green, real blue returns nothing
local integer red255 = PercentTo255(red)
local integer green255 = PercentTo255(green)
local integer blue255 = PercentTo255(blue)

if (IsPlayerInForce(GetLocalPlayer(), whichForce)) then
// Use only local code (no net traffic) within this block to avoid desyncs.

// Prevent 100% red simple and flashy pings, as they become "attack" pings.
if (red255 == 255) and (green255 == 0) and (blue255 == 0) then
set red255 = 254
endif

if (style == bj_MINIMAPPINGSTYLE_SIMPLE) then
call PingMinimapEx(x, y, duration, red255, green255, blue255, false)
elseif (style == bj_MINIMAPPINGSTYLE_FLASHY) then
call PingMinimapEx(x, y, duration, red255, green255, blue255, true)
elseif (style == bj_MINIMAPPINGSTYLE_ATTACK) then
call PingMinimapEx(x, y, duration, 255, 0, 0, false)
else
// Unrecognized ping style - ignore the request.
endif

//call StartSound(bj_pingMinimapSound)
endif
endfunction


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

H_A_PKДата: Среда, 06 Января 2010, 13:47:31 | Сообщение # 67
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
эээъъ, а почему я изминений не заметил ??

Добавлено (04-01-2010, 22:06)
---------------------------------------------

call PingMinimapLocForForceEx(bI, 50, 50, 128, 50, 128 , 128 , 255)

Добавлено (04-01-2010, 22:43)
---------------------------------------------

Code
function PingMinimapForForceEx takes force whichForce, real x, real y, real duration, integer style, real red, real green, real blue returns nothing
      local force bI
      local integer red255   = PercentTo255(128)
      local integer green255 = PercentTo255(128)
      local integer blue255  = PercentTo255(255)

      if (IsPlayerInForce(GetLocalPlayer(), bI)) then
          // Use only local code (no net traffic) within this block to avoid desyncs.

          // Prevent 100% red simple and flashy pings, as they become "attack" pings.
          if (red255 == 255) and (green255 == 0) and (blue255 == 0) then
              set red255 = 254
          endif

          if (style == bj_MINIMAPPINGSTYLE_SIMPLE) then
              call PingMinimapEx(50, 50, 128, red255, green255, blue255, false)
          elseif (style == bj_MINIMAPPINGSTYLE_FLASHY) then
              call PingMinimapEx(50, 50, 128, red255, green255, blue255, true)
          elseif (style == bj_MINIMAPPINGSTYLE_ATTACK) then
              call PingMinimapEx(50, 50, 128, 255, 0, 0, false)
          else
              // Unrecognized ping style - ignore the request.
          endif
            
          //call StartSound(bj_pingMinimapSound)
      endif
endfunction

так чтоли ? _ОО ))

Добавлено (06-01-2010, 12:31)
---------------------------------------------

Code
functions Global takes nothing returns nothing
  local integer COUNT_OF_PLAYERS = 12
  costant integer INVERSE = 1
     global
         global unit array Units
         global boolean array Up[12]
         global boolean array Down[12]
         global boolean array Left[12]
         global boolean array Right[12]   
         global boolean array ApplyCam[12]
         global boolean array ApplyControl[12]
         global integer array Anims[12]
         global boolean array Arround[12]
         global boolean array FlagArround[12]
         global boolean array ResetFlag[12]
         global location l[12]
     endglobal
endfunction

АХТУНГ
что не так ? О_о

Добавлено (06-01-2010, 13:47)
---------------------------------------------

Code
function Trig_cameraCren_Actions takes nothing returns nothing
  local real u = gg_unit_hpea_0001
  local real x = GetUnitX(u)
  local real y = GetUnitY(u)
  call TriggerSleepAction( 0.1 )
   If ( RectContainsUnit(Rect(xy, yx, xy, yx), u) == true ) then
    set udg_Fgle = ( udg_Fgle + GetRandomReal(-10.00, 10.00) )
   endif
  set u = null
endfunction

а тут О_о ?


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец


Сообщение отредактировал H_A_PK - Понедельник, 04 Января 2010, 22:44:09
 

СорнемусДата: Среда, 06 Января 2010, 23:58:50 | Сообщение # 68
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (H_A_PK)
АХТУНГ что не так ? О_о

Во-первых, не global, a globals. Во-вторых, в блоке globals не нужна приставка globals перед переменной. В-третьих, если я не ошибаюсь, то глобалки нельзя внутри функции объявлять.
Quote (H_A_PK)
а тут О_о ?

xy, yx, xy, yx откуда взялись?
 

YaponeZzZДата: Четверг, 07 Января 2010, 00:30:56 | Сообщение # 69
SW Hero
Группа: Проверенные
Сообщений: 658
Награды: 2
Репутация: 193
Блокировки:
Как обнулить логическую переменную?

 

СорнемусДата: Четверг, 07 Января 2010, 00:32:55 | Сообщение # 70
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
YaponeZzZ, её обнулять не надо. Да и не обнулишь. У неё только true или false.
 

NightikДата: Четверг, 07 Января 2010, 00:34:10 | Сообщение # 71
7 уровень
Группа: Проверенные
Сообщений: 259
Награды: 0
Репутация: 9
Блокировки:
Jass очень трудно учить и прочем он слишком умный
Ну как delphi C++


Даш минус получишь обратно :(
Даш плюс получишь обратно :)
 

YaponeZzZДата: Четверг, 07 Января 2010, 00:36:11 | Сообщение # 72
SW Hero
Группа: Проверенные
Сообщений: 658
Награды: 2
Репутация: 193
Блокировки:
Сорнемус, ууу спасибо, по GUI я еще норм... А вот Джасс тока учу, стараюсь сам...
А утечки с каких переменных могут происоходит?


 

СорнемусДата: Четверг, 07 Января 2010, 00:36:46 | Сообщение # 73
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (Nightik)
Jass очень трудно учить и прочем он слишком умный

По сравнению с С++ джасс учиться легче лёгкого.
ЗЫ: Не стоит говорить о том, чего не знаешь.
ЗЫЫ: Не оффтопь.
 

H_A_PKДата: Четверг, 07 Января 2010, 00:39:21 | Сообщение # 74
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Quote (Сорнемус)
то глобалки нельзя внутри функции объявлять.

как ? я видел в нароботке, они в функции были ))


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

СорнемусДата: Четверг, 07 Января 2010, 00:40:09 | Сообщение # 75
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (YaponeZzZ)
А утечки с каких переменных могут происоходит?

Почти все, кроме boolean, integer, real.
ЗЫ: Что упустил - напомните.
ЗЫЫ: Утечки это немного другое. Просто так объяснить трудно.
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [ВАЖНО] Помощь по JASS
Поиск:

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