### Author Topic: Something that i wrote as i got bored...  (Read 2648 times)

0 Members and 1 Guest are viewing this topic.

#### Wanderer

• Wiki Warrior
• 211
• Mostly harmless
##### Something that i wrote as i got bored...
Cookie for the first one who guesses what it does (not for Nuke or Axem  )...

Code: [Select]
#Global Hooks

\$GameInit:

[

if playerTarget ~= nil then
-- gather required data
local targetpos = playerTarget.Position
local targetvel = playerTarget.Physics.Velocity
local lenghttargetvel = targetvel:getMagnitude()
local plrtotrg = playerPosition - targetpos
local lenghtplrtotrg = plrtotrg:getMagnitude()
--trigonometry 101...
--use cosine to get the interception time basicaly derived from c^2 = a^2 + b^2 - 2ab cos(C)
--use dotproduct to get ab cos(C)
local trgangle = plrtotrg:getDotProduct(targetvel)
local a = (( weaponvel * weaponvel ) - ( lenghttargetvel * lenghttargetvel ))
local b = ( 2 * trgangle )
local c = -( lenghtplrtotrg * lenghtplrtotrg )
local discrim = ((b * b) - 4 * a * c)
--idiot checks, i dont think lua can handle imaginary values...
if discrim >= 0 and a ~= 0 then
multipl1 = (( -b + math.sqrt(discrim)) / ( 2 * a))
multipl2 = (( -b - math.sqrt(discrim)) / ( 2 * a))
--we dont want negative lead do we?
if multipl1 >=0 and multipl1 <= multipl2 and multipl2 >= 0 then
targetmult = multipl1
elseif multipl1 >=0 and multipl2 < 0 then
targetmult = multipl1
elseif multipl2 >=0 then
targetmult = multipl2
else targetmult = nil
end
--with interception time we get the interception coordinates
if targetmult ~= nil then
if targetmult ~= 0 then
else
end
end
end
end
end

]

\$Simulation:

[

missiontime = mn.getMissionTime()

if missiontime > 0.5 and hv.Player ~= nil then
frontVector = ba.createVector(0,0,100)
playerObject = hv.Player
playerPosition = playerObject.Position
playerOrientation = playerObject.Orientation
playerFrontVector = playerOrientation:unrotateVector(frontVector)
playerFrontProj = playerPosition + playerFrontVector
if playerObject.Target ~= nil and playerObject.Target ~= false and playerObject.Target.HitpointsLeft ~= nil then
playerTarget = playerObject.Target
playerOrientation = playerObject.Orientation
playerFrontVector = playerOrientation:unrotateVector(frontVector)
playerFrontProj = playerPosition + playerFrontVector
if plrtotrgVector:getMagnitude() > plrProjtotrgVector:getMagnitude() then
plrtotrgDot = playerFrontVector:getDotProduct(plrtotrgVector)
dotmult1 = plrtotrgVector:getMagnitude()
dotmult2 = playerFrontVector:getMagnitude()
plrtotrgAngle = plrtotrgDot / (dotmult1 * dotmult2)
if plrtotrgAngle > 0.92 then
else
end
else
end
else
end
for u=1,#mn.Weapons do
weapon = mn.Weapons[u]
weapontype = weapon.Class.Name
if weapontype == "Corona" then
weaponLife = weapon.LifeLeft
if weaponLife < 4.0 and weaponLife ~= 0 then
weaponPosition = weapon.Position
weapon.LifeLeft = 0
mn.createWeapon(tb.WeaponClasses["Halo"],weaponOrientation,weaponPosition,playerObject,-1)
end
end
end
end

]

#End

Its very hackish and works only for single weapon type pair but its a start atleast

EDIT: If the script itself isnt clear enough.. then perhaps watching this clip might help
« Last Edit: February 14, 2007, 03:33:46 am by Wanderer »
Do not meddle in the affairs of coders for they are soggy and hard to light

#### Nuke

• Ka-Boom!
• 212
• Mutants Worship Me
##### Re: Something that i wrote as i got bored...
what build you running this on?
« Last Edit: February 14, 2007, 09:03:47 am by Nuke »
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

#### Wanderer

• Wiki Warrior
• 211
• Mostly harmless
##### Re: Something that i wrote as i got bored...
Phreaks build (fs2_open_r.exe dated 20070203)

Any case that script forces player ships guns to function as guns seen in I-War 2, or whatever like this blindfire thing is.. It currently uses weapon vel 650 for lead calculation. Ship should be armed with dummy weapon named 'Corona' and then the real weapon should be named 'Halo'.

Works only with player ship.
Do not meddle in the affairs of coders for they are soggy and hard to light

#### Nuke

