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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
[ВАЖНО] Общалка кодеров
Ty3uKДата: Суббота, 27 Июля 2013, 10:21:11 | Сообщение # 276
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Триггерно

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

NaturekidДата: Четверг, 08 Августа 2013, 17:09:28 | Сообщение # 277
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
как быть с наркоманским вейтом в роликах?
он каждый раз разной величины, сначала подумал, что это я рачело, но спецом проверил на новой карте - вейт 0.45 сек оборачивается 4 или 5 разными сроками ожидания.
Если обычно можно заменить таймером, то что делать в ролике?


 

NightCattyДата: Четверг, 08 Августа 2013, 17:28:41 | Сообщение # 278
6 уровень
Группа: Проверенные
Сообщений: 201
Награды: 0
Репутация: 21
Блокировки:
Naturekid, вместо вейта ставишь даммика, делаешь ему таймед лайф на n времени, заводишь вечный цикл от 1 до 10 где for loop a = 1 каждый раз задаешь, либо CS loop endloop, и в цикле проверяешь - если юнит мёртв, for loop a = 10, либо CS exitwhen(true)
такой вот костыль


Тщетно бытиё! :c
 

SirNikolasДата: Четверг, 08 Августа 2013, 17:38:51 | Сообщение # 279
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Naturekid)
как быть с наркоманским вейтом в роликах?
Наркоманскому wait'у уже не помочь.
Цитата (Naturekid)
Если обычно можно заменить таймером, то что делать в ролике?
Ну а что мешает в ролике использовать таймер?


 

NaturekidДата: Четверг, 08 Августа 2013, 19:32:39 | Сообщение # 280
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Цитата (SirNikolas)
Ну а что мешает в ролике использовать таймер?

ага
куда?

Добавлено (08 Августа 2013, 19:32:39)
---------------------------------------------
вообщем я в старом клипике хочу строку караоке норм сделать по слогам и естесственно у меня хрень получается,
иногда вейты в этом действии короче и текст отстаёт на 6-7 сек иногда спешит на столько же. Уродство получается.


 

SirNikolasДата: Пятница, 09 Августа 2013, 09:05:44 | Сообщение # 281
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
0.00 seconds and Не ждать?

 

NaturekidДата: Пятница, 09 Августа 2013, 15:47:11 | Сообщение # 282
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
не ждать - влияет на пропуск синематики ескейпом вроде.
насчёт 0.00 ... ну проверю, но если соль такая же как у вейта обычного - то никакой разницы что 4ю5 что таймер 4ю5 +0.00


 

SirNikolasДата: Пятница, 09 Августа 2013, 18:26:11 | Сообщение # 283
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Naturekid)
не ждать - влияет на пропуск синематики ескейпом вроде.
Пара вырезок из Blizzard.j:
Код
//===========================================================================
// Display a text message to a Player Group with an accompanying sound,
// portrait, speech indicator, and all that good stuff.
//   - Query duration of sound
//   - Play sound
//   - Display text message for duration
//   - Display animating portrait for duration
//   - Display a speech indicator for the unit
//   - Ping the minimap
//
function TransmissionFromUnitWithNameBJ takes force toForce, unit whichUnit, string unitName, sound soundHandle, string message, integer timeType, real timeVal, boolean wait returns nothing
     call TryInitCinematicBehaviorBJ()

     // Ensure that the time value is non-negative.
     set timeVal = RMaxBJ(timeVal, 0)

     set bj_lastTransmissionDuration = GetTransmissionDuration(soundHandle, timeType, timeVal)
     set bj_lastPlayedSound = soundHandle

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

         if (whichUnit == null) then
             // If the unit reference is invalid, send the transmission from the center of the map with no portrait.
             call DoTransmissionBasicsXYBJ(0, PLAYER_COLOR_RED, 0, 0, soundHandle, unitName, message, bj_lastTransmissionDuration)
         else
             call DoTransmissionBasicsXYBJ(GetUnitTypeId(whichUnit), GetPlayerColor(GetOwningPlayer(whichUnit)), GetUnitX(whichUnit), GetUnitY(whichUnit), soundHandle, unitName, message, bj_lastTransmissionDuration)
             if (not IsUnitHidden(whichUnit)) then
                 call UnitAddIndicator(whichUnit, bj_TRANSMISSION_IND_RED, bj_TRANSMISSION_IND_BLUE, bj_TRANSMISSION_IND_GREEN, bj_TRANSMISSION_IND_ALPHA)
             endif
         endif
     endif

     if wait and (bj_lastTransmissionDuration > 0) then
         // call TriggerSleepAction(bj_lastTransmissionDuration)
         call WaitTransmissionDuration(soundHandle, timeType, timeVal)
     endif

