Viнt@rь 50 Опубликовано 20 Февраля 2011 (изменено) Disord а зачем тебе инфопоршень? AKKK1 правильно написал, но если у тебя своя функция, то просто вставь ее примерно так: function budu_v_bunkere_spat() amk.start_timer("sleep_matras",0.1,matras) end Строгое предупреждение от модератора Куфзук 2.3. Красным цветом имеют право писать только модераторы и авторы в шапке темы. Изменено 20 Февраля 2011 пользователем Куфзук GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 5 Января 2012 (изменено) NaslednikTutti, эхх хотел написать, но товарищ Artos меня опередил... Так что, только повторю его слова: а ты не заметил, что четырежды вызывая по сути одну и ту же функцию (меняются только координаты спавна), ты спавнишь одну и ту же секцию непися "military_camp_npc_1"?! Вообще непонятно как у тебя разные спавнятся ... Или приводи тут точный код, который используешь или гадай самомтоятельно. и если ты хочешь, что бы у них логика была разная, то нужно и писать им разную логику... а не спавнить всех с одной и той же логикой... по идее у снайпера ну никак не будет такая же логика, что и у тех трех НПС... Изменено 5 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 6 Января 2012 Igor88.89 сорри, не помню точно, но помойму при спавне через скрипт, что бы заспавнить на определенный локе - обязательно надо указывать lvlid и gvid position_table = { [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой}, [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой}, [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой} -- и так далее } local aNums = {} function spawn_anoms() local rCount = math.random(1,#position_table) for i = 1,rCount do local rNum = math.random(1,#position_table) if aNums[rNum] then rNum = rNum+1 --что бы не спавнить в одно и тоже место end local tT = position_table[rNum] alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] ) aNums[rNum] = {} --примено так, сорри если что, точно не помню end end в прочем как-то так)), но стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 6 Января 2012 (изменено) Igor88.89 #position_table - Операция получения длины массива/таблицы, а math.random(1,#position_table) берет рандомное число из промежутка от 1, до числа, которое вернет #position_table Изменено 6 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 6 Января 2012 (изменено) да... только обязательно учти стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам Изменено 6 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 7 Января 2012 Igor88.89, тогда примерно так local lTbl = {"marsh","escape"} local position_table= { ["marsh"] = { [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой}, [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой}, [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой} -- и так далее }, ["escape"] = { [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой}, [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой}, [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой} -- и так далее } -- и так далее } function spawn_anoms() for k,v in pairs(lTbl) do local aNums = {} local rCount = math.random(1,#position_table[v]) for i = 1,rCount do local rNum = math.random(1,#position_table[v]) if aNums[rNum] then rNum = rNum+1 --что бы не спавнить в одно и тоже место end local tT = position_table[rNum] alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] ) aNums[rNum] = {} --примено так, сорри если что, точно не помню end end end GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 7 Января 2012 Igor88.89 вот сдесь я допустил ошибку надо не local tT = position_table[rNum] а local tT = position_table[v][rNum] вот только не помню передастся ли v из первого цикла во второй, если нет то после первого цикла добавь такое local level_name = v и тогда это будет так local tT = position_table[level_name][rNum] GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 8 Января 2012 (изменено) strelok200, 1. если ты пользуешься логовыми функциями, то первое, что они делают - это выводят твой текст-лог в консоль, а двиг читает любую введенную консольную строку как команду... Посему и пишет Unknown command, а nil - это ты видимо пытаешься выдать в консоль команду nil 2. на платформах ЗП/ЧН: в отличии от ТЧ, на этих двух платформах(как я заметил) если просто выводить текст-лог в консоль, то в консоли тоже пишется Unknown command: твоя строка, но такое возможно от силы 2 раза, в последствии чего происходит фатальная ошибка, после чего лог не выводиться в консоль вообще, да и сама игра/скрипты начинают дико тупить, потому обычно перед своей строкой для вывода в лог приписывают такое: "load ~~~ " -- Заметка на будущее если что) Изменено 8 Января 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 5 Марта 2012 (изменено) Так как раньше тема называлась "скриптирование, спавн и логика" и более подходящей темы для моего вопроса нет, то я задам его сдесь. Мб кто знает почему на движке ЗП вертолет, после пролета по паре точек, начинает лететь криво, тоесть: вот он спавнится, летит нормально мордой вниз хвост вверх, но при пролете через пару точек он начинает менять свое положение противоположно - морда вверх и хвост вниз, и потом летит так постоянно? Что пробывал: 1) делал точки как в ТЧ 2) все скрипты/конфиги были взяты из ТЧ и переделаны/адаптированы под ЗП Результат: все тоже самое Изменено 5 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 5 Марта 2012 *Shoker*, т. point_look у вертолета используется только тогда, когда он стоит на месте. Ну или ещё вариант, перемудрил со скоростью вертолёта. проверил, не в скорости дело( GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 12 Марта 2012 (изменено) Tris, ты даже не удосужился полезть в скрипты, почти, любого мода, так как во многих из них используются функции сохранения/загрузки переменных, например: скрипты Artos`a, амк мода, и тп, включая оригинальный, пысовский, скрипт xr_logic в котором есть функции эти функции: 1.pstor_store(obj, varname, val) - сохранение переменной varname с значением val в пстор obj 2.pstor_retrieve(obj, varname, defval) - -загрузка переменной varname из пстора obj, если такой переменной нет, то вернет defval в крайнем случае, можно воспользоваться сохранением/загрузки твоей переменной пакетом, выполнять действие на сейв/лоад актора. Изменено 12 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 15 Марта 2012 (изменено) Vano_Santuri, а зачем вообще такой геморой? Свободно можно отсекать всех нпс и выбирать самого ближнего к трупу, не заполняя таблицу всеми нпс, которые вокруг. О таблице всех нпс на локе, зачем? радиус алайфа ну совсем мизерный... Мой совет, при убийстве нпс, просто искать живых нпс в определенном радиусе. Я давно заметил, что у тебя, сендером, берется первый попавшийся нпс, но ведь можно сделать так, что при каждом пробеге цикла будет искаться нпс, который ближе всех к трупу, ну тоесть: мой пример: function GetSender(sType, oPos, oKiller) local oSender = nil if sType == "murder" then local iMinDist = 30 local iMaxDist = 100 for k,v in pairs(db.storage) do local oTrav = level.object_by_id(k) if oTrav and IsStalker(oTrav) and oTrav:character_community() ~= "actor" and not ExcludedNpcs(oTrav) then if xr_wounded.is_wounded(oTrav) == false and oTrav:alive() then if oKiller then if oTrav:id() ~= oKiller:id() then fGetSender = true end else fGetSender = true end if fGetSender then local DiffDist = oPos:distance_to(oTrav:position()) if DiffDist < iMaxDist and DiffDist > iMinDist then iMaxDist = DiffDist -- я об этом oSender = oTrav end end end end end end return oSender end ЗЫ это так же логичней/реалистичней, в плане нахождения реального сендера, в добавок - намного оптимальней ЗЫЫ сам щас сижу, новости делаю, когда посмотрел, что там у тебя в скриптах, то увидел много чего лишнего, в смысле достаточно много одинакового кода, можно с помощью одной-двух проверок урезать код в несколько раз... Изменено 15 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 15 Марта 2012 (изменено) Artos, а разве хранение всех данных о нпс в еще одной табличке не даст той же нагрузки, что и проверка? К тому же, как я сказал ранее, радиус алайфа ну черезвычайно маленький(сделать больше - будут лаги), а ведь только онлайновые нпс обновляются... К чему я веду, к тому, что нпс в онлайне на локации мало, а убийств/смертей нпс еще меньше, тоесть проверка выполняется вообще мизерное кол-во раз(правда если ГГ не начнет гамселить всех и вся), так зачем же тогда создавать и заполнять еще одну табличку... если можно получить НПС из стораджа и из него уже "вытянуть" инфу... Твою точку зрения я понял и я с ней согласен, но все же... Если бы, все обьекты (хотя бы одной)локации были онлайн, то, то, что ты предлагаешь, надо делать в первую очередь, так как события происходили бы по всей локе постоянно, а не только там, где находится ГГ, и в таком случае проверка действительно выполнялась бы через чур часто... Ну и ... как ранее заметил Vano_Santuri, все же не стОит алгоритм загонять в жесткие рамки. Если у костра сидит с десяток сталкеров - то ближайший к некоей точке вне костра будет как правило только один - что на "реализЬм" новостей плохо сказывается, превращая этого "ближнего" в штатного корреспондента. Лично у меня, в данном случае, это наблюдатель, для новостей типа видел/слышал, потому, такой вариант мне подходит, нет, даже больше, такой вариант для меня идеален Сорри, чет понесло в оффтоп... Изменено 15 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 16 Марта 2012 (изменено) Vano_Santuri, небольшое предложение по function give_spamm(objId) local spammers = {} -- Таблица спамеров. function GiveStalker() for k, v in pairs(db.storage) do local obj = level.object_by_id(k) if (obj) and (IsStalker(obj)) and (obj:alive()) and (obj:id() ~= db.actor:id()) then local ComObj = obj:character_community() if VS_send_news.CommunityChenalStatus(ComObj,1) then --Проверка на открытость канала if ValNpc(obj)~=true then --Отсекаем квестовых нпс local objId = obj:id() if not CheckSpamm(objId) then spammers[objId] = true -- Добавляем спамера. return obj -- нашли не спамера - отлично. end end end end end end function CheckSpamm(objId) if #spammers > 7 then spammers = {} -- чистим таблицу спамеров. elseif spammers[objId] then return true end return nil end ЗЫ так по идее и чиститься должна... Изменено 16 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 16 Марта 2012 (изменено) *Shoker*, 2) #spammers и table.getn корректно сработает только для таблицы где в качестве ключа идут порядковые номера, то есть ты ошибаешься) даже в таблице со строковым содержимым есть порядковые номера этих строк))) потому эти функции работают корректно Изменено 16 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 16 Марта 2012 *Shoker*, вот тебе пример ... local sTime = Time[math.random(#Time)] ... Таблица: Time = {"недавно","несколько минут назад","минут десять назад",...} GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 16 Марта 2012 (изменено) *Shoker*, вродь с table.insert(spammers, objId) -- Добавляем спамера. должно быть норм... хотя не уверен Vano_Santuri, и всетаки table.insert советую пренебречь(в последнее время начал опасаться этой дьявольской функции ) по поводу заполнения спамеров в таблицу: можно попробывать вариан с щетчиком local spammers = {} -- Таблица спамеров. local sCount = 0 function GiveStalker() for k, v in pairs(db.storage) do local obj = level.object_by_id(k) if (obj) and (IsStalker(obj)) and (obj:alive()) and (obj:id() ~= db.actor:id()) then local ComObj = obj:character_community() if VS_send_news.CommunityChenalStatus(ComObj,1) then --Проверка на открытость канала if ValNpc(obj)~=true then --Отсекаем квестовых нпс local objId = obj:id() if (give_spamm(objId) ~= "spammer") then sCount = sCount + 1 spammers[objId] = true -- Добавляем спамера. return obj -- нашли не спамера - отлично. end end end end end end function give_spamm(objId) if sCount > 7 then spammers = {} -- Чиcтим таблицу спамеров. sCount = 0 end for k, v in pairs(spammers) do local spammer = spammers[k] if objId == spammer then return "spammer" end end end а это зачем? for k, v in pairs(spammers) do local spammer = spammers[k] if objId == spammer then return "spammer" end end выборку ведь можно делать не через цикл, а смотреть есть ли данный ид в таблице... ЗЫ саму таблицу и счетчик можно сохранять методом записи переменных, это не проблематично... Изменено 16 Марта 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 16 Марта 2012 *Shoker*, я имел ввиду как я показывал ранее, а с table.insert да и вообще со всеми table.***** 1. они очень медленные 2. у меня изза инсерта походу переполнение происходит и потом начинаются баги, что апдейт актора глохнит и сейвы бьются... да и вообще при начале разработки новостей везде использовались функции table.**** в итоге были повисания, баги(как изза инсерта, что я описал выше), и вылеты... GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 22 Марта 2012 *Shoker*, у нас тоже был баг изза restrictor_type = 0, но повисал, судя по всему, апдейт актора, так как все остальное работает исправно, советую тебе попробывать restrictor_type = 3 - самый обычный(стандартный), пыс только его и используют(почти), а у нас, после исправления всех типов на 3 с 0, перестал повисать апдей актора. GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение
Viнt@rь 50 Опубликовано 8 Октября 2012 (изменено) В сендбоксе от xStream, в скрипте xs_sandbox и в системе таймеров(слотов/сигналов) от Malandrinus в скрипте ogse_signals заприметил очень интересную строчку(заприметил то давно, но сильный интерес она вызвала сейчас) - level.add_call(hanged_calls_check, function()end), как и когда срабатывает это(как я понял, это вызов функции при повисании логики/биндера актора), и как его можно использовать в своих целях, при этом не используя системы этих авторов, но что бы результат был такой же(ЗЫ, у меня используется своя система таймеров, но никаких модульных систем типа слотов/сигналов и тп, не используется) Изменено 8 Октября 2012 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Поделиться этим сообщением Ссылка на сообщение