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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [СТАТЬЯ] Как зделать чтобы юнит скользил?
[СТАТЬЯ] Как зделать чтобы юнит скользил?
EdiTTORRДата: Суббота, 25 Декабря 2010, 14:23:34 | Сообщение # 26
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Dreii)
EdiTTORR, 3???

Code
function TK1 takes nothing returns nothing
local unit u=GetEnumUnit()
if(GetTerrainType(GetUnitX(u),GetUnitY(u))==1131442035)then
call KillUnit(u)
endif
set u=null
endfunction
function TK0 takes nothing returns nothing
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
call ForGroup(g,function TK1)
call GroupClear(g)
call DestroyGroup(g)
set g=null
endfunction
function TerrainKill takes nothing returns nothing
local timer t=CreateTimer()
call TimerStart(t,0.03,true,function TK0)
endfunction


Местами здесь.
 

Banzay89Дата: Суббота, 25 Декабря 2010, 14:24:21 | Сообщение # 27
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
Та это я так..) Код далёк до идеала, но это не важно
Если этот код относится к этой "статье", нужно писать комментарии что к чему! Не все же имбожассеры как ты :D
 

EdiTTORRДата: Суббота, 25 Декабря 2010, 14:30:14 | Сообщение # 28
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Banzay89, :)
Quote (Banzay89)
Код далёк до идеала

Ближе к сути, что именно(если ты про локальную группу то это пример в виде наработки, а так лучше что-бы была глобалка конечно).
Дальше смотреть только автору


Banzay89, пле! Я забыл таймер обнулить! Ёмаё! Вот с обнулённым таймером: :D

Code
function TK1 takes nothing returns nothing
local unit u=GetEnumUnit()
if(GetTerrainType(GetUnitX(u),GetUnitY(u))==1131442035)then
call KillUnit(u)
endif
set u=null
endfunction
function TK0 takes nothing returns nothing
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
call ForGroup(g,function TK1)
call GroupClear(g)
call DestroyGroup(g)
set g=null
endfunction
function TerrainKill takes nothing returns nothing
local timer t=CreateTimer()
call TimerStart(t,0.03,true,function TK0)
set t=null
endfunction


Местами здесь.


Сообщение отредактировал EdiTTORR - Суббота, 25 Декабря 2010, 14:30:56
 

DreiiДата: Суббота, 25 Декабря 2010, 14:30:51 | Сообщение # 29
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
EdiTTORR, 18

 

EdiTTORRДата: Суббота, 25 Декабря 2010, 14:32:31 | Сообщение # 30
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Dreii,OO ты считаешь строки? Во даёт! Да ты математик.
p.s.С РОЖДЕСТВОМ!


Местами здесь.
 

DreiiДата: Суббота, 25 Декабря 2010, 14:33:33 | Сообщение # 31
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Quote (EdiTTORR)
математик.

у меня 3 по алгбере вышла(((((

Добавлено (25-12-2010, 14:33)
---------------------------------------------

Quote (EdiTTORR)
set t=null

19 строк


 

Banzay89Дата: Суббота, 25 Декабря 2010, 14:47:33 | Сообщение # 32
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
EdiTTORR, локалка лучше потому, что это дает нам мультиплеерность наработки (МУИ)
По сабжу:

Quote
call GroupClear(g)

действие в принцепи лишнее, так как сразу после этого группа удаляеться..ОО

Quote
call ForGroup(g,function Move)

а это уже плохо. тут цыклом делать нужно:

Code
local unit gg // еще одна локалка в начале
// другие локалки
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
loop
set gg=FirstOfGroup(g)
exitwhen gg==null
// дальше можешь ставить нужные условия
//действия над юнитом в группе
call GroupRemoveUnit(g,gg)
endloop
// другие действия

Quote
function TK0 takes nothing returns nothing
local group g=CreateGroup()
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
call ForGroup(g,function TK1)
call GroupClear(g)
call DestroyGroup(g)
set g=null
endfunction
function TerrainKill takes nothing returns nothing
local timer t=CreateTimer()
call TimerStart(t,0.03,true,function TK0)
endfunction

вот ты запускаешь таймер call TimerStart(t,0.03,true,function TK0) на функцию TK0
а где local timer t=GetExpiredTimer() ???

так пока все вроди

 

Pa3apTДата: Суббота, 25 Декабря 2010, 14:52:53 | Сообщение # 33
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
ВУАХЪХАХАХАХАХХАХХАХХААХХАХХАХАХ

Добавлено (25-12-2010, 14:52)
---------------------------------------------
это я к тому что топикстартер нуб и облажался

 

Banzay89Дата: Суббота, 25 Декабря 2010, 14:53:29 | Сообщение # 34
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
а еще
таймер удалить не помешает

Code
call PauseTimer(t)
call DestroyTimer(t)
 

EdiTTORRДата: Суббота, 25 Декабря 2010, 14:59:56 | Сообщение # 35
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Banzay89)
а где local timer t=GetExpiredTimer() ???

Зачем тебе? Тем более что ссылок на этот таймер нету(раз), и таймер зацикленный(два), и он уже создан до конца игры и по этому имеет одну ссылку(три).
Quote (Banzay89)
а это уже плохо. тут цыклом делать нужно:

В принципе ты прав... Но ForGroup вреда большого не несёт.
Quote (Banzay89)
локалка лучше потому, что это дает нам мультиплеерность наработки (МУИ)

Это тоже правда, но в этой наработке берутся абсолютно все юниты на карте, поэтому она не может быть муи(она не имеет возможности перезапуска раньше окончания работы, значит переменная не перезапишется,(даже если и нет то группа всё-равно содержит всех юнитов на карте)).
И кстати мультиплеерность это MPI ^_^
Quote (Banzay89)

действие в принцепи лишнее, так как сразу после этого группа удаляеться..ОО

Вроде надо её подчищать перед удалением(насколько я помню)...

пока вроде всё ^_^

Добавлено (25-12-2010, 14:59)
---------------------------------------------

Quote (Banzay89)
а еще
таймер удалить не помешает
call PauseTimer(t)
call DestroyTimer(t)

Зачем? Он ему нужен(раз), он зацикленный и имеет одну ссылку(два).


Местами здесь.


Сообщение отредактировал EdiTTORR - Суббота, 25 Декабря 2010, 15:00:40
 

Pa3apTДата: Суббота, 25 Декабря 2010, 15:03:03 | Сообщение # 36
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
мне банзаесская работа с группами офк больше радует
 

EdiTTORRДата: Суббота, 25 Декабря 2010, 15:05:10 | Сообщение # 37
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Pa3apT, ну с группами это да... но причём там таймеры и муи ? Вообще как-то не в тему :o

Местами здесь.
 

Banzay89Дата: Суббота, 25 Декабря 2010, 15:08:19 | Сообщение # 38
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
Quote
таймер зацикленный

где? ОО

Добавлено (25-12-2010, 15:07)
---------------------------------------------

Quote
но причём там таймеры и муи ? Вообще как-то не в тему

я понятия не имею что там на карте. я вижу только этот код, по - этому и говорю, что локалки всегда муи, а глобалки ток с массивом вот и все. =О

Добавлено (25-12-2010, 15:08)
---------------------------------------------

Quote
таймеры

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

 

EdiTTORRДата: Суббота, 25 Декабря 2010, 15:12:49 | Сообщение # 39
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Banzay89)
где? ОО

Quote (Banzay89)
call TimerStart(t,0.03,true,function TK0)

И таймерстарт не создаёт таймер, таймер создан(CreateTimer()) и обнулён в конце(t=null), а функцией GetExpiredTimer() на таймер создаётся ссылка. :o
Quote (Banzay89)
я понятия не имею что там на карте. я вижу только этот код, по - этому и говорю, что локалки всегда муи, а глобалки ток с массивом вот и все. =О

Так я же тоже не вижу карты, я просто читал посты и "уловил месседж"(с)Mr.Freeman
Quote (Banzay89)
а глобалки ток с массивом вот и все. =О

К тому что нужно автору топика относится фраза : "Зимой и летом одним цветом"(ему надо на протяжении ВСЕГО игрового процесса убивать ВСЕХ юнитов на карте которые стоят на льду) ^_^


Местами здесь.


Сообщение отредактировал EdiTTORR - Суббота, 25 Декабря 2010, 15:14:39
 

Banzay89Дата: Суббота, 25 Декабря 2010, 15:18:17 | Сообщение # 40
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
Quote
call TimerStart(t,0.03,true,function TK0)

это немножко не из той оперы. это просто переодический таймер и GetExpiredTimer() все равно нужен

 

Pa3apTДата: Суббота, 25 Декабря 2010, 15:24:28 | Сообщение # 41
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
GetExpiredTimer() не нужен
 

DreiiДата: Суббота, 25 Декабря 2010, 15:27:03 | Сообщение # 42
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Pa3apT, Banzay89, EdiTTORR, что вы тупите???
вот правельный код
call removeDestroyDamage inreger unit local == true return boolean nothing


 

U4enik)Дата: Суббота, 25 Декабря 2010, 15:32:22 | Сообщение # 43
7 уровень
Группа: Проверенные
Сообщений: 267
Награды: 0
Блокировки:
Quote
19 августа 1999

а ну да...
 

EdiTTORRДата: Суббота, 25 Декабря 2010, 15:34:36 | Сообщение # 44
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Dreii)
call removeDestroyDamage inreger unit local == true return boolean nothing

Вхахаха!!!
Quote (Banzay89)
это немножко не из той оперы. это просто переодический таймер и GetExpiredTimer() все равно нужен

Pa3apT правильно говорит, таймер - обьект который создается функцией CreateTimer(), TimerStart всего лишь навсего запускает его, в моём случае я оборвал хендл на него(обнулил), после этого в таблице хендлов не должно быть на него ссылки, GetExpiredTimer() создаёт в таблице хендлов ссылку на этот таймер, и лишний гемор это делать.


Местами здесь.
 

Pa3apTДата: Суббота, 25 Декабря 2010, 15:40:20 | Сообщение # 45
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
Я не к тому) его не нужно удалять т.к. он периодический, а поскольку его не нужно удалять, то и его хендл нам получать не нужно?
Dreii, лолшто?

