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

Скриптование


Svoboда

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

(изменено)
Влад,

Влад, ты что делаешь? Телепорты или переходы между локациями? Так как это разные вещи, делать их надо по-разному. В той статье, которую ты указал создаются телепорты, которые действуют только в пределах локации, на которой находится ГГ.

 

-- Получение параметров лч.

function get_lc_data(obj)

local packet = net_packet()

obj:STATE_Write(packet)

local size=packet:w_tell()

packet:r_seek(0)

 

local t={}

t.game_vertex_id = packet:r_u16()

t.distance = packet:r_float()

t.direct_control = packet:r_s32()

t.level_vertex_id = packet:r_s32()

t.object_flags = packet:r_s32()

t.custom_data = packet:r_stringZ()

t.story_id = packet:r_s32()

t.spawn_story_id = packet:r_s32()

local shape_count = packet:r_u8()

t.shapes={}

for i=1,shape_count do

local shape_type = packet:r_u8()

t.shapes<I>={}

t.shapes.shtype=shape_type

if shape_type == 0 then

t.shapes.center = packet:r_vec3()

t.shapes.radius = packet:r_float()

else

t.shapes.v1 = packet:r_vec3()

t.shapes.v2 = packet:r_vec3()

t.shapes.v3 = packet:r_vec3()

t.shapes.offset = packet:r_vec3()

end

end

t.restrictor_type = packet:r_u8()

t.dest_game_vertex_id = packet:r_u16()

t.dest_level_vertex_id = packet:r_s32()

t.dest_position = packet:r_vec3()

t.dest_direction = packet:r_vec3()

t.dest_level_name = packet:r_stringZ()

t.dest_graph_point = packet:r_stringZ()

t.silent_mode = packet:r_u8()

if packet:r_elapsed() ~= 0 then

abort("left=%d", packet:r_elapsed())

end

return t

end

 

-- Запись параметров лч.

function set_lc_data(t,obj)

local packet = net_packet()

packet:w_begin(t.game_vertex_id)

packet:w_float(t.distance)

packet:w_s32(t.direct_control)

packet:w_s32(t.level_vertex_id)

packet:w_s32(t.object_flags)

packet:w_stringZ(t.custom_data)

packet:w_s32(t.story_id)

packet:w_s32(t.spawn_story_id)

packet:w_u8(table.getn(t.shapes))

for i=1,table.getn(t.shapes) do

packet:w_u8(t.shapes.shtype)

if t.shapes.shtype == 0 then

packet:w_vec3(t.shapes.center)

packet:w_float(t.shapes.radius)

else

packet:w_vec3(t.shapes.v1)

packet:w_vec3(t.shapes.v2)

packet:w_vec3(t.shapes.v3)

packet:w_vec3(t.shapes.offset)

end

end

packet:w_u8(t.restrictor_type)

packet:w_u16(t.dest_game_vertex_id)

packet:w_s32(t.dest_level_vertex_id)

packet:w_vec3(t.dest_position)

packet:w_vec3(t.dest_direction)

packet:w_stringZ(t.dest_level_name)

packet:w_stringZ(t.dest_graph_point)

packet:w_u8(t.silent_mode)

packet:r_seek(0)

obj:STATE_Read(packet, packet:w_tell())

end

 

-- Создание лч и перемещение ГГ(Автор Xiani).

function start_jump_to(x,y,z,lv, gv, dx, dy, dz, level_name)

amk.mylog("jump:create_lc")

local lc = alife():create("level_changer", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())

amk.mylog("jump:get_lc_data")

local tbl = get_lc_data(lc)

 

local shapes={}

shapes[1]={}

shapes[1].shtype=0

shapes[1].radius = 10

shapes[1].center = vector():set(0,0,0)

 

tbl.shapes = shapes

 

tbl.dest_level_name = level_name

tbl.dest_position = vector():set(x,y,z)

tbl.dest_direction = vector():set(dx,dy,dz)

tbl.dest_game_vertex_id = gv

tbl.dest_level_vertex_id = lv

tbl.silent_mode = 1

tbl.story_id = 8657

 

amk.mylog("jump:set_lc_data")

set_lc_data(tbl,lc)

 

db.actor:set_actor_position(lc.position)

amk.mylog("jump:finished")

end

А использовать просто:

function road_to_yantar(actor, npc)

dialogs.relocate_money(npc, 3500, "out")

start_jump_to(29.146209716797,-11.688985824585,-279.86639404297,54978,1480, 0,0,0,"L08_yantar")

end -- попадёшь в бункер к Сахарову.

 

Строгое предупреждение от администратора _And_
сутки <только чтение> за оверквотинг, цитату урезал!
Изменено пользователем DiGGeR

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


Ссылка на сообщение
(изменено)

Как узнать, что ГГ покинул локу(сразу после загрузки сохранения)?

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

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


Ссылка на сообщение
(изменено)

Просьба объяснить цикл(как он работает, откуда берутся значения):

for k,v in pairs(self.aLauncher)

 

Спасибо, но об этом я как-то не подумал :(

 

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

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


Ссылка на сообщение
(изменено)

Zeek, надо скорее так:

function start_taimer_quest_for_kills() 
local time=time_global()
if time>time+60000 then 
db.actor:disable_info_portion("quest_kill_stalkers_give") 
end
end

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

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


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

Я когда-то просто отключил движковый голод, и написал скриптовой. Но того кода, к сожалению, уже нету. Впрочем, написать его не тяжело.

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


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

Я на 5 и 6 патчах ничего не смог, но это не значит нельзя ничего сделать. Просто мне было проще написать свою схему =)

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


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

speczadanie,

У игрока в руках в данный момент оружие из 3-го слота. Скриптом сменяем на 2-й.

local oSlot = db.actor:item_in_slot(2)
local oActItem = db.actor:active_item()
if oSlot and oActItem and oSlot:id() == oActItem then
   db.actor:activate_slot(1)
end

Или если в руках ничего нет, то активируем 2-й.

local oActItem = db.actor:active_item()
if not oActItem then
   db.actor:activate_slot(1)
end

 

 

 

Добавлено через 194 мин.:

Извиняюсь, там небольшая ошибка.

if oSlot and oActItem and oSlot:id() == oActItem then

Заменить на

if oSlot and oActItem and oSlot:id() == oActItem:id() then

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


Ссылка на сообщение
Актёру присвоено

ar_sleep.set_scheme(db.actor, sleep_ltx, "ar_sleep", logic)

Как сделать проверку, что это действительно так?

Функция "is_sleep_active()" в файле "sleep_manager.script"

function is_sleep_active()
    if db.storage[db.actor:id()].active_scheme == "ar_sleep" then 
        return true 
    end
    return false
end

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


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

Место, ситуация, что стоит, какие правки. Мы не волшебники, чтобы всё знать сразу.

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


Ссылка на сообщение
(изменено)

Ulman,

Это значит, что нужно, чтобы скриптер искал проблему при наличии у него целого мода.

 

Кто-нибудь знает, как изменить отношение мутантов к ГГ, кроме функции "set_relation", т.к. она у меня не давала никаких результатов?

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

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


Ссылка на сообщение
(изменено)

А зачем поиск по всей таблице?

Для примера:

    local tTable = { "1", "2", "3", "1", "4", "1" }
    local iFindedCount = 0
    for iKey, sValue in pairs(tTable) do
        if sValue == "1" then
            iFindedCount = iFindedCount + 1
        end
    end

Мы искали в таблице "1", на выходе получили значение iFindedCount равное количеству найденных строк("1"), то есть оно будет равно 3, если же нужной строки(значения) нету вообще, значение будет равно 0.

 

Имеется два или более одинаковых значения в таблице?

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

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


Ссылка на сообщение
(изменено)

Довольно часто при инициализации окна через класс CUIMessageBoxEx() вылетает без внятного лога.

Приведи примеры не "твоих" применений класса, приводящих хотя бы к редким к вылетам. --/ Artos

Кто-нибудь знает причину?

Предлагаешь погадать о природе твоих ошибок применения класса? --/ Artos

 

P.S. Как вариант я себе сделал скриптовой класс, очень похожий на CUIMessageBoxEx(). Если кому-то надо - в ЛС.

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

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


Ссылка на сообщение
(изменено)

Код в скрипте:

    local oMessage = CUIMessageBoxEx()
    oMessage:Init("message_bad_cond")
    level.start_stop_menu(oMessage, true)

Несколько раз вызвав окно таким образом, я получил вылет:

stack trace: 
[error][       8]    : Недостаточно памяти для обработки команды.

 

*Shoker*,

Без дополнительного UI окна. Причем вылет происходит не сразу.

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

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


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

Код применяется в ТЧ. В любом случае, я проблему решил с помощью скриптового класса.

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


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

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

AMK-Team.ru

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