Arena Multiboard (Jass 2 / cJass) - Форум


Правила форума ·

  • Страница 1 из 1
  • 1
Arena Multiboard (Jass 2 / cJass)

Ty3uK

#1
Представляю Вашему вниманию простую наработку - мультидоска для карт типа "Арена". Набор функций не огромен, ставка сделана на реализацию.


Немного конкретики:

  • Визуальное разделение доски на 2 части
  • Счетчик смертей / убийств через хэштаблицу
  • Фиксирование выхода игрока из игры
  • Возможность легкой установки иконки героя в таблицу
  • Два варианта наработки - cJass и Jass 2



Установка иконки в строку игрока:
Code
call MultiboardSetPlayerHeroIcon(GetTriggerPlayer(), "Path\\to\\hero\\icon.blp")



Ссылки:
Jass 2 Code || Jass 2 Multiboard

cJass Code || cJass Multiboard

Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

SirNikolas

#4
Ty3uK, обычно выкладывают код системы, а не весь код карты.
Бегло пробежался по коду. Сделано, вроде, аккуратно, никаких грубых ошибок нет (что и следовало ожидать). Правда, я бы определение цвета сделал через свое любимое дерево:
Code
string GetPlayerNameColored(player p) {
     int id = GetHandleId(GetPlayerColor(p));
     if id < 6 {
         if id < 3 {
             if id == 0 {
                 return "|cFFFF0303" + GetPlayerName(p) + "|r";
             } elseif id == 1 {
                 return "|cFF0042FF" + GetPlayerName(p) + "|r";
             } else {
                 return "|cFF1CE6B9" + GetPlayerName(p) + "|r";
             }
         } elseif id == 3 {
             return "|cFF540081" + GetPlayerName(p) + "|r";
         } elseif id == 4 {
             return "|cFFFFFC00" + GetPlayerName(p) + "|r";
         } else {
             return "|cFFFE8A0E" + GetPlayerName(p) + "|r";
         }
     } elseif id < 9 {
         if id == 6 {
             return "|cFF20C000" + GetPlayerName(p) + "|r";
         } elseif id == 7 {
             return "|cffff80c0" + GetPlayerName(p) + "|r";
         } else {
             return "|cFF959697" + GetPlayerName(p) + "|r";
         }
     } elseif id < 11 {
         if id == 9 {
             return "|cFF7FBFF1" + GetPlayerName(p) + "|r";
         } else {
             return "|cFF106246" + GetPlayerName(p) + "|r";
         }
     } elseif id == 11 {
         return "|cFF4E2A04" + GetPlayerName(p) + "|r";
     } else {
         return "the |cFF333429" + GetPlayerName(p) + "|r";
     }
}
"I will make this the first approved cJass-only resource here on the Hive" - Bribe about ALL.

Ty3uK

#5
Спасибо, изучу на досуге. С-синтаксис еще нормально не знаком, прям удивительно, что ошибок не сделал. Единственное- Драгон сказал в аське, что на cjass для обнуления локалок достаточно одной лишь функции happy
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

[DUОS]

#6
Quote (Spirit_of_Dragon)
коды cJass и Jass2 идентичны в текстовиках

Лолшто? D=
Ty3uK,
Наработку и улучшить можно.

1. Ровно 1к строк на Jass2 = эпично...
2. MultiboardSetItemValueAndIcon пусть эволюционирует ещё дальше в MultiboardSetItemValueAndIconForPlayer :3
3. При задании киллов и смертей можно и без udg_Team1 и udg_Team2 обойтись. Подумай ещё чуток, как.
4. Все умные кодеры пихают события для игроков (циклические) в триггер инициализации, а не распихивают персонально по разным триггерам. Учти.
5. function MBColors - вообще никуда не годится. Лишние глобалсы только. Используй Вексорианскую GetPlayerNameColored:
Code
function GetPlayerNameColored takes player p returns string
     local playercolor col = GetPlayerColor(p)
     local string r = GetPlayerName(p)
     if GetPlayerId(p) == 12 then
         set r="|CFF333429"+r+"|r"
     elseif GetPlayerId(p) == 13 then
         set r="|cffc1c1ff"+r+"|r"
     elseif GetPlayerId(p) == 14 then
         set r="|CFF333429"+r+"|r"
     elseif GetPlayerId(p) == 15 then
         set r="|CFF333429"+r+"|r"
     elseif col == PLAYER_COLOR_RED then
         set r="|CFFFF0303"+r+"|r"
     elseif col == PLAYER_COLOR_BLUE then
         set r="|CFF0042FF"+r+"|r"
     elseif col == PLAYER_COLOR_CYAN then
         set r="|CFF1CE6B9"+r+"|r"
     elseif col == PLAYER_COLOR_PURPLE then
         set r="|CFF540081"+r+"|r"
     elseif col == PLAYER_COLOR_YELLOW then
         set r="|CFFFFFC00"+r+"|r"
     elseif col == PLAYER_COLOR_ORANGE then
         set r="|CFFFE8A0E"+r+"|r"
     elseif col == PLAYER_COLOR_GREEN then
         set r="|CFF20C000"+r+"|r"
     elseif col == PLAYER_COLOR_PINK then
         set r="|cffff80c0"+r+"|r"
     elseif col == PLAYER_COLOR_LIGHT_GRAY then
         set r="|CFF959697"+r+"|r"
     elseif col == PLAYER_COLOR_LIGHT_BLUE then
         set r="|CFF7FBFF1"+r+"|r"
     elseif col == PLAYER_COLOR_AQUA then
         set r="|cFF106246"+r+"|r"
     elseif col == PLAYER_COLOR_BROWN then
         set r="|cFF4E2A04"+r+"|r"
     else
         set r=""
     endif
    set col=null
    return r
endfunction

6. udg_Team1_Count и udg_Team2_Count... Наплодил же ты глобалок, товарищ. Можно обойтись и без них, скажу я тебе - правда, это и будет немного сверление зубов дракону, но... что-то smile
7. Добавь классную фишку - сортировку игроков по фрагам. Методы сортировки массивов тебе уже известны.

Ну, у меня всё.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл

SirNikolas

#7
Quote (Simplar)
Используй Вексорианскую GetPlayerNameColored:
А чем плоха проверка по ID цвета игрока?
"I will make this the first approved cJass-only resource here on the Hive" - Bribe about ALL.

[DUОS]

#8
Quote (SirNikolas)
А чем плоха проверка по ID цвета игрока?

У Векса цвета точные просто smile А так ничем.
Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл
  • Страница 1 из 1
  • 1
Поиск: