add game&rawdata
This commit is contained in:
parent
0133cd976c
commit
49b34b5546
45731 changed files with 709831 additions and 0 deletions
238
gamedata/scripts/xr_sound.script
Normal file
238
gamedata/scripts/xr_sound.script
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
--'-------------------------------------------------------------------------------------------------------------------
|
||||
--' Ñõåìà îçâó÷êè
|
||||
--' àâòîð: Äèäåíêî Ðóñëàí (Stohe)
|
||||
--'--------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--function printf()
|
||||
--end
|
||||
|
||||
sound_table = {}
|
||||
|
||||
function set_sound_play(npc_id, sound, faction, point)
|
||||
--printf("SET_SOUND_PLAY. theme[%s] object[%s]", tostring(sound), npc_id)
|
||||
if sound == nil then
|
||||
return
|
||||
end
|
||||
if sound_theme.theme[sound] == nil then
|
||||
abort("set_sound_play. Wrong sound theme [%s], npc[%s]", tostring(sound), npc_id)
|
||||
return
|
||||
end
|
||||
local snd_theme = sound_theme.theme[sound]
|
||||
if snd_theme.class_id == "looped_sound" then
|
||||
abort("You trying to play sound [%s] which type is looped", sound)
|
||||
end
|
||||
if sound_table[npc_id] == nil or snd_theme.play_always == true then
|
||||
if sound_table[npc_id] ~= nil then
|
||||
--printf("sound table not nil")
|
||||
if(sound_table[npc_id].reset~=nil) then
|
||||
sound_table[npc_id]:reset(npc_id)
|
||||
else
|
||||
--printf("--------------"..type(sound_table[npc_id]))
|
||||
--printf("npc_id="..npc_id)
|
||||
--printf("sound="..sound)
|
||||
end
|
||||
end
|
||||
--printf("PLAY. theme[%s] object[%s]", tostring(sound), npc_id)
|
||||
if snd_theme:play(npc_id, faction, point) then
|
||||
--printf("PLAY2. theme[%s] object[%s]", tostring(sound), npc_id)
|
||||
--' fill table
|
||||
sound_table[npc_id] = snd_theme
|
||||
end
|
||||
else
|
||||
--printf("xr_sound: cannot play sound [%s] because i'm [%s] already play snd [%s]",tostring(sound), npc_id, sound_table[npc_id].path)
|
||||
return sound_table[npc_id].snd_obj
|
||||
end
|
||||
return sound_table[npc_id] and sound_table[npc_id].snd_obj
|
||||
end
|
||||
|
||||
function update(npc_id)
|
||||
if sound_table[npc_id] then
|
||||
-- local t = type(sound_table[npc_id])
|
||||
if not(sound_table[npc_id]:is_playing(npc_id)) then
|
||||
-- if(t=="string") or not(sound_table[npc_id]:is_playing(npc_id)) then
|
||||
-- if(t=="string") then
|
||||
-- sound_table[npc_id] = sound_theme.theme[sound_table[npc_id]]
|
||||
-- end
|
||||
|
||||
--printf("SOUND_CALLBACK from [%s] sound_path [%s]",npc_id,sound_table[npc_id].path)
|
||||
sound_table[npc_id]:callback(npc_id)
|
||||
sound_table[npc_id] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
looped_sound = {}
|
||||
|
||||
function play_sound_looped(npc_id, sound)
|
||||
local snd_theme = sound_theme.theme[sound]
|
||||
if snd_theme == nil then
|
||||
abort("play_sound_looped. Wrong sound theme [%s], npc[%s]", tostring(sound), npc_id)
|
||||
end
|
||||
if snd_theme.class_id ~= "looped_sound" then
|
||||
abort("You trying to play sound [%s] which type is not looped", sound)
|
||||
end
|
||||
if looped_sound[npc_id] ~= nil and looped_sound[npc_id][sound] ~= nil and looped_sound[npc_id][sound]:is_playing(npc_id) then
|
||||
return
|
||||
end
|
||||
if snd_theme:play(npc_id) then
|
||||
printf("PLAY2. looped theme[%s] object[%s]", tostring(sound), npc_id)
|
||||
if looped_sound[npc_id] == nil then
|
||||
looped_sound[npc_id] = {}
|
||||
end
|
||||
looped_sound[npc_id][sound] = snd_theme
|
||||
end
|
||||
end
|
||||
function stop_sound_looped(npc_id, sound)
|
||||
if sound then
|
||||
if type(looped_sound[npc_id][sound]) ~= "string" then
|
||||
if looped_sound[npc_id][sound] and looped_sound[npc_id][sound]:is_playing(npc_id) then
|
||||
printf("looped sound ["..tostring(sound).."] stop for obj [%s]",npc_id)
|
||||
looped_sound[npc_id][sound]:stop()
|
||||
looped_sound[npc_id][sound] = nil
|
||||
end
|
||||
end
|
||||
else
|
||||
if looped_sound[npc_id] then
|
||||
for k,v in pairs(looped_sound[npc_id]) do
|
||||
if v and type(v) ~= "string" and v:is_playing(npc_id) then
|
||||
printf("looped sound ["..tostring(k).."] stop for obj [%s]",npc_id)
|
||||
v:stop()
|
||||
end
|
||||
end
|
||||
looped_sound[npc_id] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function set_volume_sound_looped(npc_id, sound, level)
|
||||
if looped_sound[npc_id] then
|
||||
if looped_sound[npc_id][sound] and looped_sound[npc_id][sound]:is_playing(npc_id) then
|
||||
printf("looped sound ["..tostring(sound).."] for obj ["..npc_id.."] set volume "..level)
|
||||
looped_sound[npc_id][sound]:set_volume(level)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function actor_save(thread)
|
||||
set_save_marker(thread, "save", false, "sound_actor_save")
|
||||
for k,v in pairs(sound_theme.theme) do
|
||||
v:save(thread)
|
||||
end
|
||||
local n = 0
|
||||
for k,v in pairs(sound_table) do
|
||||
n = n + 1
|
||||
end
|
||||
thread:w_u16(n)
|
||||
for k,v in pairs(sound_table) do
|
||||
thread:w_u16(k)
|
||||
--[[
|
||||
if(type(v.section)~="string") then
|
||||
thread:w_stringZ(v)
|
||||
else
|
||||
]]
|
||||
thread:w_stringZ(v.section)
|
||||
-- end
|
||||
end
|
||||
n = 0
|
||||
for k,v in pairs(looped_sound) do
|
||||
n = n + 1
|
||||
end
|
||||
thread:w_u16(n)
|
||||
for k,v in pairs(looped_sound) do
|
||||
thread:w_u16(k)
|
||||
n = 0
|
||||
for kk,vv in pairs(looped_sound[k]) do
|
||||
n = n + 1
|
||||
end
|
||||
thread:w_u16(n)
|
||||
for kk,vv in pairs(looped_sound[k]) do
|
||||
thread:w_stringZ(kk)
|
||||
--[[
|
||||
if(type(vv.section)~="string") then
|
||||
thread:w_stringZ(vv)
|
||||
else
|
||||
thread:w_stringZ(vv.section)
|
||||
end
|
||||
]]
|
||||
end
|
||||
end
|
||||
set_save_marker(thread, "save", true, "sound_actor_save")
|
||||
end
|
||||
function actor_load(thread)
|
||||
set_save_marker(thread, "load", false, "sound_actor_save")
|
||||
for k,v in pairs(sound_theme.theme) do
|
||||
v:load(thread)
|
||||
end
|
||||
sound_table = {}
|
||||
local n = thread:r_u16()
|
||||
for i = 1,n do
|
||||
local id = thread:r_u16()
|
||||
local theme = thread:r_stringZ()
|
||||
-- sound_table[id] = thread:r_stringZ()
|
||||
sound_table[id] = sound_theme.theme[theme]
|
||||
end
|
||||
looped_sound = {}
|
||||
n = thread:r_u16()
|
||||
for i = 1,n do
|
||||
local id = thread:r_u16()
|
||||
looped_sound[id] = {}
|
||||
n = thread:r_u16()
|
||||
for i = 1,n do
|
||||
local sound = thread:r_stringZ()
|
||||
-- looped_sound[id][sound] = thread:r_stringZ()
|
||||
looped_sound[id][sound] = sound_theme.theme[sound]
|
||||
end
|
||||
end
|
||||
set_save_marker(thread, "load", true, "sound_actor_save")
|
||||
end
|
||||
|
||||
function save_npc(thread, npc_id)
|
||||
set_save_marker(thread, "save", false, "sound_npc_save")
|
||||
for k,v in pairs(sound_theme.theme) do
|
||||
v:save_npc(thread, npc_id)
|
||||
end
|
||||
set_save_marker(thread, "save", true, "sound_npc_save")
|
||||
end
|
||||
function load_npc(thread, npc_id)
|
||||
set_save_marker(thread, "load", false, "sound_npc_save")
|
||||
for k,v in pairs(sound_theme.theme) do
|
||||
v:load_npc(thread, npc_id)
|
||||
end
|
||||
set_save_marker(thread, "load", true, "sound_npc_save")
|
||||
end
|
||||
|
||||
|
||||
function start_game_callback()
|
||||
sound_table = {}
|
||||
end
|
||||
|
||||
function stop_all_sounds()
|
||||
for k,v in pairs(sound_table) do
|
||||
if(type(v)~="string") then
|
||||
v:stop()
|
||||
end
|
||||
end
|
||||
for k,v in pairs(looped_sound) do
|
||||
for k,v in pairs(looped_sound[k]) do
|
||||
if v and v:is_playing(npc_id) then
|
||||
printf("looped sound ["..tostring(k).."] stopped ")
|
||||
v:stop()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function stop_sounds_by_id(obj_id)
|
||||
local sound = sound_table[obj_id]
|
||||
if sound and sound.stop then
|
||||
sound:stop(obj_id)
|
||||
end
|
||||
local looped_snd = looped_sound[obj_id]
|
||||
if looped_snd then
|
||||
for k,v in pairs(looped_snd) do
|
||||
if v and v:is_playing(obj_id) then
|
||||
v:stop(obj_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue