1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
function OnOpponentServe()
moveto(120)
end
-- Flags und runners
wait = 0
aggro = true -- evtl Variablennamen wechseln
aggroservice = 50 -- versetzung zum Ball je gr�sser desto tiefer fliegt der Service 0-64( 64 ist ca CONST_BALLRADIUS + CONST_BLOBBY_BAUCH_RADIUS)
-- Korrekturfaktor f�r die Flugberechnung
korrekturfaktor = 7
-- Knostanten
CONST_BALL_RADIUS = 31.5
CONST_MITTE = 400
CONST_BLOBBY_HOEHE = 89
CONST_BLOBBY_KOPF_RADIUS = 25
CONST_BLOBBY_BAUCH_RADIUS = 33
CONST_NETZ_RADIUS = 7
CONST_NETZ_HOEHE = 157
-- Linke Ber�hrungsebene des Balls falls er ans Netz kommt
CONST_NETZ_LINKS = CONST_MITTE - CONST_NETZ_RADIUS - CONST_BALL_RADIUS
function OnServe(ballready)
moveto(ballx())
wait = wait + 1
aggro = true
if ballready then
if wait > 90 then
jump()
wait = 0
end
end
end
function OnGame()
aggroflagtesten() -- schaut ob der bot aggro werden soll oder nicht
target = estimImpact()
if aggro then
sprungattacke(aggroservice)
return
end
-- Zielbestimmung --> optimierung weniger CPU power n�tig ;)
if (target < CONST_BALL_RADIUS) then -- ball wird hinten apprallen
vonhinten(target)
return
end
-- nun k�mmern wir uns um die B�lle die ans netz prallen
if ((target > CONST_NETZ_LINKS) and (ballx() < CONST_NETZ_LINKS)) then
netzappraller(target)
return
end
if (bspeedx() < 10 ) then
moveto(target - 20)
else
moveto(target)
end
end
function netzappraller(p_target)
--moveto(netzlinks - (netzlinks - estimate()))
moveto(CONST_NETZ_LINKS - (p_target - CONST_NETZ_LINKS) + math.abs(bspeedx()*bspeedx()*1.4))
end
function vonhinten(p_target)
p_target = CONST_BALL_RADIUS + math.abs(CONST_BALL_RADIUS-p_target)
--das ist der fall wenn der Ball hinten abprallt
moveto(p_target-math.abs(bspeedx()*bspeedx()*1.1))
end
function sprungattacke(p_aggroservice)
moveto(ballx()-p_aggroservice)
if bally() < 580 then
jump()
end
end
function aggroflagtesten()
if (ballx() > CONST_MITTE) then
aggro = false
return
end
if (touches() == 2) then
aggro = true
return
end
if ((ballx() < (400-CONST_BALL_RADIUS)) and (bally() < 200) and (math.abs(bspeedx()) < 40)) then -- der ball k�nnte nohc dr�ber fliegen ** noch optimieren
aggro = true
return
end
end
function estimTime()
bgrav = 0.248
-- standart Realfloor ist 144
-- warscheinilcher Realflfoor f�r Ball + blobby ist 144 (der Ball muss schon berechnet worden sein)
realFloor = 144
by=bally()
vby=bspeedy()-600
time1 =(-vby+math.sqrt((vby^2)-(4*-0.5*bgrav*(by-realFloor))))/(-2*0.5*bgrav)
time2 =(-vby-math.sqrt((vby^2)-(4*-0.5*bgrav*(by-realFloor))))/(-2*0.5*bgrav)
if time1>time2 then
time3 = time1
else
time3 = time2
end
return time3
--ist die Funktion nicht auf folgende aussage minimierbar ?
-- time1 =(-vby-math.sqrt((vby^2)-(-2*bgrav*(by-realFloor))))/-bgrav
-- return time1
end
function estimImpact()
--diese Funktion sollte die einschlagkoordinaten auf K�pfh�he Rechnen
bx=ballx()
vbx=bspeedx()
time3 = estimTime()
resultX = (vbx * time3) + bx
return resultX
end
|