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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Проблемы с кодом
Проблемы с кодом
Kr0nusДата: Суббота, 25 Сентября 2010, 12:35:55 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
У меня возникают проблемы с кодом в двух тригах.
1:
Code
function Trig_Cast_Conditions takes nothing returns boolean
     if ( not ( GetSpellAbilityId() == 'AHtc' ) ) then
         return false
     endif
     return true
endfunction

function Trig_Cast_Actions takes nothing returns nothing
     local unit u1
     set u1 = GetSpellAbilityUnit()
     UnitAddAbility( u1 ,'Amrf')
     call EnableTrigger ( gg_trg_Podnyatie )   
     TriggerSleepAction ( 3.00 )
     call DisableTrigger ( gg_trg_Podnyatie)
     UnitRemoveAbility( u1 ,'Amrf')
     SetUnitFlyHeightBJ( u1 , 0 , 0 )                
endfunction

//===========================================================================
function InitTrig_Cast takes nothing returns nothing
     set gg_trg_Cast = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_CAST )
     call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_Cast_Conditions ) )
     call TriggerAddAction( gg_trg_Cast, function Trig_Cast_Actions )
endfunction

2:
Code

function Trig_Podnyatie_Actions takes nothing returns nothing
     SetUnitFlyHeightBJ( u1 , 400 , 100 )
endfunction

//===========================================================================
function InitTrig_Podnyatie takes nothing returns nothing
     set gg_trg_Podnyatie = CreateTrigger(  )
     call DisableTrigger( gg_trg_Podnyatie )
     call TriggerRegisterTimerEventPeriodic( gg_trg_Podnyatie, 0.07 )
     call TriggerAddAction( gg_trg_Podnyatie, function Trig_Podnyatie_Actions )
endfunction

В чем моя ошибка?


 

rixt7956Дата: Суббота, 25 Сентября 2010, 13:43:38 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Kr0nus, Какая имено проблема?
 

Pa3apTДата: Суббота, 25 Сентября 2010, 13:51:30 | Сообщение # 3
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
код в принципе кривой
 

RalexДата: Суббота, 25 Сентября 2010, 14:04:42 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
UnitRemoveAbility( u1 ,'Amrf') TriggerSleepAction ( 3.00 ) UnitAddAbility( u1 ,'Amrf')
Разве call не нужен??

Добавлено (25-09-2010, 14:04)
---------------------------------------------
Ну там ещё кое где


1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ
 

Kr0nusДата: Суббота, 25 Сентября 2010, 14:23:16 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
Ralex, Да ты прав,я упустил call.
Но у меня все равно ошибку выдает в :
call SetUnitFlyHeightBJ( u1, 400.00, 100.00 )


 

[san9]Дата: Суббота, 25 Сентября 2010, 14:27:44 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Kr0nus)
Ralex, Да ты прав,я упустил call. Но у меня все равно ошибку выдает в : call SetUnitFlyHeightBJ( u1, 400.00, 100.00 )

Твой u1 в 1ом тригере. А ты используеш локальные переменные,они действуют тока в одном тригере. Либо юзай хеш,либо глобалку.

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

Quote (Kr0nus)
call SetUnitFlyHeightBJ( u1, 400.00, 100.00 )

И не юзай бж

Code
call SetUnitFlyHeight(u1,400,100)


 

rixt7956Дата: Суббота, 25 Сентября 2010, 14:27:56 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Kr0nus)
Ralex, Да ты прав,я упустил call.
Но у меня все равно ошибку выдает в :
call SetUnitFlyHeightBJ( u1, 400.00, 100.00 )

А надо call SetUnitFlyHeightBJ( u1, 400.00, 100.00,0.00 )
 

RalexДата: Суббота, 25 Сентября 2010, 14:28:52 | Сообщение # 8
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
[san9], Даже не в одном триг - а в одной ФУНКЦИИ

1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ
 

Kr0nusДата: Суббота, 25 Сентября 2010, 14:29:09 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
[san9], Спасибо,а утечек не будет из-за глобалки?

 

