konvan5, ну я так и понял, :D, хотяб Азы Программирования нужно знать не говоря уже о Системах Мемхаках Структур Делегатов Наследование Полиморфизм и прочее что новичкам не свойственно изучать
для этого и есть Статьи
konvan5, может и так, а может и не верно, я захожу в синг и вижу что у карты есть потенциал, захожу в локале и тыкаю на галочки, смотрю, Да разработчик такое предусмотрел, а потом думаю как бы мне подобное реализовать, и ответ дает о себе знать
human1, это неважно как писал код главное чтобы написать его правильно, если неправильно например выбрать всех игроков от 1 до 100 и проверить что-то там, это явно указывает на то что так нельзя делать
Игроков нужно выбирать исходя из Слотов предусмотренных игрой, например есть 2 клана
в первом клане 5 игроков и в 2 тоже 5 значит нужно проверить только 10 игроков а не 100
SoulRazor, тоже можно но не люблю Двойные Циклы, проще Запустить Один цикл и если нужно проверить например 8 игрока то я проверяю его, их не так много, всего 10 игроков, Зачем использовать меньше строк чем больше?
да и где-то я уже это видел..для Разнообразия написал так
konvan5, а проблема в том что если не проверять Всяческие Мысли игроков которые могут как-то повлиять на 11 игрока или на Зрителя то они сломают этот слот игрока
konvan5, ну предположим что Зритель это 11 игрок
Игроки смотрят на него как на Союзника
Враг смотрит на него тоже как на Союзника
Предположим что ктото открыл Зрителя в параметрах карты
но там никого нет (Открыто или Закрыто)
и тут он пишет команду -comp 11
что тогда?
Компьютер не может быть Зрителем для этого и есть
MAP_CONTROL_USER
а если это Игрок который там сидит то все нормально
поэтому стоит проверить и Дополнительные условия этого Слота
konvan5, на первый вопрос я ответил что я пытаюсь реализовать и уже приступил к нему
вот небольшой участок кода
надеюсь кодом хоть будет понятно
call FogMaskEnable(false)
call FogEnable(false)
set MapControl[0] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[1] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[2] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[3] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[4] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[5] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[6] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[7] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[8] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[9] = ConvertMapControl(0)//MAP_CONTROL_USER
set MapControl[11] = ConvertMapControl(1)//MAP_CONTROL_COMPUTER
set Loop[1] = 0
loop
exitwhen Loop[1] > GetPlayers()
set Players[Loop[1]] = Player(Loop[1])
//от 1 до 12 == от 0 до 11
if Players[Loop[1]] != Players[11] and Players[Loop[1]] != Players[10] then //исключение для 12 и 11 игрока
call SetPlayerState(Players[Loop[1]], PLAYER_STATE_RESOURCE_GOLD, 50)
endif
set Loop[1] = Loop[1] + 1
endloop
if GetPlayerSlotState(Players[10]) == ConvertPlayerSlotState(0) then//PLAYER_SLOT_STATE_EMPTY
if GetPlayerController(Players[10]) == ConvertMapControl(5) then//MAP_CONTROL_NONE
set MapControl[10] = ConvertMapControl(1)//MAP_CONTROL_COMPUTER
call SetPlayerController(Players[10], MapControl[10])
call SetPlayerName(Players[10],"Союзник")
call SetPlayerRacePreference(Players[10],RACE_PREF_NIGHTELF)
call SetPlayerTeam(Players[10],0)
endif//MAP_CONTROL_NONE
endif
if GetPlayerState(Players[10], ConvertPlayerState(11)) == 1 then//PLAYER_STATE_OBSERVER
if GetPlayerController(Players[10]) == ConvertMapControl(0) then
set MapControl[10] = ConvertMapControl(0)//MAP_CONTROL_USER
set Observer = Players[10]
set Players[13] = Player(13)//наш союзник!
call SetPlayerController(Observer, MapControl[10])
call SetPlayerName(Observer,"Зритель")
call SetPlayerState(Observer,ConvertPlayerState(7),0)//PLAYER_STATE_GIVES_BOUNTY
call SetPlayerColor(Players[13],ConvertPlayerColor(10))
call SetPlayerAlliance(Players[11],Observer,ConvertAllianceType(0),true)
//Враг не сможет атаковать Зрителя но игроков Да
//а Зритель будет смотреть на него как на врага как и игроки
call SetPlayerAlliance(Players[13],Players[11],ConvertAllianceType(0),false)
//союзник будет смотреть на 12 игрока как на Врага
//13 игрок Союзник и он не умеет нападать на Зрителя или на Игроков
call SetPlayerAlliance(Observer,Players[13],ConvertAllianceType(0),true)
//для Зрителя 13 игрок Союзник
set Loop[2] = 0
loop
exitwhen Loop[2] > GetPlayers()-2
call SetPlayerAlliance(Observer,Players[Loop[2]],ConvertAllianceType(0),true)
//Зритель смотрит на Игроков как на союзника
//и Игроки смотрят на Зрителя как на союзника
call SetPlayerAlliance(Players[Loop[2]],Observer,ConvertAllianceType(0),true)
//чтобы игроки не нападали на других
call SetPlayerAlliance(Players[Loop[2]],Players[0],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[1],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[2],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[3],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[4],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[5],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[6],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[7],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[8],ConvertAllianceType(0),true)
call SetPlayerAlliance(Players[Loop[2]],Players[9],ConvertAllianceType(0),true)
set Loop[2] = Loop[2] + 1
endloop
endif//MAP_CONTROL_USER
endif//PLAYER_STATE_OBSERVER
call SetPlayerStartLocation(Player(11),11)
call ForcePlayerStartLocation(Player(11),11)
call SetPlayerColor(Player(11),ConvertPlayerColor(11))
call SetPlayerRacePreference(Player(11),RACE_PREF_UNDEAD)
call SetPlayerRaceSelectable(Player(11),false) // нельзя менять Расу этого игрока
//но можно Играть за него через команду -Swap 1 12
call SetPlayerController(Player(11),MAP_CONTROL_COMPUTER)
konvan5, на мой взгляд получится Огромная функция по проверки Всего и Вся
а еще к 1 пункту проверить если ктото написал команду -Swap 3 11
это тоже надо проверить
а если они напишут -comp 11? там появится Компьютерный игрок
а если кто-то напишет -Swap 6 12? как тогда? Игрок будет играть за Врага? тоже непорядок
konvan5, Ответ то Поверхностный
я думаю Так
1.Задача в том что нужно
Проверить всех игроков,
Далее проверить кто союзник и кто противник,
кто может видеть Здания Герои союзника - Противника,
Кто может покупать предметы а кто не может,
Как наш Зритель будет смотреть на игроков или Компьютерного Игрока в слоте где Игроки
Как игроки будут смотреть на Зрителя если у него есть Здание или Герой,
Как Враг будет смотреть на Зрителя и остальных игроков,
Проверить кто находится в 11 слоте и сказать 12 игроку(Враг) нападать на 11 игрока
Если 11 игрок Зритель 12 игрок не Должен нападать на Зрителя а например на 16 Игрока(PLAYER_NEUTRAL_PASSIVE)
Если 11 игрок Не играет или слот Открыт или Закрыт это тоже надо проверить
Если Игрок поставил например Галочку Рандомные Расы в Параметрах оно тоже влияет на 11 игрока это тоже проверить
для этого есть
а если он поставил и Рандомные Герои? это тоже проверить
//if IsMapFlagSet(MAP_RANDOM_HERO) then
//call SetMapFlag(MAP_RANDOM_HERO, false)
//endif
это только 1 Пункт и возможно я что-то Упустил, кхм.... любой запутается с таким списком
Инструменты у меня под рукой а именно
IsMapFlagSet(MAP_RANDOM_HERO)
GetPlayerController(Player(10)) == ConvertMapControl(0)
IsMapFlagSet(MAP_RANDOM_RACES)
SetPlayerController(Players[10]
SetPlayerAlliance
SetPlayerColor
set Observer = Players[10]
set Players[15] = Player(15) //будет нашим союзником!
GetPlayerState(Players[10], ConvertPlayerState(11)) == 1 then //PLAYER_STATE_OBSERVER
GetPlayerController(Players[10]) == ConvertMapControl(0) then //MAP_CONTROL_USER
set Loop[1] = 0
loop
exitwhen Loop[1] > GetPlayers() //from 1 to 12 == from 0 to 11
set Players[Loop[1]] = Player(Loop[1])
а про подход тут не знаю, с одной стороны не Целесообразно впихать Все эти проверки в Одну Функцию
с другой стороны могу скажем так Разделить функции на Вспомогательные Функции которые будут принимать Аргументы и устанавливать Союзы например для 1 и 2 игрока
пример из этой функции вызвать функцию которая принимает Аргументы и за счет этих Аргументов она устанавливает Союзы
так как это функция может мне еще пригодится
установки и контроль через триггеры или jass).
про это тоже подумал, Никаких триггеров только функции и проверки на наличие чего Либо
этот подход более приятный так как не надо каждый раз плодить Одинаковые Строчки кода в Других функциях, Достаточно вызвать функцию которая отвечает за это
EugeAl, это небольшой Набросок того как хочу реализовать
Массив Loop[1] и Loop[2] призван установить Союзы, Зрение и Умение покупать предметы из лавки
вот Код
set Loop[1] = 0
loop
exitwhen Loop[1] > GetPlayers() //from 1 to 12 == from 0 to 11
set Players[Loop[1]] = Player(Loop[1])
set Loop[2] = 0
loop
exitwhen Loop[2] > GetPlayers()
//call SetPlayerAlliance(Players[Loop[1]-9],Players[Loop[2]-2],ConvertAllianceType(0),true)//Союзники
//call SetPlayerAlliance(Players[Loop[2]-2],Players[Loop[1]-9],ConvertAllianceType(5),true)//Зрение
//call SetPlayerAlliance(Players[Loop[1]-9],Players[Loop[2]-2],ConvertAllianceType(4),true)//Умеют покупать предметы
//call SetPlayerAlliance(Players[Loop[2]-2],Players[10],ConvertAllianceType(0),true)//союзник
//call SetPlayerAlliance(Players[10],Players[Loop[2]-2],ConvertAllianceType(0),true)//союзник
//call SetPlayerAlliance(Players[Loop[1]-9],Player(13),ConvertAllianceType(0),true)//смотрю на 13 игрока как на союзника
//call SetPlayerAlliance(Player(13),Players[Loop[1]-9],ConvertAllianceType(0),true)//13 игрок смотрит на нас
set Loop[2] = Loop[2] + 1
endloop
set Loop[1] = Loop[1] + 1
endloop
SharrKnen, если дать Апгрейд конкретному Юниту в РО то можно проверить это грейд для него если он у него есть или нет тоже через условие
там проверяется Уровень грейда конкретного игрока а если например игрок сидит в 7 слоте и у него есть герой который получил этот грейд и он не равен 0 то можно отследить Иначе ничего не делать
» WarCraft 3 / Проблема с тестом карты
для этого и есть Статьи
Ред. Centyrion
» WarCraft 3 / Проблема с тестом карты
» WarCraft 3 / Проблема с тестом карты
Игроков нужно выбирать исходя из Слотов предусмотренных игрой, например есть 2 клана
в первом клане 5 игроков и в 2 тоже 5 значит нужно проверить только 10 игроков а не 100
Ред. Centyrion
» WarCraft 3 / Зрители
да и где-то я уже это видел..для Разнообразия написал так
» Программирование / Flutter - странное поведение ReorderableList при itemExtent != n
Ред. Centyrion
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
Ред. Centyrion
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
Игроки смотрят на него как на Союзника
Враг смотрит на него тоже как на Союзника
Предположим что ктото открыл Зрителя в параметрах карты
но там никого нет (Открыто или Закрыто)
и тут он пишет команду -comp 11
что тогда?
Компьютер не может быть Зрителем для этого и есть
а если это Игрок который там сидит то все нормально
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
надеюсь кодом хоть будет понятно
» WarCraft 3 / Зрители
» WarCraft 3 / Зрители
это тоже надо проверить
а если они напишут -comp 11? там появится Компьютерный игрок
а если кто-то напишет -Swap 6 12? как тогда? Игрок будет играть за Врага? тоже непорядок
» WarCraft 3 / Зрители
я думаю Так
1.Задача в том что нужно
Проверить всех игроков,
Далее проверить кто союзник и кто противник,
кто может видеть Здания Герои союзника - Противника,
Кто может покупать предметы а кто не может,
Как наш Зритель будет смотреть на игроков или Компьютерного Игрока в слоте где Игроки
Как игроки будут смотреть на Зрителя если у него есть Здание или Герой,
Как Враг будет смотреть на Зрителя и остальных игроков,
Проверить кто находится в 11 слоте и сказать 12 игроку(Враг) нападать на 11 игрока
Если 11 игрок Зритель 12 игрок не Должен нападать на Зрителя а например на 16 Игрока(PLAYER_NEUTRAL_PASSIVE)
Если 11 игрок Не играет или слот Открыт или Закрыт это тоже надо проверить
Если Игрок поставил например Галочку Рандомные Расы в Параметрах оно тоже влияет на 11 игрока это тоже проверить
для этого есть
с другой стороны могу скажем так Разделить функции на Вспомогательные Функции которые будут принимать Аргументы и устанавливать Союзы например для 1 и 2 игрока
так как это функция может мне еще пригодится
про это тоже подумал, Никаких триггеров только функции и проверки на наличие чего Либо
этот подход более приятный так как не надо каждый раз плодить Одинаковые Строчки кода в Других функциях, Достаточно вызвать функцию которая отвечает за это
» WarCraft 3 / Зрители
Массив Loop[1] и Loop[2] призван установить Союзы, Зрение и Умение покупать предметы из лавки
» WarCraft 3 / Отслеживание добычи золота
Ред. Centyrion
» WarCraft 3 / Отслеживание добычи золота
там проверяется Уровень грейда конкретного игрока а если например игрок сидит в 7 слоте и у него есть герой который получил этот грейд и он не равен 0 то можно отследить Иначе ничего не делать
» WarCraft 3 / Отслеживание добычи золота
» WarCraft 3 / Привязка иконок к уровням способности
а Текст внутри способности можно менять, либо Мемхак юзать
» WarCraft 3 / Отслеживание добычи золота
Первое, Берем своего Работника и проверяем сколько Голды принес через
» Программирование / Flutter - странное поведение ReorderableList при itemExtent != n
Ред. Centyrion
» WarCraft 3 / Проблема с тестом карты