Еще немного багов: иллюзии наносят 1 единицу урона и применение одержимости баньшами приводит в десинку. Баг с баньшами обнаружил Хэппи на стриме, можете в его группе прочитать об этом. Пока что известно точно, что баг проявляется, если воровать работников у хумов и использовать посох телепортации + свиток телепорта. Я пробовал с компом, с орками, было все нормально, с хумами словил краш после выхода из игры.
KingMaximax, я удивляюсь, что они когда это делали, туда не посмотрели. Совсем бараны что ли. Клепают патчи и в каждом патче баги новые каждый раз. Ладно еще поначалу они только разбирались с игрой, но уже больше года прошло, сколько уже можно было нормально во все вникнуть.
Обнаружил баг в 1.31. Из-за того, что близзы изменили ауру от барабанов, любой герой, у которого есть анимация Stand Channel при подбирании этого предмета начинает бесконечно воспроизводить эту анимацию.
Баг начинается после движения юнита.
В общем удалил папку с варкрафтом, скопировал с винта 1.30. Обновился. Вообще варкрафт стал запускаться и тупо черный экран. Редактор тоже не запускался. Ну ок, я даже не удивлен, все по классике, дадим додикам еще один шанс. Удалил еще раз, еще раз скопировал, обновился, теперь вроде карты стали запускаться. Живем до очередного найденного бага.
8gabriel8, нет. Причем из редактора карты запускаются, что самое интересное.
И да может поможет эта инфа, если пытаться создать карту на батлнет, пишет, что файл карты не найден. Возможно такая же ошибка при запуске обычной карты, но тогда почему она не отображается, не знаю.
8gabriel8, звездочка наоборот не в конце имени, а в начале же, по крайней мере так отображается, когда я хостю карты в батлнет. Проверить как именно? Я полагаю, что если я создам карту и напишу что-то в чате, то если звездочка считается частью имени, то в чате будет написано *Meddin: "какой то текст", иначе же, звездочка не является частью имени. Но это я смогу проверить только вечером с другом на батлнете.
PT153, да кикать можно только в лобби игры, во время самой игры нельзя кикнуть этим функционалом от близзов. Ну вы тут и понаписали) common.j сейчас пришлю.
В целом решение работает, кроме красного цвета, просто скажу, что админу нельзя менять цвет. Пока пойдет, а потом, возможно, попробую сделать кик по нику игрока. Спасибо всем большое!
Блин, вот лол. Только впустую работу проделал. Мда... Ну тогда ладно, спасибо большое всем, кто откликнулся! Всем ставил плюсы, кто отписывался здесь, завтра еще поставлю, а то уже ограничение не позволяет.
PT153, не работает только с игроком, который имеет красный цвет. Хорошо, я попробую добавить эти функции, но давай оставим это уже до завтра, а то очень поздно, уже пора и спать отправляться. Завтра я поищу, где настройки vJass находятся. Вообще говоря они же вроде в JPNG были, если я не ошибаюсь, а не в стандартном редакторе...
PT153, благодарю, сейчас разберусь.
Хех честно говоря не особо вкурил, с подстрокой вот понял, даже стало стыдно, что сам не подумал поискать в jass подобные вещи, но вот всякие bj_lastCreatedGroup и bj_forceRandomCurrentPick. Просто сказывается отсутствие опыта, как никак в первый раз плотно соприкоснулся с jass, раньше только с AI баловался немного. Но тем не менее потестил твой вариант, к сожалению с красным цветом так проблема и осталась. Когда у какого-либо из игроков красный цвет, а не у админа - не работает.
C bj_forceRandomCurrentPick понял. Ты просто юзаешь ее как переменную в которую запоминаешь игрока. Окей.
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 StringToPlayerId takes string color returns integer
local integer i
set bj_setPlayerTargetColor = StringToPlayerColor(color)
if bj_setPlayerTargetColor != null then
set i = 1
loop
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
if GetPlayerColor(Player(i)) == bj_setPlayerTargetColor then
return i
endif
endif
set i = i + 1
exitwhen i == bj_MAX_PLAYERS
endloop
endif
return -1
endfunction
function KickPlayer takes nothing returns nothing
call KillUnit( GetEnumUnit() )
endfunction
function CompareChatMessage takes nothing returns nothing
if GetEventPlayerChatString() == "gg red" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("red"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg blue" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("blue"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg teal" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("teal"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg purple" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("purple"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg yellow" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("yellow"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg orange" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("orange"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg green" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("green"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg pink" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("pink"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg gray" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("gray"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg light blue" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("light blue"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg dark green" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("dark green"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg brown" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("brown"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg maroon" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("maroon"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg navy" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("navy"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg turquoise" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("turquoise"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg violet" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("violet"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg wheat" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("wheat"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg peach" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("peach"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg mint" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("mint"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg lavender" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("lavender"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg coal" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("coal"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg snow" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("snow"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg emerald" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("emerald"))), function KickPlayer )
elseif GetEventPlayerChatString() == "gg peanut" then
call ForGroupBJ( GetUnitsOfPlayerAll(Player(StringToPlayerId("peanut"))), function KickPlayer )
endif
endfunction
function MyTrig_Actions takes nothing returns nothing
call CompareChatMessage()
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
PT153, да. Он там есть. Он у тебя и был же в твоей функции изначально.
Ну у админа id 0, так как он первый слот занимает всегда. Не работает именно тот момент, когда красный цвет у кого-нибудь из игроков, например пусть у нас Игрок 1 - админ, будет синего цвета, а Игрок 2 - обычный игрок себе поставит красный цвет. В этот случае вот не работает. 8gabriel8, хм, это не плохая идея кстати. Я подумаю над этим. Спасибо. Но тогда надо как то сделать "включатель" этого диалога, чтобы он появлялся, когда админ захочет, в принципе, можно просто по команде в чат сделать...
Короче осталась только единственная проблема, почему то не работает с красным цветом, если я ставлю админу любой другой, а одному из игроков красный. Вот тут чет я даже не знаю, в чем дело. Вроде все логично в коде теперь, все как надо. 8gabriel8, это да, я согласен. Уже обсуждали и этот момент, пришли к выводу, что логичнее копать в сторону кика по нику игрока, но мне это тоже не особо нравится, поскольку такие ники иногда бывают, тоже хрен еще напишешь в точности.
PT153, спасибо, но я немного иначе решил проблему с админом, я просто перебираю игроков начиная с 1, то есть 0 игрок всегда скипается таким образом. 8gabriel8, просто начал двигаться уже в таком направлении, сначала я сделал вообще не цвет а номер игрока, но мне сказали, что по номеру кикать геморно, попросили сделать кик через цвет и как то пошло поехало...
К тому же представь ситуацию, допустим в FFA остался игрок, который играет за орду, он по факту проиграл, его вынесли, но он успел где-нибудь в одном из захолустных местечек карты построить мейн на последние деньги. И у него есть блейд, которым он уходит в виндволк. Админу придется ждать, пока он выйдет из виндвока, чтобы прожать блейда и прописать кик. Легче уже через цвет, как по мне.
PT153, да уже пофиксил, просто добавил условие на проверку статуса слота игрока:
loop
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
if GetPlayerColor(Player(i)) == bj_setPlayerTargetColor then
return i
endif
endif
set i = i + 1
exitwhen i == bj_MAX_PLAYERS
endloop
Еще вот думаю, надо учесть случай, если админ захочет себе взять иной цвет, не красный. Тогда красный может быть у кого то из игроков. Во-первых поколдую, чтобы с красным цветом работало. Во-вторых надо теперь админа защитить от того, чтобы он сам себя из игры не вышиб. Допустим, у него синий цвет, он напишет "blue" и его же юнитов и здания удалит.
PT153, глянул переменные для новых цветов есть и они точно такие же, как названия цветов. Возможно кому то будет полезна инфа:
Player 13 - Maroon - PLAYER_COLOR_MAROON
Player 14 - Navy - PLAYER_COLOR_NAVY
Player 15 - Turquoise - PLAYER_COLOR_TURQUOISE
Player 16 - Violet - PLAYER_COLOR_VIOLET
Player 17 - Wheat - PLAYER_COLOR_WHEAT
Player 18 - Peach - PLAYER_COLOR_PEACH
Player 19 - Mint - PLAYER_COLOR_MINT
Player 20 - Lavender - PLAYER_COLOR_LAVENDER
Player 21 - Coal - PLAYER_COLOR_COAL
Player 22 - Snow - PLAYER_COLOR_SNOW
Player 23 - Emerald - PLAYER_COLOR_EMERALD
Player 24 - Peanut - PLAYER_COLOR_PEANUT.
Да так глянул, что варкрафт поломался к чертям собачим, просто при запуске игры/лаунчера/редактора выходило окно, что произошла ошибка при запуске и предлагало отправить репорт близзам. Это крайне странно, потому как я просто посмотрел common.j, ничего в нем не редактируя, и закрыл, скопировав нужные переменные. Проблему удалось решить только переустановкой вара, причем удалял и чистил реестр вручную, так как утилита для удаления от близзов тоже крашилась при запуске. Кстати заметил, что если не все слоты будут заняты, например если занять первые несколько слотов, потом один пропустить и заполнить следующие игроками, то для того игрока, который занимает первый слот после пропущенного почему то удаление всех юнитов не срабатывает. Например, если я при создании игры второй слот оставляю пустым, затем в третий слот сую компа, потом в четвертый компа и стартую, то когда в игре пропишу команду, чтобы убило все войска игроку, который в третьем слоте, то ничего не происходит. Сейчас пытаюсь понять в чем дело.
Понял, по-любому не срабатывает условие в цикле, так как "разрывный" между игроками слот пуст.
prog, честно говоря совсем не в курсе, даже не знаю где теперь новые архивы располагаются. Я смотрю в папке дата какие то файлы с расширениями idx. Это оно вообще?
Код приспособил к своему, немного поменял для своих нужд, осталась только одна проблема, я делаю это на патче 1.30 для 24 игроков,а так как близзы убрали mpq не могу залезть внутрь и поискать в common.j переменные для цветов, которые они добавили с новыми патчами. Кто то знает может эту инфу? Наверно драколич разве что...
Ред. Meddin
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / Официально стал доступен PTR 1.31
Баг начинается после движения юнита.
Ред. Meddin
» WarCraft 3 / Перестали запускаться все карты, кроме стандартных
» WarCraft 3 / Перестали запускаться все карты, кроме стандартных
И да может поможет эта инфа, если пытаться создать карту на батлнет, пишет, что файл карты не найден. Возможно такая же ошибка при запуске обычной карты, но тогда почему она не отображается, не знаю.
» Мир безумного / World of Warcraft: «Новый дом»
» Мир безумного / World of Warcraft: «Новый дом»
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
В целом решение работает, кроме красного цвета, просто скажу, что админу нельзя менять цвет. Пока пойдет, а потом, возможно, попробую сделать кик по нику игрока. Спасибо всем большое!
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
Хех честно говоря не особо вкурил, с подстрокой вот понял, даже стало стыдно, что сам не подумал поискать в jass подобные вещи, но вот всякие bj_lastCreatedGroup и bj_forceRandomCurrentPick. Просто сказывается отсутствие опыта, как никак в первый раз плотно соприкоснулся с jass, раньше только с AI баловался немного. Но тем не менее потестил твой вариант, к сожалению с красным цветом так проблема и осталась. Когда у какого-либо из игроков красный цвет, а не у админа - не работает.
C bj_forceRandomCurrentPick понял. Ты просто юзаешь ее как переменную в которую запоминаешь игрока. Окей.
Ред. Meddin
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
Ред. Meddin
» WarCraft 3 / Как получить номер игрока по его цвету
Ну у админа id 0, так как он первый слот занимает всегда. Не работает именно тот момент, когда красный цвет у кого-нибудь из игроков, например пусть у нас Игрок 1 - админ, будет синего цвета, а Игрок 2 - обычный игрок себе поставит красный цвет. В этот случае вот не работает.
8gabriel8, хм, это не плохая идея кстати. Я подумаю над этим. Спасибо. Но тогда надо как то сделать "включатель" этого диалога, чтобы он появлялся, когда админ захочет, в принципе, можно просто по команде в чат сделать...
» WarCraft 3 / Как получить номер игрока по его цвету
8gabriel8, это да, я согласен. Уже обсуждали и этот момент, пришли к выводу, что логичнее копать в сторону кика по нику игрока, но мне это тоже не особо нравится, поскольку такие ники иногда бывают, тоже хрен еще напишешь в точности.
» WarCraft 3 / Как получить номер игрока по его цвету
8gabriel8, просто начал двигаться уже в таком направлении, сначала я сделал вообще не цвет а номер игрока, но мне сказали, что по номеру кикать геморно, попросили сделать кик через цвет и как то пошло поехало...
К тому же представь ситуацию, допустим в FFA остался игрок, который играет за орду, он по факту проиграл, его вынесли, но он успел где-нибудь в одном из захолустных местечек карты построить мейн на последние деньги. И у него есть блейд, которым он уходит в виндволк. Админу придется ждать, пока он выйдет из виндвока, чтобы прожать блейда и прописать кик. Легче уже через цвет, как по мне.
» WarCraft 3 / Как получить номер игрока по его цвету
Ред. Meddin
» WarCraft 3 / Как получить номер игрока по его цвету
Player 13 - Maroon - PLAYER_COLOR_MAROON
Player 14 - Navy - PLAYER_COLOR_NAVY
Player 15 - Turquoise - PLAYER_COLOR_TURQUOISE
Player 16 - Violet - PLAYER_COLOR_VIOLET
Player 17 - Wheat - PLAYER_COLOR_WHEAT
Player 18 - Peach - PLAYER_COLOR_PEACH
Player 19 - Mint - PLAYER_COLOR_MINT
Player 20 - Lavender - PLAYER_COLOR_LAVENDER
Player 21 - Coal - PLAYER_COLOR_COAL
Player 22 - Snow - PLAYER_COLOR_SNOW
Player 23 - Emerald - PLAYER_COLOR_EMERALD
Player 24 - Peanut - PLAYER_COLOR_PEANUT.
Да так глянул, что варкрафт поломался к чертям собачим, просто при запуске игры/лаунчера/редактора выходило окно, что произошла ошибка при запуске и предлагало отправить репорт близзам. Это крайне странно, потому как я просто посмотрел common.j, ничего в нем не редактируя, и закрыл, скопировав нужные переменные. Проблему удалось решить только переустановкой вара, причем удалял и чистил реестр вручную, так как утилита для удаления от близзов тоже крашилась при запуске. Кстати заметил, что если не все слоты будут заняты, например если занять первые несколько слотов, потом один пропустить и заполнить следующие игроками, то для того игрока, который занимает первый слот после пропущенного почему то удаление всех юнитов не срабатывает. Например, если я при создании игры второй слот оставляю пустым, затем в третий слот сую компа, потом в четвертый компа и стартую, то когда в игре пропишу команду, чтобы убило все войска игроку, который в третьем слоте, то ничего не происходит. Сейчас пытаюсь понять в чем дело.
Понял, по-любому не срабатывает условие в цикле, так как "разрывный" между игроками слот пуст.
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету
» WarCraft 3 / Как получить номер игрока по его цвету