endfunction
Это та самая функция Transmission from unit. В ней нас интересует последний параметр - bool wait - и последний, так сказать, абзац кода. Если передано значение "Ждать" и время ожидания положительно, вызывается некая функция WaitTransmissionDuration. А вот и она сама:
Код
//===========================================================================
function WaitTransmissionDuration takes sound soundHandle, integer timeType, real timeVal returns nothing
     if (timeType == bj_TIMETYPE_SET) then
         // If we have a static duration wait, just perform the wait.
         call TriggerSleepAction(timeVal)

     elseif (soundHandle == null) then
         // If the sound does not exist, perform a default length wait.
         call TriggerSleepAction(bj_NOTHING_SOUND_DURATION)

     elseif (timeType == bj_TIMETYPE_SUB) then
         // If the transmission is cutting off the sound, wait for the sound
         // to be mostly finished.
         call WaitForSoundBJ(soundHandle, timeVal)

     elseif (timeType == bj_TIMETYPE_ADD) then
         // If the transmission is extending beyond the sound's length, wait
         // for it to finish, and then wait the additional time.
         call WaitForSoundBJ(soundHandle, 0)
         call TriggerSleepAction(timeVal)

     else
         // Unrecognized timeType - ignore.
     endif
endfunction
Как видно, ничего замысловатого, все отлично прокомментировано. Ждем нужное время в зависимости от звука, модификатора (добавить/удалить/установить) и переданного значения.

Таким образом, во всех репликах передаем "Не ждать" и заменяем ожидания таймером.


 

NaturekidДата: Пятница, 09 Августа 2013, 18:39:36 | Сообщение # 284
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
SirNikolas, так это же здорово.
классно если так.
Переделаю тогды


 

ВолчачкаДата: Пятница, 09 Августа 2013, 23:53:28 | Сообщение # 285
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Понаркоманил в WE.
Код
globals
integer INT_UNIT = 0
integer INT_TEN = 1
integer INT_HUNDRED = 2
integer INT_THOUSAND = 3
endglobals


Код
function mod takes integer x, integer y returns integer
     local integer z = x - (x / y) * y
     if z < 0 then
     set z = z + y
     endif
     return z
endfunction


Код
function GetUBN takes integer IsIntValue, integer IsIntModal, integer Value returns integer
local integer Result = 0
//Из десятки по числу
if IsIntModal == INT_TEN then
if IsIntValue == INT_UNIT then
set Result = mod(Value, 10)
elseif (IsIntValue == INT_TEN) then
set Result = (Value - mod(Value, 10)) / 10
endif
endif
//Из сотки по числу
if IsIntModal == INT_HUNDRED then
if IsIntValue == INT_UNIT then
set Result = mod(mod(Value, 100), 10)
elseif (IsIntValue == INT_TEN) then
set Result = mod(Value, 100) / 10
elseif (IsIntValue == INT_HUNDRED) then
set Result = Value / 100
endif
endif
//Из тысячи по числу
if IsIntModal == INT_THOUSAND then
if IsIntValue == INT_UNIT then
set Result = mod(mod(mod(Value, 1000),100),10)
elseif (IsIntValue == INT_TEN) then
set Result = mod(mod(Value, 1000),100) / 10
elseif (IsIntValue == INT_HUNDRED) then
set Result = mod(Value, 1000) / 100
elseif (IsIntValue == INT_THOUSAND) then
set Result = Value / 1000  
endif
endif
return Result
endfunction


Код
function SetUnitDamageBonus takes unit u, integer BonusDamage returns nothing

if (BonusDamage < 9 and BonusDamage >= 0) then

