[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Свой AI??? (Пробуем сделать компьютерного бота на Lua)
Свой AI???
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Идея: Сделать компьютерного бота
Мы давно это хотели... и вот вчера я наткнулся на lua скрипт из Worms3D

Итак, что примерно надо сделать для того, чтобы сделать бота(на примере файа stdvs.lua):

Code


function Initialise()
     CurrentTurn = 0     --Номер хода компьютерного игрока
      ...
end

--Вызывается, когда ходит компьютерный игрок
function RunAILogic()

     -- Надо вызывать при каждом ходе компа
     SendMessage("AI.PerformDefaultAITurn");

     -- После этого мы можем изменять логику комп. игрока
     -- В данном случае при первых 4-х ходах комп будет ходить,
     -- как мы ему прикажем, а после этого сам будет решать
     if CurrentTurn == 0 then      --1-ый ход
         --SendStringMessage("CommentaryPanel.DebugText","Turn One AI Control")

         SendMessage("AI.ClearActions")                        -- Подготавливаем комп. игрока к тому, что мы им будем управять

         SetData("AI.DataString", "kWeaponGrenade")      -- Выбираем гранату
         SendMessage("AI.PerformSetWeaponAction")

         SetData("AI.DataString", "FireOne")                    -- Стреляем по цели(цель-это эмитер, созданный в редакторе со свойством Lib=Target)
         SendMessage("AI.PerformFireAtTargetAction")

     elseif CurrentTurn == 1 then
         --SendStringMessage("CommentaryPanel.DebugText","Turn Two AI Control")

         SendMessage("AI.ClearActions")

         SetData("AI.DataString", "FireOne")
         SendMessage("AI.PerformMoveAction")

         SetData("AI.DataString", "kWeaponGrenade")
         SendMessage("AI.PerformSetWeaponAction")

         SetData("AI.DataString", "FireTwo")
         SendMessage("AI.PerformFireAtTargetAction")

     elseif CurrentTurn == 2 then

         --SendStringMessage("CommentaryPanel.DebugText","Turn Three AI Control")

         SendMessage("AI.ClearActions")

         SetData("AI.DataString", "MoveToTwo")
         SendMessage("AI.PerformMoveAction")

         SetData("AI.DataString", "kWeaponBazooka")
         SendMessage("AI.PerformSetWeaponAction")

         SetData("AI.DataString", "FireTwo")
         SendMessage("AI.PerformFireAtTargetAction")

     elseif CurrentTurn == 3 then
         --SendStringMessage("CommentaryPanel.DebugText","Turn Four AI Control")

         SendMessage("AI.ClearActions")

         SetData("AI.DataString", "MoveToThree")
         SendMessage("AI.PerformMoveAction")

         SetData("AI.DataString", "kWeaponBazooka")
         SendMessage("AI.PerformSetWeaponAction")

         SetData("AI.DataString", "FireTwo")
         SendMessage("AI.PerformFireAtTargetAction")
          
     end     
      
     -- Теперь выполняем ту последоватеьность действий, которую мы хотим
     SendMessage("AI.ExecuteActions")
      
     -- Изменяем номер хода
     CurrentTurn = CurrentTurn + 1
end

Вот все сообщения, которые я нашёл в exe файле, их надо использовать в SendMessage:
AI.PerformMoveAction
AI.PerformSetWeaponAction
AI.PerformFireAtTargetAction
AI.PerformPathMoveAction --Вот это я не знаю как использовать.
AI.PerformDefaultAITurn
AI.ClearActions
AI.ExecuteActions

Использование всех сообщений, кроме AI.PerformPathMoveAction показано в примере

Кроме того в Local.xml есть контейнеры:
<UintResources href='AI.BulletCount'/>
<UintResources href='AIStrike.SeekTarget'/>
<StringResources href='AI.DataString'/>
<VectorResources href='AI.LaunchVelocity'/>
<VectorResources href='AIStrike.Direction'/>
<VectorResources href='AIStrike.TargetPoint'/>
<VectorResources href='AIStrike.UpVector'/>

в WeapTwk.xml:
<IntResources href='AI.WeaponsDontEndTurn'/>

их можно использовать к примеру так:
SetData("AI.BulletCount",10)
и
GetData("AI.BulletCount")
Вектора - это строки вида "(x = 12312.232424, y = 12312.232424, z = 12312.232424)"
но их скорее всего нельзя менять

В данном скрипте испоьзуются следующие выражения:
SetData("AI.DataString", "MoveToTwo")
SendMessage("AI.PerformMoveAction")

Заметьте, что на карте должен быть эмитер под названием MoveToTwo с Lib=Target

Вроде всё, что хотел сказать... вот еси кто-нибудь придумает, как бота заставить ходить не только между червями, тот будет реально крут


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
А вот пример той карты, на которой можно протестировать этот скрипт
Прикрепления: scriptai.xan (21.3 Kb)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
короче.. в силу того, что я не могу сам это всё протестировать мне нужна помощь..

надо узнать следующее:
1) всё ли работает
2) как комп себя ведёт, если написать подряд