• Ka-Boom!
• 212
• Mutants Worship Me
##### Re: Something that i wrote as i got bored...
hey it works. and well i might add. i like how you delt with weapon timing. gives me a few ideas
« Last Edit: February 14, 2007, 10:23:28 am by Nuke »
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

#### Wanderer

• Wiki Warrior
• 211
• Mostly harmless
##### Re: Something that i wrote as i got bored...
First upgrade... This time it ought to have been change global instead of player specific...

Code: [Select]
#Global Hooks

\$GameInit:

[

if currentTarget ~= nil then
-- gather required data
local targetPos = currentTarget.Position
local targetVel = currentTarget.Physics.Velocity
local targetVelLength = targetVel:getMagnitude()
local shiptotrg = currentPosition - targetPos
local plrtotrglength = shiptotrg:getMagnitude()
--trigonometry 101...
--use cosine to get the interception time basicaly derived from c^2 = a^2 + b^2 - 2ab cos(C)
--use dotproduct to get ab cos(C)
local trgangle = shiptotrg:getDotProduct(targetVel)
local a = (( weaponvel * weaponvel ) - ( targetVelLength * targetVelLength ))
local b = ( 2 * trgangle )
local c = -( plrtotrglength * plrtotrglength )
local discrim = ((b * b) - 4 * a * c)
--idiot checks, i dont think lua can handle imaginary values...
if discrim >= 0 and a ~= 0 then
local multipl1 = (( -b + math.sqrt(discrim)) / ( 2 * a))
local multipl2 = (( -b - math.sqrt(discrim)) / ( 2 * a))
--we dont want negative lead do we?
if multipl1 >=0 and multipl1 <= multipl2 and multipl2 >= 0 then
targetmult = multipl1
elseif multipl1 >=0 and multipl2 < 0 then
targetmult = multipl1
elseif multipl2 >=0 then
targetmult = multipl2
else targetmult = nil
end
--with interception time we get the interception coordinates
if targetmult ~= nil then
if targetmult ~= 0 then
else
end
end
end
end
end

]

\$Simulation:

[

missiontime = mn.getMissionTime()

if missiontime > 0.5 then
frontVector = ba.createVector(0,0,100)
nullVec = ba.createVector(0,0,0)
for y=1,#mn.Ships do
local currentObject = mn.Ships[y]
local currentOrientation = currentObject.Orientation
blindfirearmed = 0
local weaponPrimaryBanks = currentObject.PrimaryBanks
for j=1,#weaponPrimaryBanks do
local weaponBank = currentObject.PrimaryBanks[j]
local weaponBankWeapon = weaponBank.WeaponClass.Name
if weaponBankWeapon == "Corona" then
blindfirearmed = 1
end
end
if blindfirearmed == 1 and currentObject.Target ~= nil and currentObject.Target ~= false and currentObject.Target:getBreedName() ~= (null) then
currentPosition = currentObject.Position
local currentFrontVector = currentOrientation:unrotateVector(frontVector)
local currentFrontProj = currentPosition + currentFrontVector
currentTarget = currentObject.Target
local shiptotargetVector = leadpos - currentPosition
local shiptotargetProVector = leadpos - currentFrontProj
if shiptotargetVector:getMagnitude() > shiptotargetProVector:getMagnitude() then
local shiptotargetDot = currentFrontVector:getDotProduct(shiptotargetVector)
local dotmult1 = shiptotargetVector:getMagnitude()
local dotmult2 = currentFrontVector:getMagnitude()
local shiptotargetAngle = shiptotargetDot / (dotmult1 * dotmult2)
if shiptotargetAngle > 0.92 then
end
end
end
end
for u=1,#mn.Weapons do
local weapon = mn.Weapons[u]
local weapontype = weapon.Class.Name
local weaponLife = weapon.LifeLeft
if weapontype == "Corona" and weaponLife > 0.2 then
local weaponPosition = weapon.Position
shiplist = nil
shiplist = {}
shooterlist = nil
shooterlist = {}
for h = 1,#mn.Ships do
local shooter = mn.Ships[h]
local shooterPos = shooter.Position
local distanceVec = weaponPosition - shooterPos
local distance = math.floor(distanceVec:getMagnitude())
table.insert(shiplist,distance)
table.insert(shooterlist,distance,h)
table.sort(shiplist)
end
newdistance = shiplist[1]
newindex = shooterlist[newdistance]
newshooter = mn.Ships[newindex]
weaponOrientation = weapon.Orientation
if newvector ~= "false" then
weaponOrientation = newvector:getOrientation()
end
weapon.LifeLeft = 0
mn.createWeapon(tb.WeaponClasses["Halo"],weaponOrientation,weaponPosition,newshooter,-1)
end
end
end

]

#End
Do not meddle in the affairs of coders for they are soggy and hard to light