XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
beril
Доктор ЗЛО!!!
offline
Опыт: 3,204
Активность:
Помогите с кодом
Суть проблемы заключается, вот в чем: заместь 1 тексттага выводится сразу 3 подряд. Помогите не знаю. что делать уже вроде все правильно делаю .
Вот код
((код jass
function SFP_Work takes integer i, real a returns nothing
local texttag array n
local integer d
local timer t = CreateTimer()
call SFP_Reset(i)
loop
exitwhen udg_D_DialogHero == false проверка на диалог
call TriggerSleepAction(1.00)
endloop
call SFP_Reset(i)
set udg_L_Action[i] = true бул на раб
call DisplayTextToForce( GetPlayersAll(), "работает работать " )//debug
if i <= 35 then если i больше 35, значит это персонаж женского пола
call SetUnitAnimationByIndex(udg_L_Unit[i], 26 )
else
endif
loop
exitwhen GetTimeOfDay() == 16.00
set n[1] = CreateTextTag()
set n[2] = CreateTextTag()
set n[3] = CreateTextTag()
set n[4] = CreateTextTag()
set n[5] = CreateTextTag()
set n[6] = CreateTextTag()
set n[7] = CreateTextTag()
set n[1] = CreateTextTag()
set n[2] = CreateTextTag()
set n[3] = CreateTextTag()
set n[4] = CreateTextTag()
set n[5] = CreateTextTag()
set n[6] = CreateTextTag()
set n[7] = CreateTextTag()
set d = GetRandomInt(1,7)
call TriggerSleepAction(7.00)
if(d == 1) then
call SetTextTagText(n[1], "Фуг устал уже", .0184) 8. * 0.23 / 10
elseif(d == 2) then
call SetTextTagText(n[2], "Отдохнуть бы чуток", .0184) etc
elseif(d == 3) then
call SetTextTagText(n[3], "Спина уже побаливает", .0184)
elseif(d == 4) then
call SetTextTagText(n[4], "Яйца вспотели уже от работы", .0184)
elseif(d == 5) then
call SetTextTagText(n[5], "Мозоли уже натер", .0184)
elseif(d == 6) then
call SetTextTagText(n[6], "(Свистит)....", .0184)
elseif(d == 7) then
call SetTextTagText(n[7], "Фуг устал уже", .0184)
else
endif
call SetTextTagPosUnit(n[1], udg_L_Unit[i], 0.)
call SetTextTagColor(n[1], 127, 127, 255, 255)
call SetTextTagPosUnit(n[2], udg_L_Unit[i], 0.)
call SetTextTagColor(n[2], 127, 127, 255, 255)
call SetTextTagPosUnit(n[3], udg_L_Unit[i], 0.)
call SetTextTagColor(n[3], 127, 127, 255, 255)
call SetTextTagPosUnit(n[4], udg_L_Unit[i], 0.)
call SetTextTagColor(n[4], 127, 127, 255, 255)
call SetTextTagPosUnit(n[5], udg_L_Unit[i], 0.)
call SetTextTagColor(n[5], 127, 127, 255, 255)
call SetTextTagPosUnit(n[6], udg_L_Unit[i], 0.)
call SetTextTagColor(n[6], 127, 127, 255, 255)
call SetTextTagPosUnit(n[7], udg_L_Unit[i], 0.)
call SetTextTagColor(n[7], 127, 127, 255, 255)
call TriggerSleepAction(3.80) Вейт 3:
call DestroyTextTag(n[1])
call DestroyTextTag(n[2])
call DestroyTextTag(n[3])
call DestroyTextTag(n[4])
call DestroyTextTag(n[5])
call DestroyTextTag(n[6])
call DestroyTextTag(n[7])
call TriggerSleepAction(10.00)
call TriggerSleepAction(2.00)
endloop
endfunction
...
))
В общем не знваю что делать выводиться 2-3 тексттага подряд, полмогитен плиз

Отредактировано beril, 08.12.2012 в 21:25.
Старый 08.12.2012, 21:15
DioD

offline
Опыт: 45,134
Активность:
нет отладки - давай досвиданья.
форматирование кода тоже доставляет, китайский код на лицо, хорошо что сообщений всего 7 а не 100
Старый 09.12.2012, 03:20
beril
Доктор ЗЛО!!!
offline
Опыт: 3,204
Активность:
Какая разница скоко 7 или 20, проблема в том что выводится сразу 3 тексттага
Старый 09.12.2012, 04:05
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
beril, beril:
loop
exitwhen udg_D_DialogHero == false проверка на диалог
call TriggerSleepAction(1.00)
endloop
  1. Вейт тут зачем? Сто раз вам писали не юзайте вейты в циклах будут баги...
