Пример использования событий onStartNewGame, onSaveGame и onLoadGame, добавленных в версии .023.
CollectVehicles.lua
script_name('CollectVehicles')
script_author('FYP')
script_version_number(1)
local blacklist = {435, 441, 449, 450, 464, 465, 501, 528, 537, 538, 564, 569, 570, 584, 590, 591, 594, 606, 607, 608, 610, 611}
--- Main
function main()
playerMadeProgress(1000)
if isSampLoaded() then return end
local incar = false
while true do
wait(0)
if isPlayerPlaying(PLAYER_HANDLE) then
if doesCharExist(PLAYER_PED) and not isCharDead(PLAYER_PED) then
if isCharInAnyCar(PLAYER_PED) and not incar then
on_player_got_into_vehicle(storeCarCharIsInNoSave(PLAYER_PED))
incar = true
elseif incar then
incar = false
end
end
end
end
end
function on_player_got_into_vehicle(veh)
local model = getCarModel(veh)
if list_find(blacklist, model) then
return
end
if not list_find(collected_vehicles, model) then
table.insert(collected_vehicles, model)
local total = 212 - #blacklist
local coll = #collected_vehicles
setGxtEntry('_NEWVEH', string.format('~w~New vehicle~n~~y~%d~w~/~y~%d', coll, total))
printBig('_NEWVEH', 100, 2)
if coll == total then
setGxtEntry('CVBONUS', 'All vehicles collected!~n~~w~$20000~n~Respect +')
printBigQ('CVBONUS', 500, 1)
awardPlayerMissionRespect(100)
givePlayerMoney(PLAYER_HANDLE, 20000)
playMissionPassedTune(2)
elseif select(2, math.modf(coll / 20)) == 0 then
setGxtEntry('CVBONUS', string.format('%d of %d vehicles collected!~n~~w~Respect +', coll, total))
printBigQ('CVBONUS', 100, 1)
awardPlayerMissionRespect(5)
end
end
end
--- Events
function onStartNewGame(mpack)
collected_vehicles = {}
end
function onLoadGame(data)
data = data or {}
collected_vehicles = data.vehicles or {}
end
function onSaveGame(data)
return {vehicles = collected_vehicles}
end
--- Functions
function list_find(list, value)
for i,v in ipairs(list) do
if v == value then return i end
end
return nil
end