The Driver Syndicate/Scripting/Mission Scripting/Story Missions: Difference between revisions
Jump to navigation
Jump to search
SwissCruiser (talk | contribs) |
SwissCruiser (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
== Creating Missions == | == Creating Missions == | ||
Here are some examples of how to create missions. | Here are some examples of how to create missions. | ||
Note: "#TAGS" should always be chosen so that it does not create duplicates/conflicts with other mods/addons or the base game! See EqLocalizationTool | |||
=== Example 1a: Simple drive from A to B mission with timer === | === Example 1a: Simple drive from A to B mission with timer === | ||
ToDo: | ToDo:<syntaxhighlight lang="lua"> | ||
-- Basic Mission Example 1a | |||
-------------------------------------------------------------------------------- | |||
world:SetLevelName("levelname") --set levelname here | |||
world:SetEnvironmentName("day_clear") --set weather here | |||
MISSION.MusicScript = "frisco_night" --set music here | |||
MISSION.Init = function() | |||
--SetMusicState(MUSIC_STATE_PURSUIT) | |||
MISSION.Data = { | |||
targetPosition = Vector3D.new(-61.93,40.71,-68.29), | |||
} --set mission target here | |||
MISSION.Settings.EnableCops = true | |||
local playerCar = gameses:CreateCar("mustang", CAR_TYPE_NORMAL) -- set player car here | |||
MISSION.playerCar = playerCar | |||
playerCar:SetMaxDamage(12.0) | |||
-- real | |||
playerCar:SetOrigin( Vector3D.new(15.20,70.71,67.85) ) --set startingpoint here | |||
playerCar:SetAngles( Vector3D.new(-180.00,90.00,-180.00) ) --set starting direction here | |||
playerCar:Spawn() | |||
playerCar:SetColorScheme( 4 ) | |||
-- for the load time, set player car | |||
gameses:SetPlayerCar( playerCar ) | |||
playerCar:Lock(true) | |||
gameHUD:Enable(true) | |||
gameHUD:FadeIn(false, 2.5) | |||
gameHUD:ShowAlert("#TITLE01", 7, HUD_ALERT_NORMAL) -- set Mission Title in Localization file | |||
missionmanager:ScheduleEvent( function() | |||
MISSION.Phase1Start() | |||
end, 3 ) | |||
end | |||
function MISSION.Phase1Start() | |||
local playerCar = MISSION.playerCar | |||
gameHUD:Enable(true) | |||
playerCar:Lock(false) | |||
MISSION.targetHandle = gameHUD:AddMapTargetPoint(MISSION.Data.targetPosition) | |||
-- here we start | |||
missionmanager:SetRefreshFunc( MISSION.Phase1Update ) | |||
gameHUD:ShowScreenMessage("#DESCRIPTION01", 5) -- set Mission Description in Localization file | |||
missionmanager:EnableTimeout( true, 110 ) -- true/false, time (in seconds) | |||
end | |||
function MISSION.OnDone() | |||
local playerCar = MISSION.playerCar | |||
gameHUD:RemoveTrackingObject(MISSION.targetHandle) | |||
playerCar:Lock(true) | |||
return true | |||
end | |||
MISSION.UpdateAll = function(delta) | |||
local camera = world:GetView() | |||
local playerCar = MISSION.playerCar | |||
--UpdateCops( playerCar, delta ) | |||
-- check player vehicle is wrecked | |||
if CheckVehicleIsWrecked( playerCar, MISSION.Data, delta ) then | |||
gameHUD:ShowAlert("#WRECKED_VEHICLE_MESSAGE", 3.5, HUD_ALERT_DANGER) | |||
MISSION.OnDone() | |||
missionmanager:SetRefreshFunc( function() | |||
return false | |||
end ) | |||
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 ) | |||
return false | |||
end | |||
if missionmanager:IsTimedOut() then | |||
gameHUD:ShowAlert("#TIME_UP_MESSAGE", 3.5, HUD_ALERT_DANGER) | |||
MISSION.OnDone() | |||
missionmanager:SetRefreshFunc( function() | |||
return false | |||
end ) | |||
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 ) | |||
return false | |||
end | |||
return true | |||
end | |||
MISSION.Phase1Update = function( delta ) | |||
local playerCar = MISSION.playerCar | |||
local distToTarget = length(playerCar:GetOrigin() - MISSION.Data.targetPosition) | |||
local playerSpeed = playerCar:GetSpeed() | |||
if distToTarget < 90.0 then | |||
if playerCar:GetPursuedCount() > 0 then | |||
gameHUD:ShowScreenMessage("#LOSE_TAIL_MESSAGE", 1.5) | |||
elseif playerSpeed < 60 then | |||
if distToTarget < 4.0 then | |||
gameHUD:RemoveTrackingObject(MISSION.targetHandle) | |||
playerCar:Lock(true) | |||
missionmanager:EnableTimeout( false, 80 ) | |||
-- TODO: cutscene black bar curtains | |||
missionmanager:ScheduleEvent( MISSION.OnCompleted, 0 ) | |||
missionmanager:SetRefreshFunc( function() | |||
return false | |||
end ) | |||
return false | |||
end | |||
else | |||
gameHUD:ShowScreenMessage("#SLOW_DOWN_MESSAGE", 1.0) | |||
end | |||
end | |||
return MISSION.UpdateAll(delta) | |||
end | |||
function MISSION.OnCompleted() | |||
MISSION.OnDone() | |||
missionmanager:SetRefreshFunc( function() | |||
return false | |||
end ) | |||
gameses:SignalMissionStatus( MIS_STATUS_SUCCESS, 4.0 ) | |||
gameHUD:ShowAlert("#MENU_GAME_TITLE_MISSION_SUCCESS", 2.5, HUD_ALERT_SUCCESS) | |||
gameHUD:ShowScreenMessage("#JOBDONE", 4) -- set success Text in Localization file | |||
end | |||
</syntaxhighlight> | |||
=== Example 1b: Simple drive from A to B mission without timer === | === Example 1b: Simple drive from A to B mission without timer === | ||
ToDo:<syntaxhighlight lang="lua"> | ToDo:<syntaxhighlight lang="lua"> | ||
-- Basic Mission Example | -- Basic Mission Example 1b | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
Line 66: | Line 231: | ||
gameHUD:ShowScreenMessage("#DESCRIPTION01", 5) -- set Mission Description in Localization file | gameHUD:ShowScreenMessage("#DESCRIPTION01", 5) -- set Mission Description in Localization file | ||
missionmanager:EnableTimeout( false, 90 ) -- enable, time | missionmanager:EnableTimeout( false, 90 ) -- enable/false, time (in seconds) | ||
end | end | ||
Revision as of 15:34, 25 January 2025
Creating Missions
Here are some examples of how to create missions.
Note: "#TAGS" should always be chosen so that it does not create duplicates/conflicts with other mods/addons or the base game! See EqLocalizationTool
Example 1a: Simple drive from A to B mission with timer
ToDo:
-- Basic Mission Example 1a
--------------------------------------------------------------------------------
world:SetLevelName("levelname") --set levelname here
world:SetEnvironmentName("day_clear") --set weather here
MISSION.MusicScript = "frisco_night" --set music here
MISSION.Init = function()
--SetMusicState(MUSIC_STATE_PURSUIT)
MISSION.Data = {
targetPosition = Vector3D.new(-61.93,40.71,-68.29),
} --set mission target here
MISSION.Settings.EnableCops = true
local playerCar = gameses:CreateCar("mustang", CAR_TYPE_NORMAL) -- set player car here
MISSION.playerCar = playerCar
playerCar:SetMaxDamage(12.0)
-- real
playerCar:SetOrigin( Vector3D.new(15.20,70.71,67.85) ) --set startingpoint here
playerCar:SetAngles( Vector3D.new(-180.00,90.00,-180.00) ) --set starting direction here
playerCar:Spawn()
playerCar:SetColorScheme( 4 )
-- for the load time, set player car
gameses:SetPlayerCar( playerCar )
playerCar:Lock(true)
gameHUD:Enable(true)
gameHUD:FadeIn(false, 2.5)
gameHUD:ShowAlert("#TITLE01", 7, HUD_ALERT_NORMAL) -- set Mission Title in Localization file
missionmanager:ScheduleEvent( function()
MISSION.Phase1Start()
end, 3 )
end
function MISSION.Phase1Start()
local playerCar = MISSION.playerCar
gameHUD:Enable(true)
playerCar:Lock(false)
MISSION.targetHandle = gameHUD:AddMapTargetPoint(MISSION.Data.targetPosition)
-- here we start
missionmanager:SetRefreshFunc( MISSION.Phase1Update )
gameHUD:ShowScreenMessage("#DESCRIPTION01", 5) -- set Mission Description in Localization file
missionmanager:EnableTimeout( true, 110 ) -- true/false, time (in seconds)
end
function MISSION.OnDone()
local playerCar = MISSION.playerCar
gameHUD:RemoveTrackingObject(MISSION.targetHandle)
playerCar:Lock(true)
return true
end
MISSION.UpdateAll = function(delta)
local camera = world:GetView()
local playerCar = MISSION.playerCar
--UpdateCops( playerCar, delta )
-- check player vehicle is wrecked
if CheckVehicleIsWrecked( playerCar, MISSION.Data, delta ) then
gameHUD:ShowAlert("#WRECKED_VEHICLE_MESSAGE", 3.5, HUD_ALERT_DANGER)
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 )
return false
end
if missionmanager:IsTimedOut() then
gameHUD:ShowAlert("#TIME_UP_MESSAGE", 3.5, HUD_ALERT_DANGER)
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 )
return false
end
return true
end
MISSION.Phase1Update = function( delta )
local playerCar = MISSION.playerCar
local distToTarget = length(playerCar:GetOrigin() - MISSION.Data.targetPosition)
local playerSpeed = playerCar:GetSpeed()
if distToTarget < 90.0 then
if playerCar:GetPursuedCount() > 0 then
gameHUD:ShowScreenMessage("#LOSE_TAIL_MESSAGE", 1.5)
elseif playerSpeed < 60 then
if distToTarget < 4.0 then
gameHUD:RemoveTrackingObject(MISSION.targetHandle)
playerCar:Lock(true)
missionmanager:EnableTimeout( false, 80 )
-- TODO: cutscene black bar curtains
missionmanager:ScheduleEvent( MISSION.OnCompleted, 0 )
missionmanager:SetRefreshFunc( function()
return false
end )
return false
end
else
gameHUD:ShowScreenMessage("#SLOW_DOWN_MESSAGE", 1.0)
end
end
return MISSION.UpdateAll(delta)
end
function MISSION.OnCompleted()
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_SUCCESS, 4.0 )
gameHUD:ShowAlert("#MENU_GAME_TITLE_MISSION_SUCCESS", 2.5, HUD_ALERT_SUCCESS)
gameHUD:ShowScreenMessage("#JOBDONE", 4) -- set success Text in Localization file
end
Example 1b: Simple drive from A to B mission without timer
ToDo:
-- Basic Mission Example 1b
--------------------------------------------------------------------------------
world:SetLevelName("levelname") --set levelname here
world:SetEnvironmentName("dusk_clear") --set weather here
MISSION.MusicScript = "frisco_day" --set music here
MISSION.Init = function()
--SetMusicState(MUSIC_STATE_PURSUIT)
MISSION.Data = {
targetPosition = Vector3D.new(-619.93,40.71,-683.29),
} --set mission target here
MISSION.Settings.EnableCops = true
local playerCar = gameses:CreateCar("toledocoupe", CAR_TYPE_NORMAL) -- set player car here
MISSION.playerCar = playerCar
playerCar:SetMaxDamage(12.0)
-- real
playerCar:SetOrigin( Vector3D.new(1598.20,70.71,677.85) ) --set startingpoint here
playerCar:SetAngles( Vector3D.new(-180.00,90.00,-180.00) ) --set starting direction here
playerCar:Spawn()
playerCar:SetColorScheme( 4 )
-- for the load time, set player car
gameses:SetPlayerCar( playerCar )
playerCar:Lock(true)
gameHUD:Enable(true)
gameHUD:FadeIn(false, 2.5)
gameHUD:ShowAlert("#TITLE01", 7, HUD_ALERT_NORMAL) -- set Mission Title in Localization file
missionmanager:ScheduleEvent( function()
MISSION.Phase1Start()
end, 3 )
end
function MISSION.Phase1Start()
local playerCar = MISSION.playerCar
gameHUD:Enable(true)
playerCar:Lock(false)
MISSION.targetHandle = gameHUD:AddMapTargetPoint(MISSION.Data.targetPosition)
-- here we start
missionmanager:SetRefreshFunc( MISSION.Phase1Update )
gameHUD:ShowScreenMessage("#DESCRIPTION01", 5) -- set Mission Description in Localization file
missionmanager:EnableTimeout( false, 90 ) -- enable/false, time (in seconds)
end
function MISSION.OnDone()
local playerCar = MISSION.playerCar
gameHUD:RemoveTrackingObject(MISSION.targetHandle)
playerCar:Lock(true)
return true
end
MISSION.UpdateAll = function(delta)
local camera = world:GetView()
local playerCar = MISSION.playerCar
--UpdateCops( playerCar, delta )
-- check player vehicle is wrecked
if CheckVehicleIsWrecked( playerCar, MISSION.Data, delta ) then
gameHUD:ShowAlert("#WRECKED_VEHICLE_MESSAGE", 3.5, HUD_ALERT_DANGER)
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 )
return false
end
if missionmanager:IsTimedOut() then
gameHUD:ShowAlert("#TIME_UP_MESSAGE", 3.5, HUD_ALERT_DANGER)
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_FAILED, 4.0 )
return false
end
return true
end
MISSION.Phase1Update = function( delta )
local playerCar = MISSION.playerCar
local distToTarget = length(playerCar:GetOrigin() - MISSION.Data.targetPosition)
local playerSpeed = playerCar:GetSpeed()
if distToTarget < 90.0 then
if playerCar:GetPursuedCount() > 0 then
gameHUD:ShowScreenMessage("#LOSE_TAIL_MESSAGE", 1.5)
elseif playerSpeed < 60 then
if distToTarget < 4.0 then
gameHUD:RemoveTrackingObject(MISSION.targetHandle)
playerCar:Lock(true)
missionmanager:EnableTimeout( false, 80 )
-- TODO: cutscene black bar curtains
missionmanager:ScheduleEvent( MISSION.OnCompleted, 0 )
missionmanager:SetRefreshFunc( function()
return false
end )
return false
end
else
gameHUD:ShowScreenMessage("#SLOW_DOWN_MESSAGE", 1.0)
end
end
return MISSION.UpdateAll(delta)
end
function MISSION.OnCompleted()
MISSION.OnDone()
missionmanager:SetRefreshFunc( function()
return false
end )
gameses:SignalMissionStatus( MIS_STATUS_SUCCESS, 4.0 )
gameHUD:ShowAlert("#MENU_GAME_TITLE_MISSION_SUCCESS", 2.5, HUD_ALERT_SUCCESS)
gameHUD:ShowScreenMessage("#JOBDONE", 4) -- set success Text in Localization file
end
Example 2: Following a car to its destination
ToDo:
How to add them to the Game/Mod
ToDo: