Real Wolf 34 Опубликовано 5 Мая 2009 (изменено) Влад, Влад, ты что делаешь? Телепорты или переходы между локациями? Так как это разные вещи, делать их надо по-разному. В той статье, которую ты указал создаются телепорты, которые действуют только в пределах локации, на которой находится ГГ. -- Получение параметров лч. 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_ сутки <только чтение> за оверквотинг, цитату урезал! Изменено 8 Мая 2009 пользователем DiGGeR Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 25 Июня 2010 antreg, Статью на Вики читал? Там вроде всё понятно расписано. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 26 Июня 2010 Нет, я не силён в смартах и гулагах. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 9 Июля 2010 (изменено) Как узнать, что ГГ покинул локу(сразу после загрузки сохранения)? Изменено 9 Июля 2010 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 18 Июля 2010 Через таймер рэндомно выводить сообщения. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 2 Сентября 2010 (изменено) Просьба объяснить цикл(как он работает, откуда берутся значения): for k,v in pairs(self.aLauncher) Спасибо, но об этом я как-то не подумал Изменено 2 Сентября 2010 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 11 Декабря 2010 (изменено) 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 Изменено 11 Декабря 2010 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 18 Июня 2011 Я когда-то просто отключил движковый голод, и написал скриптовой. Но того кода, к сожалению, уже нету. Впрочем, написать его не тяжело. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 18 Июня 2011 Я на 5 и 6 патчах ничего не смог, но это не значит нельзя ничего сделать. Просто мне было проще написать свою схему =) Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 19 Июня 2011 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 Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 20 Июня 2011 Актёру присвоено 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 Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 20 Июня 2011 Место, ситуация, что стоит, какие правки. Мы не волшебники, чтобы всё знать сразу. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 22 Июня 2011 (изменено) Ulman, Это значит, что нужно, чтобы скриптер искал проблему при наличии у него целого мода. Кто-нибудь знает, как изменить отношение мутантов к ГГ, кроме функции "set_relation", т.к. она у меня не давала никаких результатов? Изменено 22 Июня 2011 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 16 Августа 2011 Кто-нибудь знает, как можно удалить болт? Стандартно не получается. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 28 Августа 2011 (изменено) А зачем поиск по всей таблице? Для примера: 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. Имеется два или более одинаковых значения в таблице? Изменено 28 Августа 2011 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 17 Сентября 2011 (изменено) Довольно часто при инициализации окна через класс CUIMessageBoxEx() вылетает без внятного лога. Приведи примеры не "твоих" применений класса, приводящих хотя бы к редким к вылетам. --/ Artos Кто-нибудь знает причину? Предлагаешь погадать о природе твоих ошибок применения класса? --/ Artos P.S. Как вариант я себе сделал скриптовой класс, очень похожий на CUIMessageBoxEx(). Если кому-то надо - в ЛС. Изменено 17 Сентября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 18 Сентября 2011 (изменено) Код в скрипте: local oMessage = CUIMessageBoxEx() oMessage:Init("message_bad_cond") level.start_stop_menu(oMessage, true) Несколько раз вызвав окно таким образом, я получил вылет: stack trace: [error][ 8] : Недостаточно памяти для обработки команды. *Shoker*, Без дополнительного UI окна. Причем вылет происходит не сразу. Изменено 18 Сентября 2011 пользователем Real Wolf Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 18 Сентября 2011 Код применяется в ТЧ. В любом случае, я проблему решил с помощью скриптового класса. Поделиться этим сообщением Ссылка на сообщение
Real Wolf 34 Опубликовано 19 Сентября 2011 Может где вес стоит отрицательный?.. Поделиться этим сообщением Ссылка на сообщение