Stalk15
Синие инвентарные ящики(с видимым визуалом equipments\item_box_01_visual.ogf) в оригинале расставлены по локациям в SDK и поэтому как и сказал Максим Р. впаяны в геометрию уровня. В качестве инвентарной подкладки используется ящик-невидимка(с моделькой из папки physics\equipment_cache\) и с классом O_INBOX.
Если заспавнить скриптом видимый синий ящик с классом O_INBOX, то можно обнаружить, что в этот ящик почему то нельзя заглянуть(у меня вроде так было). Все прочее ящики будут иметь нормальный доступ в инвентарь, однако будут физически проницаемыми(через них можно проходить), так как объекты класса O_INBOX не имеют физической оболочки. Поэтому чтобы решить данную проблему мне пришлось в тайниках пойти на такой трюк - спавнить два типа ящиков на одной координате - инвентарную невидимку и видимый ящик с классом P_DSTRBL (можно и O_PHYS_S). А чтобы видимый ящик(имеющий физ. оболочку) нельзя бы случайно сдвинуть с места - закреплять его на месте спавна специальной функцией.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
помогите мне, тут такая проблемка..как уменьшить/увеличить отличие цен на продажу товара от цен на его покупку. долго везде искал, копался...не нашёл, помогите, обьясните, я просто этим никогда не занимался и не создавал модов...пожалуйста:-(
Люди, здравствуйте. subtlegeneral, вот. Тут рассказано о том, что и как в торговле. В том числе и о ценах:
Все настройки, связанные с ассортиментом торговцев в игре, находятся в файлах gamedata\config\misc\trade_***.ltx
Секция [trader_generic_buy]
Эта секция описывает какие товары торговец будет покупать.
Название предмета = минимальная цена покупки, максимальная цена покупки
Например:
wpn_vintorez = 0.5, 0.7
Это значит что торговец купит оружие от 50% полной его стоимости до 70%, т.е. если Винторез стоит 1000, то торговец купит его в диапазоне от 500 до 700 рублей. Диапазон зависит от отношения торговца к Меченому - чем лучше, тем дороже купит
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: ...:\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:338: attempt to index global 'my_script' (a nil value)
Вот, я не могу понять, что же это я делаю не так. My_script - название файла с моей функцией. Функция называется: main_f(). Объявлял ее в bind_stalker вот так: my_script.main_f()
2)
Я сделал новый тип предметов. Как хранить в каждом какой-то новый параметр, чтобы при спавне нового предмета этого типа, этот параметр уже существовал (и был инициализирован). Через нет-пакеты, как мне подсказали. Но как именно?..
3)
Как вообще посмотреть содержание нет-пакета? А то, чтобы в него вносить изменения, надо знать его структуру.
Зачем доказывать кому-то, что ты настоящий мужик? Лучше потратьте это время на добрые дела!
erlik, Максим Р.
Спасибо, теперь разобрался. vhodnoylogin
1) В твоем скрипте(my_script.script) допущена синтаксическая ошибка. Скачай чекер луа, он найдет ошибку.
Я заспавнил в инвентарный ящик предметы. Если сохраниться и загрузиться, то заспавненные предметы в ящике изчезают. Вроде бы должны сохраняться предметы и не изчезать.
Как быть? Придется все секции предметов сохранять в пстор(предметов то много)? vhodnoylogin
Тогда покажи, что там у тебя в твоем скрипте написано.
отредактировал(а) Stalk15: 03-04-2011 18:05 GMT3 час. Новые фишки для сталкера(см. журнал)
--------------------------------------------------------------------------------------------
function number_of_ammo(obj)
local se_obj = alife():object(obj:id())
local packet = net_packet()
cse_alife_item_ammo.STATE_Write(se_obj, packet)
packet:r_seek(packet:w_tell() - 2)
return packet:r_u16()
end
__________________________________________
Зачем доказывать кому-то, что ты настоящий мужик? Лучше потратьте это время на добрые дела!
Stalk15
Вообще странная проблема с исчезновением предметов.
Странная потому что я с ней не сталкивался :-) Но в АМК дабы ее обойти придумали перевод ящиков-тайников в онлайн\оффлайн (или наоборот :-))
Однако у меня спавн предметов в подобные тайники проходит безупречно. Может просто люди не так спавнят?
Хотя у меня спавн предметов в ящик происходит одновременно со спавном ящика - то есть получается что они спавнятся в серверный объект - может поэтому у меня все так удачно
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik, благодарю за ссылку, но не помогло:
1) end'ы убрал. но ошибка осталась
2) чекер в моей писанине ничего не нашел
3) нашел ошибку в коде Сингапура
И все же, что означал мой лог?
Потому что я перешел к следующему логу:
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: d:\s.t.a.l.k.e.r\gamedata\scripts\my_script.script:20: attempt to index upvalue 'a_item' (a nil value)
Чем-то похоже, да? Только тут говорится о 'a_item'.
Зачем доказывать кому-то, что ты настоящий мужик? Лучше потратьте это время на добрые дела!
vhodnoylogin
Если честно переписывать твой код мне лень. У тебя значение переменной active_id будет всегда 0.
Так что думай и делай выводы. А вылет связан с нелогичностью условий - поэтому если у ГГ в руках пусто - ты вылетаешь, так как a_item равна nil, а она у тебя в конце кода используется без всякой на то проверки.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik, Stalk15
Если ящик уже заспавнен и в него доспавнивать или трансферить (перемещать) - то, т.к. ящики не биндятся и не имеют апдейтов - доспавненные предметы не остаются в ящике после перезагрузки (сохраняется серверная часть, теряя клиентские дополнения). Как уже заметил erlik - следует перевеси ящик из онлайна в оффлайн и обратно (что и сделано было в АМК), тогда все предметы сохранятся в сэйвах.
Это касается не только подобных ситуаций. Например на арене - вещи тоже изымаются/возвращаются через 'онлайновые' ящики и ... если не озаботиться - после сэйва своих шмоток можно недосчитаться ...
alykard216 файл treasuremanager вроде он в скриптах вот точнее
Редактирование тайников:
Частота выпадения:
treasure_manager.script - редактируешь его получаешь частоту выпадание тайников - 65 меняй на что-нить допустим на 10...
one shot one kill no luck just skill
Ищу адекватного человека, для тестирования мода на TES IV Oblivion
Практически в любом моде появляются с той или иной частотой ошибки типа: 'e_entity->ID_Parent == id_parent'.
Мои изыскания показали, что в основном ноги растут из схемы собират**5007001a66cf24ce67c0**_reject
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
[error]Line : 24
[error]Description : device_pda23827
[error]Arguments : gar_stalker_respawn_123826
[/code]
Предметы могут быть разными (оружие, медикаменты, еда, ...). Общее одно - предмет уже прошедший операцию трансфера (перемещения) в онлайне сервер пытается разаттачить от прежнего владельца и судя по логу - владельцем оказывается сам предмет. Т.е. сервер запаздывает на цикл.
Вот два (упрощенных) варианта трансфера, которые одинаково пропускают подобную ошибку:
[code]
local iCnt = oBody:object_count()
for i=0,iCnt-1 do
oItem = oBody:object(i)
sSection = oItem:section()
if sSection ~="bolt" and oItem:parent() and oItem:parent():id() == oBody:id() and not oBody:marked_dropped(oItem) then
oBody:mark_item_dropped(oItem) --/ ставим метку перемещения
oBody:transfer_item(oItem,oNPC) --/ перемещаем предмет
end
end
oBody:iterate_inventory(
function (dummy,oItem)
local sSection = oItem:section()
if sSection ~="bolt" and oItem:parent() and oItem:parent():id() == oBody:id() and not oBody:marked_dropped(oItem) then
oBody:mark_item_dropped(oItem) --/ ставим метку перемещения
oBody:transfer_item(oItem,oNPC) --/ перемещаем предмет
end
end
,nil)
Прим: наличие/отсутствие метки трансфера в алгоритмах не влияет на (не)возникновение ошибки.
[/code]
Есть ли у кого мысли о причине возникновения подобных рандомных коллизий и варианте их устранения?
Прим: Варианты замены трансфера переспавном не предлагать. Имеются весткие причины неприемлемости подобной замены.
- переспавн квестовых предметов в ассинхронном режиме порой приводит к провалу квестов;
- переспавн различных предметов с уже установленными параметрами требует дополнительных усилий по восстановлению этих параметров. Для оружия, например, это и исправность, и заполнение магазана, и навешанные аддоны, ...
- ...
alykard216, Silent_Assassin
Не путайте форум с чатами! Спасибки, расшаркивания и пр. подобное - в ПМ, пл.
С вопросами типа 'чеем редоктировать ...' -> ФАК
C неграмотными постами -> в бан ...
Artos, не знаю как непись, а гг пять минут назад получил такой вылет при умирании от гранаты, в то время, как был в аномалии. Аномалия уже была взведена и сразу разорвала труп гг, как тот умер. Я был в мультиплеере.. один.. без модов
SkyLoader
Не очень внятна суть твоего поста.
При разрыве ГГ в аномалии или любом подобном 'исчезновении' ГГ из игры - не удивителен факт вылета. Немало кодов НЕ предусматривает исчезновение ГГ (db.actor) из игры после ее начала.
С описанным мною вопросом это никак не связано, тем более в моем случае ни труп, ни НПС ни в каких не аномалиях и никаких гранат/... НПС просто подходит к трупу и обыскивает его в относительно спокойной обстановке.
SkyLoader
Ты заблуждаешься в том что у 'тебя' не было. Можно пройти игру (чистую) или мод не один раз и не напоротьсяч на подобную ошибку,но это не значит что ошибка невозможна.
Давай не будем флудить не по сути. Мой вопрос не в том (не)было ли у кого-то ... а как избавиться от ошибки трансфера(!) и от вероятности ее проявления.
alykard216
xr_motivator.script->каллбек на смерть->проверка кто убил->мессидж
Silent_Assassin
Вроде у Мавроди. Если не знаешь - лучше промолчи( в соответствии со своим ником). allspawn редактируют обычным текстовым редактором - предварительно его необходимо распаковать утилитой ACDC от bardak'а. XR Spawner"ом пользуются только дети.
Alex_v-bass
В тему ТТ_2 шагай... смело и уверенно. Здесь она есть. Или на оффсайт мода. Или в тему мода на сайте amk-team. А вообще там нет таких вылетов на патче 1.0004. Если у тебя другой патч - меняй.
---------------------------------------------------- Artos
Подобная ошибка у меня интенсивно проявлялась при тестировании мода RealBags - при дропе большого числа предметов за раз из инвентаря\рюкзака. Долго искал причину и пытался придумать как обойти вылет пока наконец просто не добавил в функцию дропа дополнительную проверку IsExistObject(gObj) - где проверяется наличие серверной копии у клиентского объекта.
function IsExistObject(gObj)
return level.object_by_id(gObj:id()) and alife():object(gObj:id())
end
--// Author function 7.9 (aka MRN$)
function DropObject(gObj)
local actor = db.actor
if gObj and IsExistObject(gObj) and not tExeptItem[gObj:section()] then
local posX = actor:position().x
local posY = actor:position().y
local posZ = actor:position().z
local dirX = device().cam_dir.x
local dirZ = device().cam_dir.z
local x_off = dirX*1.6
local z_off = dirZ*1.6
local x = posX + x_off
local y = posY + 1
local z = posZ + z_off
actor:drop_item_and_teleport(gObj, vector():set(x, y, z))
end
end
Вылет как ни странно исчез. И больше при дропе никогда не проявлялся.
отредактировал(а) erlik: 04-04-2011 22:52 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
Bpоде бы в моем пояснении хотя и не явно, но фигурируют и клиетский и серверный объекты ..., т.е. проверка их наличия само собою подразумевается.
Да и сам лог говорит НЕ об отсутствии серверного объекта, а о некорректности 'родителя'.
Ошибка же не 'интенсивна', как ты выразился, а как раз довольно редка, но тем не менее хотелось бы ее исключить.
P.S. Резануло глаза в твоем коде:
local posX = actor:position().x
local posY = actor:position().y
local posZ = actor:position().z
local dirX = device().cam_dir.x
local dirZ = device().cam_dir.z
local x_off = dirX*1.6
local z_off = dirZ*1.6
local x = posX + x_off
local y = posY + 1
local z = posZ + z_off
Зачем же тратить ресурсы на получение одного и того же по нескольку раз?
Вот так и проще и вроде как понятнее:
local pos = actor:position()
local dir = device().cam_dir
local x = pos.x + dir.x*1.6
local y = pos.y + 1
local z = pos.z + dir.z*1.6
:-)
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.