gametechmods
Robot Arena => General Support => Topic started by: 123savethewhales on November 04, 2012, 11:25:12 AM
-
I was trying to AI this bot
(https://gametechmods.com/uploads/images/61850screenshot_22.jpg)
I want to combine the OmniInverted.py with the Popup.py. But when I tried doing it it won't fire on smart zone, then it rams the wall and crash the game on quit. I am not sure what I am doing wrong. Also, is it possible to alter the starting facing without changing the nose (so it faces forward immediately after the flip)?
from __future__ import generators
import plus
import AI
from AI import vector3
import Arenas
import Gooey
import math
import Tactics
class PopupInverted(AI.SuperAI):
"Popup inverted strategy"
name = "PopupInverted"
# bot has to be invertible, not mandatory to mention it in your binding, it is force.
# much like Popup except that the bot use a button control called 'Inverter' to invert itself if it is not.
def __init__(self, **args):
AI.SuperAI.__init__(self, **args)
# force bot to be invertible :
self.invertible = True
self.zone1 = "weapon"
self.triggers1 = ["Fire"]
self.triggers2 = ["Srimech"]
self.reloadTime = 0
self.reloadDelay = 3
self.InverterTime = 3
if 'zone' in args: self.zone = args['zone']
if 'triggers' in args: self.triggers1 = args['triggers']
if 'triggers' in args: self.triggers2 = args['triggers']
self.tactics.append(Tactics.Engage(self))
def Activate(self, active):
if active:
if AI.SuperAI.debugging:
self.debug = Gooey.Plain("watch", 0, 75, 100, 75)
tbox = self.debug.addText("line0", 0, 0, 100, 15)
tbox.setText("Throttle")
tbox = self.debug.addText("line1", 0, 15, 100, 15)
tbox.setText("Turning")
tbox = self.debug.addText("line2", 0, 30, 100, 15)
tbox.setText("")
tbox = self.debug.addText("line3", 0, 45, 100, 15)
tbox.setText("")
self.RegisterSmartZone(self.zone1, 1)
return AI.SuperAI.Activate(self, active)
def Tick(self):
# fire weapon
# If the bot is not inverted, try to invert it : use the button control called 'Inverter' :
# here again, slight delay before inverting
if self.InverterTime > 0: self.InverterTime -= 1
#if (not self.ai.IsUpsideDown()) and (self.InverterTime <= 0) :
#if (self.InverterTime <= 0) :
if (not self.IsUpsideDown()) and (self.InverterTime <= 0) :
self.Input("Inverter", 0, 1)
self.InverterTime = self.reloadDelay
targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
and not plus.isDefeated(x.robot)]
# slight delay between firing
if self.reloadTime > 0: self.reloadTime -= 1
if len(targets) > 0 and self.reloadTime <= 0:
try:
trigger = self.triggerIterator.next()
except StopIteration:
self.triggerIterator = iter(self.triggers)
trigger = self.triggerIterator.next()
self.Input(trigger, 0, 1)
self.reloadTime = self.reloadDelay
bReturn = AI.SuperAI.Tick(self)
return bReturn
def InvertHandler(self):
# fire all weapons once per second (until we're upright!)
while 1:
for trigger in self.triggers2:
self.Input(trigger, 0, 1)
for i in range(0, 8):
yield 0
def LostComponent(self, id):
# if we lose all our weapons, stop using the Engage tactic and switch to Shove
if id in self.weapons: self.weapons.remove(id)
if not self.weapons:
tactic = [x for x in self.tactics if x.name == "Engage"]
if len(tactic) > 0:
self.tactics.remove(tactic[0])
self.tactics.append(Tactics.Shove(self))
self.tactics.append(Tactics.Charge(self))
return AI.SuperAI.LostComponent(self, id)
def DebugString(self, id, string):
if self.debug:
if id == 0: self.debug.get("line0").setText(string)
elif id == 1: self.debug.get("line1").setText(string)
elif id == 2: self.debug.get("line2").setText(string)
elif id == 3: self.debug.get("line3").setText(string)
def SmartZoneEvent(self, direction, id, robot, chassis):
if id == 1 and self.weapons:
if chassis:
if direction == 1:
for trigger in self.triggers1: self.Input(trigger, 0, 1)
return True
AI.register(PopupInverted)
-
I'm pretty damn sure you can.
-
I roll out the red carpet for Trovaner and await his arrival.
-
isnt it in clicks ai essentials? either in there or in the feirce irish coca download in one of the my little pwnys (mnb's development-heck tournament) threads
IDK if it faces forward after the flip though
-
I was trying to AI this bot
(https://gametechmods.com/uploads/images/61850screenshot_22.jpg)
I want to combine the OmniInverted.py with the Popup.py. But when I tried doing it it won't fire on smart zone, then it rams the wall and crash the game on quit. I am not sure what I am doing wrong. Also, is it possible to alter the starting facing without changing the nose (so it faces forward immediately after the flip)?
from __future__ import generators
import plus
import AI
from AI import vector3
import Arenas
import Gooey
import math
import Tactics
class PopupInverted(AI.SuperAI):
"Popup inverted strategy"
name = "PopupInverted"
# bot has to be invertible, not mandatory to mention it in your binding, it is force.
# much like Popup except that the bot use a button control called 'Inverter' to invert itself if it is not.
def __init__(self, **args):
AI.SuperAI.__init__(self, **args)
# force bot to be invertible :
self.invertible = True
self.zone1 = "weapon"
self.triggers1 = ["Fire"]
self.triggers2 = ["Srimech"]
self.reloadTime = 0
self.reloadDelay = 3
self.InverterTime = 3
if 'zone' in args: self.zone = args['zone']
if 'triggers' in args: self.triggers1 = args['triggers']
if 'triggers' in args: self.triggers2 = args['triggers']
self.tactics.append(Tactics.Engage(self))
def Activate(self, active):
if active:
if AI.SuperAI.debugging:
self.debug = Gooey.Plain("watch", 0, 75, 100, 75)
tbox = self.debug.addText("line0", 0, 0, 100, 15)
tbox.setText("Throttle")
tbox = self.debug.addText("line1", 0, 15, 100, 15)
tbox.setText("Turning")
tbox = self.debug.addText("line2", 0, 30, 100, 15)
tbox.setText("")
tbox = self.debug.addText("line3", 0, 45, 100, 15)
tbox.setText("")
self.RegisterSmartZone(self.zone1, 1)
return AI.SuperAI.Activate(self, active)
def Tick(self):
# fire weapon
# If the bot is not inverted, try to invert it : use the button control called 'Inverter' :
# here again, slight delay before inverting
if self.InverterTime > 0: self.InverterTime -= 1
#if (not self.ai.IsUpsideDown()) and (self.InverterTime <= 0) :
#if (self.InverterTime <= 0) :
if (not self.IsUpsideDown()) and (self.InverterTime <= 0) :
self.Input("Inverter", 0, 1)
self.InverterTime = self.reloadDelay
targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \
and not plus.isDefeated(x.robot)]
# slight delay between firing
if self.reloadTime > 0: self.reloadTime -= 1
if len(targets) > 0 and self.reloadTime <= 0:
try:
trigger = self.triggerIterator.next()
except StopIteration:
self.triggerIterator = iter(self.triggers)
trigger = self.triggerIterator.next()
self.Input(trigger, 0, 1)
self.reloadTime = self.reloadDelay
bReturn = AI.SuperAI.Tick(self)
return bReturn
def InvertHandler(self):
# fire all weapons once per second (until we're upright!)
while 1:
for trigger in self.triggers2:
self.Input(trigger, 0, 1)
for i in range(0, 8):
yield 0
def LostComponent(self, id):
# if we lose all our weapons, stop using the Engage tactic and switch to Shove
if id in self.weapons: self.weapons.remove(id)
if not self.weapons:
tactic = [x for x in self.tactics if x.name == "Engage"]
if len(tactic) > 0:
self.tactics.remove(tactic[0])
self.tactics.append(Tactics.Shove(self))
self.tactics.append(Tactics.Charge(self))
return AI.SuperAI.LostComponent(self, id)
def DebugString(self, id, string):
if self.debug:
if id == 0: self.debug.get("line0").setText(string)
elif id == 1: self.debug.get("line1").setText(string)
elif id == 2: self.debug.get("line2").setText(string)
elif id == 3: self.debug.get("line3").setText(string)
def SmartZoneEvent(self, direction, id, robot, chassis):
if id == 1 and self.weapons:
if chassis:
if direction == 1:
for trigger in self.triggers1: self.Input(trigger, 0, 1)
return True
AI.register(PopupInverted)
In the new Popup.py Click made, you can add an invert handler, here's what he told me about the py when i PMed him what py can i use to make a SHW Ultimate Sacrifice clone on DSL:
It's the latest version of Popup.py which you can conveniently get in the thread I just posted on the Modifications board.
Just set 'RunUpsideDown' to 1 and it should work.
-
Thanks. So all I needed now is something for the starting location.