Допустим, подходишь к НПС и там есть ветка диалога Есть ЧО? дальше два варианта ответа НПС: Вот, вот возьми, только не бей или Неа, ничего нет.
Если первый вариант то потставить скрипт выдачи инвентаря НПС. Если второй то идёт фраза: А если по *ВЫРЕЗАНО*(морде). После этой фразы идут два хода развития. 1.НПС становится врагом и палит в ГГ. 2.Отдаёт содержимое Рюкзака.
+ всё это сделать радомно
Назвать всё это: Гоп-Стоп MOD(Gop-Stop mod)
Дак вот. Помогите создать скрипт выдачи содержимого инвертаря ГГ.
Возможно ли такое?
singapur22 я и не собирался перекладывать на вас работу. Я поросил Объяснить мне как это можно сделать.
erlik и singapur22 простите за тупость.
Это моя ошибка. Я разделил одну функцию на два файла вот и не работало.
Спасибо теперь все отично работает, :-) вот только маркер с карты не убирается, но возможно это я опять что то не так зделал.
erlik
Если не сложно можеш скинуть название всех аномалий протестил - zone_emi - очень понравилась.
Или скажи где смотреть, я пока нашел только эти: :no)
zone_witches_galantine - Электра
zone_mincer - трамплин
zone_buzz - Холодец
zone_gravi_zone - Грави
zone_mine_field - Мина
zone_monolith - радиактивная зона-монолита
zone_mosquito_bald - разрыв
zone_no_gravity - зона без гравитации
zone_radioactive - зона радиации
zone_teleport - телепорт
zone_zharka_static - Жарка
Такс С СДК разобрался...
Теперь как наложить текстуру на плоскость в Maya6.5?
ВАще не чё понять не могу !
В Фотошопе текстуру зделал теперь в Майе куда тыкать чтобы он поставилась?
Срочно плиз!
народ я дико извиняюсь я в деревне и инет по модему так что читать все я порсто не могу у меня тут вопрос можно ли поменять количество патронов в магазине
karavan
ты почти все назвал.
все файлы конфигов аномалий в папке misc - имена начинаются в с zone_....
вот еще:
torrid_zone - не спавнится - выдает ошибку об отсутствии цикла - в принципе можно исправить, но пока не пробовал. Что из себя представляет не знаю.
костры из файла zone_kampfire:
zone_flame - большой
zone_flame_small - обычный
zone_campfire_mp_nolight - почти такой же - особой разницы не уловил
zone_campfire_grill - жар от тлеющих углей
zone_ameba - не помню как выглядит
zone_burning_fuzz - жгучий пух
zone_rusty_hair - ржавые (рыжие) волосы - тип хита shock, в игре не помню - видимо не использовалсь.
зона из модов - в оригинале ее нет, партиклы и эффекты амкашные - видел в симбионе
zone_ice - по названию понятно, что из себя представляет
убирается или нет маркер с карты я пока не знаю - надо опять попробовать, может все норм будет.
добавлено спустя 5 минут
BOGGAD
судя по логу ты с классом автомата че то не то сделал. Ты какой ему поставил?
отредактировал(а) erlik: 30-09-2009 23:18 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Сталкер Монолита
вот скрипт отбирающий(удаляющий) у ГГ все что у него есть, окромя болта и фонарика:
function clear_actor_inventory(actor)
actor:iterate_inventory(__del_item, actor)
end
function __del_item(actor, item)
local section = item:section()
if section == "bolt" or section == "device_torch" then
return false
end
alife():release(alife():object(item:id()), true)
end
вызывать надо clear_actor_inventory(actor)
если через диалог то имя_файла.clear_actor_inventory
если тебе надо, чтобы все вещи ГГ были переданы неписю, то попробуй воспользоваться этой функцией
local in_object, in_object = 0, 0
local function drop_object_item(item)
out_object:drop_item_and_teleport(item, in_object)
end
local npc = level_object_by_sid (айди)
out_object = db.actor
in_object = npc
db.actor:inventory_for_each(drop_object_item)
end
так я ей еще не пользовался - то и запись может быть ошибочной - как то singapur22
выкладывал функцию телепортации вещей из рюкзака ГГ - это ее переделка под телепортацию вещей в рюкзак непися. Тока у непися, которому все это надо передать нужно знать сид.
Можно конечно сделать и другой скрипт - скажем задать таблицу вещей, в которую вписать определенные вещи, и при активации функции скрипт сравнит вещи из таблицы с тем что у есть ГГ и что найдет, то и заберет. Это чтобы все подряд у ГГ не забирать - а так сказать делать выборочный шмон. :-) Будем время накидаю скрипт...
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Как производится выбор позиции во время респавна?
А то после того, как внёс изменения в ИИ-сетку, в консоль частенько выводится информация такого рода:
...
! Cannot build GAME path! (object dog_normal17155)
! CURRENT LEVEL : l02_garbage
! CURRENT game point position : [271.390381][-7.346767][-107.826294]
! TARGET LEVEL : l07_military
! TARGET game point position : [-197.972778][-3.860565][421.732391]
! Target point mask [12][0][0][0]
! Object masks (1) :
! [255][0][255][255]
...
Пока к вылетом это не приводит.
На одном из форумов прочитал, что такое сообщение выходит, когда пёсик (или кто-либо ещё) криво переходит из офлайна в онлайн: появляется в месте, откуда нет выхода.
Судя по логу, пёсик появился на Свалке и ему надо идти на Военных склады, но что-то препятствует ему это сделать.
Может причина вовсе не в респавнере? Может какая-нибудь связка уровней нарушилась во время пересборки ИИ-сетки? Сетку изменял на локации Бар (как раз между Свалкой и Складами).
Сообщение выходит стабильно, переход на другой уровень и обратно не помогает.
Этим сообщением забит весь лог. Из-за него лог теперь весит не килобайты, а мегабайты.
А да, забыл сказать почему я подумал на респавн. Та позиция, на которой появляется пёсик, ближе всего похожа на позицию респавнера, который как раз и респавнит таких пёсиков.
отредактировал(а) Максим Р.: 01-10-2009 10:06 GMT3 час.
я попытался изменить всем сталкерам-одиночкам текстуры и оружие(в папке character_desc_escape)с помощью блокнота и у меня потом игра вылетела. експериментировал с патчем1.0006 и с 1.0004.
что делать?
Сталкер Монолита
так в function drop_object_item поменяй местами переменные и должно сработать наооборот
local npc = level_object_by_sid (айди)
out_object = npc
in_object = db.actor
npc:inventory_for_each(drop_object_item)
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
----------------------------------------------------------------------------------------------------------------------
-- Менеджер изменения состояния тела
-- автор: Диденко Руслан (Stohe)
-- TODO:
----------------------------------------------------------------------------------------------------------------------
function printf()
end
aim_ratio = 1000/50
min_ratio = 1500
--' Эвалуатор, который синхронизирует менеджер.
--' Мы уже в безраличном состоянии idle или нет
class "evaluator_state_mgr_idle" (property_evaluator)
function evaluator_state_mgr_idle:__init(name, state_manager) super (nil, name)
self.st = state_manager
self.mgr = nil
end
function evaluator_state_mgr_idle:evaluate()
local t = self.st.target_state == "idle" and
--not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and
self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and
self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and
self.st.planner:evaluator(self.st.properties["animation"]):evaluate()
if t == true then
if self.mgr == nil then
self.mgr = self.object:motivation_action_manager()
end
if self.mgr:initialized() and self.mgr:current_action_id() == xr_actions_id.state_mgr + 1 then
self.st.combat = true
end
end
if self.st.combat == true then return true end
return false
end
--' Мы уже в безраличном состоянии idle или нет ()учет с проверкой alife
class "evaluator_state_mgr_idle_alife" (property_evaluator)
function evaluator_state_mgr_idle_alife:__init(name, state_manager) super (nil, name)
self.st = state_manager
self.t = nil
end
function evaluator_state_mgr_idle_alife:evaluate()
if not self.object:alive() then
return true
end
-- апдейт менеджера анимаций
-- раньше он был тут, сейчас он вынесен из эвалуатора
-- printf("SECTION %s", utils.to_str(db.storage[self.st.npc:id()].active_section))
mgr = self.object:motivation_action_manager()
self.t = nil
if mgr:initialized() then
self.t = mgr:current_action_id()
--printf("ACTION %s", utils.to_str(self.t))
if self.t ~= xr_actions_id.alife then
self.st.alife = false
end
end
if db.storage[self.st.npc:id()].active_section == nil then
if xr_meet.is_meet(self.object) == false then
local t = self.st.target_state == "idle" and
not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and
self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and
self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and
self.st.planner:evaluator(self.st.properties["animation"]):evaluate()
if t == true then self.st.alife = true end
if self.st.alife == true then
return true
end
return t
else
return false
end
end
return true
end
--' Переход в idle
class "act_state_mgr_to_idle" (action_base)
function act_state_mgr_to_idle:__init(name,state_manager) super (nil, name)
self.st = state_manager
end
function act_state_mgr_to_idle:initialize()
action_base.initialize(self)
self.object:movement_enabled(true)
if self.object:best_enemy() then
self.st:set_state("idle", nil, nil, nil, {animation = true})
xr_sound.set_sound(self.object, nil)
stop_play_sound(self.object)
return
end
if self.object:best_danger() then
self.st:set_state("idle", nil, nil, nil, {animation = true})
xr_sound.set_sound(self.object, nil)
stop_play_sound(self.object)
return
end
self.st:set_state("idle")
end
function act_state_mgr_to_idle:execute()
action_base.execute(self)
if self.object:best_enemy() then
self.st:set_state("idle", nil, nil, nil, {animation = true})
return
end
if self.object:best_danger() then
self.st:set_state("idle", nil, nil, nil, {animation = true})
return
end
self.st:set_state("idle")
end
function act_state_mgr_to_idle:finalize()
-- По завершению перехода нужно записать -1 в указатель "на кого смотреть",
-- чтобы при возврате было понятно что его нужно переинициализировать.
self.st.current_object = -1
action_base.finalize(self)
end
--'-------------------------------------------------------------------------------------
--' Эвалуаторы и экшены менеджера
--'-------------------------------------------------------------------------------------
--' Закончил ли менеджер свою работу
class "eva_state_mgr_end" (property_evaluator)
function eva_state_mgr_end:__init(name, st) super (nil, name)
self.st = st
self.mgr = nil
end
function eva_state_mgr_end:evaluate()
if self.mgr == nil then
self.mgr = self.object:motivation_action_manager()
end
if not self.mgr:initialized() then
return false
end
local current_action_id = self.mgr:current_action_id()
if current_action_id ~= stalker_ids.action_combat_planner and
current_action_id ~= stalker_ids.action_danger_planner and
current_action_id ~= stalker_ids.action_anomaly_planner
then
self.st.combat = false
end
return false
end
--' Залочен ли менеджер
class "eva_state_mgr_locked" (property_evaluator)
function eva_state_mgr_locked:__init(name, st) super (nil, name)
self.st = st
end
function eva_state_mgr_locked:evaluate()
--printf("npc %s", self.object:name())
--printf("weapon locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate()))
--printf("direction locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate()))
--printf("animstate locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate()))
--printf("animation locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate()))
--printf("combat[%s] alife[%s]", tostring(self.st.combat), tostring(self.st.alife))
if self.st.combat or self.st.alife then
return true
end
return self.st.planner:initialized() and (
self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate() or
self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate() or
self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate() or
self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate())
end
--' Идловый экшн менеджера
class "act_state_mgr_end" (action_base)
function act_state_mgr_end:__init(name, st) super (nil, name)
self.st = st
end
function act_state_mgr_end:initialize()
action_base.initialize(self)
end
function act_state_mgr_end:execute()
action_base.execute(self)
-- if not self.st.planner:evaluator(self.st.properties["movement_stand_now"]):evaluate() then
-- state_mgr_direction.update_movement_direction(self.object, self.st)
-- end
local t = state_lib.states[self.st.target_state].weapon
local w = isWeapon(self.object:best_weapon())
if not w then
return
end
if t == "fire" or t == "sniper_fire" then
--printf("[%s] shooting", self.object:name())
local sniper_aim = 3000
if self.st.look_object ~= nil then
local look_object = level.object_by_id(self.st.look_object)
if look_object == nil then
self.st.look_object = nil
return
end
if self.object:see(look_object) and
(not IsStalker(look_object) or
self.object:relation(look_object) == game_object.enemy) and
look_object:alive() == true
then
if t == "sniper_fire" then
sniper_aim = self.object:position():distance_to(look_object:position())*aim_ratio
if sniper_aim <= min_ratio then
self.object:set_item(object.fire1, self.object:best_weapon(), 1, min_ratio)
return
end
self.object:set_item(object.fire1, self.object:best_weapon(), 1, sniper_aim)
else
self.object:set_item(object.fire1, self.object:best_weapon(), state_mgr_weapon.get_queue_params(self.object, look_object))
end
return
else
self.object:set_item(object.idle, self.object:best_weapon())
return
end
end
if self.st.look_position ~= nil and
self.st.look_object == nil
then
if t == "sniper_fire" then
self.object:set_item(object.fire1, self.object:best_weapon(), 1, sniper_aim)
else
self.object:set_item(object.fire1, self.object:best_weapon(), state_mgr_weapon.get_queue_params(self.object, nil))
end
return
else
if self.st.target_state == "psy_shoot" then
self.object:set_item(object.fire1, self.object:best_weapon())
return
end
self.object:set_item(object.idle, self.object:best_weapon())
return
end
return
elseif t == "unstrapped" then
--printf("[%s] not shooting", self.object:name())
self.object:set_item(state_mgr_weapon.get_idle_state(self.st.target_state), self.object:best_weapon())
end
end
function act_state_mgr_end:finalize()
action_base.finalize(self)
end
--' Лок менеджера
class "act_state_mgr_locked" (action_base)
function act_state_mgr_locked:__init(name, st) super (nil, name)
self.st = st
end
function act_state_mgr_locked:initialize()
action_base.initialize(self)
end
function act_state_mgr_locked:execute()
action_base.execute(self)
end
function act_state_mgr_locked:finalize()
action_base.finalize(self)
end
if state_lib.states[state_name] == nil then
mylog("ERROR: ILLEGAL SET STATE CALLED!!! " ..tostring(state_name).. " for "..self.npc:name())
return
end
if target then
if target.look_position then
printf("look position: %s %s %s", target.look_position.x,
target.look_position.y,
target.look_position.z)
else
printf("look position: NIL")
end
if target.look_object then
printf("look object: %s", target.look_object:name())
else
printf("look object: NIL")
end
else
printf("look target NIL")
end
--сперва устанавливаем цели
if target ~= nil then
self.look_position = target.look_position
if target.look_object ~= nil then
self.look_object = target.look_object:id()
else
self.look_object = nil
end
else
self.look_position = nil
self.look_object = nil
end
-- меняем угол точности.
if extrakeys and extrakeys.yaw_delta ~= nil then
self.yaw_delta = extrakeys.yaw_delta
else
self.yaw_delta = 5
end
-- меняем глубину рекурсивности анимации.
if extrakeys and extrakeys.subanim ~= nil then
self.subanim = extrakeys.subanim
else
self.subanim = 0
end
local switched = false
local last_state = self.target_state
if self.target_state ~= state_name then
--' Если мы переключаемся из стреляющего состояния в нестреляющее - необходимо сразу же прекратить стрельбу
if (state_lib.states[self.target_state].weapon == "fire" or
state_lib.states[self.target_state].weapon == "sniper_fire") and
(state_lib.states[state_name].weapon ~= "fire" and
state_lib.states[state_name].weapon ~= "sniper_fire")
then
self.npc:set_item(state_mgr_weapon.get_idle_state(state_name), state_mgr_weapon.get_weapon(self.npc, state_name))
--printf("[%s] stop shooting", self.npc:name())
end
--' Если мы переключаемся из идущего положения в стоящее - надо задизаблить перемещение
if state_lib.states[self.target_state].movement ~= move.stand and
state_lib.states[state_name].movement == move.stand
then
self.npc:movement_enabled(false)
end
self.target_state = state_name
self.current_object = nil
switched = true
end
-- mylog("set state " .. state_name)
if state_lib.states[state_name].reset == true then
self.reset_state = true
else
self.reset_state = false
end
if switched and emerg ~= nil then
if animation_reset_denied[last_state] ~= true then
self.emerg.animation = emerg.animation
self.emerg.animation_nout = emerg.animation_nout
end
end
self.synsound = synsound
self.callback = callback
if timeout ~= nil and
timeout >= 0
then
self.callback.timeout = timeout
self.callback.begin = nil
else
if self.callback then
self.callback.func = nil
self.callback.timeout = nil
end
end
-- if switched == true then
-- self:update()
-- end
end
function state_manager:get_state()
return self.target_state
end
function state_manager:update()
--printf("Update called")
self.animstate:update()
self.animation:update()
self.planner:update()
--self.planner:show("")
end
function set_state(npc, state_name, callback, timeout, target, emerg, synsound, extrakeys)
if db.storage[npc:id()].state_mgr then
db.storage[npc:id()].state_mgr:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys)
end
end
function get_state(npc)
if db.storage[npc:id()].state_mgr then
return db.storage[npc:id()].state_mgr:get_state()
end
return nil
end
function bind_manager(object)
local manager = object:motivation_action_manager()
Читай журнал singapur22
http://stalker-portal.ru/plug.php?e=weblogs&m=page&id=7537 вот это
http://stalker-portal.ru/plug.php?e=weblogs&m=page&id=7538 и это
Изготовляется новый сюжетный мод. Рабочее название SZ. Принимаются новички и опытные модмейкеры. Обращаться по ICQ и ЛС
mrslepoff
твой диалог может и образцово-показательный, только ты лучшего места для него не нашел чем совать волку?
Если уже решил заменить один диалог на другой - то сначала структуру диалога изучи - во первых это start_dialog - такой тип диалога начинается с фразы NPC, а вторых он активируется тока при выполнении заложенных в нем условий.
в этом диалоге сначала идет так 1 2 3 4 5
пустой тэг фразы непися, затем опять переход к пустым тэгам вариантов фраз в которых стоят условия для последующих фраз - опять же фраз NPC - волка.
И только потом фразы меченого. Так что думай сам что у тебя там не так.
добавлено спустя 3 минут
Сталкер Монолита
Вот тебе скрипт для отбирания вещей у NPC - дописываешь в таблицу то что тебе надо - (там нет аптечек, патронов, гранат, уникальных стволов) - экшен по вызову collector ставишь в диалог на фразу актора, и если у непися есть вещи из таблицы, то при активации нужной фразы они отберутся и будут переданы ГГ. Есть минус - пока отбирается тока по одной вещи одного имени - позже исправлю - пока не получилось.
function collector(actor, npc)
for k,v in pairs(tab) do
if npc:object(v) then
obj = npc:object(v)
if obj then
local obj_name = obj:section()
local sobj = alife():object(obj:id())
if sobj then
alife():release(sobj, true)
this.spawn(obj_name)
end
end
end
end
end
function spawn(obj_name)
alife():create(obj_name, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
как сделать без таблицы - я пока не придумал.
броники вписывать не стоит - их все равно у неписей нет, так как визуал и броник это разные вещи.
чтобы так можно было делать со всеми NPC - впиши айди своего диалога всем неписям в профиль.
тогда если он будет у всех, то и обобрать можно будет каждого.
отредактировал(а) erlik: 01-10-2009 20:32 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
мы уже со слеповым че не делали= ) я все ваиранты пеерпробовал.. тогда вопрос, как удалить непися не затрагивая all.spawn ?? например тогоже волка. потому что именно ОН нам нужен
создание NPC через All.spawn почти с нуля у меня в журнале
Так же известен, как Stunder
я щас задам наитупейший вопрос, я просто забыл: вообщем, как сделать так, чтобы папка gamedata была видна игрой?
какое значение надо поставить в fs_game ?:blink
модов куча, а не видит:-(
Кто-нибудь знает, можно ли как-то обновить скрипты при запущенной игре? Т.е., я запустил игру, альттабом перешёл в винду, изменил параметры .ltx файлах, альттабом переключился в игру - изменений никаких, надо закрывать её, запускать по-новой. Но это не слишком продуктивно. Я порылся в консоли, но ничего подходящего пока не нашёл, можт кто из мододелов знает, есть ли такая возможность?
Vixler
пока никак нельзя. скрипты и конфиги считываются при загрузке игры.
Но правда singapur22 разрабатывает редактор скриптов в игре ( насчет ltx не знаю) -
пока он свою работу не выкладывал.
Так что жди или спроси у него. Профиль найдешь на 26 стр.
добавлено спустя 5 часа 57 минут
Вопрос
по параметрам конфига гранаты:
вот этот blast_impulse_factor - за что отвечает?
понятно что переводится "фактор импульса взрывной волны" - дефолтом там стоит = 1 но там и так есть blast_impulse - импульс взрывной волны, дефолт больше 100.
Второй вроде отвечает за силу импульса, которая будет придана трупу непися - то есть наскока далеко он отлетит после взрыва. Но как он пересекается с первым параметром - blast_impulse_factor ?
И от какого параметра зависит дальность разлета осколков? там есть fragment_speed - скорость полета осколков - если ее уменьшить, это повлияет на дальность? (понятно, что в жизни - повлияет, но в игре непонятно по каким формулам прописана физика этих осколков).
Просто пока наугад все выкрутил по максимуму - и получил мегабомбу, которая убивает даже Меченого на дистанции 70-100 метров. Может кто-нибудь знает точные значения всех параметров?
отредактировал(а) erlik: 02-10-2009 14:38 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.