call SetUnitAbilityLevel( u, 'A00M', BonusDamage  +1 )
call SetUnitAbilityLevel( u, 'A01Q', 0)
call SetUnitAbilityLevel( u, 'A01P', 0)
call SetUnitAbilityLevel( u, 'A00N', 0)

elseif( BonusDamage > 9  and BonusDamage <= 99) then

call SetUnitAbilityLevel( u, 'A00M', GetUBN( INT_UNIT, INT_TEN, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01Q', GetUBN( INT_TEN, INT_TEN, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01P', 0)
call SetUnitAbilityLevel( u, 'A00N', 0)

elseif( BonusDamage > 99  and BonusDamage <= 999 ) then

call SetUnitAbilityLevel( u, 'A00M', GetUBN( INT_UNIT, INT_HUNDRED, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01Q', GetUBN( INT_TEN, INT_HUNDRED, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01P', GetUBN( INT_HUNDRED, INT_HUNDRED, BonusDamage) +1 )
call SetUnitAbilityLevel( u, 'A00N', 0)

elseif( BonusDamage > 999  and BonusDamage <= 9999 ) then

call SetUnitAbilityLevel( u, 'A00M', GetUBN( INT_UNIT, INT_THOUSAND, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01Q', GetUBN( INT_TEN, INT_THOUSAND, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A01P', GetUBN( INT_HUNDRED, INT_THOUSAND, BonusDamage) +1)
call SetUnitAbilityLevel( u, 'A00N', GetUBN( INT_THOUSAND, INT_THOUSAND, BonusDamage) +1)
endif

endfunction
 

NightCattyДата: Суббота, 10 Августа 2013, 14:36:28 | Сообщение # 286
6 уровень
Группа: Проверенные
Сообщений: 201
Награды: 0
Репутация: 21
Блокировки:
Волчачка, читал на хайве что 1 абилка с 10 уровнями вызывает больше лагов чем 10 абилок с 1 уровнем, делай выводы :) и вообще 2 4 8 16 лучше подходят, меньше уровней/абилок нужно, да и система проще

Тщетно бытиё! :c
 

ВолчачкаДата: Суббота, 10 Августа 2013, 15:46:16 | Сообщение # 287
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
NightCatty, смотря какая ещё. С бонус дамагом и бонус бронёй не будет, так, как они способности статики или же пассивки.
А вот способность типа молота, или жара с уроном(пассивка живая статика) то да.
И походу вы не удосужились прочитать это:
Цитата (Волчачка)
Понаркоманил в WE.

Цитата (Волчачка)
Понаркоманил в WE.

Цитата (Волчачка)
Понаркоманил в WE.
 

NightCattyДата: Суббота, 10 Августа 2013, 17:08:06 | Сообщение # 288
6 уровень
Группа: Проверенные
Сообщений: 201
Награды: 0
Репутация: 21
Блокировки:
Цитата (Волчачка)
NightCatty, смотря какая ещё. С бонус дамагом и бонус бронёй не будет, так, как они способности статики или же пассивки.
А вот способность типа молота, или жара с уроном(пассивка живая статика) то да.
И походу вы не удосужились прочитать это:

нет же, речь о любой абилке.

сам тред


Тщетно бытиё! :c
 

NaturekidДата: Суббота, 10 Августа 2013, 18:34:28 | Сообщение # 289
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Люди киньте ктонить чтонить про наклон юнита.
Не деформацией почвы же его делать.
Как сделано в CZ?


 

ВолчачкаДата: Суббота, 10 Августа 2013, 18:35:44 | Сообщение # 290
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (NightCatty)
нет же, речь о любой абилке.

Сколько раз тестировал способности, лаг давали только те, которые делали больше действий, чем были статичными как (Броня, атака и бонусы к характеристикам, хп и мане(зы хп и ману надо к сожалению раскладывать на другие способности))
А мне интересно по другому >D
Каждый делает по своему.
Не бывает плохого действия выполнения, бывают либо кривые руки, либо неправильное применение.
На этом закроем наш диалог.
 

MelodiaДата: Понедельник, 26 Августа 2013, 01:05:45 | Сообщение # 291
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5041
Блокировки:
вы послушайте ребята, что я вам сейчас скажу.....
Особенно СэрНиколас.

Короче.
Создаются точки - point с оффсетами по формуле от точки Point[0], Далее они нигде не изменяются.
В том поганом отделе триггера создавалось изображение, создавалось оно в точке Point[0]. которая задавалась по новому(она вроде много где меняется временно для разных целей)
....
Хотя да, тут до меня допёрло...Хотя и я не думал даже о таком
я присваиваю Point[0] = Point[нужная позиция]
Ну вообщем как результат - у меня "Съедались" точки, потому и чудеса творились... А в коде у мну всё правильно было всё таки. Ну кроме вот этого...
Ой лол...


CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

SirNikolasДата: Понедельник, 26 Августа 2013, 07:40:01 | Сообщение # 292
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Melodia)
я присваиваю Point[0] = Point[нужная позиция]
А потом ремуваешь?


 

MelodiaДата: Четверг, 26 Сентября 2013, 14:16:23 | Сообщение # 293
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5041
Блокировки:
Цитата (SirNikolas)
А потом ремуваешь?

именно...
как всегда самая лолистическая ошибка оказалась...

Добавлено (26 Сентября 2013, 14:00:36)
---------------------------------------------
Есть ли аналог set unit x для декорации(разрушаемого)?

Добавлено (26 Сентября 2013, 14:16:23)
---------------------------------------------
И триггерный поворот тоже надо (((


CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

ВолчачкаДата: Четверг, 26 Сентября 2013, 15:37:16 | Сообщение # 294
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Melodia)
Есть ли аналог set unit x для декорации(разрушаемого)?

Добавлено (26 Сентября 2013, 14:16:23)
---------------------------------------------
И триггерный поворот тоже надо (((

Такого нет.

Если был бы, то был бы SetWidgetX() или SetDestructableX()
А так существует только получение позиции декорации..
Угол поворота декорации нельзя узнать.


Сообщение отредактировал Волчачка - Четверг, 26 Сентября 2013, 15:49:06
 

WarMasterDiДата: Четверг, 26 Сентября 2013, 22:06:06 | Сообщение # 295
5 уровень
Группа: Проверенные
Сообщений: 147
Награды: 0
Репутация: 103
Блокировки:
<_<



Сообщение отредактировал WarMasterDi - Четверг, 26 Сентября 2013, 22:07:14
 

MelodiaДата: Среда, 13 Ноября 2013, 16:07:18 | Сообщение # 296
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5041
Блокировки:
Много ли сэкономишь, если юзать movelocation вместо создания и удаления точки?

CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

SirNikolasДата: Среда, 13 Ноября 2013, 17:08:56 | Сообщение # 297
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
[url]http://ru.wikipedia.org/wiki/Куча_(память)[/url]
Если каждый раз создавать точку, в куче каждый раз будет искаться свободное место, достаточное для размещения информации о точке (три координаты плюс внутренняя инфа интерпретатора) (кстати, есть шанс, что координат всего две, а Z вычисляется по данным рельефа). Если использовать одну и ту же точку, этих манипуляций не понадобится.
Много ли сэкономишь - зависит от реализации кучи в интерпретаторе JASS.




Сообщение отредактировал SirNikolas - Четверг, 14 Ноября 2013, 20:53:16
 

MelodiaДата: Среда, 13 Ноября 2013, 22:26:26 | Сообщение # 298
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5041
Блокировки:
//TESH.scrollpos=0
//TESH.alwaysfold=0

Частенько вижу эту бяку, что она значит?


CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

nvc123Дата: Среда, 13 Ноября 2013, 23:49:23 | Сообщение # 299
6 уровень
Группа: Проверенные
Сообщений: 229
Награды: 0
Репутация: 24
Блокировки:
Melodia, это пишет TESH

научите нуба писать на jass
пишу игры под андроид за еду
 

SirNikolasДата: Четверг, 14 Ноября 2013, 20:52:05 | Сообщение # 300
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
В JNGP есть галочки: "Сохранять позицию в документе" и "Сворачивать все при открытии". С помощью таких комментариев в начале он сохраняет эти значения для каждого триггера.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
Поиск:

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