AspirinSGD, 1) да 2) нет, новая тема это уже перебор 3) Автор прекратил развитие, заниматься нет времени, можно убрать 4) да, в старые никто не играет, всем нужны новые
AspirinSGD, уже спросил. Итак, выкладываю полную версию скрипта, со всеми сопутсвующими функциями(внимание, не тестировал!(ибо не дома, ноут не тянет ваш шаталкер))! Огромная просьба создать себе файл с этим скриптом, подключить его к игре и проверить с помощью спавн-меню, после чего отписаться, не будет ли вылетов и т.д. Скрипт найдете под спойлером. За помощь выражаю благодарность народу с форума АМК, который объяснил мне кое-чего в скриптах им команды и помог начать освоение скриптов
self.chtime=time_global()+2000 if self.object:clsid()==clsid.controller_s and self.object:alive() then amk.mylog("zombifying") local npc=self.object:get_enemy() if npc then if npc:id()~=db.actor:id() and npc:clsid()==clsid.script_stalker and self.object:see(npc) and npc:character_community()~="zombied" and self.object:position():distance_to(npc:position())<30 then
local sobj=alife():object( npc:id() ) if sobj and sobj.online then local zomb=amk.load_table("zombies") zomb[sobj.id]={master=self.object:id(),comm=npc:character_community(),gw=npc:goodwill(db.actor)} amk.save_table("zombies",zomb) npc:set_character_community("zombied",0,0) local orgtbl=amk.read_stalker_params(sobj) if (not string.find(orgtbl.profile,"_zombi")) then orgtbl.profile=orgtbl.profile.."_zombi" end amk.mylog("zombied "..npc:name().." profile "..orgtbl.profile) amk.write_stalker_params(orgtbl,sobj) end end end end ===============================Реализация функций для скрипта(вынести в отдельный файл!)=======================================
function save_pstor_table(pk, tbl, obj) local tp for k, v in pairs(tbl) do if v == true then pk:w_u8(pstor_true) elseif v == false then pk:w_u8(pstor_false) else tp = type(v) if tp == "number" then pk:w_u8(pstor_number) pk:w_float(v) elseif tp == "string" then pk:w_u8(pstor_string) pk:w_stringZ(v) elseif tp == "table" then pk:w_u8(pstor_table) xr_logic.save_pstor_table(pk, v, obj) elseif tp == "userdata" then pk:w_u8(pstor_custom) pk:w_stringZ(v.classname == k and "" or v.classname) v:save(pk) else abort("xr_logic.save_pstor_table for %s: not registered type '%s' encountered [ %s :: %s ]", obj:name(), tv, k, utils.to_str(v)) end end pk:w_stringZ(k) end pk:w_u8(pstor_end_table) end
function load_pstor_table(pk, tbl, obj) local k, v, n while true do n = pk:r_u8() if n == pstor_end_table then return tbl else if n == pstor_true then v = true elseif n == pstor_false then v = false elseif n == pstor_number then v = pk:r_float() elseif n == pstor_string then v = pk:r_stringZ() elseif n == pstor_table then v = {} xr_logic.load_pstor_table(pk, v, obj) elseif n == pstor_custom then local cls = reader:r_stringZ() if cls == "" then cls = k end v = pstor_custom_impl[cls]() v:load(pk) else abort("У объекта [%s] повреждён пстор, этим сохранением нельзя пользоваться - удалите его и переиграйте с предыдущего.", obj:name()) v = nil end k = pk:r_stringZ() tbl[k] = v end end end
function pstor_save_all(obj, packet) local npc_id = obj:id() local pstor = db.storage[npc_id].pstor if not pstor then pstor = {} db.storage[npc_id].pstor = pstor end save_pstor_table(packet, pstor, obj) end
function pstor_load_all(obj, reader) local npc_id = obj:id() local pstor = db.storage[npc_id].pstor if not pstor then pstor = {} db.storage[npc_id].pstor = pstor end if (not db.actor) and npc_id ~= 0 then abort("Не создан актор. Возможно, синтаксическая ошибка в bind_stalker.script") end load_pstor_table(reader, pstor, obj) end
Сообщение отредактировал vlad8599 - Среда, 04.01.2017, 00:12
Stan, ну, аватар не особо много значит. Ты вначале попробуй включить скрипт в игру, поиграй с ним чуток, дабы убедиться, что не будет всяких обидных вылетов, а потом уже жалуйся. А я снова пойду просить совета у местных мододелов или попробую сам запилить фикс.
Добавлено (04.01.2017, 00:21) --------------------------------------------- NecrONIKS, эти параметры реализованы ниже. Вам остается только поправить имена параметров, дабы не вылетело при запуске.
Сообщение отредактировал vlad8599 - Среда, 04.01.2017, 00:25