add game&rawdata

This commit is contained in:
Vasily Petrov 2026-06-17 23:06:51 +03:00
parent 0133cd976c
commit 49b34b5546
45731 changed files with 709831 additions and 0 deletions

View file

@ -0,0 +1,108 @@
-- Lua class for managing story_objects.
local story_obj_registry = nil
class "story_objects_registry"
function story_objects_registry:__init ()
self.id_by_story_id = {}
self.story_id_by_id = {}
end
function story_objects_registry:register(obj_id , story_obj_id, on_register)
if self.id_by_story_id[story_obj_id] ~= nil then
if obj_id ~= self.id_by_story_id[story_obj_id] then
local exist_obj_name = alife():object(self.id_by_story_id[story_obj_id]):name()
local adding_obj_name = alife():object(obj_id):name()
abort("You are trying to spawn two or more objects with the same story_id:[%s] --> [%s] try to add:[%s]", story_obj_id, exist_obj_name, adding_obj_name)
end
elseif self.story_id_by_id[obj_id] ~= nil then
if self.story_id_by_id[obj_id] ~= story_obj_id then
abort("Object [%s] is already in story_objects_registry with story_id[%s]", tostring(obj_id), story_obj_id)
end
end
self.id_by_story_id[story_obj_id] = obj_id
self.story_id_by_id[obj_id] = story_obj_id
end
function story_objects_registry:unregister_by_id(obj_id)
if self.story_id_by_id[obj_id] ~= nil then
self.id_by_story_id[self.story_id_by_id[obj_id]] = nil
self.story_id_by_id[obj_id] = nil
end
end
function story_objects_registry:unregister_by_story_id(story_id)
if self.id_by_story_id[story_id] ~= nil then
self.story_id_by_id[self.id_by_story_id[story_id]] = nil
self.id_by_story_id[story_id] = nil
end
end
function story_objects_registry:get(story_obj_id)
return self.id_by_story_id[story_obj_id]
end
function story_objects_registry:get_story_id(obj_id)
return self.story_id_by_id[obj_id]
end
function story_objects_registry:save(packet)
set_save_marker(packet, "save", false, "story_objects")
local count = 0
for k,v in pairs(self.id_by_story_id) do
count = count + 1
end
if count > 65534 then
print_table(self.id_by_story_id)
abort("There is too many story_ids!!!")
end
packet:w_u16(count)
for k,v in pairs(self.id_by_story_id) do
packet:w_stringZ(k)
packet:w_u16(v)
end
set_save_marker(packet, "save", true, "story_objects")
end
function story_objects_registry:load(packet)
set_save_marker(packet, "load", false, "story_objects")
local count = packet:r_u16()
for i = 1, count do
local story_id = packet:r_stringZ()
local obj_id = packet:r_u16()
self.id_by_story_id[story_id] = obj_id
self.story_id_by_id[obj_id] = story_id
end
set_save_marker(packet, "load", true, "story_objects")
end
function get_story_objects_registry()
if story_obj_registry == nil then
story_obj_registry = story_objects_registry()
end
return story_obj_registry
end
function check_spawn_ini_for_story_id(se_obj)
--printf("checking obj[%s] for story_id!!!",se_obj:name())
local spawn_ini = se_obj:spawn_ini()
if spawn_ini:section_exist("story_object") then
local result, id, value
result, id, value = spawn_ini:r_line("story_object",0,"","")
if id ~= "story_id" then
abort("There is no 'story_id' field in [story_object] section :object [%s]", se_obj:name())
end
if value == "" then
abort("Field 'story_id' in [story_object] section got no value :object [%s]", se_obj:name())
end
get_story_objects_registry():register(se_obj.id , value, true)
return
end
spawn_ini = system_ini()
local spawn_sect = se_obj:section_name()
local story_id = utils.cfg_get_string(spawn_ini, spawn_sect, "story_id", nil, false, "", nil)
if story_id ~= nil then
get_story_objects_registry():register(se_obj.id , story_id, true)
end
end