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

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

Закрытая тема
 
MyRtZ

offline
Опыт: 6,530
Активность:
Вызов функции по ид игрока в названии
Парни, есть триггер который запускается при убийстве героя, есть мультиборд где есть статистика по убийствам и инфа по кол-во золоту(офк отображается онли союзникам).
Есть функция которая обновляет статистику в мультиборде, для устранения if я разбил ее на 12 частей, т.е каждая функция для своего игрока (надеюсь эта бредовая идея хоть немного ускорит игру ибо если обновлять все сразу происходит небольшой лаг)
Неймы функций таковы:
function GoldKillU_0 takes nothing returns nothing
function GoldKillU_1 takes nothing returns nothing
function GoldKillU_2 takes nothing returns nothing
и так далее..
Цифра в названии функции является идэшкой игрока.
Надо сделать так что бы при убийстве героя запускалась такая функция только с id убившего игрока в названии.
• Можно сделать с помощью массив переменной триггерного типа, но не хочу ее тут включать + придется делать 12 триггеров для каждой функции
Вопрос: Можно ли запускать функцию с Id убившего игрока в названии не используя глобалку или все же придется всовывать takes в функцию подключая ифы?
Спасибо

Отредактировано MyRtZ, 03.12.2010 в 16:48.
Старый 03.12.2010, 16:41
Nekit1234007

offline
Опыт: 11,916
Активность:
Что значит придётся? В подобных ситуациях это единственно правильный вариант. У тебя для каждого игрока происходят совершенно разные действия?
Старый 03.12.2010, 16:48
MyRtZ

offline
Опыт: 6,530
Активность:
Nekit1234007:
Что значит придётся? В подобных ситуациях это единственно правильный вариант. У тебя для каждого игрока происходят совершенно разные действия?
Действия то одинаковы, просто не хочу подключать if'ы в функцию
Получается такая жирная функция(думаю ифами она больше нагружает компьютер)
function KillsGoldUpdate takes integer playerid returns nothing
    local integer i = 0
    local multiboarditem mbi = null
    if playerid < 6
        loop
            exitwhen i > 5
            set mbi = MultiboardGetItem(udg_db_board[i], udg_PlayerRow[playerid], 4)
            call MultiboardSetItemValue(mbi, I2S(GetPlayerState(Player(playerid), PLAYER_STATE_RESOURCE_GOLD)))
            call MultiboardReleaseItem(mbi)
            set i = i + 1
        endloop
    else
        set i = 6
        loop
            exitwhen i > 11
            set mbi = MultiboardGetItem(udg_db_board[i], udg_PlayerRow[playerid], 4)
            call MultiboardSetItemValue(mbi, I2S(GetPlayerState(Player(playerid), PLAYER_STATE_RESOURCE_GOLD)))
            call MultiboardReleaseItem(mbi)
            set i = i + 1
        endloop
    set i = 0
    loop
        exitwhen i > 11
        set mbi = MultiboardGetItem(udg_db_board[i], udg_PlayerRow[playerid], 2)
        call MultiboardSetItemValue(mbi, I2S(udg_LeaderboardKills[playerid]))
        call MultiboardReleaseItem(mbi)
    endloop
    call MultiboardSetTitleText(udg_db_board[playerid], "iT Event " + I2S(udg_LeaderboardKills[playerid]) + "/" + I2S(udg_LeaderboardDeaths[playerid]))
    set mbi = null
endfunction
Ну если уж это единственный выход не используя глобалку то придется :D смерится с этим
Старый 03.12.2010, 16:54
XOR

offline
Опыт: 38,159
Активность:
почему ты ифоф боишься? Они кусаются?
Старый 03.12.2010, 16:58
MyRtZ

offline
Опыт: 6,530
Активность:
X
почему ты ифоф боишься? Они кусаются?
у меня походу ифо фобия D:
по-моему они вгрызаются в компьютер затормаживая его действия, хоть и не значительно и временно

Закрывайте

Отредактировано MyRtZ, 03.12.2010 в 17:28.
Старый 03.12.2010, 17:00
JassMan
свободен
offline
Опыт: 4,193
Активность:
call ExecuteFunc("GoldKillU_"+I2S(GetPlayerId(твой игрок)))
Старый 03.12.2010, 17:36
MyRtZ

offline
Опыт: 6,530
Активность:
Ну вот и отлично
JassMan, cпасибо, поставил точку в деле
Nekit1234007
Что значит придётся? В подобных ситуациях это единственно правильный вариант.
.
Старый 03.12.2010, 17:43
Nekit1234007

offline
Опыт: 11,916
Активность:
Экзикат конечно удобно, но если вызываемая им функция не существует, может вылететь фатал. Точно не помню. /summon ScT1000 или ещё кто. Не секьюрно вобщем.
Closed.
Старый 03.12.2010, 17:48
XOR

offline
Опыт: 38,159
Активность:
вылетит на патче меньше 1.24е
Старый 03.12.2010, 18:21
ScorpioT1000
Работаем
offline
Опыт: отключен
не юзайте execute в таких целях - потом нельзя будет запротектить
ScorpioT1000 добавил:
и cjass криво будет работать иногда
ScorpioT1000 добавил:
вобщем, бинарный поиск
Старый 03.12.2010, 19:54
Закрытая тема

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

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

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

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



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