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

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

Закрытая тема
 
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Проблема с игроками в доске
Господа кодеры, помогите мне с такой проблемкой. Когда я запускаю карту и появляется мультиборд, он отображает везде одного и того же игрока. Как правильно переписать функцию заполнения? Она дана ниже.
function MultiboardFill takes nothing returns nothing
    local integer i = 1
    local integer PlayerCount = CountPlayersInForceBJ(GetPlayersMatching(Condition(function Condit)))
    set udg_Multiboard_Spots[GetConvertedPlayerId(GetEnumPlayer())] = i
    loop
        exitwhen i > PlayerCount
        call MultiboardSetItemIcon(MultiboardGetItem(udg_Multiboard,i,0),"ReplaceableTextures\\CommandButton​s\\BTNHeroFarseer.blp")
        call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,i,1),((udg_Player_Colors[GetConvertedPlayerI​d(GetEnumPlayer())] + GetPlayerName(GetEnumPlayer())) + "|r"))
        call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,i,2),"0")
        call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,i,3),"0")
        set i = i + 1
    endloop
endfunction
Старый 28.10.2009, 20:58
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
function Condit
это что?
Старый 28.10.2009, 21:10
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
function Condit takes nothing returns boolean
    return GetBooleanAnd(GetPlayerSlotState(GetFilterPlayer()) == ConvertPlayerSlotState(1),GetPlayerController(GetFilterPlayer()) == ConvertMapControl(0))
endfunction 
Старый 28.10.2009, 21:15
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
function MultiboardFill takes nothing returns nothing
    local integer i = 0
    local integer counter = 0
    local player p = Player(0)

    loop
        if (GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p) == MAP_CONTROL_USER) then
            //set udg_Multiboard_Spots[i] = counter  // Это что вообще такое?
            call MultiboardSetItemIcon( MultiboardGetItem(udg_Multiboard,i,0), "ReplaceableTextures\\CommandButton​s\\BTNHeroFarseer.blp" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,1), udg_Player_Colors[i] + GetPlayerName(p) + "|r" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,2), "0" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,3), "0" )
            set counter = counter + 1
        endif
        exitwhen i >= 11
        set i = i + 1
        set p = Player(i)
    endloop
endfunction
Старый 28.10.2009, 21:40
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Van_Damm,
Сэнк, всё пашет. А нет
Что опять такое? Оно только одного игрока заполняет...
Старый 28.10.2009, 22:19
Sebra

offline
Опыт: 5,603
Активность:
Один проверял?
Старый 28.10.2009, 23:06
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Sebra,
Нет, в онлайне с другом.
Старый 28.10.2009, 23:34
Sebra

offline
Опыт: 5,603
Активность:
tgonta, покажи свой код, который проверял.
Или карту.
Старый 29.10.2009, 11:56
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
function Condit takes nothing returns boolean
    return GetBooleanAnd(GetPlayerSlotState(GetFilterPlayer()) == ConvertPlayerSlotState(1),GetPlayerController(GetFilterPlayer()) == ConvertMapControl(0))
endfunction 

function MultiboardFill takes nothing returns nothing
    local integer i = 1
    local integer counter = 1
    local player p = Player(0)

    loop
        if (GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(p) == MAP_CONTROL_USER) then
            //set udg_Multiboard_Spots[i] = counter  // Ýòî ÷òî âîîáùå òàêîå?
            call MultiboardSetItemIcon( MultiboardGetItem(udg_Multiboard,i,0), "ReplaceableTextures\\CommandButtons\\BTNHeroFarseer.blp" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,1), udg_Player_Colors[i] + GetPlayerName(p) + "|r" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,2), "0" )
            call MultiboardSetItemValue( MultiboardGetItem(udg_Multiboard,i,3), "0" )
            set counter = counter + 1
        endif
        exitwhen i >= 11
        set i = i + 1
        set p = Player(i)
    endloop
endfunction

