1. Вопрос должен соответствовать выбранной Вами темы. 2. Изучите то, что уже есть в теме (воспользуйтесь поиском на форуме). 3. Указывайте необходимую информацию: чистая игра ТЧ или с установленным модом (указать какой). 4. Для того, чтобы было понятно в чем ошибка, приводите коды (оформленные соответствующем образом). 5. Вопросы по SDK задаем в этой теме.
Callisto, Ну в общем тема такая. Я делал мод и постоянно добавлял что то новое, а если и проверял то максимум добегал до Свалки) А тут решил проиграть в него полностью) Так на Агропроме не вылетает.. Только вот когда выброс начался начало вылетать) Я просто внедрил себе Blowout Mod v 1.0 от DEXXX. Начал искать подобное в интернете, нашёл пацана на АМК форуме ну он тоже отписался типа так и так, такая же проблема. На форуме ни кто проблему не решил) Вот так)
GCG, Динамические аномалии случаем не подключал? Пока только догадки, но, agr_tower1_soldier это похоже снайпера на вышках, и при попытке уйти в укрытие при выбросе они должны спускаться по лестнице (вертикальной), а, насколько мне известно, НПС не могут по ним лазить. следовательно и возникает ошибка в путях. Хотя могу и ошибаться В ближайшее время поставлю ТЧ и посмотрю более детально.
Нород может кто подскажет,как отключить дырявый рюкзак,просто если набираю аптечек,или стволов,пишет нет места в рюкзаке, и выбрасывает на землю.Я в Гугле искал но не нашол,подзкажите какой файл за это отвечает. За рание спасибо.
— Молишься? — спрашиваю. — Молись, — говорю, — молись! Дальше в Зону, ближе к небу… — Что? — спрашивает он. — Молись! — кричу. — Сталкеров в рай без очереди пропускают!
Репутация: 16
Регистрация: 01.11.2009
Город: Санкт-Петербург
Привет всем! В свой маленький мод решил добавить ремкомплекты по этой схеме
1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использование. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета: [repair_kit_outfit]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "food and drugs\repair kit outfit" $prefetch = 32 class = II_ANTIR ;класс не трогаем! cform = skeleton visual = equipments\item_merger.ogf ;модель description = enc_equipment_repair_kit_outfit ;ссылка на описание в config\text\rus\....xml
inv_name = repair_kit_outfit_name ;ссылка на название в config\text\rus\....xml inv_name_short = repair_kit_outfit_name ;тоже самое, что и inv_name inv_weight = 6.0 ;вес
inv_grid_width = 2 ;ширина иконки inv_grid_height = 1 ;высота иконки inv_grid_x = 8 ;координата x иконки inv_grid_y = 18 ;координата y иконки cost = 10000 ;цена ;всё ниже написанное не трогаем, оно нам и не нужно eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = 1 animation_slot = 4 hud = wpn_vodka_hud 2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между </string> и </string_table> добавляем строки по аналогии с уже написсанными: <string id="repair_kit_outfit_name"> <text>Ремонт комплект ДПК</text> </string> <string id="enc_equipment_repair_kit_outfit"> <text>Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.</text> </string> Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам. [править]Работа со скриптами 1.Вешаем функцию починки при использовании нашего ремонт комплекта. Для этого в файле scripts\bind_stalker.script находим функцию: function actor_binder:net_destroy() и после строки self.object:set_callback(callback.take_item_from_box, nil) пишем: self.object:set_callback(callback.use_object, nil)) И теперь находим функцию function actor_binder:reinit() и после строки self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем: self.object:set_callback(callback.use_object, self.repair_outfit_start, self) Теперь в папке scripts создаёте свой скриптовой фаил ваше_название_скрипта.script. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак "_". Опять открываем bind_stalker.script и в самый конец добавляем эту функцию: function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "repair_kit_outfit" then --здесь указываем предмет, при использование которого будет срабатывать функция ниже ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции end end end 2. Добавляем саму функцию ремонта. Для этого в файле ваше_название_скрипта.script пишем: -- Ремонт комплект для костюмов function repair_outfit() local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6) if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%) item_s6:set_condition(1) local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен." db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) elseif item_s6 == nil then --когда костюма нет local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм." db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%) local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён." db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) elseif item_s6:condition() ==1 then --когда костюм в отличном состояние local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние." db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end end Всё! Теперь заходим в игру и наслаждаемся.
Все хорошо, но ремкомплект не производит ремонт, сообщений не выдает и тупо исчезает. Хотелось бы получить рабочий комплект и, если можно, кратность его примиенения вплоть до бесконечности. Заранее благодарен за помощь
Добавлено (07.01.2013, 19:41:56) --------------------------------------------- Вопрос второй Создал костюм с автоматическим приёмом медикаментов по этой схеме
1. Итак, для начала в gamedata/scripts создаем скрипт - файл с название имя_вашего_файла.script. В нем пишем такую конструкцию:
function medkit_automatic() if db.actor.health <= 0.3 then check_medkits() end end
function check_medkits() if db.actor:object("medkit") ~= nil or db.actor:object("medkit_army") ~= nil or db.actor:object("medkit_scientic") ~= nil then local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю медицинский препарат. %c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000) eat_automat_medkits() end end
function eat_automat_medkits() if db.actor:eat(db.actor:object("medkit")) ~= nil or db.actor:eat(db.actor:object("medkit_army")) ~= nil or db.actor:eat(db.actor:object("medkit_scientic")) ~= nil then end end
Теперь с пояснениями:
function medkit_automatic() -- указываем функцию if db.actor.health <= 0.3 then -- если хп меньше 3, то активируем функцию ниже check_medkits() end end
function check_medkits() -- как раз вот эту функцию и активируем if db.actor:object("medkit") ~= nil or db.actor:object("medkit_army") ~= nil or db.actor:object("medkit_scientic") ~= nil then -- эти строки проверяют наличие аптечек. local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю медицинский препарат. %c[default]" db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000) -- если аптечки есть то выводим игровое сообщение и активируем функцию ниже eat_automat_medkits() end end
function eat_automat_medkits() -- эту функцию мы активируем второй функцией if db.actor:eat(db.actor:object("medkit")) ~= nil or db.actor:eat(db.actor:object("medkit_army")) ~= nil or db.actor:eat(db.actor:object("medkit_scientic")) ~= nil then -- здесь используем аптечки, а затем всплывает сообщение end end
2. Итак далее заходим в bind_stalker.script который находится в директории gamedata/scripts и ищем там функцию: function actor_binder:update() и за ней пишем: имя_вашего_файла.medkit_automatic() в итоге:
function actor_binder:update(delta) имя_вашего_файла.medkit_automatic() object_binder.update(self, delta) local time = time_global() game_stats.update (delta, self.object)
Теперь заходим в игру и наслаждаемся!
Все работает, но для всех костюмов, а хотелось бы, чтобы это работало на конкретный броник.
Если не сложно, был бы рад добавлению функций лечения кровотечения и радиации.
Shuradan, Это потому-что у тебя уже значить используется callback.use_object, допустим у меня в сборки реальные рюкзаки использовали callback.use_object, и было точно так-же как у тебя, пока не сделал вот-так
function actor_binder:net_destroy() if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end -- game_stats.shutdown () db.del_actor(self.object)
sr_light.clean_up ()
self.object:set_callback(callback.inventory_info, nil) self.object:set_callback(callback.article_info, nil) self.object:set_callback(callback.on_item_take, nil) self.object:set_callback(callback.on_item_drop, nil) --self.object:set_callback(callback.actor_sleep, nil) self.object:set_callback(callback.task_state, nil) self.object:set_callback(callback.level_border_enter, nil) self.object:set_callback(callback.level_border_exit, nil) self.object:set_callback(callback.take_item_from_box, nil) --******************************************* --// дизаблим каллбек self.object:set_callback(callback.use_object, nil)-----Рюкзаки используют --******************************************* if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end
xr_sound.stop_all_sound_object()
object_binder.net_destroy(self) end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self)
local npc_id = self.object:id()
db.storage[npc_id] = { }
self.st = db.storage[npc_id] self.st.pstor = nil
self.next_restrictors_update_time = -10000
self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.article_info, self.article_callback, self) self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) --******************************************* --// добавим наконец ГГ каллбек на юзание self.object:set_callback(callback.use_object, self.use_callback, self)-----Рюкзаки используют --******************************************* end
--******************************************* --// ну и метод канешно function actor_binder:use_callback(obj, who) snd_item.use_snd(obj)-----Рюкзаки это bag.OnActorUse(obj)-----Рюкзаки это if obj then if obj:section() == "repair_kit_weapon" then stvol.repair_weapon() end end if obj then if obj:section() == "repair_kit_outfit" then bronik.repair_outfit() end end if obj then if obj:section() == "repair_kit_pistol" then pistol.repair_pistol() end end end --- и несколько end тоже рюкзаков проверяй script Syntax Checker --*******************************************В конец бинсталкера ничего потом не добавлял. Короче смотри.
Ребят, а у меня тоже вопросик. Я тут немного туплю. Короче как сделать чтоб не выпадали у трупов лишние двадцать патронов от оружия которое не использовал непись(не было у него ещё в руках). death_items_count.ltx тут не причём, это ал пак выдаёт лишние двадцать патронов. У меня в последней моей сборки всё в порядке(она с алпаком, как-то же сделал), но вот в новой сборке не могу сделать, ставь хоть по нулям в death_items_count.ltx, а 20 патронов всё равно выпадет в трупе, от второго его оружия которое он ещё в руки не брал, если брал, то не выпадет. Вот как прекратить это безобразие, хочу минимум патронов с трупов.
Shuradan, В function actor_binder:use_callback(obj, who), Удаляешь snd_item.use_snd(obj)-----Рюкзаки это bag.OnActorUse(obj)-----Рюкзаки это
А self.object:set_callback(callback.use_object, nil)-----Рюкзаки используют и self.object:set_callback(callback.use_object, self.use_callback, self)-----Рюкзаки используют Оставляешь обязательно. И будет всё окей. У меня там три ремкомплекта. Можешь тоже сделать три себе. Только сейчас проверил на чистой игре, работает отлично. В конец бинсталкера ничего не добавляй, так-как добавлено уже в --// ну и метод канешно.
Добавлено (08.01.2013, 21:04:14) --------------------------------------------- Короче, создал я смарттеррейн, всё сделал как нужно, логику написал, но всё равно смарт отказывается работать. Но и сама игра не вылетает. Кто подскажет, как заставить его работать или даст полный мануал по работе с смартами, гулагами и вэйпоинтами?
Прилагаю конфиги: 1. Код смарттеррейна в all.spawn
[10325] ; cse_abstract properties section_name = smart_terrain name = marsh_rassv_n position = 595.82122802734,2.8943490982056,435.54510498047 direction = 0.062321275472641,0.00316426996141672,0.0140644172206521