_Призрак_ 11 Опубликовано 21 Июня 2010 AK74 Ты спавнишь скелета как физ объект или как монстра? Если как монстра то у меня к тебе очень много вопросов Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 2 Июля 2010 (изменено) Я так понял что функция у тебя работает только один раз а потом не работает? Если да то вот готовый вариант: local stope = false function testych() local npc = level.object_by_id(id) local PosActor = db.actor:position() if npc and IsStalker(npc) and npc:alive() and npc.health > 0.1 then if npc:position():distance_to(PosActor) < 4 then if not stope then news_manager.send_tip(db.actor, "Эй, чоё встал!?.", 0, "stalker", 7000) stope = true end else stope = false if npc:position():distance_to(PosActor) > 4 and stope then stope = false end end end end Неуверен что работает но думаю что ты понял фишку Изменено 2 Июля 2010 пользователем _Призрак_ Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 19 Августа 2010 кровоSTALKER Если я не ошибаюсь то в этом режиме игра показывает коодинаты так: X,Z,Y Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 20 Августа 2010 malandrinus Да ты совершенно прав. В игре почему-то поменяли Y и Z местами. Только интересно почему? Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 23 Августа 2010 по идее можно сделать так - в бинд_сталкере на он_итем дроп пишел скрипт на удаление ак74 и на спавн абакана по координатам актора. На он_итем_тэйк пишем скрипт на удаление абакана и на спавн ак74 в рюкзак актору Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 24 Августа 2010 Вот что написанно у сингапура в журнале по этому поводу: Исправлено! Достаточно долго бытовало мнение, что определить предмет на поясе невозможно. Теоретически так оно и есть, так как слот belt нигде не отслеживается. Но благодаря ПЫСам, которые наконец соизволили объяснить, пусть не прямой, а косвеный, но всётаки способ определения нахождения предмета на поясе. Давайте сначала разберём как мы это будем делать, чтобы в дальнейшем не было глупых вопросов. Итак, мы имеем инвентарь актора. Чтобы определить список всего инвентаря, который имеется у актора в наличии, нужно использовать метод db.actor:inventory_for_each(ScanInventory) Где ScanInventory --имя функции которая вызывается для каждого объекта инвентаря. Спросите, и как же мы определим какие предметы из них на поясе, а какие нет?! Вот это я щас и попытаюсь описать. Массив инвентаря актора состоит из нескольких субмассивов, которые запрашиваются в фиксированном порядке. А порядок здесь такой: 1. Массив рюкзака. 2. Массив пояса. 3. Первый слот. 4. Второй слот. и т. д. Чтобы при итерации всего списка инвентаря выудить именно массив пояса, нужно определить последний элемент в массиве рюкзака и ближайший элемент в одном из слотов. Предметы находящиеся между ними и будут являться предметами навешанными на пояс belt. Если с предметами находяшимися в слотах проблем нет, их определение свободно производится через проверку нахождения онных в слотах по их нумерации. То с последним предметом в рюкзаке немного сложнее, тут нету никаких особенных данных различающих их от предметов на поясе. Но... В связи с тем, что подбираемые или заспавненные предметы в инвентарь, добавляются именно в конец массива рюкзака, можно определять путём спавна/удаления предмета разделителя, по которому мы и будем узнавать конец массива рюкзака. Тоесть порядок действий такой: 1. Спавним предмет-разделитель в инвентарь актора. 2. Производим итерацию предметов инвентаря. 3. Как только итератор дойдёт до предмета-разделителя включаем ключ добавления инвентаря во внешнюю таблицу. 4. После включения ключа, следующие предметы после разделителя будут добавляться в таблицу. 5. По мере добавления, производим проверку на нахождение онных в одном из слотов. И как только один из них окажется предметом находящемся в слоте, завершаем пополнение таблицы. После всех этих действий, внешняя таблица будет содержать только список предметов находящихся на поясе. Вот собственно и весь принцип. Итак создаём в скриптах новый файл с именем bind_belt.script, и вставляем в него код: Код: belt = {} --//внешняя таблица пояса local separator = nil --//переменная для сохранения userdata разделителя local del_separator = false --//ключь удаления разделителя local start_add_belt = false --//ключь начала заполнения таблицы db.belt local open_inventory = false --//ключь открытия/закрытия инвентаря local stop_update = false local start_function = true --основная функция итерации инвентаря --(привязана к функции update() в файле bind_stalker.script) function IterateInventory() if stop_update then return end --//удаление всех случайно-сохранённых разделителей if start_function then db.actor:inventory_for_each(function(item) if item:section() == "separator" then alife():release(item, true) end end) separator = nil del_separator = false start_function = false end --//удаление разделителя (третий цикл) if del_separator and separator then this.DeleteSeparator() stop_update = true return end --//итерация инвентаря (второй цикл) if separator then db.belt = {} db.actor:inventory_for_each(ScanInventory) del_separator = true start_add_belt = false else --//спавн разделителя (первый цикл) separator = alife():create("separator", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end --функция удаления разделителя function DeleteSeparator() alife():release(separator, true) separator = nil del_separator = false end --функция сканирования инвентаря function ScanInventory(item) local section = item:section() if start_add_belt and not DetermineSlot(item:id()) then if not db.belt[section] then db.belt[section] = 1 else db.belt[section] = db.belt[section] + 1 end end if item:section() == "separator" then start_add_belt = true end end --функция определения привязки объекта к одному из слотов function DetermineSlot(item_id) for i=0, 12 do local obj = db.actor:item_in_slot( i ) if obj and obj:id() == item_id then return true end end return false end --функция запуска обновления таблицы при закрытии инвентаря --(привязана к колбэку info_callback() в файле bind_stalker.script) function InventoryInfo(info) if info == "ui_inventory" or info == "ui_car_body" or info == "ui_trade" then open_inventory = true if separator then this.DeleteSeparator() end elseif info == "ui_inventory_hide" or info == "ui_car_body_hide" or info == "ui_trade_hide" then open_inventory = false stop_update = false end end --функция запуска обновления таблицы при взятии/выбрасывании предметов. --(привязана к колбэкам on_item_take() и on_item_drop () в файле bind_stalker.script) function TakeAndDrop(item) if item:section() == "separator" then return end if not open_inventory then if separator then this.DeleteSeparator() end stop_update = false end end Создаём объект в конфигах (файл config/misc/items.ltx) с именем секции [separator]: Код: [separator]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "" $prefetch = 32 class = II_BANDG cform = skeleton visual = equipments\item_bandage.ogf description = inv_name = inv_name_short = inv_weight = 0 inv_grid_width = 0 inv_grid_height = 0 inv_grid_x = 0 inv_grid_y = 0 eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = 1 cost = 0 animation_slot = 4 Затем в файле bind_stalker.script производим пропись всех нужных привязок функций: 1. Функция actor_binder:info_callback(npc, info_id): вписываем в конец тела функции: bind_belt.InventoryInfo(info_id) 2. Функция actor_binder:on_item_take (obj): вписываем в конец тела функции: bind_belt.TakeAndDrop(obj) 3. Функция actor_binder:on_item_drop (obj) вписываем в конец тела функции: bind_belt.TakeAndDrop(obj) 4. Функция actor_binder:update(delta) вписываем в конец тела функции: bind_belt.IterateInventory() Вот собственно и всё. Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 6 Ноября 2010 (изменено) Вот в этом моде есть пда - скрипт называется огсм_нотепад. Копия правда не очень точная, но функции пда выполняет Изменено 6 Ноября 2010 пользователем _Призрак_ Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 21 Декабря 2010 у тебя написано: если нет поршня и актор имеет обджект (неодетым, а в инвенторе) то тогда убиваем Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 21 Декабря 2010 Jurok Нужно сделать так: function start_mod() if dont_has_info("maior_barsakov_info") and db.actor:object("specops_outfit") == nil then db.actor:kill(db.actor) end end Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 21 Декабря 2010 bogdan.dm Посмотри. Вдруг ты чего либо не сделал http://stalker-portal.ru/plug.php?e=weblog...ge&id=15564 Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 28 Декабря 2010 Куфзук Лучше всего эти функции повесить на дроп, юзание и на загрузку игры Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 28 Декабря 2010 ZeeK Был такой вылет когда не правильно сделал сам квест Куфзук Это когда она будет выводится неправильно? Что можно сделать с аптечкой - использовать и выкинуть. Повесить на колбеки эти нужно эту функуцию. Ну еще нужно чтобы скрипт обрабатывал инвентарь при создании игры. Когда же будет показываться неправильное кол-во аптечек Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 31 Декабря 2010 Меня вот интересует вопрос - как сделать так чтобы НПС после нападения на него, возвращался на точку и ему можно было прописать анимацию стаяния и target? Что то типа ремарка только с возможностью возвращаться на точку Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 5 Января 2011 У луа_чекера есть такой грешок - он показывает ошибок больше чем есть. У меня бывало в скрипте по 50 ошибок - исправил 5-6 и луа чекер ни одной не нашел. Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 5 Января 2011 Это смотря какие ты ошибки сделал. Если ты написал вместо create - reate то луа чекер даже не заикнется. А если ты end пропустишь то он ругнется. Чекер указывает только на синтаксические ошибки Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 9 Января 2011 (изменено) TRAMP14 Функция работать не будет так как откуда у тебя появится obj? Расшифровываю: local obj = obj:section() 1. Эта строка может привести луа в бешенство. Лучше назови переменную obj_section 2. Для понятия представим что у тебя написанно local obj1 = obj:section() Откуда ты берешь obj? У тебя функция не принимает каких либо переменных, да и в скрипте ты этот obj никак не определяешь. Поэтому переменная obj1 всегда будет выдавать nil 3. Почему у тебя левел_вертикс =1? Разве так можно? Да и скрипт твой читерский - у тебя получится что ты аптечку использовал и у тебя сразу появляется еще одна в рюкзаке. А действие аптечки идет. З.Ы. По твоей функции видно что ты, так и быть не первый день скриптишь, а второй. Не обольщайся А то что у тебя игра стала вылетать - это обычное дело. Изменено 9 Января 2011 пользователем _Призрак_ Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 10 Января 2011 Логики капм в зове припяти нет. Нужно создавать анимпоинт, и ставить НПС такую логику что бы он шел к этому анимпоинту. Точнее сказатт не могу, ищи в алл спавне и файлаХ с логикой слово анимпоинт Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 10 Января 2011 Ремарк не желательно использовать долгое время. Ремарк можно использовать для связки. Даже Архара это говорил Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 16 Января 2011 нет, это в обоих частях сталкера невозможно Freedom Поделиться этим сообщением Ссылка на сообщение
_Призрак_ 11 Опубликовано 20 Января 2011 (изменено) TRAMP14 Чаще всего это рудименты. Тот код который планировалось использовать раньше, но не использовали, а убрать забыли. Или это отладочная информация. Я думаю в твоем коде именно она и есть. mma Для подсказок самому себе пишут this.test() --вызываем бредовую функцию Изменено 20 Января 2011 пользователем _Призрак_ Freedom Поделиться этим сообщением Ссылка на сообщение