Министр 4 Опубликовано 10 Августа 2009 (изменено) bill_gates, по поводу таймера уже когда-то говорилось в теме Ковыряемся в файлах Stalker SoC, так что поиск рулит. А если по делу, то АМКшный таймер делаеться так: amk.start_timer(name,delay,action) - стартует таймер в реальном времени. amk.g_start_timer(name,delay_d,delay_h,delay_m,action) - стартует таймер в игровом времени. ------- name - это название таймера delay - это время (в секундах) через которое сработает таймер (для таймера реального времени). delay_d - это кол-во дней после которых сработает таймер (для таймера игрового времени). delay_h - это кол-во часов после которых сработает таймер (для таймера игрового времени). delay_m - это кол-во минут после которых сработает таймер (для таймера игрового времени) ------ Также тебе нужно зарегистировать имя таймера в функции __do_timer_action (файл amk.script). Делаеться это так (дописываешь эти строки в саму функцию): if select_string=="название_таймера" then Здесь пишешь выдачу инфопоршна или чего-нибудь другое, что должно происходить после выполнения таймера end Изменено 10 Августа 2009 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 25 Августа 2009 Killer-44, через all.spawn локацию из мп в сингл никак не добавишь. Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 9 Июня 2010 (изменено) кровоSTALKER, db.actor.radiation = x Где x - кол-во прибавляемой (!) радиации. Изменено 9 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 9 Июня 2010 (изменено) кровоSTALKER, вот как-то так: local weapon = db.actor:item_in_slot(2) if db.actor:active_slot()==2 and weapon and weapon:section()=="wpn_vintorez_m2" then db.actor.radiation = 0.0001 Эту штуку суешь в апдейт актора (ф-ия actor_binder:update(delta) в файле bind_stalker.script) и после взятия твоего оружия в руки, радиация должна начать прибавляться (если оружие в слоте, но в руках его нет, то радиации не будет). Изменено 9 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 14 Июня 2010 кровоSTALKER, а почему не пойдут-то? Это всего лишь проверка времени (с последствиями в виде запуска нужных событий) повешенная на апдейт актора. Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 28 Июня 2010 (изменено) кровоSTALKER, функция верна, только что затестил подобную (без спавна непися и выдачи инфопоршна). Единственное что в твоей ф-ии меня заинтересовал вот этот вот end: if obj:section() == "digger_pda" and not has_alife_info("find_instr") then db.actor:give_info_portion("find_instr") news_manager.send_tip(db.actor, "digger_tip", 0, "stalker", 10000) local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\scenario\military\digger_msg]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) alife():create("agr_krot_fake",vector():set(1.480,7.499,16.865),241837,488) end end Что он делает и какого его предназначение мне не известно. Видимо он и создает ошибку. По отметкам: Добавляются они такой ф-ей - level.map_add_object_spot(number, string, string) Где number - id того на кого/чего хочешь ставить метку Где 1-ый string - икона метки (список иконок дам ниже) Где 2-ой string - всплывающая подсказка о метки в ПДА (текст берется из XMLок) Пример использования - level.map_add_object_spot(obj.id, "level_changer", "to_agroprom"), это стандартная ф-ия из level_tasks.script, она добавляет иконку перехода в Агропром. crlc_small green_location level_changer treasure Это не весь список, а те которые я помню TREWKO, в ТЧ такой способ точно не получится из-за невозможности писать в файлы. P.S. И если не ошибаюсь, то фризы бывают из-за чего-то другого... Изменено 28 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 29 Июня 2010 TREWKO, наверное это мне сказал мой мозг который не увидел в ТЧ пространства имен io. И опять трабла о том, что юзеры перестали юзать поиск. Вот пост от Колмогора с решением твоей проблемы. P.S. И всего-лишь требовалось поискать по слову death_callback. Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 29 Июня 2010 (изменено) кровоSTALKER, ну если у тебя unusual_treasure это тайник, то по идее верно. А вообще лучше самим в игре проверить. Удаляются метки такой ф-ей - level.map_remove_object_spot(number, string). Где number - id того с чего хочешь удалить метку Где string - тип метки (т.е. ее иконка) И как всегда пример. level.map_remove_object_spot(box:id(), "treasure") - это стандартная ф-ия из treasure_manager.script, она удаляет метку treasure с ящика-тайника по id. Изменено 29 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 29 Июня 2010 (изменено) TREWKO, значит криво пробуешь. Только что тестил, все работает без нареканий. Код такой: news_manager.send_tip(db.actor, victim:id(), 0, "stalker", 10000) При убийстве приходит id жертвы. А насчет WriteIni(ini, section, key, param) подробнее расскажи. В lua_help.script ничего подобного не нашел. ---------------------- кровоSTALKER, хоть покажи откуда и как ты эту ф-ию вызываешь, а то так не понятно что к чему и в частности, что именно такое unusual_treasure. Изменено 29 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 29 Июня 2010 кровоSTALKER, вот как-то так: if obj:section() == "unusual_pda" and not has_alife_info("treasure_1") then db.actor:give_info_portion("treasure_1") --затычка local sobj = alife():create("unusual_treasure",vector():set(61.661,4.864,101.872),251059,904) local id = sobj.id news_manager.send_tip(db.actor, "unusual_tip", 0, "stalker", 10000) level.map_add_object_spot(id, "crlc_small", "unusual_spot") end Здесь сразу у свежезаспауненной нычки узнается id и используется в создании метки. Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 30 Июня 2010 кровоSTALKER, смотри как отметки делали ПЫСы и сделай по аналогии. Например, если в том же level_tasks.script название комментария выглядет таким образом: level.map_add_object_spot(obj.id, "level_changer", "to_rostok") То в XMLке string_table_level_tips.xml все должно выглядеть также (даже ковычки должны быть): <string id="to_rostok"> <text>На дикую территорию</text> </string> P.S. А вообще если работает, то уже хорошо. P.S.S. Объедини свои посты (удали новый, отредактируй старый). А то модерация предупреждениями закидает. Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 30 Июня 2010 (изменено) ФеНиКс, у тебя переменная flobals после 1-го удара принимает значение true и больше никогда не меняется. И следовательно усл-ие if npc and not flobals никогда больше не выполняется и о следующем усл-ии с проверкой расстояния и последующем ударе и думать не стоит. Тебе нужно присвоить flobals false и тогда все будет гуд. Вот как-то так это выглядет: local flobals = false function static() local pos_mes = "" local npc = level_object_by_sid(006) if npc and not flobals then if npc:position():distance_to(db.actor:position()) < 10 then local h = hit () h.power = 1 h.direction = vector():set (0, 0, 0) h.impulse = 0 h.draftsman = npc--/ или db.actor -- от кого дать хит h.type = hit.explosion db.actor:hit(h)--кому дать хит flobals = true level.add_pp_effector("fire_hit.ppe", 1974, false) news_manager.send_tip(db.actor, "%c[255,255,1,1]Т\\n%c[255,1,255,1]Дальше подойти нельзя! О%c[default]", 0, "tips_tatar", 8000) end end if npc and flobals then if npc:position():distance_to(db.actor:position()) => 10 then flobals = false end end end В этом коде flobals заново становится false когда ГГ от НПС будет на расстоянии равном или большем чем 10 (естественно если этот НПС жив). P.S. А если просто удалишь строчку flobals = true, то тебя будет беспрерывно хренячить и так же беспрерывно будут присылаться сообщения. Изменено 30 Июня 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 2 Июля 2010 (изменено) Влад, не удаляй труп сталкера сразу после его смерти, остальные схемы (в частности death_manager) не успевают сделать свои дела, ибо объекта уже нет и везде передается nil (можно было и по логу догадаться в чем косяк). P.S. Юзай таймеры или флаги. Изменено 2 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 3 Июля 2010 (изменено) Stalk15, вот я вижу строчку local npc = level.object_by_id(id). Хорошо. А вот откуда берется сам id мне не ясно. Вот это плохо. Изменено 3 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 23 Июля 2010 (изменено) Stalk15, т.е. "упростить"? Если честно то, что ты написал и так самый легкий способ. Конечно можно сделать таблицу и цикл, чтобы он все значения перебирал, но оно тебе надо? Это не только для сис-мы тяжелее, но и в написании. Изменено 23 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 24 Июля 2010 (изменено) Stalk15, у НПС костюмов и слотов как таковых нету... P.S. Можно узнать визуал непися (название модели, которую сейчас использует НПС) и через него определить, что на него одето. ----------------------------------------------------------------------------- Stalk15, через нет-пакет. По-моему get_current_outfit() вообще не работает и как я говорил у неписей вообще костюмов как таковых нет... P.S. А по нет-пакетам достаточно инф-ии на форуме, также можно посмотреть скрипты того же АМК или IMM (интелликтуал марадер мод или как там его, он в Мастерской есть). Изменено 24 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 26 Июля 2010 Oxygenium, в логе сказано, что ошибка произошла из-за сравнения какого-то числа с nil. Так что по идее, передача вещей не причем. lexer125, название аргументов (или как там их) ничего не меняет. Тем более в оригинале (trader, actor). Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 26 Июля 2010 (изменено) Stalk15, local coms_text = { stalker = "со Сталкером", freedom = "со Свободовцем", dolg = "с Долговцем", ecolog = "с Экологом" } function ololo() if db.actor:is_talking() then --проверяем разговариет ли актор for k, v in pairs (db.storage) do --если разговариет, то перебираем неписей в поисках собеседника local npc = level.object_by_id(k) if IsStalker(npc) and npc:is_talking() and coms_text[npc:character_community()] ~= nil then news_manager.send_tip(db.actor, "Говорим "..coms_text[npc_stalker:character_community()], 0, "freedom", 5000) end end end end Ф-ию использовать в апдейте бинд_сталкера. Работает нормально, кроме одного но - при разговоре сообщение присылается постоянно, но это исправить легко, можно сделать тот же флаг. Думаю ты разберешься. Изменено 26 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 26 Июля 2010 (изменено) Stalk15, Во-первых: ты делаешь проверку на то, что актор не разговаривает в данный момент и если она проходит, то присваиваешь переменной stope false, все бы нормально, если не опять одно "но" - ты вставляешь свою проверку в усл-ие которые выполняется только когда актор разговаривает. И поэтому ничего удивительного, что вся конструкция у тебя выполняется только один раз. Во-вторых: не надо делать без особой надобности усл-ия в усл-ях, например, тот же код: if IsStalker(npc) and npc:is_talking() and coms_text[npc:character_community()] ~= nil then if not stope then... Можно представить в виде одной строки: if IsStalker(npc) and npc:is_talking() and not stope and coms_text[npc:character_community()] ~= nil then... По-моему так более читабельно, хотя решать тебе, это всего-лишь совет. Изменено 26 Июля 2010 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
Министр 4 Опубликовано 10 Сентября 2010 SDR-team, усл-ие в своей ф-ии, то прочитай. Там ты проверяешь некое vodka... ...а что это? Поделиться этим сообщением Ссылка на сообщение