Перейти к контенту

Справочник по функциям и классам


Рекомендуемые сообщения

Вот такой вопрос, если ответите, то буду очень признателен:

 

1)Есть функция нет-пакета для спавна аномалий, за авторством Шокера, делалась для ЧН, подходит ли для ЗП? Если нет , что поправить?

 

function create_anomalies(section,rad_anom,x,y,z,lv,gv,mode)
      if gv==nil then gv=db.actor:game_vertex_id() end
      if lv==nil then lv=db.actor:level_vertex_id() end
      if pos==nil then pos=db.actor:position() end
      local p_obj = alife():create(section,vector():set(x,y,z),lv,gv)
      local packet = net_packet()
      packet:w_begin(0)
      p_obj:STATE_Write(packet)
      packet:r_seek(2)

    local game_vertex_id = packet:r_u16()
    local cse_alife_object__unk1_f32 = packet:r_float()
    local cse_alife_object__unk2_u32 = packet:r_s32()
    local level_vertex_id = packet:r_s32()
    local object_flags = packet:r_s32()
    local custom_data = packet:r_stringZ()
    local story_id = packet:r_s32()
    local cse_alife_object__unk3_u32 = packet:r_s32()

    local shape_count = packet:r_u8()
    for i=1,shape_count do
        local shape_type = packet:r_u8()
        if shape_type == 0 then
            local center = packet:r_vec3()
            local radius = packet:r_float()
        else
            local box = packet:r_matrix()
        end
    end

    local restrictor_type = packet:r_u8()

    local cse_alife_custom_zone__unk1_f32 = packet:r_float()
    local cse_alife_custom_zone__unk2_u32 = packet:r_s32()
    local on_off_mode_enabled_time = packet:r_s32()
    local on_off_mode_disabled_time = packet:r_s32()
    local on_off_mode_shift_time = packet:r_s32()

    local offline_interactive_radius = packet:r_float()
    local artefact_spawn_places_count = packet:r_u16()
    local cse_alife_anomalous_zone__unk1_u32 = packet:r_s32()

    local last_spawn_time_present = packet:r_u8()

    packet:w_u16(game_vertex_id)
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_s32(cse_alife_object__unk2_u32)
    packet:w_s32(level_vertex_id)
    packet:w_s32(object_flags)
    if mode~=nil then custom_data = mode end
    packet:w_stringZ(custom_data)
    packet:w_s32(story_id)
    packet:w_s32(cse_alife_object__unk3_u32)

    packet:w_u8(1)
    packet:w_u8(0)
    local sphere_center = vector()
    sphere_center:set(0, 0, 0)
    packet:w_vec3(sphere_center)
    radius = rad_anom
    packet:w_float(radius)

    packet:w_u8(restrictor_type)

    packet:w_float(cse_alife_custom_zone__unk1_f32)
    cse_alife_custom_zone__unk2_u32 = bit_not(0)
    packet:w_s32(cse_alife_custom_zone__unk2_u32)
    packet:w_s32(on_off_mode_enabled_time)
    packet:w_s32(on_off_mode_disabled_time)
    packet:w_s32(on_off_mode_shift_time)

    packet:w_float(offline_interactive_radius)
    packet:w_u16(artefact_spawn_places_count)
    packet:w_s32(cse_alife_anomalous_zone__unk1_u32)

if mode == nil then

    packet:w_u8(last_spawn_time_present)
end
    p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
  
    return p_obj
end

 

 

2)Что такое стэки(стеки)?

3)Что такое перпелолнение стэков(стеков)?

4)К чему приводит переполнение стэков(стеков)? Вылеты без логов могут быть вызваны переполнением стэков(стеков)?

5)Если я заспавним аномалию через нет-пакет, могу ли я удалить ее этой функцией?

function remove_anom(obj)
  if obj~=nil then
    alife():release(alife():object(obj:id()), true)
    return true
  end
  return false
end

вернее, это будет нормальное удаление? или оно может быть с ошибками? Есть ли специальная функция, удаляющая объекты, заспавненные нет-пакетом?

 

