Artos
Я попробовал алгоритм поменять.Как только не менял, но из-за этой проверки группировки действие не срабатывает.Вот мои жалкие попытки:
Код:
local stope = false
local npc_stalker = level.object_by_id(id)
if npc_stalker and IsStalker(npc_stalker) then
if npc_stalker:is_talking() then
stope = true
end
if stope then
if npc_stalker:character_community() == "trader" then
--/ Действие
local npc_stalker = level.object_by_id(id)
if npc_stalker:is_talking() and npc_stalker:character_community() == "trader" then
--/ Дейсвие
Вообщем много вариантов пробовал, но во всех случаях не работало.
А как можно проверить, применим ли метод character_community() к Сталкерам, например, из лагеря новичков?
Stalk15
1. Ты пока не в том 'опыте', чтобы кидать куски своих скриптов и другие их могли бы понять ...
2. Нужно в 1-ю очередь думать головой, во 2-ю помнить стандартные ограничения и пр.
- те, кто имеет группировку "trader" НЕ могут пройти проверку 'IsStalker(npc_stalker)', т.к. это не сталкеры, а торгаши ...
Уже не раз говорилось: объясни что хочешь получить в конечном итоге и приведи пример, котором замялся - тогда и можно поправить/посоветовать ...
КerYa
В правилах топика говорится о том, что вопрошающий должен хотя бы ознакомиться с топиком/ФАК'ом и пр. ...
По ACDC сотни раз тут расписывалось. Чем ты такой выдающийся, кроме лени, что тебе персонально опять будут разжевывать? Может сам погуглишь и почитаешь?!
Byurrer
Тоже лень мучает?
Смотрим в азбуку модмейкера (lua_help.script):
Код:
C++ class CCar : CGameObject,holder {
...
function SetfHealth(number);
...
и что не ясно? Что это установка 'жизни' для транспорта/машин?
Сообщение было успешно отредактировано Artos (25-07-2010 22:12 GMT3 часа, назад)
со старой ошибкой разобрался...но при переходе на локу теперь это:
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\task_manager.script:351: attempt to index a nil value
lickon
Ты видно действительно считаешь читающих топик телепатами.
Неужели не ясно, что то, что ты делал (добавил часики/спальник/...) - всем как-то фиолетово, а вот как ты это 'что-то' сделал и где накосячил - без информации (кодов) НИКТО тут не догадается.
ЦитатаArtos: Уже не раз говорилось: объясни что хочешь получить в конечном итоге и приведи пример, в котором замялся - тогда и можно поправить/посоветовать ...
Предлагаешь гадать по кусочкам неких кодов? Я - пас.
lickon
Говорю просто:
В результате твоих ковыряний возникла где-то ошибка и/или нехватка необходимых данных, которую не может обработать штатный скрипт, о чем он тебе и говорит.
Далее гадай сам.
Вообщем я хочу сделать, чтоб при разговоре с НПС срабатывало действие.Но только при разговоре, например, с обычными Сталкерами - одиночками ...Проверки группировки не помогают ...
Вот скрипт, но из-за проверки группировки не срабатывает действие:
Код:
function drhyrd()
local npc_stalker = level.object_by_id(id)
if npc_stalker:is_talking() then
if npc_stalker:character_community() == "stalker" then
news_manager.send_tip(db.actor, "Говорим со Сталкером", 0, "freedom", 10000)
end
end
end
function drhyrd(id) --/ на вход ID проверяемого !!!
local npc = level.object_by_id(id)
if npc and IsStalker(npc) and npc:is_talking() then
local sCommunity = npc:character_community()
if sCommunity and sCommunity == "stalker" then
news_manager.send_tip(db.actor, "Говорим со Сталкером", 0, "freedom", 10000)
end
end
end
Так всё нормально, но сути это не меняет (о ней дальше) - ведь я могу вместо 'bit_not(5)' написать '-70', и значение параметра запишется как бы 'какое оно было', но как то это не так - вручную устанавливать, думая что всегда так оно и будет.
Так что мне надо - что бы БТР, если он заспавнен в воздухе (в обоих случаях он(бтр) 'зависает'), не висел, пока до него не дотронешься. Хотя случаи спавна БТР, а ещё и в воздухе - редки, всё таки.
Сейчас использую с 'bit_not(5)', значение у 'object_flags' равно '-6', и непонятно, как оно так 'конвертирует' числа. Тут где-то видел инфу по этому, надо будет поискать.
Stalk15
Метод проверенный, должен работать (ну, при правильном обращении должен ). Скорее всего на НПС другой группировки применяешь, определил бы её сначала.
Да и неизвестно, какой id и как ты передаёшь в функцию (а может и не id...).
P.S. А вот насчёт случаев спавна в воздухе ошибся, могут быть и не редки. Не всегда ведь указывается точная координата, именно на земле.
Сообщение было успешно отредактировано Darien Fx (26-07-2010 00:29 GMT3 часа, назад)
ЦитатаСкорее всего на НПС другой группировки применяешь
Почему, я говорю именно со Сталкерами.Даже если в скрипте проверять не Сталкеров, а "Свободу" например, а потом поговорить со Свободовцем - тот же результат.
Stalk15
Твои потуги от твоей же лени думать.
Это вариант:
Код:
function drhyrd(id) --/ на вход ID проверяемого !!!
local npc = level.object_by_id(id)
if npc
if IsStalker(npc) and npc:is_talking() then
local sCommunity = npc:character_community()
if sCommunity and sCommunity == "stalker" then
news_manager.send_tip(db.actor, "Говорим со Сталкером", 0, "freedom", 10000)
else
news_manager.send_tip(db.actor, "Это НЕ сталкер, а "..tosrting(sCommunity), 0, "freedom", 10000)
end
else
news_manager.send_tip(db.actor, "Или это не сталкер или от не говорит", 0, "freedom", 10000)
end
else
news_manager.send_tip(db.actor, "вот я лох, не тот ID=х"..tostring(id).."] дал", 0, "freedom", 10000)
end
end
тебе сообщит твои заморочки.
Darien Fx
Ну во-первых, приведенный пример от 'бардака' НЕ рабочий, т.к. оперируешь с переменной 'object_flags', а пишешь все ту же 't.object_flags'.
Что-то ты запутался ... в переменных.
Сообщение было успешно отредактировано Artos (26-07-2010 00:41 GMT3 часа, назад)
Artos
Блин, не то дал - из своего кусок вырвал. Там (у бардака) без таблицы, только локальные переменные, т.е. всё в одной функции - считывание и запись. У него скрипт 'чисто заспавнить', а мне то ещё и узнать что то о БТР понадобится.
Пробовал по аналогии (у меня пока тоже всё в куче):
Код:
local t = {}
...
t.object_flags = sp:r_s32()
...
t.object_flags = bit_not(5)
sp:w_s32(t.object_flags)
Ну а так вылет, как в предыдущем посте. Хотя ведь по сути - 'bit_not(5)' - это обычное число на выходе, почему не получается записать его в таблицу - незнаю.
P.S. Я всё проверяю, т.е. что бы позиции и кол-во байт совпадали и после считывания, и после записи. Да и на 'битый сейв' тоже.
Сообщение было успешно отредактировано Darien Fx (26-07-2010 01:15 GMT3 часа, назад)
такой вопросик: не появляется у сидра костюм свободы в начале... в trade_trader.ltx в генерик пишу svoboda_outfit = 1, 3 , и в суплай старте - svoboda_outfit = 1, 1
Darien Fx
Ищи у себя ошибку.
Именно 'tT.object_flags = bit_not(5)' я использую в Симбионе при спавне машин и вертушек и никаких ошибок нет.
Ошибка 'attempt to concatenate global 'object_flags' (a nil value)' обычно идентифицирует неудачную операцию конкатенации строковых значений, а тут их вроде никак нет да и связывать их вроде как ни что не собирается. Ищи откуда ноги растут ...
Мэны! Все кто играл в мод сиджериус (не важно на что буть то на ЗП или ЧН) помогите пожалуйста!
Как замутить чит режим через параметр?
Например приписываешь к ярлыку -cheat_mode1 и во время игры можно нажимать ф1 и открывается спавн меню как в сиджериусе! Как сделать и как это возможно?
добавлено спустя 5 минут
lickon файл отвечающий за отношение группировок game_relations в каталоге геймдата\config\creatures\game_relations.ltx
Сообщение было успешно отредактировано Колотун (26-07-2010 05:13 GMT3 часа, назад)
Я попробовал воспользовать в скрипте такую строку:
Код:
for k, v in pairs (db.storage) do
и проверка группировки заработала, наконец-то:
Код:
function drhyrd()
for k, v in pairs (db.storage) do
local npc_stalker = level.object_by_id(k)
if npc_stalker and IsStalker(npc_stalker) and npc_stalker:is_talking() then
local sCommunity = npc_stalker:character_community()
if sCommunity and sCommunity == "stalker" then
news_manager.send_tip(db.actor, "Говорим со Сталкером", 0, "freedom", 10000)
end
end
end
end
Обьясните кто-нибудь, что это?:
for k, v in pairs (db.storage) do
Это что-то типа перебора айди?И сильно ли напрягает это игру?
И еще для чего нужно (db.storage), а то если я уберу это - вылетает?
Сообщение было успешно отредактировано Stalk15 (26-07-2010 16:44 GMT3 часа, назад)
Stalk15
Нужно ещё и проверять, что копируешь - 'tosrting'. Буквы местами поменяй. 'db.storage' - таблица онлайн объектов. Когда распарсиваешь, как в твоём примере - каждый раз 'k' (да хоть что, всмысле ключи в таблице всегда будут id) будет id'шником объекта.
Как напрягает - незнаю. Но одноразовый вызов, всмысле не на апдейте, думаю не особо.
И... лучше ничего не убирай, если не знаешь, как оно там всё связанно (ну, так мне посоветовали, когда я начинал ). Откуда тогда у тебя возьмётся local npc_stalker = level.object_by_id(k), не из воздуха ведь.SkyLoader
Для этого есть оператор '~='.Artos
С ошибкой расправился, была довольно глупа - 'object_flags' в таблицу то записал, а параметры 'story_id', 'skeleton_name' и 'health' забыл.
И совсем забыл, что можно просто дать мелкий хит, что бы не висел .
Сообщение было успешно отредактировано Darien Fx (27-07-2010 01:58 GMT3 часа, назад)
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.