Sie sind auf Seite 1von 4

-- combot 1.

0 - schmettermod
-- by oreon, axji & enormator

-- flags und runners


wait = 0
naechsterballschmettern = true -- evtl variablennamen wechseln

-- weltkonstanten

const_feld_laenge = 800
const_ball_radius = 31.5
const_ground_plane = 100

const_ball_gravity = 0.28

const_mitte = const_feld_laenge/2
const_rechter_rand = const_feld_laenge - const_ball_radius

const_blobby_hoehe = 89
const_blobby_kopf_radius = 25
const_blobby_bauch_radius = 33
const_blobby_kopf_beruehrung = const_ground_plane + const_blobby_hoehe +
const_ball_radius
const_blobby_maxjump = 393.625

const_netz_radius = 7
const_netz_hoehe = 323

-- ber�hrungsebene des balls falls er ans netz kommt


const_netz_links = const_mitte - const_netz_radius - const_ball_radius
const_netz_rechts = const_mitte + const_netz_radius + const_ball_radius

-- charakter
const_angriffsgrundwert_min = 30
const_angriffsgrundwert_max = 55
min_angriffsstaerke = const_angriffsgrundwert_min
max_angriffsstaerke = const_angriffsgrundwert_max
angriffseinschraenkung_hinten = 10

-- sonstige einstellungen
servexversetzung=-7 --wert ist so gewaehlt, dass der ball nah ans netz fliegt, der
gegner ihn aber grade nicht erreichen kann

-- ***anfang***

function onopponentserve()
movetox(130)
end

function onserve(ballready)
servex=ballx()+servexversetzung
naechsterballschmettern = true
generatenaechsterballschmettern()
if ballready and movetox(servex) then
jump()
end
end
function ongame()
target =
estimimpact(ballx(),bally(),bspeedx(),bspeedy(),const_blobby_kopf_beruehrung,1) --
x ziel in blobbyhoehe
targets =
estimimpact(ballx(),bally(),bspeedx(),bspeedy(),const_blobby_kopf_beruehrung,2) --
x richtung (-1 oder 1) bei einschlag
targetnetz =
estimimpact(ballx(),bally(),bspeedx(),bspeedy(),const_netz_hoehe,1) --x ziel in
netzhoehe (netzrollerberechnung)
targetjump =
estimimpact(ballx(),bally(),bspeedx(),bspeedy(),const_blobby_maxjump,1) --x ziel
in schmetterhoehe
naechsterballschmetternflagtesten() -- schaut ob der bot angreifen soll oder
nicht

if (ballx() > const_netz_rechts) then --wenn ball auf rechter spielfeldseite


dann
generatenaechsterballschmettern() --angriffsstaerke neu berechnen
end

if (target > const_mitte) and (ballx() > const_netz_rechts) then --wenn der
ball mich nix angeht
movetox(135) --dann auf standartposition warten
else
if (targetnetz > const_netz_links - 10) then --bei netzroller einfach
schmettern
naechsterballschmettern = true
end

if naechsterballschmettern then
if ((math.abs(bspeedx()) < 4) or
(estimimpact(ballx(),bally(),bspeedx(),bspeedy(),const_blobby_maxjump,2) < 0))
then
sprungattacke(angriffsstaerke)
else
if (targetjump < const_mitte / 2) then
sprungattacke(-35) --an rueckwand spielen
else
sprungattacke(0) --weiterleiten
end
end
return
end

movetox(target)
end
end

function sprungattacke(p_angriffsstaerke)
p_angriffsstaerke=math.max(p_angriffsstaerke, min_angriffsstaerke +
angriffseinschraenkung_hinten * (targetjump / const_netz_links)) --weiter hinten
nicht ganz so hoch spielen (kommt nicht auf die andere seite)
p_angriffsstaerke=math.min(p_angriffsstaerke, max_angriffsstaerke -
angriffseinschraenkung_hinten * (targetjump / const_netz_links)) --weiter hinten
nicht ganz so tief spielen (kommt ans netz)
movetox(targetjump-p_angriffsstaerke) -- bei der sprungatacke wird die
st�rke des gew�nschten schlages angegeben

if (bally() < 580) and (bspeedy() < 0) then


jump()
end
end

function naechsterballschmetternflagtesten()
naechsterballschmettern = true
end

function generatenaechsterballschmettern()
angriffsstaerke = math.random(min_angriffsstaerke,max_angriffsstaerke)
end

function estimimpact(bx,by,vbx,vby,desty,frage) -- erlaubt ein besseres estimate


mit ein paar unbeding n�tigen angaben
bgrav = 0.28

time1 =(-vby-math.sqrt((vby^2)-(-2*bgrav*(by-desty))))/(-bgrav)
resultx = (vbx * time1) + bx
estimbspeedx=bspeedx()/math.abs(bspeedx())

if(resultx > const_rechter_rand) then -- korrigieren der appraller an der


rechten ebene
resultx = 2 * const_feld_laenge - resultx
estimbspeedx=-estimbspeedx
end

if(resultx < const_ball_radius) then -- korrigieren der appraller an der


linken ebene
resultx = math.abs(resultx - const_ball_radius) + const_ball_radius
estimbspeedx=-estimbspeedx
kollisionlinks = true
else
kollisionlinks = false
end

if (resultx > const_netz_rechts) and (estimbspeedx > 0) and ((kollisionlinks


== true) or (ballx() < const_netz_links)) then -- abpraller am netz unterhalb der
kugel erst wenn netzroller ausgeschlossen sind
resultx = 2 * const_netz_links - resultx
estimbspeedx=-estimbspeedx
end

if (frage == 1) then
return resultx
end
if (frage == 2) then
return estimbspeedx
end
end

function movetox (x)


if (math.abs(posx()-x)>math.abs(posx()+4.5-x)) then
right()
done=false
else
if (math.abs(posx()-x)>math.abs(posx()-4.5-x)) then
left()
done=false
else
done=true
end
end
return done
end