Добавлено (25-12-2010, 15:40)
---------------------------------------------
зы ты обнулил переменную, а таймер остался

 

EdiTTORRДата: Суббота, 25 Декабря 2010, 15:41:50 | Сообщение # 46
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Pa3apT)
зы ты обнулил переменную, а таймер остался

Ну дык ясен пень остался, я имел в виду что он 1 на всю игру, о ExpiredTimer неизвестно зачем получает его хендлы в случае банзая


Местами здесь.
 

DreiiДата: Суббота, 25 Декабря 2010, 15:49:19 | Сообщение # 47
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Quote (Pa3apT)
лолшто?

loop endloop if RemoveLocationRect else DamageAddEffectLifeUnit enif call set x = nol local set x = null


 

Pa3apTДата: Суббота, 25 Декабря 2010, 15:58:20 | Сообщение # 48
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
EdiTTORR, ну эт да
Dreii, я тоже так писать умею и ч0?
 

DreiiДата: Суббота, 25 Декабря 2010, 16:02:18 | Сообщение # 49
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Quote (Pa3apT)
я тоже так писать умею и ч0?

неумеешь


 

DragoNДата: Суббота, 25 Декабря 2010, 16:34:10 | Сообщение # 50
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
неоптимизировано и по-идиотски

El Psy Congroo
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » [СТАТЬЯ] Как зделать чтобы юнит скользил?
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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