Комментарии 39
Отличная теоретическая часть, но к счастью я не фанат ММОРПГ. Да и весь интерес от игры пропадает, если за вас играете не вы.
А по-моему, гораздо интереснее, если играет собственный бот. Игры были бы гораздо интереснее, если бы в них по-умолчанию были бы инструменты для программирования ботов, чтобы не делать механическую работу.
НЛО прилетело и опубликовало эту надпись здесь
Посмотрите в сторону X3… там встроенный «язык программирования» есть, при помощи которого вполне можно автоматизировать часть игры. Такую как торговля, разведка и пр… А самому прикинуться пиратом к примеру.
Но ведь Нотч и пишет игру про «что-то такое»… Забыл только название, шестнадцатеричное какое-то.
Есть мод под названием ComputerCraft, там можно на Lua запрограммировать «черепашку» на выполнение почти любых нужных вам задач.
Интересней когда играет человек. Пишите ботов в оффлайн играх, не портите игру другим людям и разработчикам проектов.
Ну, многие аддоны частично замещают игрока в особенно нудных местах. Например, аддоны для аукциона, которые анализируют текущие предложения и предлагают оптимальную цену для выставляемого товара (т.е. чтобы предложение было немножко выгоднее для потенциальных покупателей). Или TomTom, которому достаточно скормить набор координат, и флай-маунт сам облетит по точкам нужный маршрут.
Сам-то не облетит, ведь аддон не позволяет управлять персонажем.
Я им не пользуюсь, но, по-моему, там схема такая:
1) запихнул набор координат
2) кликнул кнопку — персонаж полетел
3) долетел, что-то сделал, кликнул снова — персонаж полетел дальше.
Выгода в том, что не надо долго втыкать в достаточно нудное занятие (если вы облазили Азерот вдоль и поперек, то лететь в очередной раз на другой конец континента малость скучно). Можно на маршрутках, конечно, но потом всё-равно придётся добираться до нужной точки.
1) запихнул набор координат
2) кликнул кнопку — персонаж полетел
3) долетел, что-то сделал, кликнул снова — персонаж полетел дальше.
Выгода в том, что не надо долго втыкать в достаточно нудное занятие (если вы облазили Азерот вдоль и поперек, то лететь в очередной раз на другой конец континента малость скучно). Можно на маршрутках, конечно, но потом всё-равно придётся добираться до нужной точки.
Наоборот. Писать ботов — самая интересная часть любой игры.
del
Если всё же своего бота писать лень, то есть окончательное решение проблемы: Progress Quest
Реквестирую такую статью, но для World of Tanks :)
+EVE-online
Не стоит, там и так «оленей» хватает.
фу-фу-фу! это ооочень испортит игру союзникам!
Конечно, еще будет замечательно, если отошел в туалет, в тебе всех крипов на линии в Dota 2 зафармило :)
Правда если совсем честно. например за лайфстиллера в доте действительно можно бота написать. закупка щитка, топорика, идти ближе к лесу. На 0.30 идти к легкому спауну крипов. На 0.55 отойти от спауна. на 1.00 продолжить фарм легкого спауна и т.д. Только вот ганги будет очень просты.
Поэтому мне кстати интересно, а разве в этих ботах в wow прописано что делать, если будет нападение? Или если монстры окажутся слишком сильны и убьют тебя?
Хотя если мне не изменяет память, в Dota 2 некоорые боты умеют сами фармить леса, можно в общемто как то налету подключать встроенного бота для фарма, однако опять таки там бывает можно минут 20 в лесу сидеть никто не придет, а бывает уже на первых секундах блочат весь лес и рыскают в поисках тебя.
Правда если совсем честно. например за лайфстиллера в доте действительно можно бота написать. закупка щитка, топорика, идти ближе к лесу. На 0.30 идти к легкому спауну крипов. На 0.55 отойти от спауна. на 1.00 продолжить фарм легкого спауна и т.д. Только вот ганги будет очень просты.
Поэтому мне кстати интересно, а разве в этих ботах в wow прописано что делать, если будет нападение? Или если монстры окажутся слишком сильны и убьют тебя?
Хотя если мне не изменяет память, в Dota 2 некоорые боты умеют сами фармить леса, можно в общемто как то налету подключать встроенного бота для фарма, однако опять таки там бывает можно минут 20 в лесу сидеть никто не придет, а бывает уже на первых секундах блочат весь лес и рыскают в поисках тебя.
В описанной в посте ситуации с lol-level подземельем мобы по определению не могут убить персонажа. В WoW, как правило, весь фарм начинается, когда вы достигли максимального уровня. В случае автора — недособрано «что-то» с уровней поменьше. В Стратхольме, если ты максимального уровня, хоть полчаса среди толпы мобов стой — не убьют :)
У меня был бот для того, чтобы держать ротацию для ферала, ДПС выдавал шикарный и можно было по сторонам смотреть =)
Вам бы марсоходы программировать, например, в свободное время.
Тэг неправильный, не Game Development, а Game Destroyed. Благодаря таким «несложным ботам», многие игры теряют свой смысл.
мимо
То, что вы рассказали про слеш-команды — замечательно, но это не к месту. Отладочная информация выводится через простой print в коде (для пущего комфорта отключаются лишние аддоны и конманда /reload биндится на нужную кнопку), либо через чат. Достаточно набрать "/run print(GetPlayerFacing(), GetUnitPitch(«player»))". Ну и конечно же — для отладки необходимо включить опцию в игре: Ошибки сценариев lua.
Не обязательно для каждой текстуры создавать отдельный фрейм. По сути сама текстура — уже фрейм. Ей также можно задать размер и положение. А так как текстура создается на уже существующем фрейме, то можно использовать говотый(на весь экран) UIParent. Про PLAYER_LOGIN тоже: Сбасибо, рассказали про собития, но тут не к месту.
Я считаю что OnUpdate — это слишком часто. Проверте, какую долю секунды повторяется ивент. Наберите в чате "/run local f=CreateFrame(«Frame»);f:SetScript(«OnUpdate»,function(this, elapsed) print(elapsed);this:SetScript(«OnUpdate»,nil) end);". Так как в Autoit наверняка не каждые 5 милисекунд будет проверять цвета, то и в аддоне это незачем. Я для таких целей ставлю счетчик, который обходится дешевле сложных расчетов.
Простой, без наворотов, без лишних ивентов и переменных.
Жду с нетерпением части про Autoit.
Не обязательно для каждой текстуры создавать отдельный фрейм. По сути сама текстура — уже фрейм. Ей также можно задать размер и положение. А так как текстура создается на уже существующем фрейме, то можно использовать говотый(на весь экран) UIParent. Про PLAYER_LOGIN тоже: Сбасибо, рассказали про собития, но тут не к месту.
Я считаю что OnUpdate — это слишком часто. Проверте, какую долю секунды повторяется ивент. Наберите в чате "/run local f=CreateFrame(«Frame»);f:SetScript(«OnUpdate»,function(this, elapsed) print(elapsed);this:SetScript(«OnUpdate»,nil) end);". Так как в Autoit наверняка не каждые 5 милисекунд будет проверять цвета, то и в аддоне это незачем. Я для таких целей ставлю счетчик, который обходится дешевле сложных расчетов.
На публику я бы показал именно такой код.
function myCreateTexture(x,y)
local texture = UIParent:CreateTexture()
texture:SetPoint("TOPLEFT", UIParent, "TOPLEFT", x*10, y*10)
texture:SetSize(10,10)
return texture
end
local textures = {
myCreateTexture(0,0),
myCreateTexture(1,0),
}
local timer = CreateFrame("Frame")
timer.elapsed = 0
timer.tick = 0.5
timer.func = function()
local x, y = GetPlayerMapPosition("player");
local x1, x2 = math.modf(x*255)
local y1, y2 = math.modf(y*255)
textures[1]:SetTexture(x1/255, x2, GetPlayerFacing()/7)
textures[2]:SetTexture(y1/255, y2, GetUnitPitch("player")/4+0.5)
end
timer:SetScript("OnUpdate", function(this, elapsed)
this.elapsed = this.elapsed + elapsed
if this.elapsed > this.tick then
this.elapsed = 0
this.func()
end
end)
Простой, без наворотов, без лишних ивентов и переменных.
Жду с нетерпением части про Autoit.
Большое спасибо за все Ваши замечания. Особо ценными я считаю пример использования elapsed для снижения нагрузки на систему обработчиком OnUpdate и пример упрощенного рисования.
Что касается обработки событий и слеш-команд. Безусловно, можно было обойтись и без них, но мне хотелось их описать, так как их использование неизбежно в любом чуть более сложном аддоне. Даже для наших нужд совсем не помешало бы обрабатывать события PLAYER_REGEN_DISABLED (начало боя), PLAYER_DEAD.
Вторую часть планирую выложить на этой рабочей неделе.
Что касается обработки событий и слеш-команд. Безусловно, можно было обойтись и без них, но мне хотелось их описать, так как их использование неизбежно в любом чуть более сложном аддоне. Даже для наших нужд совсем не помешало бы обрабатывать события PLAYER_REGEN_DISABLED (начало боя), PLAYER_DEAD.
Вторую часть планирую выложить на этой рабочей неделе.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создание несложного бота для WoW, программирование маршрутов