В способностях. Набираешь опыт, увеличиваешь уровень, с каждым уровнем +1 способность. Переходишь в меню способностей (тык мышкой на свой ник в левом верхнем углу, там увидишь), листаешь вниз, применяешь опцию "Сменить ник".
Большого смысла нет писать размер массива после определения, он всё равно будет иметь фиксированный размер.
Смысл есть, если будешь использовать следующее:
Да им уже говорили об этом на HIVE ещё давно.
Хост так-то не очень нужен теперь, ведь хост может выйти, и хостом станет кто-то другой. Тем более, что теперь хоста можно передать командой !owner (прочитал на HIVE).
Для "чистых" melee карт нахождение хоста тоже не нужно.
Так что тот, у кого красный, тот и главный, если принципиально иметь главного на карте.
Так в чём ошибка? Раньше игрок в слоте 12 мог иметь красный цвет и быть Player(11), а теперь он получит красный цвет и станет Player(0). Цвет был не привязан к игроку.
Твоё предложение я прочитал как "Цвет ранее был привязан к слоту, а не к игроку". Перечитав сейчас, я понял, что имелось в виду "Ранее игрок был привязан к слоту, а теперь к цвету". А вообще не важно, мы поняли друг друга.
То есть классическое melee.
Я всё же думаю, что prog ближе к истине. Посмотрим, что скажут на HIVE. Да и Meddin может это легко проверить.
For arranged forces, changing player color will change player slot in game list
То есть лишь в меню подготовки, а значит вообще не вариант
Надо всё-таки это проверить, ибо и на 1.26а можно кикнуть игрока тупо закрыв его слот.
Цвет теперь привязан к игроку, а не слот.
Наоборот, раньше цвет был привязан к игроку, а теперь с изменением цвета меняется и слот, то есть цвет привязан к слоту, как это сделано в StarCraft 2. То есть, игрок с красным цветом в картах с arranged forces теперь всегда Player(0).
Знать бы, что значит arranged в данном контексте.
Раз уж так, то нужно использовать такой вариант триггера для кика по цвету. Настройки кланов должны быть фиксированы!
Код
globals
constant group EmptyGroup = CreateGroup()
constant player Admin = Player(0)
endglobals
function StringToPlayer takes string color returns player
set color = StringCase(color, false)
if color == "red" then
return Player(0)
elseif color == "blue" then
return Player(1)
elseif color == "teal" then
return Player(2)
elseif color == "purple" then
return Player(3)
elseif color == "yellow" then
return Player(4)
elseif color == "orange" then
return Player(5)
elseif color == "green" then
return Player(6)
elseif color == "pink" then
return Player(7)
elseif color == "gray" then
return Player(8)
elseif color == "light blue" then
return Player(9)
elseif color == "dark green" then
return Player(10)
elseif color == "brown" then
return Player(11)
elseif color == "maroon" then
return Player(12)
elseif color == "navy" then
return Player(13)
elseif color == "turquoise" then
return Player(14)
elseif color == "violet" then
return Player(15)
elseif color == "wheat" then
return Player(16)
elseif color == "peach" then
return Player(17)
elseif color == "mint" then
return Player(18)
elseif color == "lavender" then
return Player(19)
elseif color == "coal" then
return Player(20)
elseif color == "snow" then
return Player(21)
elseif color == "emerald" then
return Player(22)
elseif color == "peanut" then
return Player(23)
endif
return null
endfunction
function KickPlayer takes nothing returns boolean
call KillUnit(GetFilterUnit())
return false
endfunction
function MyTrig_Actions takes nothing returns nothing
local string color = GetEventPlayerChatString()
local player p = StringToPlayer(SubString(color, 3, StringLength(color)))
if p != null and p != Admin and GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING then
call GroupEnumUnitsOfPlayer(EmptyGroup, p, Filter(function KickPlayer))
endif
set p = null
endfunction
function InitMyTrig takes nothing returns nothing
set gg_trg_My = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_My, Admin, "gg", false )
call TriggerAddAction( gg_trg_My, function MyTrig_Actions )
endfunction
Meddin, нужно поменять политику в карте. Теперь не хост главный, а тот, у кого красный цвет. А можно мне в лс новый common.j?
Meddin, про краш варкрафта жестко
видать близзы уже ппц боятся что кто-то будет лазать в их ресурсах
Нет, лазил в хотс и ск2, ничего не ломалось. Либо близзы сделали хранение данных в последних патчах через одно место, либо каск для варкрафта не очень подходит (хранение данных в вк3 немного другое, и нужен новый каск), либо накосячил уже сам Meddin.
Когда у какого-либо из игроков красный цвет, а не у админа - не работает.
Я просто грешил на bj, сейчас их глянул, там всё хорошо, буду думать, что же не так.
bj_lastCreatedGroup и bj_forceRandomCurrentPick.
Да я просто открыл Blizzard.j в поисках глобалок, чтобы свои не создавать. Так-то можно и свои сделать, кто мешает.
bj_lastCreatedGroup вообще нужно в качестве прокси, туда ничего не добавляется, и там обязательно должна быть созданная группа! Если стоит null или удалённая группа, то ничего не произойдёт. Если использовать другие bj, связанные с группой или юнитами, то стоит сделать свою глобалку и использовать её как прокси.
globals
constant group EmptyGroup = CreateGroup()
endglobals
Вообще не работает или не работает только кик игрока с красным цветом?
Добавь функции ниже и замени StringToPlayer на вариант, что там. В настройках vJass должен быть включён Debug Mode.
Все функции net safe.
Функции
function DebugMsg takes string s returns nothing
debug call DisplayTimedTextToPlayer(LocalPlayer, 0., 0., 5., s)
endfunction
function DebugMsgIf takes boolean bool, string s returns nothing
static if DEBUG_MODE then
if bool then
call DebugMsg(s)
endif
endif
endfunction
function DebugMsgIfElse takes boolean bool, string s1, string s2 returns nothing
static if DEBUG_MODE then
if bool then
call DebugMsg(s1)
else
call DebugMsg(s2)
endif
endif
endfunction
function PlayerColorToString takes playercolor color returns string
if color == PLAYER_COLOR_RED then
return "red"
elseif color == PLAYER_COLOR_BLUE then
return "blue"
elseif color == PLAYER_COLOR_CYAN then
return "teal"
elseif color == PLAYER_COLOR_PURPLE then
return "purple"
elseif color == PLAYER_COLOR_YELLOW then
return "yellow"
elseif color == PLAYER_COLOR_ORANGE then
return "orange"
elseif color == PLAYER_COLOR_GREEN then
return "green"
elseif color == PLAYER_COLOR_PINK then
return "pink"
elseif color == PLAYER_COLOR_LIGHT_GRAY then
return "gray"
elseif color == PLAYER_COLOR_LIGHT_BLUE then
return "light blue"
elseif color == PLAYER_COLOR_AQUA then
return "dark green"
elseif color == PLAYER_COLOR_BROWN then
return "brown"
elseif color == PLAYER_COLOR_MAROON then
return "maroon"
elseif color == PLAYER_COLOR_NAVY then
return "navy"
elseif color == PLAYER_COLOR_TURQUOISE then
return "turquoise"
elseif color == PLAYER_COLOR_VIOLET then
return "violet"
elseif color == PLAYER_COLOR_WHEAT then
return "wheat"
elseif color == PLAYER_COLOR_PEACH then
return "peach"
elseif color == PLAYER_COLOR_MINT then
return "mint"
elseif color == PLAYER_COLOR_LAVENDER then
return "lavender"
elseif color == PLAYER_COLOR_COAL then
return "coal"
elseif color == PLAYER_COLOR_SNOW then
return "snow"
elseif color == PLAYER_COLOR_EMERALD then
return "emerald"
elseif color == PLAYER_COLOR_PEANUT then
return "peanut"
endif
return null
endfunction
function StringToPlayer takes string color returns player
local integer i
set bj_setPlayerTargetColor = StringToPlayerColor(color)
if bj_setPlayerTargetColor != null then
set i = 1
loop
set bj_forceRandomCurrentPick = Player(i)
call DebugMsg("Current player is " + GetPlayerName(bj_forceRandomCurrentPick))
if GetPlayerSlotState(bj_forceRandomCurrentPick) == PLAYER_SLOT_STATE_PLAYING then
call DebugMsg("Color of " + GetPlayerName(bj_forceRandomCurrentPick) + " is " + PlayerColorToString(GetPlayerColor(bj_forceRandomCurrentPick)))
if GetPlayerColor(bj_forceRandomCurrentPick) == bj_setPlayerTargetColor then
return bj_forceRandomCurrentPick
endif
endif
call DebugMsg("No match!")
set i = i + 1
exitwhen i == bj_MAX_PLAYERS
endloop
endif
call DebugMsg("Invalid string! String is " + color)
return null
endfunction
После этого протестируй и скажи результат.
А вообще, чего мы возимся, лол, у тебя же последняя версия. Вот патч, тут есть вшитый кик игрока по имени или слоту.
function StringToPlayerColor takes string color returns playercolor
set color = StringCase(color, false)
if color == "red" then
return PLAYER_COLOR_RED
elseif color == "blue" then
return PLAYER_COLOR_BLUE
elseif color == "teal" then
return PLAYER_COLOR_CYAN
elseif color == "purple" then
return PLAYER_COLOR_PURPLE
elseif color == "yellow" then
return PLAYER_COLOR_YELLOW
elseif color == "orange" then
return PLAYER_COLOR_ORANGE
elseif color == "green" then
return PLAYER_COLOR_GREEN
elseif color == "pink" then
return PLAYER_COLOR_PINK
elseif color == "gray" then
return PLAYER_COLOR_LIGHT_GRAY
elseif color == "light blue" then
return PLAYER_COLOR_LIGHT_BLUE
elseif color == "dark green" then
return PLAYER_COLOR_AQUA
elseif color == "brown" then
return PLAYER_COLOR_BROWN
elseif color == "maroon" then
return PLAYER_COLOR_MAROON
elseif color == "navy" then
return PLAYER_COLOR_NAVY
elseif color == "turquoise" then
return PLAYER_COLOR_TURQUOISE
elseif color == "violet" then
return PLAYER_COLOR_VIOLET
elseif color == "wheat" then
return PLAYER_COLOR_WHEAT
elseif color == "peach" then
return PLAYER_COLOR_PEACH
elseif color == "mint" then
return PLAYER_COLOR_MINT
elseif color == "lavender" then
return PLAYER_COLOR_LAVENDER
elseif color == "coal" then
return PLAYER_COLOR_COAL
elseif color == "snow" then
return PLAYER_COLOR_SNOW
elseif color == "emerald" then
return PLAYER_COLOR_EMERALD
elseif color == "peanut" then
return PLAYER_COLOR_PEANUT
endif
return null
endfunction
function StringToPlayer takes string color returns player
local integer i
set bj_setPlayerTargetColor = StringToPlayerColor(color)
if bj_setPlayerTargetColor != null then
set i = 1
loop
set bj_forceRandomCurrentPick = Player(i)
if GetPlayerSlotState(bj_forceRandomCurrentPick) == PLAYER_SLOT_STATE_PLAYING and /*
*/ GetPlayerColor(bj_forceRandomCurrentPick) == bj_setPlayerTargetColor then
return bj_forceRandomCurrentPick
endif
set i = i + 1
exitwhen i == bj_MAX_PLAYERS
endloop
endif
return null
endfunction
function KickPlayer takes nothing returns boolean
call KillUnit(GetFilterUnit())
return false
endfunction
function MyTrig_Actions takes nothing returns nothing
local string color = GetEventPlayerChatString()
local player p = StringToPlayer(SubString(color, 3, StringLength(color)))
if p != null then
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, p, Filter(function KickPlayer))
set p = null
endif
endfunction
function InitMyTrig takes nothing returns nothing
set gg_trg_My = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_My, Player(0), "gg", false )
call TriggerAddAction( gg_trg_My, function MyTrig_Actions )
endfunction
» WarCraft 3 / Как убрать иконки и эффекты
» Администрация XGM / Фильтры отображения ресурсов
Ред. PT153
» Администрация XGM / Как можно изменить логин.
» WarCraft 3 / Вылеты из-за модели в WE...
Ред. PT153
» WarCraft 3 / Просадка fps при записи локалок в глобалки
Смысл есть, если будешь использовать следующее:
Ред. PT153
» WarCraft 3 / Как убрать иконки и эффекты
Эффекты можно убрать в способности и её баффах.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Хост так-то не очень нужен теперь, ведь хост может выйти, и хостом станет кто-то другой. Тем более, что теперь хоста можно передать командой !owner (прочитал на HIVE).
Для "чистых" melee карт нахождение хоста тоже не нужно.
Так что тот, у кого красный, тот и главный, если принципиально иметь главного на карте.
» WarCraft 3 / Как сделать при убийстве героя получение опыта и денег.
» WarCraft 3 / Напомните название карты
Ред. PT153
» WarCraft 3 / Размер декорации ?
» WarCraft 3 / Почему нельзя ставить знак запятой в игровой интерфейс
DracoL1ch:
» WarCraft 3 / Как получить номер игрока по его цвету
А вообще не важно, мы поняли друг друга.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Спасибо.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Знать бы, что значит arranged в данном контексте.
Раз уж так, то нужно использовать такой вариант триггера для кика по цвету. Настройки кланов должны быть фиксированы!
А можно мне в лс новый common.j?
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Кину ещё раз.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Ууух, как я их замаскировал.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Ну и не забудь про вшитую возможность кика.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Все функции net safe.
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Вот так попроще будет.
Чутка подправил.
» WarCraft 3 / Как сделать выбор способности как в AbilityDraft из DoTA?
Но лучше раздуть код во время инициализации, чем раздуть Редактор Объектов.
» WarCraft 3 / Как получить номер игрока по его цвету
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Я также уверен, что код отсюда будет работать.
» WarCraft 3 / Как получить номер игрока по его цвету
Meddin:
Ред. PT153
» WarCraft 3 / Как получить номер игрока по его цвету
Ну и я не понял, что именно не работает.