function MultiboardCreate takes nothing returns nothing
    local integer PlayerCount
    local integer i = 0
    set PlayerCount = CountPlayersInForceBJ(GetPlayersMatching(Condition(function Condit)))
    //Ñîçäà¸ì ìóëüòèáîàð​ä.
    set udg_Multiboard = CreateMultiboard()
    call MultiboardSetRowCount(udg_Multiboard,PlayerCount + 1)
    call MultiboardSetColumnCount(udg_Multiboard,4)
    call MultiboardSetTitleText(udg_Multiboard,"Oasis and Desert v 1.0")
    //Çàäà¸ì òåêñò âåðõíèõ êîëîíîê.
    call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,0,1),"Èãð&am​p;#238;ê")
    call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,0,2),"Óáè&am​p;#233;ñòâ")
    call MultiboardSetItemValue(MultiboardGetItem(udg_Multiboard,0,3),"Ñìå&am​p;#240;òåé")
    //Çàäà¸ì ñòèëè.
    loop
        exitwhen i > PlayerCount + 1
        call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,0,0),false,false)
        call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,i,0),false,true)
        call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,i,1),true,false)
        call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,i,2),true,false)
        call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,i,3),true,false)
        //Øèðèíà êàæäîé êîëîíêè.
        call MultiboardSetItemWidth(MultiboardGetItem(udg_Multiboard,i,0),.02)
        call MultiboardSetItemWidth(MultiboardGetItem(udg_Multiboard,i,1),.1)
        call MultiboardSetItemWidth(MultiboardGetItem(udg_Multiboard,i,2),.06)
        call MultiboardSetItemWidth(MultiboardGetItem(udg_Multiboard,i,3),.05)
        set i = i + 1
    endloop
    call ForForce(GetPlayersMatching(Condition(function Condit)),function MultiboardFill)
    call MultiboardDisplay(udg_Multiboard,true)
endfunction

//===========================================================================
function InitTrig_KillsMultiboardCreate takes nothing returns nothing
    local trigger tr = CreateTrigger()
    call TriggerRegisterTimerEventSingle(tr,.1)
    call TriggerAddAction(tr,function MultiboardCreate)
    set tr = null
endfunction
Старый 29.10.2009, 19:28
Sebra

offline
Опыт: 5,603
Активность:
Я не понял, зачем ты 10 раз в секунду создаёшь мультиборт.
И почему константы стандартные не используешь?
Собственно это всё, что я смог разглядеть сквозь излишние вызовы функций до того, как утонул в море утечек.
Старый 29.10.2009, 20:28
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Sebra:
Я не понял, зачем ты 10 раз в секунду создаёшь мультиборт.
И почему константы стандартные не используешь?
Собственно это всё, что я смог разглядеть сквозь излишние вызовы функций до того, как утонул в море утечек.
Sebra,
Оо, не 10 раз в секунду, а по прошествии 0.1 секунды!
Старый 29.10.2009, 21:23
Sebra

offline
Опыт: 5,603
Активность:
Ну ладно, это я чуть попутал.
Но почему бы сразу функцию не вызвать.
Результаты вызова GetPlayersMatching,MultiboardGetItem надо сохранять в переменные, затем удалять и освобождать.
call MultiboardSetItemStyle(MultiboardGetItem(udg_Multiboard,0,0),false,false) вынеси из цикла.
MultiboardFill срабатывает тоже один раз.
Ты и твой друг пробовали игроками с каким и номерами?
Кто был Player(1)?
Старый 30.10.2009, 11:25
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Sebra,
Я - 0 и я норм
Он - 1 и хз что
Старый 30.10.2009, 21:18
Sebra

offline
Опыт: 5,603
Активность:
tgonta:
function MultiboardFill takes nothing returns nothing
local integer i = 1
local player p = Player(0)
...
set i = i + 1
set p = Player(i)
...
endfunction
Ничего необычного не замечаешь?
Будут вопросы - стучи в асю.
Старый 02.11.2009, 22:16
Закрытая тема

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

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

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

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



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