2)
((код jass
if(d == 1) then
call SetTextTagText(n[1], "Фуг устал уже", .0184) 8. * 0.23 / 10
elseif(d == 2) then
call SetTextTagText(n[2], "Отдохнуть бы чуток", .0184) etc
elseif(d == 3) then
call SetTextTagText(n[3], "Спина уже побаливает", .0184)
elseif(d == 4) then
call SetTextTagText(n[4], "Яйца вспотели уже от работы", .0184)
elseif(d == 5) then
call SetTextTagText(n[5], "Мозоли уже натер", .0184)
elseif(d == 6) then
call SetTextTagText(n[6], "(Свистит)....", .0184)
elseif(d == 7) then
call SetTextTagText(n[7], "Фуг устал уже", .0184)
))
вот очень интересно нафига создавать по массиву значений которые во время игры не менеются, не говоря о 7 текстагах, зачем? все делается 1 текстагом....
Старый 09.12.2012, 06:59
DioD

offline
Опыт: 45,134
Активность:
я уже сказал что это китайский код который тупо ниачём, если бы было 20 фраз, то автор забивал бы массив из 20 переменных точно также вручную...
Старый 09.12.2012, 08:00
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DioD, давай наставим лодыря на путь истинный, и вобьём в его голову как делаются такие вещи...
Старый 09.12.2012, 09:14
DioD

offline
Опыт: 45,134
Активность:
не тот случай, не наставляю тех кто хамит.
Старый 09.12.2012, 09:41
ScorpioT1000
Работаем
offline
Опыт: отключен
Вейт тут зачем? Сто раз вам писали не юзайте вейты в циклах будут баги...
а у меня нету багов =О
ScorpioT1000 добавил:
DioD, у тебя еть иные варианты нежели создание бд строк?
ScorpioT1000 добавил:
beril, есть функция показать тексттаг
    if GetLocalPlayer() == Player(...) then
        call SetTextTagVisibility(tt, true)
    endif
Старый 09.12.2012, 16:54
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, ну там не в 1 месте вейт в цикле, и куда стока текстагов и зачем каждый раз создавать массив...
Старый 09.12.2012, 17:02
ScorpioT1000
Работаем
offline
Опыт: отключен
ой да
exitwhen GetTimeOfDay() == 16.00
это условие никогда не выполнится php.net/float
Старый 09.12.2012, 17:04
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, да да и вейт длиннющий в этом цикле, и суде по его посту выполняется аж 3 раза...
Там везде куча вейтов, 2 цикла, и прочая чепуха...
quq_CCCP добавил:
Причём зачем юзать циклы для проверки времени суток?
Старый 09.12.2012, 17:07
ScorpioT1000
Работаем
offline
Опыт: отключен
почему бы и нет? если бы не косячный варкрафт, не лимит операций и диапазон чисел в условии цикла, это бы вполне хорошо работало.
Старый 09.12.2012, 17:12
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, да да да, но только существуют события это раз, два куча ненужных действий нагружающих движок...
Старый 09.12.2012, 17:22
DioD

offline
Опыт: 45,134
Активность:
строки да, только забивать, но всё остальное не требует ни массива ни забивания.
На время суток есть отдельное событие, время стало меньше-больше Х, при чём в ГУИ.
У текстагов есть встроенные таймеры жизни и анимации, ждать вейтом чтобы удалить изврат, когда можно поставить лайфспан и забыть, даже обнулять не надо их.
Старый 09.12.2012, 18:02
ScorpioT1000
Работаем
offline
Опыт: отключен
кстати в новогодней карте есть моя системка безлимитного числа тексттагов =) они начинают медленно плавно переливаться из прозрачного в свой цвет по 100 штук, те которые не видно удаляются, а которые должны появиться создаются заного)
Старый 09.12.2012, 18:15
DioD

offline
Опыт: 45,134
Активность:
бесконечными они не будут всё равно, всего их 144 на карту, больше не создаются, в сингле можно перерисовывать и пропускать такты, но в мульте фокус не прокатит.
Старый 10.12.2012, 06:55
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DioD, это всего текстагов на карту или только видимых игроку?
Если создать массив и показывать, скрывать?
Старый 10.12.2012, 07:23
DioD

offline
Опыт: 45,134
Активность:
больше 144 на карту, текстаги асинк, можно целиком обрабатывать весь код текстага в асинке, то есть не создавать текстаги для тех игроков которые их не видят вообще.
Старый 10.12.2012, 10:34
ScorpioT1000
Работаем
offline
Опыт: отключен
quq_CCCP, DioD, я говорю о том, что я их создавал и удалял каждую итерацию, ну посмотрите сами
Старый 10.12.2012, 13:52
beril
Доктор ЗЛО!!!
offline
Опыт: 3,204
Активность:
ScorpioT1000:
exitwhen GetTimeOfDay() == 16.00
Я уже понял изменил
на Gowrk == true
В общес специально сделал для проверки из 2 тексттагов, я сам не понял что за фигня но выходит так проигрывается один текстаг (все нормально), потом второй (тоже нормально) и третий раз 2 текстага одновременно и так каждый раз циклически на 3 разе несколько раз проигрывается. В общем кучу вайтов наставил, вроде более менее нормально, но иногда быстро друг за другом проигрываются
Старый 20.12.2012, 15:29
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:15.