Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.
Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
Всем привет! Как можно сделать смену фаз луны через скрипт, чтобы каждые 28 игровых дней сменялись 8 разных конфигов погоды (или каким-либо более простым способом, если это возможно)? Судя по поискам, такой вопрос ещё никто не задавал.
Подсмотрел способ в AtmosFear 3, честно говоря, почти ничего не понял:
Код
function WeatherManager:get_moon_phase() local months = {31,28,31,30,31,30,31,31,30,31,30,31} local g_time=game.get_game_time() local Y, M, D, h, m, s, ms = 0, 0, 0, 0, 0, 0, 0 Y, M, D, h, m, s, ms = g_time:get(Y, M, D, h, m, s, ms) local day = 365*(Y-2010)+D for mm = 1, M-1 do day = day + months[mm] end if h >=12 then day = day+1 end local phase phase = math.floor(math.mod(day,28)/3.5) end --self.atmosfear.debugMessages[3]:SetText("phase="..tostring(phase)) --self.atmosfear.debugMessages[4]:SetText("opt="..tostring(self.atmosfear.opt_moon_phase)) return tostring(phase) end
Код
function WeatherManager:select_weather(now) -- local weather = xr_logic.pick_section_from_condlist(db.actor, db.actor, self.weather_list) -- CC add period to name if weather=="atmosfear" then local level_name=self:get_level_name() if self.transition_period==true then weather = weather.."_transition" self.transition_period=false elseif self.pre_blowout_period==true then weather = weather.."_pre_blowout" self.pre_blowout_period=false else weather = weather.."_"..self.atmosfear["opt_"..level_name.."_period_"..self.period] end --self.atmosfear.debugMessages[5]:SetText("weather= "..tostring(weather)) end self.levelWeather = weather
local graph=self:get_graph_by_name(weather) local weather_section_name="" if graph==nil then self.state[weather]=nil weather_section_name=weather else if self.state[weather]==nil or self.state[weather].graph_name~=weather then self.state={} self.state[weather]=self:init_by_graph(graph,weather) --self.debugMessages[4]:SetText("self.state["..weather.."].current_state="..tostring(self.state[weather].current_state)) end local st=self.state[weather] weather_section_name="af3_"..self.atmosfear.opt_night_brightness.."_"..st.current_state if st.current_state=="clear" or st.current_state=="partly" then weather_section_name = weather_section_name.."_"..self:get_moon_phase() end --self.atmosfear.debugMessages[6]:SetText("weather_section_name= "..tostring(weather_section_name)) if now then self.curr_weather=st.current_state self.next_weather=st.current_state else self.curr_weather=self.next_weather self.next_weather=st.current_state end end if now then self.last_hour=level.get_time_hours() self.next_hour=self.last_hour+1 if self.next_hour>23 then self.next_hour=self.next_hour-24 end end if self.forced_weather_change_on_time_change then now = true self.forced_weather_change_on_time_change = false end if not(self.weather_fx) then level.set_weather(weather_section_name,now) else level.start_weather_fx_from_time(self.weather_fx, self.wfx_time) end --self.debugMessages[15]:SetText("WEATHER: '"..weather_section_name.."' now '"..tostring(now).."'") -- if xrs_news then -- xrs_news.news_call(1,1,nil,nil,weather_section_name,nil) -- end end
Код
function CAtmosFear:save(packet) packet:w_stringZ(self.opt_moon_phase) set_save_marker(packet, "save", true, "AtmosFear") end
function CAtmosFear:load(packet) self.opt_moon_phase = packet:r_stringZ() set_save_marker(packet, "load", true, "AtmosFear") end
function CAtmosFear:loadDefaultParameters() self.opt_moon_phase = parameters["opt_moon_phase"] end
PROforum, там каждая фаза луны это отдельная секция погоды, а эта функция возвращается постфикс или префикс(не помню уже) нужной секции погоды. Как-то так.
Разрабы не придумали ничего умного кроме как вылетать по отсутствующему параметру. И процесс отладки получился просто невыполнимым. По-хорошему лучше использовать debug для отладки. Лучше заменить на команду quit.
Цитатаzhenya4342 ()
выполнении данной функции через диалог
Вы вроде не указали количество т.к. значение по умолчанию не задаётся.
там каждая фаза луны это отдельная секция погоды, а эта функция возвращается постфикс или префикс(не помню уже) нужной секции погоды
Как бы эту функцию правильно вставить в оригинальный level_weathers.script, где имя секций погоды начинается с «default_»? После моих неудачных попыток игра вылетает с логом Duplicate section '00:00:00' found.
для рестриктора? а можно ли не зависимо от места? в каком скрипте и в какой функции будет?
А можно не высасывать из пальца частями, а сразу правильно формулировать что вы хотите, чтобы не гонять скриптовый порожняк?
Для рестриктора впихните это в любую свою функцию ( имя придумаете сами ), плюс добавьте проверки на NIL, чтобы не пмсАть в эту тему : А почему у меня вылетает?
Как сделать непися/сквад бессмертным согласно условиям независимо от его положения в мире? Нужно что-то типа
Код
invulnerable = {!actor_enemy} true, false
но без использования логики.
В sim_squad_scripted есть вот такая функция
Код
function sim_squad_scripted:init_squad() ... self.invulnerability = xr_logic.parse_condlist(self, "invulnerability", "invulnerability", sys_ini:r_string_ex(settings_id,"invulnerability") or "") ... end