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

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

Ответ
 
spellwerk

offline
Опыт: 4,869
Активность:
Баги
Я создал мультиплеерную карту, и решил протестировать в онлайне. но через несколько секунд выкидывает всех игроков, кроме хоста. Ошибки при тесте редактор не нашел, да и в коде их нет, так как он довольно простой, все работает правильно.

Также при игре через локальную сеть (1 игрок) наблюдались неоправданные задержки, т.е. юнит иногда выполнял приказ только через некоторое время (до 0.5 сек).

В чем может быть причина этих явлений?


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

Код:
function X takes real M returns real
    set M = M + GetUnitAbilityLevelSwapped( 'A000', GetTriggerUnit() )
    return M
endfunction


складываю реальную с целой, не пользуясь функцией I2R?
вопрос бредовый, так как эти типы совместимые, но все же мне хотелось бы узнать, теоретически возможно ли такое
Старый 16.08.2009, 16:57
J
expert
offline
Опыт: 48,447
Активность:
function X takes real M returns real
    return M + GetUnitAbilityLevel(GetTriggerUnit(), 'A000')
endfunction
складываю реальную с целой, не пользуясь функцией I2R?
это не имеет значения, она всегда будет конвертироваться явно или не явно, лучше конешно без этой функции, скобок меньше...
Старый 16.08.2009, 17:05
spellwerk

offline
Опыт: 4,869
Активность:
просто я наблюдал такую ситуацию, когда на одном компьютере вар ругался на подобную функцию а на другом нет (версии вара одинаковые)
Старый 16.08.2009, 17:13
ScorpioT1000
Работаем
offline
Опыт: отключен
конкретный пример функции, на которую был такой эффект)
Старый 16.08.2009, 17:17
J
expert
offline
Опыт: 48,447
Активность:
function X takes integer i returns real
    return i + 456
endfunction
function X takes integer i returns real
    return i + GetInt()
endfunction
так, да, может быть ошибка
нужно чтобы один из слогаемых был рельным чтобы сума была реальная
function X takes integer i returns real
    return i + 456.0
endfunction
function X takes integer i returns real
    return i + GetReal()
endfunction
Старый 16.08.2009, 17:22
spellwerk

offline
Опыт: 4,869
Активность:
ScorpioT1000, не помню, какая функция вызвала эту ошибку, но помню что такое было.

но все таки мне бы хотелось узнать

Цитата:
Сообщение от Spy_
Я создал мультиплеерную карту, и решил протестировать в онлайне. но через несколько секунд выкидывает всех игроков, кроме хоста. Ошибки при тесте редактор не нашел, да и в коде их нет, так как он довольно простой, все работает правильно.

Также при игре через локальную сеть (1 игрок) наблюдались неоправданные задержки, т.е. юнит иногда выполнял приказ только через некоторое время (до 0.5 сек).

В чем может быть причина этих явлений?
Старый 16.08.2009, 17:49
ScorpioT1000
Работаем
offline
Опыт: отключен
ну тормоза в сети
ScorpioT1000 добавил:
Я создал мультиплеерную карту, и решил протестировать в онлайне. но через несколько секунд выкидывает всех игроков, кроме хоста. Ошибки при тесте редактор не нашел, да и в коде их нет, так как он довольно простой, все работает правильно.
хост читерит иди в поиск и читай про десинхронизацию, это уже более 9000 раз обсуждалось
Старый 16.08.2009, 18:04
ZeToX2007

offline
Опыт: 7,009
Активность:
Spy_, где ты юзал GetLocalPlayer() ?
Старый 17.08.2009, 17:14
Klop
Папа римский
offline
Опыт: 13,006
Активность:
у меня было тоже самое в коде где добавлялась иконка на мультибоард героя был GetLocalPlayer() заменил и стало нормально работать
Старый 17.08.2009, 21:11
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
ZeToX2007, Я уже прочитал пол форума по теме Десинка... и так и не понял где можно юзать, или можно ли вообще юзать GetLocalPlayer()
Старый 17.08.2009, 21:58
Daemonik

offline
Опыт: 5,084
Активность:
Юзать можно, но осторожно.
Например изменить значения мультибоарда для локального игрока.
Старый 18.08.2009, 01:09
ZeToX2007

offline
Опыт: 7,009
Активность:
MupaMaX, То есть например возьмем картинку, чтобы у каждого отображалось по разному надо:
local playeyer p = Player(0)
local string s = null
if GetLocalPlayer() == p then
set s = "путь"
endif
Вывод иконки по этой переменной, так точно не будет десинка...(в теории) хотя редко этим занимался. Давай лучше код, разберёмся. А то так гадать не тру...
Старый 18.08.2009, 10:51
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
call DisplayTextToPlayer(GetLocalPlayer(),0 ,0 , "|cff00ff00" + "Successful" + "|r" )
Будет ли отображаться оно всем, и не вызовет ли оно desync ?
Либо необходимо делать так ?
if (IsPlayerInForce(GetLocalPlayer(), bj_FORCE_ALL_PLAYERS)) then
     call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cff00ff00" + "Successful" + "|r" )
endif
Старый 18.08.2009, 17:59
Nekit1234007

offline
Опыт: 11,916
Активность:
    call DisplayTextToPlayer( GetLocalPlayer() , 0, 0, "|cff00ff00" + "Successful" + "|r" )
это нормально что подсветка не работает на одну строку? оО
Показывается каждому игроку и не вызывает десинк, заменяет это:
    local integer i=0
    loop
        exitwhen i>=12
        call DisplayTextToPlayer(Player(i),0,0,"|cff00ff00"+"Successful"+"|r")
        set i=i+1
    endloop

Отредактировано Nekit1234007, 18.08.2009 в 20:08.
Старый 18.08.2009, 20:01
SRes
1110101000
offline
Опыт: 9,997
Активность:
С каких это пор вывод текста игроку вызывает десинх ? О_о
Старый 18.08.2009, 20:08
Nekit1234007

offline
Опыт: 11,916
Активность:
SRes:
С каких это пор вывод текста игроку вызывает десинх ? О_о
Вывод текста нет, а вот использование не совсем прямыми руками локал плейера чревато...
Старый 18.08.2009, 20:13
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Nekit1234007, иногда лишнее выводить текст всем 12 игрокам... я стараюсь всегда использовать минимум кода, максимум практичности... но из седлущего примера вытекает не это, так как знания Jass-а слабые, сейчас лучше, но руки не дошли еще, времени мало...
Я извиняюсь, собственно вопрос следующий..
function Trig_Show_damage_actions takes nothing returns nothing
    local texttag Text_tag = null
    local unit Attacker = GetEventDamageSource()
    local unit Attacked = GetTriggerUnit()
    local integer Player_ID = GetPlayerId(GetOwningPlayer(Attacker))
    local integer Damage = R2I(GetEventDamage())
    local force ShowTo = CreateForce()
    
    call ForceClear(ShowTo)
    call ForceAddPlayer(ShowTo, GetOwningPlayer(Attacker))
    call ForceAddPlayer(ShowTo, GetOwningPlayer(Attacked))
    
    set Text_tag = CreateTextTag()    
    call SetTextTagTextBJ(Text_tag , I2S(Damage), 8.40)  
    call SetTextTagPosUnit(Text_tag, Attacked, 0)
    call SetTextTagColorBJ(Text_tag , 100, 0, 0, 0)
    call SetTextTagPermanent(Text_tag,false)
    call SetTextTagFadepoint(Text_tag, 0.00)
    call SetTextTagLifespan( Text_tag, 1.00 )
    call SetTextTagVelocityBJ( Text_tag, 96.00, 90 )
    if (IsPlayerInForce(GetLocalPlayer(), bj_FORCE_ALL_PLAYERS)) then
        call SetTextTagVisibility( Text_tag, FALSE)
    endif
    if (IsPlayerInForce(GetLocalPlayer(), ShowTo)) then
        call SetTextTagVisibility(Text_tag, TRUE)
    endif
//========[Optimization]=============
    set Text_tag = null
    set Attacker = null
    set Attacked = null
endfunction
Attacker и Attacked нужны для другой вызова своей функции... собственно вызывает ли вот такой код DeSync, проверить в принципе я могу, но хотелось бы в случае DeSync-а узнать решение проблемы...
И как работает ф-ция ClearSelectionForPlayer()
if (GetLocalPlayer() == whichPlayer) then
      call ClearSelection()
endif
И можно ли использовать её вытащив из BJ и заменив условие ?
нынче подстветка стала вообще ужасной )))
p.s. На форуме очень мало посвящено теме DeSync-а...
Старый 18.08.2009, 20:35
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
MupaMaX, можно вытащить.
Старый 18.08.2009, 20:45
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Hellfim, Я так понимаю в плане DeSync-а нужно все проходить методом тыка, и если будит желание и возможность написать какую-то статью по этому поводу, так как на форуме очень мало посвящено данной теме )
Старый 18.08.2009, 21:06
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
MupaMaX, не совсем. Предполагается, что в этом году (дада, я растянул сильно растянул срок) будет подробная информация по десинку. Но что могу сказать пока: нельзя создавать объекты для одного игрока не создав для другого. И, если создавать разные объекты для игроков, то это нужно делать 1 функцией, вот пример на основе спецэффекта:
local string path="units\\other\\Proudmoore\\Proudmoore.mdl"
if GetLocalPlayer()==Player(4) then
    set path="units\\critters\\Felboar\\Felboar.mdl"
endif
call AddSpecialEffect(path,0,0)
Старый 18.08.2009, 21:21
Ответ

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

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

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

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



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