6)Довольно простой пример, заспавнил 100 аномалий, удалил их все, потом опять заспавнил, и так н-ое количество раз, в итоге, при подходе к какой нить области(аномалии) происходит вылет без лога(стар трэк), вопрос в следующем, почему так?

 

 

Что-то кончается, что-то начинается...

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch, Все, решил свою проблему, вылет был из-за того, я так полагаю, что слишком много действий в один момент. Сделал по умному, разбил эти 100 аномалий на 10 циклов, и поставил на таймер, теперь через каждые 2 минуты спавнится цикл аномалий из 10 штук. класно Даже не зависает ни на капельку.

 

Немнго инфы для людей, возможно к лассам она не имеет никакого значения, но вот :

 

1)Допустим вы хотите заспавнить предмет\монстра \непися или еще чего в случайно рандомном месте , но не знаете как.Вот пример простой функции:

function random_place_spawn()
lv_new = math.random(1845795) -- ( количество левелвертесов на уровне, или иное значение, если надо сузить область)          
pos_new = level.vertex_position(lv_new)  --(этот метод находит вершины вертекса)
alife():create("cекция объекта",vector():set(pos_new.x,pos_new.y,pos_new.z),lv_new,0)
end

0 - это геймвертекс затона, т.е общий, но работает для всех точек.

317 - Юпитер

666 - Припять

Изменено пользователем Murarius
  • Нравится 1

Что-то кончается, что-то начинается...

Поделиться этим сообщением


Ссылка на сообщение

malandrinus, я попробовал по 10 раз по 10 через некоторый промежуток времени, привязал к таймеру, все отлично, Просто делал динам.аномалии, принцип примитивный. Скрипт ищет нужные секции, и удаляет их (перебор каждого из 65565 айди и сравнения его с секциями, которые задал) и вторая чать просто спавнит их.Когда пробовал по 100 за раз , рано или поздно, происходили вылеты(лог есть, но только стак трэк и все), а сейчас через таймер амк сделал примитивный цикл, по 10 шт, пока все отлично, уже 125 раз на данный момент переспавним, оббегал всю локацию. Норм, и во время спавна (я туда посыл новости приписал) даже не подвисает нисколько.

 

Единственно хотел спросить. Вергас как-то мне сказал, что если один скрипт (сам файл ил другое что-то) будет содержать очень много всяких функций, которые будут вызываться из разных мест, то будет переполнение стэков. Так вот у меня вопрос. Если я разделю один скрипт( 92 кб, там много чего) на несколько частей, то как это повлияет на работу скрипта\игры, будут ли тормоза? или лучше все в одном крипте хранить?

Что-то кончается, что-то начинается...

Поделиться этим сообщением


Ссылка на сообщение

У меня возник такой очень интересный вопрос. Он не по функциям или классам, а скорее по структуре и архитектуре.

 

Допустим у меня есть пачка функций. Нужно написать такую функцию, что когда я её вызываю , она рандомно выбирает любую функцию из той пачки и вызывает её.

 

Можно примерчик? А то у меня фантазии не хватило, получилось сделать через

 

if math.random(0,1)>0.5 then

........

 

и так в несколько этажей, очень неудобно. Можно ли как-нибудь бахнуть все функции списочком, присвоить им циферки, и чтоб функция выбирала циферку, и запускала функцию, которая соответствует выбранной цифре?

Изменено пользователем Vano_Santuri

Что-то кончается, что-то начинается...

Поделиться этим сообщением


Ссылка на сообщение

Ясно, только один момент :

 

[<ключ1>] = function1,

 

<ключ1> - что подрузумевается под этим? произвольное слово? Или что-то другое.

 

И еще вопрос, допустим идет вызов функции на какое-то условие :

 

function has_info()
if db.actor:has_info("info") then
.................
end
end

 

Вызов пошел, если поршень есть, то скрипт срабатывает, а вот если поршня еще нет, то скрипт не срабатывает? и возвращает false ? Или это ему надо еще дописать? И несет ли такая форма записи нагрузку на память?

Изменено пользователем Vano_Santuri

Что-то кончается, что-то начинается...

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
  • Куратор(ы) темы:

×
×
  • Создать...