RalexДата: Суббота, 25 Сентября 2010, 14:29:35 | Сообщение # 10
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
Неее

1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ
 

[san9]Дата: Суббота, 25 Сентября 2010, 14:30:42 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Kr0nus)
[san9], Спасибо,а утечек не будет из-за глобалки?

Смотря скоко юнитов будут юзаться в этой функции.
В 1ом тригере делай так.
local unit u1 = блабла
бблабла
set u1 = udg_unit

2 тригер
local unit u1 = udg_unit
и обращайся к u1


 

RalexДата: Суббота, 25 Сентября 2010, 14:32:10 | Сообщение # 12
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
Во 2 тригге должна быть утечка - ты сначала нахрди эту точку, сохраняй через локал перем, и cal RemoveLocation(tochka0

Добавлено (25-09-2010, 14:32)
---------------------------------------------
[san9], От глобалок нет утечек, т.к. они переписываются, а локал - висят


1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ
 

[san9]Дата: Суббота, 25 Сентября 2010, 14:33:22 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Quote (Ralex)
[san9], От глобалок нет утечек, т.к. они переписываются, а локал - висят

А если у него тригер 2 срабатывает не сразу как вкл 1 тригер? То в переменную udg_unit запишется последний юнит,каторый был записан в 1 тригере.И во 2ом обратится не все а 1 последний.


 

RalexДата: Суббота, 25 Сентября 2010, 14:41:25 | Сообщение # 14
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
function Trig_Cast_Actions takes nothing returns nothing
local unit u1 = GetSpellAbilityUnit()
call UnitAddAbility( u1 ,'Amrf')
call EnableTrigger ( gg_trg_Podnyatie )
set udg_u = u1
call TriggerSleepAction ( 3.00 )
call DisableTrigger ( gg_trg_Podnyatie)
call UnitRemoveAbility( u1 ,'Amrf')
call SetUnitFlyHeightBJ( u1 , 0 , 0 )
set u1 = null
endfunction

function Trig_Podnyatie_Actions takes nothing returns nothing
call SetUnitFlyHeightBJ( udg_u , 400 , 100 )
endfunction

//===========================================================================
function InitTrig_Podnyatie takes nothing returns nothing
set gg_trg_Podnyatie = CreateTrigger( )
call DisableTrigger( gg_trg_Podnyatie )
call TriggerRegisterTimerEventPeriodic( gg_trg_Podnyatie, 0.07 )
call TriggerAddAction( gg_trg_Podnyatie, function Trig_Podnyatie_Actions )
endfunction


1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ


Сообщение отредактировал Ralex - Суббота, 25 Сентября 2010, 14:41:57
 

[san9]Дата: Суббота, 25 Сентября 2010, 14:46:28 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Kr0nus,
Кстате мне интерестно. Зачем 2 тригера?


 

Kr0nusДата: Суббота, 25 Сентября 2010, 14:48:22 | Сообщение # 16
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
[san9], Я уже подумал об этом,так что все в 1ом триггере сделать можно.
Всем большое спасибо


 

EdiTTORRДата: Суббота, 25 Сентября 2010, 15:08:43 | Сообщение # 17
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Ralex)
[san9], От глобалок нет утечек, т.к. они переписываются, а локал - висят

Если глобалки не обнулять то есть утечки!
А "локал висят" это где-то на уровне "а деревья летают".
Глобалки и локалки нужно обнулять и удалять одинаково.
Не стоит удалять и обнулять - строки(string), игроков(players), реальные(real), целочисленные(integer), логические (boolean).



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


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

RalexДата: Суббота, 25 Сентября 2010, 15:14:44 | Сообщение # 18
6 уровень
Группа: Проверенные
Сообщений: 213
Награды: 0
Репутация: 6
Блокировки:
EdiTTORR, Нет, обнулять глобалки не надо, если ты их call RemoveLocation - они не обнуляються - а просто удаляются типо сведения о точке

1 - я практически всё пишу по памяти
2 - если я не ответил - пишите ПМ
 

EdiTTORRДата: Суббота, 25 Сентября 2010, 16:02:36 | Сообщение # 19
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Quote (Ralex)
EdiTTORR, Нет, обнулять глобалки не надо, если ты их call RemoveLocation - они не обнуляються - а просто удаляются типо сведения о точке

Я не собираюсь ничего тебе доказывать иди спроси у Дуоса или у драгона 93 или почитай статьи, факт его не оспоришь и я ответил на вопрос Kr0nus.


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


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

Kr0nusДата: Суббота, 25 Сентября 2010, 16:08:34 | Сообщение # 20
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
У меня возник еще один вопрос.Я знаю что полярки вызывают утечки.Я почитал статью.И если я правильно понял использовать без утечек полярки можно таким образом:
Code
function Trig_P_Conditions takes nothing returns boolean
     if ( not ( GetSpellAbilityId() == 'AHtc' ) ) then
         return false
     endif
     return true
endfunction

function Trig_P_Actions takes nothing returns nothing
     local unit u
     set u = GetSpellAbilityUnit()
     set udg_point1 = GetUnitLoc( u )
     set udg_point2 = PolarProjectionBJ ( udg_point1 , 500 , GetUnitFacing ( u ) )
     call SetUnitPositionLoc ( u , udg_point2 )  
     call RemoveLocation(udg_point1)
     call RemoveLocation(udg_point2)
     set u = null
     set udg_point1 = null
     set udg_point2 = null
endfunction

//===========================================================================
function InitTrig_P takes nothing returns nothing
     set gg_trg_P = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_P, EVENT_PLAYER_UNIT_SPELL_CAST )
     call TriggerAddCondition( gg_trg_P, Condition( function Trig_P_Conditions ) )
     call TriggerAddAction( gg_trg_P, function Trig_P_Actions )
endfunction


Вроде бы так.И еще,я использовал глобальные переменные типа точек,потому что локальные не получились.я писал local location p1 - мне выдало ошибку ( пробовал local point p1,та же фигня)


 

[san9]Дата: Суббота, 25 Сентября 2010, 16:32:21 | Сообщение # 21
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
Лучше так.

Code
  local unit  u = GetSpellAbilityUnit()  
     local real a = GetUnitFacing(u)*0.01745
     local real x = GetUnitX(u)+500.*Cos(a)
     local real y = GetUnitY(u)+500.*Sin(a)

Добавлено (25-09-2010, 16:32)
---------------------------------------------

Quote (Kr0nus)
.И еще,я использовал глобальные переменные типа точек,потому что локальные не получились.я писал local location p1 - мне выдало ошибку ( пробовал local point p1,та же фигня)

Ты оброщаешся к local location p1 как к области,не как к точке.Вот он и выдаёт ошибки.


 

Kr0nusДата: Суббота, 25 Сентября 2010, 16:44:34 | Сообщение # 22
6 уровень
Группа: Проверенные
Сообщений: 192
Награды: 0
Репутация: 220
Блокировки:
[san9],
Quote (|san9|)
Ты оброщаешся к local location p1 как к области,не как к точке.Вот он и выдаёт ошибки.

Quote (Kr0nus)
пробовал local point p1,та же фигня


 

EdiTTORRДата: Воскресенье, 26 Сентября 2010, 23:56:28 | Сообщение # 23
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:


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


Сообщение отредактировал EdiTTORR - Понедельник, 27 Сентября 2010, 00:10:52
 

Pa3apTДата: Понедельник, 27 Сентября 2010, 00:09:34 | Сообщение # 24
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
ахахаххахахх обнулять глобалки хДДДДДДД насмешил хД

Добавлено (27-09-2010, 00:09)
---------------------------------------------
з.ы. ты ещё попробуй доказать, что драгон и дуос лучше мну шарят в части кодинга(ничё против парней не имею, отличные ребята :)

 

EdiTTORRДата: Понедельник, 27 Сентября 2010, 00:14:41 | Сообщение # 25
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
Pa3apT, что такого смешного в обнулении глобалок? это тоже переменные содержащие указатели и они отличаются от локалок лишь" продолжительностью жизни " или "локальностью дейсвия".

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

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Проблемы с кодом
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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