Ulman 5 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 abramcumner, да это вот только что тоже заметил, но ещё увидел, что одно обращение всё таки есть: function lstats() local can_spawn = {} printf("***************** LIMITS STATISTIC *********************") for k,v in pairs(respawners) do -- Запоминаем максимальное количество весов для данного респавнера local wage = 0 for kk,vv in pairs(v.respawn_section) do wage = wage + vv.prob end -- Заносим максимальное количество всех типов чуваков, которые данный респавнер может наспаунить. for kk,vv in pairs(v.respawn_section) do local tt = v.sectSpawnProps[vv.section] local community_rank = tt.community.."_"..tt.rank if can_spawn[community_rank] == nil then can_spawn[community_rank] = {community = tt.community, rank = tt.rank} end end end -- Выводим все это в общей статистике local total_max, total_prob, total_current, total_limit = 0,0,0,0 for k,v in pairs(can_spawn) do local cs = sim_statistic.simNpcCount(v.community, v.rank) local gl = simMaxCount[k] if gl == nil then gl = 0 end total_current = total_current + cs total_limit = total_limit + gl printf("%s current=%s limit=%s", k, cs, gl) end printf("TOTAL: current=%s limit=%s", total_current, total_limit) end Это не оно? Если всё таки это не сработает, то каким способом можно уменьшить? Ссылка на комментарий
Якут 0 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) Всем привет, кто-нибудь знает как выглядит скрипт по ограблению ГГ т.е. каким образом можно удалить всё из инвентаря, и забрать у ГГ все деньги? Речь идет о ЗП. Зарание спасибо. Добавлено через 7 мин.: strelok200, вот есть такая функция. Один её недостаток достаточно сильно тормозит игру вовремя выполнения(это где-то секунда), но зато позволяет удалить не только НПС но и другие объекты, не по сиду, а просто по названию самого объекта. function delete_stalker_bandit_cutscena_zasada_bandit() for a=10,65635,1 do local obj=alife():object(a) if obj and string.find(obj:name(),"marsh_b8_bandit_cutscene_bandit_zasada1") then alife():release(obj,true) end end Изменено 24 Августа 2011 пользователем Якут Ссылка на комментарий
STARTS 0 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 speczadanie --Stop self.button_stop_1 = xml:Init3tButton ("button_stop", self) self:Register (self.button_stop_1, "button_stop") self.button_stop_1:SetWndPos(vector2():set(438,475)) Я использовал такой метод Ссылка на комментарий
_Призрак_ 11 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) Всем привет, кто-нибудь знает как выглядит скрипт по ограблению ГГ т.е. каким образом можно удалить всё из инвентаря, и забрать у ГГ все деньги? Речь идет о ЗП. Зарание спасибо. Удалить все вещи из инвентаря ГГ легко, но очень часто требуется скинуть их в тайник, откуда они потом могут опять попасть к ГГ. Вот функция которую написал я: function actor_look_at_sitnik_hit_to_actor_2() local cbox = level.object_by_id(alife():story_object(2026).id) --получаем тайник около Борова по sid db.actor:inventory_for_each( function (item, actor) local section = item:section() if section == "hand_radio_f" or section == "device_pda" or section == "device_torch" or section == "separator" or section == "mobile_changer" or section == "bolt" then --Сюда пишем исключения return end if system_ini():line_exist(section, "quest_item") then --не удаляем квестовые предметы if system_ini():r_bool(section, "quest_item") then return end end db.actor:transfer_item(item,cbox) --перемещаем end, db.actor) end Кстати в твоей функции есть небольшая ошибка - ты начинаешь переберать с 10 объекта, а вдруг нам не повезло и наш НПС получил id 7? Я использую 3 варианта: Варианты: function delete() for a=10,65635,1 do local obj=alife():object(a) if obj then if string.find(obj:name(),"name") then alife():release(obj,true) end end end end Если вы уверены что НПС в онлайне function delete() for k,v in pairs(db.storage) do local obj = level.object_by_id(k) if obj then if string.find(obj:name(),"aaaa") then alife():release(alife():object(k),true) end end end end Как вариант можно при спавне запомнить id НПС local obj = alife():create(...... amk.save_variable("my_obj_id",obj.id) .... local sobj = alife():object(amk.load_variable("my_obj_id")) if sobj then alife():release(,true) end Изменено 24 Августа 2011 пользователем _Призрак_ Freedom Ссылка на комментарий
strelok200 0 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) А что значит эта строка? for a=10,65635,1 do По названию, то есть по секции? Изменено 24 Августа 2011 пользователем strelok200 Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
*Shoker* 322 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) speczadanie > local can_upgrade_table = {"stalker_outfit", "wpn_ak74"} > Как скриптом, находящимся в этом же файле, проверить: равно ли значение переменной "NUM" хотя бы одному из значений таблицы? Лучше переделай так: local can_upgrade_table = { stalker_outfit = true, wpn_ak74 = true, } Тогда для проверки достаточно будет написать if can_upgrade_table[num] then -- предмет есть в таблице -- else -- нет в таблице -- end > мы можем изменить ширину кнопки. А как по аналогии изменить координату X ? Width это ширина, как раз x, а Height это высота - y И да, откопай в папке scripts фаил LuaHelp.script Там описаны все доступные функции для таких объектов, например ты создал кнопку, ищешь в файле её клас: C++ class CUI3tButton : CUIButton { CUI3tButton (); И вуаля: function SetHeight(number); Ulman На офф. форуме GSC в разделе Моды ТЧ как то kstn выкладывал мод кажется Respawn Fix, соль была в том, что он как раз правил респавнеры и смарты, и по моему как раз возвращал это значение в рабочее состоянее. Я не знаю, вроде он и на АМК тему создавал. М.б ты найдёшь там чо. А вообще стек может переполнится даже от 1 НПС, если в скрипте так сложится обстоятельства. Да и вообще уменьшение людей, это тоже не выход (если конечно игра у тебя не тормозит от них). Какой то скрипт просто тяжёлый для игры или с не доделками. Возможно это AI Additional (если такой есть у тебя) но не факт что он или только он. strelok200 > А что значит эта строка? > for a=10,65635,1 do Любой объект в сталкере при спавне получает свой уникальный (на текущий момент) игровой идентификатор - ID Всего в игре может быть до 65635 объектов. (на всех уровнях) В данном случае механизм работает так - игра перебирает все 65635 объектов (ну не всех конечно, она смотрит сперва, существует ли такой объект в игре вообще, т.к реально их ГОРАЗДО меньше) и если существует, смотрит какие то определённые свойства этого объекта, и если они подходят к чему то, то выполняет какое то действие. Какое действие и какое условие проверки - это уже ты сам решаешь. И да. начинать надо не с 10 а с 1. (иначе первые 10 объектов не будут учтены) И можно короче написать: for a=1, 65635 do Изменено 24 Августа 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Якут 0 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) _Призрак_, в принципи для ЗП и этого хватает(т.к. там именной сид), ещё ни разу эта функция не подводила, но за замечание спасибо учту. Изменено 24 Августа 2011 пользователем Якут Ссылка на комментарий
Artos 99 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) *Shoker*: можно короче написать: for a=1, 65635 do Можно, но правильно писать для итерации по всем объектам в игре так: for a=0, 65634 do Следует не просто зазубривать числа, но и понимать их значение. Немного теории: Игровые идентификаторы (ID) выдаются из диапазона 0 ... 65534, сохраняются в u16 (это 2 байта). 0-ой идентификатор получает объект актора (ГГ), т.к. именно он спавнится первым в игре. 65534 - последний из возможных идентификаторов для объектов в игре. 65535 - это уже несуществующий идентификатор и служит признаком НЕпринадлежности какому-либо объекту. Т.о. при поиске объектов в циклах итерации можно применять запись: for a=1, 65634, которая охватывает все возможные объекты кроме актора. Изменено 24 Августа 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Ulman 5 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 Ну игра не тормозит, но просто это закономерность, вылеты с переполнением стека, только на Баре и там как раз людей, многовато лазит, по крайней мере учитывая малые размеры локации, в алайфе находится уж очень много НПС. Ссылка на комментарий
Artos 99 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 (изменено) Ulman, вылеты с переполнением стека могут иметь две причины: - слабенький комп с ограниченным объемом ОЗУ - 'грязный'/неоптимизированный код (от мододелов). Первая причина встречается уже довольно редко и 'лечится' просто: нужен игровой комп, а не 'печатающая машинка'. Вторая причина встречается гораздо чаще и лечится гораздо сложнее ... Изменено 24 Августа 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Ulman 5 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 Artos, скорее всего проблема первая, так как комп у меня то хороший, но вот ОЗУ маловато, 2 планки по 2гб сгорели и вот сижу пока довольствуюсь одной на 2гб. А со вторым, ну АИ схемы нормально оптимизированы, я говорю про АИ пак 3в1? Ссылка на комментарий
strelok200 0 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 функция у меня не сработала Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
*Shoker* 322 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 strelok200 Покажи её всю. Ulman Ты шо, от твоих 2 гб там ещё и останется Это точно второй случаи. У меня такое на ЧН бывало. Артос правильно сказал, что то криво работает у тебя. Каких то советов сложно дать, но почти наверняка это что то связано со скриптовыми схемами, поэтому когда много НПС, начинаются глюки. У тебя есть Ai Additional? Попробуй его убрать пока. Мне кажется, он грешит этим. Но не факт. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 146 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 abramcumner, да это вот только что тоже заметил, но ещё увидел, что одно обращение всё таки есть: local gl = simMaxCount[k] Это не оно? Если всё таки это не сработает, то каким способом можно уменьшить? Нет, даже по названию это функция для сбора статистики, на население никакого влияния не оказывает. Уменьшить можно только поставив скрипт для редкого респавна. В той же солянке он есть. В нем se_respawn.script как раз и правится. Ну или уменьшив население и количество гулагов Ссылка на комментарий
PavelSnork 3 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 Ребят, помогите пожалуйста. В сталкере ЗП можно чем-нибудь заменить функцию SetOriginalRect? Ее же вырезали из ЗП, верно? Жду ли я Сталкер 2? Хм... Ссылка на комментарий
RvP 1 Опубликовано 24 Августа 2011 Поделиться Опубликовано 24 Августа 2011 PavelSnork, SetTextureRect(Frect*); Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
speczadanie 0 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) Как можно округлить число до сотен (не обрезать, а округлить)? Например, было "632.565", стало "600"; было "2799", стало "2800". Изменено 25 Августа 2011 пользователем speczadanie Ссылка на комментарий
strelok200 0 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 *Shoker*, function dell_kluk_final() for a=10,65635,1 do local obj=alife():object(a) if obj and string.find(obj:name(),"otm") then alife():release(obj,true) end end Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
speczadanie 0 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 (изменено) И ещё вопрос в дополнение к предыдущему: Заспавнил оружие с помощью "amk.spawn_item_in_inv("wpn_ak74")", как можно сразу после этого установить состояние для только что созданного объекта? Точнее, как определить этот объект, чтобы затем применить к нему ":set_condition()"? local wpn = amk.spawn_item_in_inv("wpn_ak74") wpn:set_condition(1) ColR_iT Изменено 25 Августа 2011 пользователем ColR_iT Ссылка на комментарий
_Призрак_ 11 Опубликовано 25 Августа 2011 Поделиться Опубликовано 25 Августа 2011 ColR_iT Не правильно метод set_condition(number) работает только для game_object* (т.е. для клиентских объектов), а функция amk.spawn_item_in_inv работает на функции alife():create которая возвращает серверный объект. Тут есть пара вариантов, но самый красивый из них таков: function spawn() local wpn = amk.spawn_item_in_inv("wpn_ak74") level.client_spawn_manager():add( wpn.id, 0, weapon_in_alife) --ставим каллбек на выход в онлайн end function weapon_in_alife(first,id,obj) obj:set_condition(0) --выставляем кондишн level.client_spawn_manager():remove(id, 0) -- убраем установленный колбек end Freedom Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти