Пользователей: 0
Гостей: 1959
Всего: 1959

» Подробно
» Сегодня

Привет, гость!









Автор Сообщение
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
05-04-2011 11:23 GMT3 час. #1463538   
Artos
Об этой ошибке как то писал Камикадзе - по его мнению данная ошибка происходит при потере движком серверного объекта предмета в момент каких то манипуляций с ним в инвентаре.
Потому и я решил тогда проверять объект сразу на два фронта перед манипуляцией - а иначе как происходило: вот есть клиентский объект, он передается в метод который требует в качестве аргумента тоже клиентский объект, однако почему то все равно происходит данный вылет. У меня он происходил конечно не каждый раз, но где то на каждую пятую операцию дропа большого числа предметов. Что для меня являлось абсолютно неприемлемым - и как я уже писал, проверка на обязательное наличие серверного объекта каким то образом избавила меня от данного вылета в моем конкретном моде.
Почему так - я сам теряюсь в догадках.
В твоем коде наличия такой предпроверки я не увидел, если она присутствует, тогда конечно "лечение" ошибки должно быть иным. Но каким - бог его знает. Раздвоение игре объектов на пары клиент\сервер само по себе на мой взгляд совершенно излишне и косяки явно идут из самого движка. И если лечить основательно - то ковырять движок.:-)
ЗЫ: По большому секрету скажу - malandrinus в последнее время ковырнул движок настолько глубоко, что не удивлюсь если он сделал (или решит сделать ) "таблетку" и от этого косяка. У меня просто есть список того что он добавил в движок (помимо общеизвестных вещей)- но список секретный и меня просили не разглашать.

PPS: Код дропа не мой - взял его целиком из одного мода, да забыл подправить.:-G
Так конечно логичней.

добавлено спустя 8 минут

--------------------------------------------------------------------------------
Сейчас дошло - мы кажется говорим о разных ошибках
у меня вылечилась такая :entity not found. id_parent=какой ид id_entity=какой то ид frame=какой ид.
А твоя ошибка хотя и генерируется тот же функцией xrServer::Process_event_reject, но все таки отличается по описанию.

отредактировал(а) erlik: 05-04-2011 11:36 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
За_Плесне_велый
    
Посты: 23
Откуда:
Возраст: 30
05-04-2011 12:14 GMT3 час. #1463548   
Народ, подскажите как удалить НПС после диалога? - Поговорил с Сидором и Волк удалился. И ещё: Как сделать так, чтобы НПС (тот же Волк) после диалога с Сидором оказался в другом месте. - Стоял в лагере новичков, а после диалога оказался в баре


Не убегай от снайпера, умрешь уставшим.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 12:32 GMT3 час. #1463554   
erlik
Может быть я не очень внятно сформулировал вопрос-загадку ... Суть не в том, что возникла ошибка, а в том(!) что эта ошибка (с id_entity) была и ранее и в оригинале и в модах (хотя и редка) и когда интенсивность жизни в Зоне возрастает - ошибка проявляется чаще. Вот и задался вопросом/целью поискать вариант исключить/минимизировать ошибку.

В описании вопроса я привел 'упрощенный' вариант итерации (о чем и написал), убрав различные общие и частные проверки, которые с моей точки зрения не влияют на суть.

Повторю два основных момента:
1. При ситуации, когда непись должен подобрать некий предмет возникает ситуация, когда предмет УЖЕ оказывается принадлежащим этому неписю, хотя НИКАКИХ еще действий по трансферу/переспавну с этим предметом не проводилось.
У меня есть сэйв, на котором с 50%-ой вероятность. воспроизводится ситуация, когда я убиваю последнего бандита, охраняющего Шустрого на АТП и после диалога Шустрый пытается обобрать труп и подобрать выпавший из рук бандита обрез. Так вот когда он только подошел к обрезу и должен его взять (три такта: осмотрелся+присел+трансфер) - обрез оказывается уже 'у него'. Т.е. oItem:parent() уже равен его Id, хотя soItem.parent_id == 65535. Прервав алгоритм (иначе вылет по ошибке 'передача самому себе') - вижу обрез уже в руках у Шустрого.(!?!)

2. При обирании некоторых трупов иногда возникает ситуация, когда трансфер предметов из трупа к неписю произошел (с предпроверкой принадлежности предмета трупу), плюс прошел трансфер денег, в лог выведена информация об успешном завершении всего текущего цикла и ... вылетает по ранее указанному логу, который я трактую как: "сервер не в состоянии изьять у неписи предмет, который (предмет) имеет 'родителем' самого себя", т.е. предмет уже безхозный, а сервер об этом еще не знает, а пытается 'изъять'.
Ранее (с алгоритмами для пояса) я выяснил, что трансфер предметов от одного объекта к другому происходит в два цикла: вначале в 1-ом цикле после трансфера предмет становится безхозным, во 2-ом цикле - уже принадлежащим тому, кому переместили. И никогда сервер не ругался на ошибочный идентификатор владельца.

Если 1-ю проблемку я решил, хотя и не поняв 'почему такое возможно', то вторую ни понять ни залатать пока не могу ... Вот и обратился к любителям головоломок. :-)


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
05-04-2011 13:02 GMT3 час. #1463570   
Перевел инвентарный ящик в оффлайн, заспавнил в него пердметы и перевел в онлайн. Предметы сп**5001001a66cf24ce67c0** alife():story_object(id)
if sSObj then
alife():set_switch_offline(id,true)
alife():set_switch_online(id,false)
end
end[/code]


Новые фишки для сталкера(см. журнал)
Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 13:36 GMT3 час. #1463587   
Stalk15
Не стОит методом тыка пытаться сделать что-то, когда достаточно поднапрячь мозги, продумать алгоритм и воплотить его в коде. При чем, чем проще - тем надежнее.

Строим алгоритм:
1. Спавн предме**5001001a66cf24ce67c0**


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
MRN$
    
Посты: 114
Откуда:
Возраст: 16
05-04-2011 14:28 GMT3 час. #1463640   
Stalk15

Всегда делал без таймеров и предметов не терял:

1. "спавн" предметов в ящик.
2. ящик сразу просто в офлайн (если он уже там - безвредно и быстрее)
3. ящик сразу просто в онлайн (если ему положено быть офлайн, наверное сам уйдёт)

На практике - проблем не было.

--------------------------------------------------------------------------------------------

Artos
Теоретически, может чего и будет, я и написал - "на практике"


всё легко
Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 14:32 GMT3 час. #1463642   
MRN$
А если п.3+ - ящик в онлайн и ему положено быть в онлайне? ;-)


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
AHKOP
    
Посты: 95
Откуда: Москва
Возраст: 32
05-04-2011 15:10 GMT3 час. #1463671   
Парни, я тут столкнулся с одной проблемой, подскажите плиз, если кто знает, буду очень благодарен.
В общем, вся проблема заключается в невозможности обыскивать некоторые трупы(в основном, "главных") я сейчас иду по сюжетному квесту на х18. Там на нижнем этаже надо взять инфу с трупа какого-то ученого и, когда я начинаю его шмонать, меня выкидывает и пишет вот эту ошибку.

Exeption reason:
XR_3DA.exe caused BREAKPOINT in module "C:\Program Files (x86)\GSC World Publishing\S.T.A.L.K.E.R\bin\xrCore.dll" at 0023:005BCC85, xrDebug::backend()+165 byte(s)

Registers:
EAX=2EC00488 EBX=73F04E50 ECX=2EC00490 EDX=2EC0058E
ESI=005E9328 EDI=005BCD50 FLG=00200212
EBP=0018829C ESP=00187290 EIP=005BCC85
CS=0023 DS=002B SS=002B ES=002B FS=0053 GS=002B

Возможно это из-за RMA мода. но я точно не уверен. если кто знает что делать, подскажите плиз!


Ma$ter
    
Посты: 477
Откуда: Tamboff
Возраст:
05-04-2011 15:56 GMT3 час. #1463696   
AHKOP
Покажи лог вылета


Знание assembler, C/C++, Pascal, Lua.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 16:09 GMT3 час. #1463700   
AHKOP
1. Этот топик НЕ по ковыряниям в конкретных модах/кодах, а по ковыряниям в 'чистой' игре или по общим для различных модов вопросам. С частностями, подобными твоей проблеме, стОит обращаться к разработчикам конкретного мода. Тем более топик по RMA (Восстановление старого сюжета) в наличии на этом портале и автор в нем постоянно появляется и отвечает.
2. Этот топик НЕ для игроков, желающих решить частную проблему своего прохождения игры/мода. Затрата времени на решение подобных проблем зачастую гораздо быстрее решается переигровкой игроком с раннего сэйва или даже с начала игры.
3. Если же возникла потребность в решении подобных проблем, требующих вмешательства в коды - озаботься предоставлением необходимой информации и прежде всего лога ошибки!
Не нужно тут приводить строки твоей операционки, ругающейся на рухнувшее приложение/игру. Найди лог игры (что/где - читай в ФАК'е) и тогда можно будет не гадать, а может и подсказать что-то.
4. Постарайся более точно формулировать: 'начинаю его шмонать' - очень расплывчато. Если вылет сразу при попытке заглянуть в труп - искать скорее всего придется некорректные предметы или квестовые обработчики, если же при попытке кликнуть по какому-то предмету/иконке - ищи корявые конфиги данного предмета.
5. Если делал свою солянку из модов - то врядли кто тут тебе будет заморачиваться и искать черную кошку в темной комнате. Сам заварил кашу - сам и расхлебывай. Объединение модов требует как минимум элементарных знаний и навыков.

отредактировал(а) Artos: 05-04-2011 16:20 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Alexsandr7822
    
Посты: 29
Откуда: Петрозаводск
Возраст: 36
05-04-2011 19:32 GMT3 час. #1463828   
Кто-нибудь знает какие скрипты отвечают за поведение нпс (собирание предметов, торговля, кидание гранат и т.д)


Pasha_199729
    
Посты: 39
Откуда: Dnepr
Возраст:
05-04-2011 19:55 GMT3 час. #1463843   
Сделал озвучку для еду запускаю всё работает только исрользую лобую еде выелт вот лог
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ... Тень Чернобыля\gamedata\scripts\bind_stalker.script:419: attempt to index global 'food_sound' (a nil value)
Вот сам скрипт
function use_snd(obj)

local obj_sect = obj:section()

local snd

if obj_sect == 'bread' then snd = interface\inv_food

elseif obj_sect == 'vodka' then snd = interface\inv_vodka

elseif obj_sect == 'antirad' then snd = interface\inv_pills

elseif obj_sect == 'medkit' then snd = interface\inv_medkit

end

if snd then

local snd_obj = xr_sound.get_safe_sound_object(snd)

snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

end

end

Вот бинда сталкер
function init (obj)
xr_motivator.AddToMotivator(obj)
end

function actor_init (npc)
npc:bind_object(actor_binder(npc))
end

local game_difficulty_by_num = {
[0] = "gd_novice",
[1] = "gd_stalker",
[2] = "gd_veteran",
[3] = "gd_master"
}

lasthealth = 0
lasttime = 0
post_process = 0
local weapon_hide = false
----------------------------------------------------------------------------------------------------------------------
class "actor_binder" (object_binder)
----------------------------------------------------------------------------------------------------------------------
function actor_binder:__init (obj) super(obj)
self.bCheckStart = false
self.weather_manager = level_weathers.WeatherManager()
self.actor_detector = xr_detector.actor_detector()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_spawn(data)
printf("actor net spawn")

level.show_indicators()

self.bCheckStart = true
self.weapon_hide = false -- спрятано или нет оружие при разговоре.
weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.

if object_binder.net_spawn(self,data) == false then
return false
end

db.add_actor(self.object)

if self.st.disable_input_time == nil then
level.enable_input()
end

self.weather_manager:reset()
-- game_stats.initialize ()

if(actor_stats.add_to_ranking~=nil)then
actor_stats.add_to_ranking(self.object:id())
end

--' Загружаем настройки дропа
death_manager.init_drop_settings()

return true
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_destroy()
self.object:set_callback(callback.use_object, nil)
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)

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()
self.object:set_callback(callback.use_object, self.use_object, self)
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)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:take_item_from_box(box, item)
local story_id = box:story_id()
if story_id == nil then
return
end

treasure_manager.take_item_from_box(box, story_id)
--[[
local respawner = se_respawn.get_respawner_by_parent(story_id)
if respawner == nil then
return
end

--' Необходимо уменьшить счетчик в респавнере
respawner:remove_spawned(item:id())

local smart_terrain = db.strn_by_respawn[respawner:name()]
if smart_terrain == nil then
return
end

local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position())
if npc ~= nil then
xr_sound.set_sound_play(npc, "reac_box")
xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor)
end
]]
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:level_border_enter(npc, info_id)
self.actor_detector:actor_enter()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:level_border_exit(npc, info_id)
self.actor_detector:actor_exit()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
--' Сюжет
level_tasks.proceed(self.object)
-- Отметки на карте
level_tasks.process_info_portion(info_id)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_trade (item, sell_bye, money)
if sell_bye == true then
game_stats.money_trade_update (money)
else
game_stats.money_trade_update (-money)
end
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:article_callback(npc, group, name)
--printf("article_callback [%s][%s]", group, name)
if device().precache_frame >1 then return end

if group == "Diary" then
news_manager.send_encyclopedy("diary", group)
else
news_manager.send_encyclopedy("encyclopedy", group)
end
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_take (obj)
level_tasks.proceed(self.object)
--game_stats.update_take_item (obj, self.object)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_drop (obj)
level_tasks.proceed(self.object)
--game_stats.update_drop_item (obj, self.object)
end
----------------------------------------------------------------------------------------------------------------------

function actor_binder:task_callback(_task, _objective, _state)
task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state)
if _objective:get_idx() == 0 then
if _state == task.fail then
news_manager.send_task(db.actor, "fail", _task, _objective)
elseif _state == task.completed then
task_manager.reward_by_task(_task)
news_manager.send_task(db.actor, "complete", _task, _objective)
else
news_manager.send_task(db.actor, "new", _task, _objective)
end
else
if _task:get_objective(0):get_state() == task.in_progress then
news_manager.send_task(db.actor, "update", _task, _objective)
end
end
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:map_location_added_callback(spot_type_str, object_id)
if (false==app_ready()) or (device().precache_frame>1) then return end
--'news_manager.send_task(db.actor, "new")
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:update(delta)
object_binder.update(self, delta)

-- DEBUG slowdown
-- slowdown.update()

local time = time_global()

game_stats.update (delta, self.object)

-- апдейт погоды
self.weather_manager:update()

-- апдейт схемы детектора
self.actor_detector:update()

-- апдейт звуковой схемы актера
xr_sound.update_actor()

--' Проверка потери жизни
--[[
if self.object.health - lasthealth > 0.001 or
self.object.health - lasthealth < -0.001 then
printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime)
lasthealth = self.object.health
lasttime = game.time()
end
]]
-- Обновление отключения ввода с клавиатуры.
if self.st.disable_input_time ~= nil and
game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
then
level.enable_input()
self.st.disable_input_time = nil
end
-- Обновление сна с переносом чувака в указанную позицию
if self.st.sleep_relocate_time ~= nil and
game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle
then
self.object:set_actor_position(self.st.sleep_relocate_point)
local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look)
self.object:set_actor_direction(dir:getH())
self.st.sleep_relocate_time = nil
end

-- Апдейт прятание оружия игрока во время диалога
if weapon_hide == true or self.object:is_talking() then
if self.weapon_hide == false then
self.object:hide_weapon()
self.weapon_hide = true
end
else
if self.weapon_hide == true then
self.object:restore_weapon()
self.weapon_hide = false
end
end

-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени
if self.next_restrictors_update_time < time then
bind_restrictor.actor_update(delta)

self.next_restrictors_update_time = time + 200

task_manager.actor_update()
end

-- обновление постпроцессов
if post_process ~= 0 then
if post_process:update () == true then
post_process = 0
end
end

-- обновление пси-антенны
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:update(delta)
end

--' Вывод сообщения о большой радиации
if self.object.radiation >= 0.7 then
local hud = get_hud()
local custom_static = hud:GetCustomStatic("cs_radiation_danger")
if custom_static == nil then
hud:AddCustomStatic("cs_radiation_danger", true)
hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger")
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic("cs_radiation_danger")
if custom_static ~= nil then
hud:RemoveCustomStatic("cs_radiation_danger")
end
end



if self.bCheckStart then
printf("SET DEFAULT INFOS")

if not has_alife_info("storyline_actor_start") and
(level.name() == "l01_escape")
then
self.object:give_info_portion("storyline_actor_start")
_G.g_start_avi = true
printf("*AVI* RUN START AVI")
end

-- if not has_alife_info("encyclopedy") then
-- self.object:give_info_portion("encyclopedy")
-- end

if not has_alife_info("global_dialogs") then
self.object:give_info_portion("global_dialogs")
end

if not has_alife_info("level_changer_icons") then
self.object:give_info_portion("level_changer_icons")
end

level_tasks.add_lchanger_location()

self.bCheckStart = false
end
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:save(packet)

local save_treasure_manager = true

printf("actor_binder:save(): self.object:name()='%s'", self.object:name())
object_binder.save(self, packet)

--' Сохраняем уровень сложности
if save_treasure_manager == true then
packet:w_u8(level.get_game_difficulty() + 128)
else
packet:w_u8(level.get_game_difficulty())
end


--' Сохраняем данные об отключенном вводе
if self.st.disable_input_time == nil then
packet:w_bool(false)
else
packer:w_bool(true)
utils.w_CTime(packet, self.st.disable_input_time)
end

xr_logic.pstor_save_all(self.object, packet)
self.weather_manager:save(packet)

sr_psy_antenna.save( packet )

if save_treasure_manager == true then
treasure_manager.save(packet)
end

task_manager.save(packet)
self.actor_detector:save(packet)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:load(reader)
printf("actor_binder:load(): self.object:name()='%s'", self.object:name())
object_binder.load(self, reader)
printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name())

--' Загружаем уровень сложности
local game_difficulty = reader:r_u8()

local load_treasure_manager = false
if game_difficulty >= 128 then
game_difficulty = game_difficulty - 128
load_treasure_manager = true
end


get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])

if reader:r_eof() then
abort("SAVE FILE IS CORRUPT")
end

local stored_input_time = reader:r_u8()
if stored_input_time == true then
self.st.disable_input_time = utils.r_CTime(reader)
end

xr_logic.pstor_load_all(self.object, reader)
self.weather_manager:load(reader)

sr_psy_antenna.load(reader)

if load_treasure_manager == true then
treasure_manager.load(reader)
end


task_manager.load(reader)
self.actor_detector:load(reader)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:use_object(obj)
food_sound.script.use_snd(obj)
end
--------------------------------------------------------------------
--старт префетча звуков
--if string.find(command_line(), "-noprefetch") == nil then
-- sound_prefetch.prefetch_sounds()
--end


-- Weapon functions
function hide_weapon()
weapon_hide = true
end
function restore_weapon()
weapon_hide = false
end

// this is test for section iteration
/**
local function test_section_iteration(file_name, section_name)
printf ("file : %s",file_name)
printf ("section : %s",section_name)

local file = ini_file(file_name)
local n = file:line_count(section_name)
printf ("lines : %d",n)

local id, value = "", "", result
for i=0,n-1 do
result, id, value = file:r_line(section_name,i,"","")
printf ("line %d : %s = %s",i,id,value)
end
end

test_section_iteration("system.ltx","space_restrictor")
/**/




Идущий прокладывает сам себе дорогу
Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 20:04 GMT3 час. #1463849   
Alexsandr7822
Ты не находишь свой вопрос, мягко выражаясь, некорректно заданным?

Не удосужившись уточнить про чистую ли игру спрашиваешь или про какой-то конкретный мод, в лучшем случае получишь кучу флуда на эту тему.

В чистой игре каких-либо собирательств, кидания гранат и т.п. нет. Перечислять что есть кроме торговли не вижу смысла, т.к. ты даже не удосужился задуматься, а что обозначает например название 'trade_manager.script'.

Кол-во различных скриптов, отвечающих за поведение NPC в различных модах множество, как и их названий. Ты ждешь что тебе кто-то предоставит всеоблемлющий список всего и вся "и т.д."? ;-)

Хочешь спросить - спрашивай, а не начинай флудильню.


Pasha_199729
Учись писать скрипты соблюдая элементарные правила и без синтакситеских ошибок.
Ни один компиллятор LUA не поймет стоки:
  snd = interface\inv_food
т.к. правила диктуют иное написание:
  snd = "interface\inv_food"

Это без разбора ошибочных путей, т.к. обычно требуется:
  snd = "interface\\inv_food"

Твой лог говорит тебе об ошибке самого скрита 'food_sound' - бери LUA-чекер (ссылки были одну-две странички назад) и проверяй/исправляй ошибки.

Также, не стОит свой вызов скрипта пихать в самое начало ... начни с конца, т.е. после установки штатных коллбэков. :-)


Alex-San
может быть ты и кашпировский ( ;-) ), но ... ни один из упомянутых в вопросе "собирание предметов, торговля, кидание гранат ..." не имеют никакого отношения к "ВИКИ логика НПС".

отредактировал(а) Artos: 05-04-2011 20:33 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
05-04-2011 20:23 GMT3 час. #1463856   
Alexsandr7822 имеет ввиду логику поведения неписей. Вещь довольнотаки сложная, это тебе не правка конфигов. Для начала могу порекомендовать вводный урок Red75 на ВИКИ логика НПС
А потом оттудаже штатный манул по настройке логики.
Осилишь...молодец)


Silent Man
    
Посты: 1
Откуда:
Возраст:
05-04-2011 22:44 GMT3 час. #1463930   
что означает этот в


Artos
    
Посты: 4176
Откуда:
Возраст: 65
05-04-2011 23:44 GMT3 час. #1463948   
Silent Man
Означает один из худших для анализа вариантов возникновения ошибки.
'stack overflow' - переполнен объем выделенной памяти (в данном случае стека) для неких операций.
Наиболее вероятно подобное по двум причинам:
- при зацикливании смены положения/состояния тела у неписей/монстров, т.е. следы идут из стейт-менеджера (state_mgr.script), а уж 'последняя капля' может быть где угодно (в твоем случае в smart_terrain'е);
- при зацикливании алгоритмов/кодов. Тогда распутывать цикл стОит с smart_terrain.script:751


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
Snork_agroproma
    
Посты: 14
Откуда: Благовещенск
Возраст:
06-04-2011 04:46 GMT3 час. #1463976   
Вопрос: я через all.spawn добавил ниву армейского обрасца. Как её завести?И вообще реально ли это?


Strchi
    
Посты: 2581
Откуда: Уфа-Челябинск-Фритаун
Возраст:
06-04-2011 08:11 GMT3 час. #1464012   
Извинтиляюсь что ни в тему не нашел тему моделеров

Вопрос Как сделать подземелие? Террейны делал но задумался что то о подземелиях


Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
06-04-2011 09:33 GMT3 час. #1464049   
Snork_agroproma
Если всё правильно сделал, то надо забандить кнопку, обычно "b" на запуск движка.
Strchi
Картоделов тут вроде нуту :/ Да их и вообще мало( Могу посоветовать два ресурса:

Сообщество маперов (с АМК форума)

сайт Сообщества независимых картоделов


Alexsandr7822
    
Посты: 29
Откуда: Петрозаводск
Возраст: 36
06-04-2011 12:38 GMT3 час. #1464157   
Artos Помоему вопрос очень корректный. Я уже не раз задаю подобные вопросы в этой статейке. И поччему -то именно старшее поколение не может никак понять о чем идет речь. Если ты "шляпа" не можешь допереть НА ТАКОЙ ПРОСТОЙ ВОПРОС" и причем тут вобще trade_menedger_script?????? Мне просто нужно узнать какие скрипты отвечают за поседение нпс. Три скрипта я уже нашел (Logic, motivator, ai) Еще раз повторяю для тех кто в "ТАНКЕ" игрю в мод!!!

Artos Ты прав насчет модов..везде состовляющие конфиги имеют свои назначения отвечающие за логику нпс...но все они меют свой корень а всякий корень берет свре начало именно от этих скриптов.


Ma$ter
    
Посты: 477
Откуда: Tamboff
Возраст:
06-04-2011 13:27 GMT3 час. #1464170   
Alexsandr7822
Файлы xr_**.script


Знание assembler, C/C++, Pascal, Lua.
Artos
    
Посты: 4176
Откуда:
Возраст: 65
06-04-2011 13:48 GMT3 час. #1464175   
Alexsandr7822

Для тех, кто НА танке, а не в нем:
На некоторые вопросы возникает желание помочь/ответить, а на некоторые - улыбнувшись промолчать или порою выругаться ...
Воинствующее невежество никогда не способствовало познанию, но ... каждый выбирает по-себе.
Воюй дальше ... ;-)


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
fan fan
    
Посты: 189
Откуда: калач
Возраст: 31
06-04-2011 14:00 GMT3 час. #1464181   
Подскажите скрипт спавна монстров в определенной точке каждые 8-10 часов. Пытался сделать по подобию таймеров AMK но ничего не вышло.


Я тут подумал, а если два телепата начнут читать мысли друг друга одновременно... Они умрут от переполнения стека?
Alexsandr7822
    
Посты: 29
Откуда: Петрозаводск
Возраст: 36
06-04-2011 16:13 GMT3 час. #1464242   
Ma$ter спасибо за простой и содержательный ответ! Как раз в них щас и разбираюсь. Методом проб и ошибок)


Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
06-04-2011 20:19 GMT3 час. #1464405   