SetData("AI.DataString", "kWeaponGrenade")
SendMessage("AI.PerformSetWeaponAction")

SetData("AI.DataString", "FireOne")
SendMessage("AI.PerformFireAtTargetAction")

SetData("AI.DataString", "FireTwo")
SendMessage("AI.PerformFireAtTargetAction")

3) Может ли он вязть любое оружие?

SetData("AI.DataString", "kUtilityNinjaRope")
SendMessage("AI.PerformSetWeaponAction")

вот список оружий:

<ContainerResources href='kMineFactoryData'/>
<ContainerResources href='kUtilityArmour'/>
<ContainerResources href='kUtilityBridgeKit'/>
<ContainerResources href='kUtilityBubbleTrouble'/>
<ContainerResources href='kUtilityChangeWorm'/>
<ContainerResources href='kUtilityGirder'/>
<ContainerResources href='kUtilityJetpack'/>
<ContainerResources href='kUtilityNinjaRope'/>
<ContainerResources href='kUtilityParachute'/>
<ContainerResources href='kUtilityRedbull'/>
<ContainerResources href='kUtilitySkipGo'/>
<ContainerResources href='kUtilitySurrender'/>
<ContainerResources href='kUtilityTeleport'/>
<ContainerResources href='kWeaponAirstrike'/>
<ContainerResources href='kWeaponAlienAbduction'/>
<ContainerResources href='kWeaponBananaBomb'/>
<ContainerResources href='kWeaponBananette'/>
<ContainerResources href='kWeaponBaseballBat'/>
<ContainerResources href='kWeaponBazooka'/>
<ContainerResources href='kWeaponClusterBomb'/>
<ContainerResources href='kWeaponClusterGrenade'/>
<ContainerResources href='kWeaponConcreteDonkey'/>
<ContainerResources href='kWeaponDynamite'/>
<ContainerResources href='kWeaponFactoryCluster'/>
<ContainerResources href='kWeaponFactoryHoming'/>
<ContainerResources href='kWeaponFactoryWeapon'/>
<ContainerResources href='kWeaponFatkins'/>
<ContainerResources href='kWeaponFatkinsFood'/>
<ContainerResources href='kWeaponFirePunch'/>
<ContainerResources href='kWeaponFlood'/>
<ContainerResources href='kWeaponGasCanister'/>
<ContainerResources href='kWeaponGrenade'/>
<ContainerResources href='kWeaponHolyHandGrenade'/>
<ContainerResources href='kWeaponHomingMissile'/>
<ContainerResources href='kWeaponLandmine'/>
<ContainerResources href='kWeaponLandmineBomblet'/>
<ContainerResources href='kWeaponLandmineCluster'/>
<ContainerResources href='kWeaponNoMoreNails'/>
<ContainerResources href='kWeaponOldWoman'/>
<ContainerResources href='kWeaponPoisonArrow'/>
<ContainerResources href='kWeaponProd'/>
<ContainerResources href='kWeaponScouser'/>
<ContainerResources href='kWeaponSentryGun'/>
<ContainerResources href='kWeaponSentryGunPayload'/>
<ContainerResources href='kWeaponSheep'/>
<ContainerResources href='kWeaponShotgun'/>
<ContainerResources href='kWeaponSniperRifle'/>
<ContainerResources href='kWeaponStarburst'/>
<ContainerResources href='kWeaponSuperAirstrike'/>
<ContainerResources href='kWeaponSuperSheep'/>


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
О_о не думал что мы так скоро уже поставим вопрос программирования ИИ... Слабо верю что такое возможно, однако хотелось бы увидет компьютерных червей, которые владеют про...



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
SW_Krash
Проверенные
Сообщений: 818
Реп: 28 / Инв: 7
Здесь идёт речь не о про... а обыкновеных заскриптованых действиях =)))

Всё что ни делается, делается в Китае(SW_Krash, 2009)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x)
OFFTOP SWEAT OFFTOP(фольклор)

 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
лично я, в игре особо не заметил у ИИ заскриптованых действий. Враги тупые и скучные.



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Kevin
Проверенные
Сообщений: 519
Реп: 15
Вот враги про)) это круто, и чтобы было как в Quake 3, ты ударил врага и он на тебя материться в чате))


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
тут под заскриптованными действиями имеется ввиду "иди к этому эмитеру", "возьми это оружие", "стрелни в этот эмитер"

на самом деле комп. бот сказано оч громко) данная тема больше пригодна например для того, чтобы сдеать "гонки"... к примеру карта, на которой 2 червя - комп. и чел. и им надо как можно быстрее добраться до какой-то точки... ну что-то навроде... короче глупо) я абсолютно не понимаю, почему team17 внедрив lua в worms дала так мало возможностей.. ведь в lua можно оч быстро прогать миссии!


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
к сожалению пока это не работает :'(

 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
да.. хз что делать

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Свой AI??? (Пробуем сделать компьютерного бота на Lua)
  • Страница 1 из 1
  • 1
Поиск: