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

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

Ответ
 
immortal akaFoX

offline
Опыт: 274
Активность:
Мультибоард для каждого игрока
Чесн не знаю куда даже писать,в академию или сюда но всётаки решил написать сюда :)
Думаю что это ужо избитая тема, юзал поиск = не нашёл.

Нужно создать МБ на 10 чел и кождому разные.Читал статью Jon'a.Вроде всё понятно, уже всё сделал но тут проблема в компиляции.Ошибок тьма.
Цитата:
Нужно при инициализации использовать код:
local integer i = 1
call TriggerSleepAction( 0.01 )
loop
exitwhen i > 12 //12 - это количество всех игроков, но как уже говорилось выше (во 2-ом пункте), лучше здесь указать не 12, а переменную udg_player.
set udg_MB = CreateMultiboardBJ( ROWS, COLUMNS, "TITLE" )
call MultiboardDisplayBJ( false, udg_MB )
set i = i + 1
endloop
//верхний цикл, создавал 12 совершено разных MultiBoard’ов, и записал их в переменную массив MB по порядку
set i = 1
loop
exitwhen i > 12
if ConvertedPlayer(i) == GetLocalPlayer() then //ConvertedPlayer(i), это то о чем говорилось во 2-ом пункте, но если вы хотите делать также как и там, то тут вместо этого следует указать переменную udg_MBplayer[i].
call MultiboardDisplayBJ( true, udg_MB )
endif
set i = i + 1
endloop
[I]//этот массив показал для первого игрока MultiBoard который находится в переменой MB[1], для второго - MB[2], и т.д.

Не совсем понял момент где подчёркнуто. В customscript или куда это усё засовывать.

зы: советовать прочитать статб ещё раз не стоит. много раз прочитал ужо
ззы: буду оч. признателен :)
Старый 17.09.2007, 23:57
ScorpioT1000
Работаем
offline
Опыт: отключен
Создаешь триггер с событием Map initialization
Потом Правка/Конвертировать в текст
Затем удаляешь весь текст, что был до
"//==========================================================================="
И вставляешь туда твой.
Все..

ScorpioT1000 добавил:
да и еще замени после полоски:
call TriggerAddAction( gg_trg_<имя_триггера>, function <имя_стартовой_функции*> )

*На имя этой твоей всей функции. Вобще весь текст твой должен быть какойто функцией(ями)..
Старый 18.09.2007, 02:29
J
expert
offline
Опыт: 48,447
Активность:
Создай полностью пустой триггер под именем "InitMB", в верхнем меню нажми кнобку "Правка", там выбери "Конвертировать в текст".
У тебя весь тригер превратится в текст, удаляй все, и засунь туда этот код:
Код:
function InitMB_Actions takes nothing returns nothing
    local integer i = 1
    call TriggerSleepAction(0.01)
    loop
        exitwhen i > 12
        set udg_MB[i] = CreateMultiboardBJ(ROWS, COLUMNS, "TITLE") // место подчеркнутых слов укажи свои значения
        call MultiboardDisplay(udg_MB[i], Player(i-1) == GetLocalPlayer())
        set i = i + 1
    endloop
endfunction

function InitTrig_InitMB takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerAddAction(trig, function InitMB_Actions)
    call TriggerExecute(trig)
    set trig = null
endfunction

в результате у тебя в переменую udg_MB[] будут занесены мультиборду, в ячейках под определеными номерами находятся мульебрды для такихже по номеру играков (от 1 до 12)
Старый 18.09.2007, 04:21
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
TITLE

тож свое..
Старый 18.09.2007, 04:56
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
в результате у тебя в переменую udg_MB[] будут занесены мультиборду, в ячейках под определеными номерами находятся мульебрды для такихже по номеру играков (от 1 до 12)

Кстати можно было обойтись 1 глобалным хендлом, и создавать всего 1 мультиборд, который будет выглядеть у каждого игрока по разному, а не 12... ;D

Отредактировано exploder, 18.09.2007 в 10:36.
Старый 18.09.2007, 10:28
J
expert
offline
Опыт: 48,447
Активность:
exploder это я знаю.. мы с тоадкопом проверяли будут ли десинки с этом, десинков небыло... но для простаты для новичков лучше оперировать постояно с один мультибордом, чем с локальными данными
Старый 18.09.2007, 10:44
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
exploder это я знаю.. мы с тоадкопом проверяли будут ли десинки с этом, десинков небыло... но для простаты для новичков лучше оперировать постояно с один мультибордом, чем с локальными данными

если писать для каждого игрока свою инфу локально в 1 мультибоард, то десинки могут быть, например если ты сделаешь разное количество строк или столбцов, так как multiboarditem это хэндл :), на самом деле лучше каждому по мультибоарду и не загонятся :)
Старый 18.09.2007, 11:05
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
df Hunter, ты уверен что multiboarditem создаются динамически, а не статически? Я лично не проверял.
Старый 18.09.2007, 11:30
immortal akaFoX

offline
Опыт: 274
Активность:
Всем большое спасибо за сотруднечество :)

immortal akaFoX добавил:
Цитата:
Сообщение от exploder
Кстати можно было обойтись 1 глобалным хендлом, и создавать всего 1 мультиборд, который будет выглядеть у каждого игрока по разному, а не 12... ;D

Можно поподробнее. Мне это и нужно по идее. Ну например один МБ, но заголовки для каждого игрока этого МБ разные.
Старый 18.09.2007, 11:44
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от exploder
df Hunter, ты уверен что multiboarditem создаются динамически, а не статически? Я лично не проверял.

им выделяется хэндл, как пример десинка: ты создал для игрока 1 в мультибоарде 10 строк 10 стобцов для 2 игрока по 11, даже если это не кикнет, то после этого при создании например юнита хэндлы будут разными и будет несовпадение данных = десинк(то есть для серва будет то, как будет игрок сделал:
if GetLocalPlayer() == игрок then
call CreateUnit(params)
endif
хотя если ты создашь сразу мультибоард для 2 игроков с 11 столбцами и строками, но для 1ого будешь юзать только 10 мб и не кикнет, так как строки не кикают :)
Старый 18.09.2007, 12:43
immortal akaFoX

offline
Опыт: 274
Активность:
Чесн не понял.У меня такая задача. Играет 10 чел. Нужно сделать так чтобы у каждого игрока был одинаковый мультиборд но заголоаки у этого борда были разные для каждого игрока.
Вот например я прописываю в доте -di и у меня (только у меня а не у всех) в заголовке борда появляется крипстат.
Вот для этого мне нужно создавать 10 бордов или 1?
Старый 18.09.2007, 14:58
J
expert
offline
Опыт: 48,447
Активность:
df Hunter никаких дисинков не будет.. мы с тоадкопом тестили это... уже давно...

immortal akaFoX имей ввиду что вопросы надо задовать точно с самого начала, если тебе нужно постояно делать локальные изменения в мультиборде и ты не хочеш все писать на джаз делай как сказал я в 3 посте... если тебе надо изменить всеволиш заголовок... то это не так трудно... можно создать для этого один мультиборд, и локально менять в нем заголовок... ща обьесню как:

Jon добавил:
Вот так:
Код:
function ChangeTitleMBPlayer takes multiboard mb, player p, string NewTitle returns nothing
    if GetLocalPlayer() == p then
        call MultiboardSetTitleText (mb, NewTitle)
    endif
endfunction

запускай функцию через cs например так:

costum script: call ChangeTitleMBPlayer(bj_lastCreatedMultiboard, Player(0), "Я Криветк0")

в результате у первого игрока последний созданый мультиборд сменит название на "Я Криветк0"

Отредактировано Jon, 18.09.2007 в 16:06.
Старый 18.09.2007, 15:53
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Код:
function H2I takes handle h returns integer
    return h
    return 0
endfunction

function NaTebeDesync takes nothing returns nothing
    local integer i = 0
    local multiboard mb
    local unit u
    if GetLocalPlayer()==Player(0) then
        set i = 10
    endif
    if GetLocalPlayer()==Player(1) then
        set i = 11
    endif 
    call CreateMultiboardBJ(i, i, "Desync MB")
    call BJDebugMsg(I2S(H2I(MultiboardGetItem(mb, 10, 10))))
    if GetLocalPlayer()==Player(1) then
        call MultiboardSetItemValue(MultiboardGetItem(mb, 11, 11), "stroka")
        call MultiboardSetItemValue(MultiboardGetItem(mb, 11, 10), "ewe stroka")
        call MultiboardSetItemValue(MultiboardGetItem(mb, 10, 11), "stroka")
        call BJDebugMsg(I2S(H2I(MultiboardGetItem(mb, 11, 11))))
        call BJDebugMsg(I2S(H2I(MultiboardGetItem(mb, 10, 11))))
        call BJDebugMsg(I2S(H2I(MultiboardGetItem(mb, 11, 10))))
    endif
    set u = CreateUnit(Player(1), 'ewsp', 0, 0, 0)
    call BJDebugMsg(I2S(H2I(u)))
endfunction

с юнитом кик 100%, без юнита может быть не кикнет(но обьект создатся в игре после в любом случае
если создавать сразу мультибоард с 11 для всех игроков тогда не кикнет, я писал про динамичные локальные добавления/убирания row и column
Старый 18.09.2007, 16:08
J
expert
offline
Опыт: 48,447
Активность:
df Hunter а че если мультиборд итем создавать вне локального ифа?
Старый 18.09.2007, 16:19
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от Jon
df Hunter а че если мультиборд итем создавать вне локального ифа?

я писал
Цитата:
если создавать сразу мультибоард с 11 для всех игроков тогда не кикнет, я писал про динамичные локальные добавления/убирания row и column
Старый 18.09.2007, 16:21
J
expert
offline
Опыт: 48,447
Активность:
всмысле?

Jon добавил:
я говорю че если функцю MultiboardGetItem() использовать не локально.. а для всех, раз она создает новый хендл... а MultiboardSetItemValue() и т.п. уже локально...
Старый 18.09.2007, 16:29
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
я говорю че если функцю MultiboardGetItem() использовать не локально

посмотри, на сколько слотов создается мультибоард, впринципе разницы не будет, для одного игрока она вернет null, для другого итем
Старый 18.09.2007, 16:33
J
expert
offline
Опыт: 48,447
Активность:
ну вообщем сдесь достаточно сложно сказать чтото в теории... надо тестить в мульти и там и смотреть...

Jon добавил:
Цитата:
для одного игрока она вернет null, для другого итем

невернет она для него нул

Отредактировано Jon, 18.09.2007 в 17:12.
Старый 18.09.2007, 17:01
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
невернет она для него нул

значит несуществующий итем, что приведет к крашу тогда, проверять неохота, но в любом случае данные будут разные
Старый 18.09.2007, 17:14
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
приведет к крашу

ни приведет, дебаггер закроет триггер
Старый 18.09.2007, 19:19
Ответ

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

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

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

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



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