# fan fan :
Подскажите скрипт спавна монстров в определенной точке каждые 8-10 часов. Пытался сделать по подобию таймеров AMK но ничего не вышло.


Может проще гулаг создать.


Struck
    
Посты: 1946
Откуда:
Возраст:
06-04-2011 20:54 GMT3 час. #1464426   
fan fan я на таймер спавн вешал


Снова в строю.

l
Pasha_199729
    
Посты: 39
Откуда: Dnepr
Возраст:
07-04-2011 08:49 GMT3 час. #1464552   
Я недавно перенёс модель артефакта выверт из чн запускаю игру спавню его гдето всё работает а если он спавнится у нпс то вылетает с ошибкой
Expression : assertion failed
Function : CSafeFixedRotationState::create
File : e:\stalker\patch_1_0004\xr_3da\xrgame\phvalidevalues.h
Line : 81
Description : dBodyStateValide(b)


Идущий прокладывает сам себе дорогу
Дядя Вадя
    
Посты: 37
Откуда: Рязань
Возраст: 31
07-04-2011 11:01 GMT3 час. #1464590   
Вопрос у меня такой как нацепить на Волка или другого персонажа другой костюм.
Т.е. Волк стоит в костюме одиночки как нацепить на него к примеру костюм военного.


ПО ВОЛЕ БОГА И НЕБЕС, ПОПАЛ СЛУЖИТ Я В ВВС
Strchi
    
Посты: 2581
Откуда: Уфа-Челябинск-Фритаун
Возраст:
07-04-2011 11:38 GMT3 час. #1464607   
Дядя Вадя незя другой костюм тока визуал полностью сменить в gamedata/gameplay/там xml с профилями НПС


Alex-San
    
Посты: 1015
Откуда:
Возраст: 51
07-04-2011 11:53 GMT3 час. #1464615   
А точнее. Папка ..\gamedata\config\gameplay
В ней файл - character_desc_escape.xml там прописаны все персональные неписи с кордона.
Далее ищем там конфиг Волка, он после строк
И за ней строки определяющие костюм Волка - actors\neytral\stalker_neytral_balon_1




Форумы Архив » Свалка Модификации ТЧ, вопросы и ответы (старое, по 14.06.11)


Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2025 «Stalker-Portal.ru»