Улучшение скрипта FreeRide для Mafia 2
Улучшение скрипта FreeRide для Mafia 2
Этот скрипт Lua для FreeRide в Mafia 2 предлагает интересные возможности, но его можно сделать еще более захватывающим. Вот несколько идей:
-
Добавьте случайные события:
- Нападение на игрока: в игре могут внезапно появляться вражеские гангстеры, которые пытаются ограбить игрока или вступить с ним в драку.
- Погоня за нарушителями: полиция может преследовать игрока за нарушение правил дорожного движения, а игроку нужно будет уйти от погони.
- Встреча с другими гангстерами: можно добавить возможность случайно встретить других гангстеров, которые могут предложить игроку выполнить какое-нибудь задание или просто пообщаться.
-
Добавьте новые миссии:
- Ограбление банка: игрок может ограбить банк, избегая полиции и бандитов.
- Убийство вражеского гангстера: игрок может получить задание убить вражеского гангстера, используя различные методы.
-
Добавьте новые автомобили и оружие:
- Новые автомобили: можно добавить новые модели автомобилей, которые игрок может разблокировать, выполняя миссии или задания.
- Новое оружие: игрок может получить доступ к новому оружию, выполняя миссии или покупая его у торговцев.
-
Добавьте возможность выбора времени суток и погодных условий:
- Время суток: игрок может выбрать, в какое время суток он хочет играть: день, вечер или ночь.
- Погодные условия: игрок может выбрать, какую погоду он хочет: солнце, дождь, снег или туман.
-
Добавьте систему наград:
- Награды за выполнение заданий: игрок может получить новые автомобили, оружие, одежду или деньги за выполнение миссий или заданий.
- Награды за достижение целей: игрок может получить награды за достижение определенных целей в игре, например, за победу в гонке или за убийство определенного количества врагов.
function onGameInit(_ARG_0_)
_ARG_0_.friendlyDoorCfg = common.ShopScripts.FriendlyDoor.Cfg
registerForMachineMessages(_ARG_0_)
DelayBuffer:Insert(FreeRideStart2, {_ARG_0_}, 100, 1, false)
game.datastore:SetString('DerekStatus', 'Opened')
game.datastore:SetString('CharlieStatus', 'Opened')
game.datastore:SetString('BruskyStatus', 'Opened')
guid = base.ScriptMachine:getScriptGuid(_ARG_0_.scriptId)
end
function onEvent(_ARG_0_, _ARG_1_)
if _ARG_1_:GetType() == enums.EventType.HUMAN then
if _ARG_1_:GetMessage() == enums.HumanMessages.ON_OWNER_CHANGE then
if _ARG_1_:GetReceiverGUID() == player:GetGuid() then
if player:GetOwner() == hunter then
idStart = DelayBuffer:Insert(Escape, {_ARG_0_}, 4000, 1, false, 'Escaper')
end
if player:GetOwner() == escaper then
idStart = DelayBuffer:Insert(Hunt, {_ARG_0_}, 4000, 1, false, 'Hunter')
end
end
elseif _ARG_1_:GetMessage() == enums.ActorMessages.ACTIVATE and _ARG_1_:HasName('OnDeActivate') then
if _ARG_1_:GetReceiverGUID() == joe:GetGuid() then
player:UnregisterFollower(joe)
joe:UnregisterFromMessages()
end
if _ARG_1_:GetReceiverGUID() == henry:GetGuid() then
player:UnregisterFollower(henry)
henry:UnregisterFromMessages()
end
end
end
if _ARG_1_:GetType() == enums.EventType.BASEMESSAGE then
if _ARG_1_:GetMessage() == 1 then
FreeRideStart2(_ARG_0_)
elseif _ARG_1_:GetMessage() == 2 then
CreateActionJoe(_ARG_0_)
CreateActionHenry(_ARG_0_)
end
end
if _ARG_1_:HasName('StartMe') then
StartMe(_ARG_0_)
end
if _ARG_1_:HasName('StopMe') then
StopMe(_ARG_0_)
end
if _ARG_1_:HasName('StartHenry') then
StartHenry(_ARG_0_)
end
if _ARG_1_:HasName('StopHenry') then
StopHenry(_ARG_0_)
end
end
function Escape(_ARG_0_)
if soJde ~= nil then
soJde:UserData():Terminate()
end
pozice = Math:newVector()
pozice:set(-1526.62, 549.156, -20.6837)
joe:GetInOutCar(escaper, 1, false, false)
escaper:DestroyController()
escaper:CreateController('car_escaper')
escaper:EscapeMode()
escaper:InitializeAIParams(enums.CarAIProfile.PIRATE, 1)
escaper:MoveTo(pozice, STOP)
game.navigation:RegisterIconEntity('Escaper', 4, 2, '0051010001', true)
end
function Hunt(_ARG_0_)
if soJde ~= nil then
soJde:UserData():Terminate()
end
joe:GetInOutCar(hunter, 1, false, false)
hunter:DestroyController()
hunter:CreateController('car_hunter')
hunter:InitializeAIParams(enums.CarAIProfile.PIRATE, 1)
hunter:HuntCar(escaper)
hunter:HuntMode(enums.CarHuntMode.ALONG)
game.navigation:RegisterIconEntity('Hunter', 7, 2, '0051010002', true)
end
function FreeRideStart2(_ARG_0_)
ai.relationships:SetRelationship(enums.AI_SIDE.PLAYER, enums.AI_TYPE.FRIEND, enums.AI_SIDE.GANG, enums.AI_TYPE.CLEMENTE, 10)
ai.relationships:SetRelationship(enums.AI_SIDE.GANG, enums.AI_TYPE.CLEMENTE, enums.AI_SIDE.PLAYER, enums.AI_TYPE.FRIEND, 10)
joe = nil
henry = nil
hunter = nil
escaper = nil
id = CommandBuffer:Insert(_ARG_0_, {
function(_ARG_0_)
if game.datastore:GetNumber('missionPart') < 4 then
return game.sds:ActivateStreamMapLine('free_summer_load')
else
return game.sds:ActivateStreamMapLine('free_winter_load')
end
end,
function(_ARG_0_)
if game.datastore:GetNumber('missionPart') == 1 then
game.gfx:SetWeatherTemplate('DTFreeRideDay')
season = 'summer'
elseif game.datastore:GetNumber('missionPart') == 2 then
game.gfx:SetWeatherTemplate('DTFreeRideDayRain')
season = 'summer'
elseif game.datastore:GetNumber('missionPart') == 3 then
game.gfx:SetWeatherTemplate('DTFreerideNight')
season = 'summer'
elseif game.datastore:GetNumber('missionPart') == 4 then
game.gfx:SetWeatherTemplate('DTFreeRideDayWinter')
season = 'winter'
elseif game.datastore:GetNumber('missionPart') == 5 then
game.gfx:SetWeatherTemplate('DTFreeRideDaySnow')
season = 'winter'
elseif game.datastore:GetNumber('missionPart') == 6 then
game.gfx:SetWeatherTemplate('DTFreeRideNightSnow')
season = 'winter'
end
end,
function(_ARG_0_)
game.game:SaveGame(1)
return game.game:GetSaveGameSyncObject()
end,
function(_ARG_0_)
hunter = nil
escaper = nil
player = game.game:GetActivePlayer()
player:RegisterToMessages(guid, enums.EventType.HUMAN, enums.HumanMessages.ENTER_VEHICLE)
player:RegisterToMessages(guid, enums.EventType.HUMAN, enums.HumanMessages.ON_OWNER_CHANGE)
startPos = Math:newVector()
hunterPos = Math:newVector()
escaperPos = Math:newVector()
startPos:set(69.6347, 909.077, -19.6336)
hunterPos:set(129.172, 910.934, -22.05)
escaperPos:set(129.156, 923.584, -22.47)
player:SetPos(startPos)
game.garage:CheatAddCar('Ascot_BaileyS200_pha', true)
game.garage:CheatAddCar('Berkley_Kingfisher_pha', true)
game.garage:CheatAddCar('Delizia_Grandeamerica', true)
game.garage:CheatAddCar('Hot_Rod_1', true)
game.garage:CheatAddCar('Hot_Rod_2', true)
game.garage:CheatAddCar('Hot_Rod_3', true)
game.garage:CheatAddCar('Houston_Wasp_pha', true)
game.garage:CheatAddCar('ISW_508', true)
game.garage:CheatAddCar('Jeep', true)
game.garage:CheatAddCar('Jeep_civil', true)
game.garage:CheatAddCar('Jefferson_Futura_pha', true)
game.garage:CheatAddCar('Jefferson_provincial', true)
game.garage:CheatAddCar('Lassiter_69', true)
game.garage:CheatAddCar('Lassiter_75_pha', true)
game.garage:CheatAddCar('Milk_Truck', true)
game.garage:CheatAddCar('Potomac_Indian', true)
game.garage:CheatAddCar('Quicksilver_Windsor_pha', true)
game.garage:CheatAddCar('Quicksilver_Windsor_Taxi_pha', true)
game.garage:CheatAddCar('Shubert_34', true)
game.garage:CheatAddCar('Shubert_38', true)
game.garage:CheatAddCar('Shubert_Armoured', true)
game.garage:CheatAddCar('Shubert_Beverly', true)
game.garage:CheatAddCar('Shubert_Frigate_pha', true)
game.garage:CheatAddCar('Shubert_Hearse', true)
game.garage:CheatAddCar('Shubert_Panel', true)
game.garage:CheatAddCar('Shubert_PickUp', true)
game.garage:CheatAddCar('Shubert_Taxi', true)
game.garage:CheatAddCar('Shubert_Truck_CT', true)
game.garage:CheatAddCar('Shubert_Truck_SG', true)
game.garage:CheatAddCar('Shubert_Truck_SP', true)
game.garage:CheatAddCar('Smith_200_p_pha', true)
game.garage:CheatAddCar('Smith_200_pha', true)
game.garage:CheatAddCar('Smith_coupe', true)
game.garage:CheatAddCar('Smith_Mainline_pha', true)
game.garage:CheatAddCar('Smith_Stingray_pha', true)
game.garage:CheatAddCar('Smith_Truck', true)
game.garage:CheatAddCar('Smith_V8', true)
game.garage:CheatAddCar('Smith_Wagon_pha', true)
game.garage:CheatAddCar('Trautenberg_Grande', true)
game.garage:CheatAddCar('Ulver_NewYorker', true)
game.garage:CheatAddCar('Ulver_NewYorker_p', true)
game.garage:CheatAddCar('Walker_Rocket', true)
game.garage:CheatAddCar('Walter_Coupe', true)
game.garage:CheatAddCar('Chaffeque', true)
game.garage:CheatAddCar('Elysium', true)
game.garage:CheatAddCar('Roller', true)
game.garage:CheatAddCar('Waybar', true)
game.garage:CheatAddCar('Moscardo_AS37_pha', true)
return game.sds:ActivateStreamMapLine('free_joe_load')
end,
function(_ARG_0_)
return game.sds:GetSyncObjectForLoadSDS('italy')
end,
function(_ARG_0_)
if season == 'summer' then
game.traffic:OpenSeason(140)
game.speech:LoadStage(140)
game.radio:SetContent('Empire', 'all', 'Empire_07010')
game.radio:SetContent('Classic', 'all', 'Classic_07010')
game.radio:SetContent('Delta', 'all', 'Delta_07010')
elseif season == 'winter' then
game.traffic:OpenSeason(50)
game.speech:LoadStage(50)
game.radio:SetContent('Empire', 'all', 'Empire_02004')
game.radio:SetContent('Classic', 'all', 'Classic_02004')
game.radio:SetContent('Delta', 'all', 'Delta_02004')
else
game.traffic:OpenSeason(140)
game.speech:LoadStage(140)
game.radio:SetContent('Empire', 'all', 'Empire_07010')
game.radio:SetContent('Classic', 'all', 'Classic_07010')
game.radio:SetContent('Delta', 'all', 'Delta_07010')
end
joe = game.entitywrapper:GetEntityByName('Joe')
henry = game.entitywrapper:GetEntityByName('Henry')
hunter = game.entitywrapper:GetEntityByName('Hunter')
escaper = game.entitywrapper:GetEntityByName('Escaper')
startPos:set(66.8521, 905.596, -19.6336)
joe:SetPos(startPos)
joe:Activate()
joe:InventoryAddWeapon(4, 21)
startPos:set(66.8521, 906.596, -19.6336)
henry:SetPos(startPos)
henry:Activate()
hunter:SetPos(hunterPos)
escaper:SetPos(escaperPos)
hunter:Activate()
escaper:Activate()
escaper:SetColor(34, 34)
hunter:SetColor(21, 21)
player:MakeCarOwnership(escaper)
player:MakeCarOwnership(hunter)
sendMessage(_ARG_0_, 2, 200)
joe:RegisterToMessages(guid, enums.EventType.ACTOR, enums.ActorMessages.ACTIVATE)
henry:RegisterToMessages(guid, enums.EventType.ACTOR, enums.ActorMessages.ACTIVATE)
player:SetControlStyle(enums.ControlStyle.FREE)
game.game:SoundFadeIn(1000)
return game.hud:FaderFadeIn(1000)
end
})
end
function CreateActionJoe(_ARG_0_)
joe:RegisterToMessages(guid)
Math:newVector():set(0, 0, 0)
action = game.game:CreateScriptActorAction(joe, Math:newVector(), 1.5, 'StartMe', '0050000023')
end
function CreateActionHenry(_ARG_0_)
henry:RegisterToMessages(guid)
Math:newVector():set(0, 0, 0)
actionHenry = game.game:CreateScriptActorAction(henry, Math:newVector(), 1.5, 'StartHenry', '0050000023')
end
function StartHenry(_ARG_0_)
id = CommandBuffer:Insert(_ARG_0_, {
function(_ARG_0_)
game.game:ChangePlayerModel('VITSUIT', -1)
end,
function(_ARG_0_)
_ARG_0_.friendlyDoorCfg:AddWingman(henry:GetGuid())
soHenry = henry:Follow(game.game:GetActivePlayer(), 'RUN', 3.5, 5, true)
game.game:GetActivePlayer():RegisterFollower(henry)
return game.delayed:CreateDelayedSynchroObject(100)
end,
function(_ARG_0_)
actionHenry:SetEventName('StopHenry')
actionHenry:SetTextId('0050000024')
end
})
end
function StopHenry(_ARG_0_)
id = CommandBuffer:Insert(_ARG_0_, {
function(_ARG_0_)
game.game:ChangePlayerModel('VITPRA', -1)
end,
function(_ARG_0_)
_ARG_0_.friendlyDoorCfg:RemoveWingman(henry:GetGuid())
if soHenry ~= nil then
soHenry:UserData():Terminate()
end
player:UnregisterFollower(henry)
return game.delayed:CreateDelayedSynchroObject(100)
end,
function(_ARG_0_)
actionHenry:SetEventName('StartHenry')
actionHenry:SetTextId('0050000023')
end
})
end
function StartMe(_ARG_0_)
id = CommandBuffer:Insert(_ARG_0_, {
function(_ARG_0_)
game.game:ChangePlayerModel('VITTUX', -1)
end,
function(_ARG_0_)
_ARG_0_.friendlyDoorCfg:AddWingman(joe:GetGuid())
soJde = joe:Follow(game.game:GetActivePlayer(), 'RUN', 2, 3.5, true)
game.game:GetActivePlayer():RegisterFollower(joe)
return game.delayed:CreateDelayedSynchroObject(100)
end,
function(_ARG_0_)
action:SetEventName('StopMe')
action:SetTextId('0050000024')
end
})
end
function StopMe(_ARG_0_)
id = CommandBuffer:Insert(_ARG_0_, {
function(_ARG_0_)
game.game:ChangePlayerModel('VITPRA', -1)
end,
function(_ARG_0_)
_ARG_0_.friendlyDoorCfg:RemoveWingman(joe:GetGuid())
if soJde ~= nil then
soJde:UserData():Terminate()
end
player:UnregisterFollower(joe)
return game.delayed:CreateDelayedSynchroObject(100)
end,
function(_ARG_0_)
action:SetEventName('StartMe')
action:SetTextId('0050000023')
end
})
end
Эти изменения сделают скрипт FreeRide более динамичным и интересным, позволяя игроку наслаждаться разнообразным игровым опытом.
原文地址: https://www.cveoy.top/t/topic/nKdw 著作权归作者所有。请勿转载和采集!