Перейти к контенту

Рекомендуемые сообщения

KD87,

работает ли accuracy() из game_object?

Kirag,

С НПС - не знаю, а db.actor:accuracy() используется, например, при определении, целится ли актор в принципе:

Это функция, которая возвращает разброс в радианах при стрельбе из текущего ствола. Работает для сталкеров и актора, но по-разному. Для актора зависит от режима прицеливания, положения тела, скорости перемещения и точности текущего ствола. Для сталкеров зависит от ранга, положения тела, состояния прицеливания и состояния (не скорости) перемещения и НЕ зависит от оружия.

 

P.S.: Это кстати не значит, что точность сталкеров при стрельбе не зависит от точности оружия. Просто эта функция так работает, а где и в комбинации с чем используется - я не знаю.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Добрового времени суток!

 

Хотел спросить можно ли как-нибудь округлить число до десятков?

А то когда например пишешь a = a + 0.1 выводит не 1.1, а 1.10000011446(как-то так)

Заранее спасибо

 

Ссылка на комментарий

Если что-то не так напишу, не пинайте :)

STARTS, а что если а округлить до целых а, а потом прибавлять 0.1 или он даже с целым а такое делает?

a = math.floor(a) + 0.1

В данном случе будет округлять до ближайшего меньшего целого числа (было 10.999 станет 10)

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Desertir С целом числом тоже самое делает.

Мне нужны именно десятые. Я вот обычно работаю в паскале и там можно было бы написать writeln(a:2:1) и он без проблем бы округлил до десятых. В Луа такое возможно сделать?)

 

В целом система вот такая:

    fm = fm - 0.1
    self.caption:SetText(fm.."FM")

 

Тут вот нужно например вывести 30.1FM

Изменено пользователем STARTS

 

Ссылка на комментарий

Добрый день.

 

Хочу реализовать некий класс, который бы хранил определенную информацию. Например, чтобы пользователь в игре мог вести дневник. Соответственно класс должен удовлетворять следующим условиям:

 

1. Объект класса должен быть в одном экземпляре весь цикл игры.

2. Объект класса должен быть всегда доступен в любой локации.

3. Объект класса должен сохраняться/загружаться при сохранении/загрузке игры.

 

Какие способы могут помочь мне реализовать это?

 

Я посматриваю в сторону создания некоего фейкового гейм-объекта, в котором можно было бы определить дополнительные поля, но доступен ли будет такой объект на всех локациях не знаю? Да и возможные ограничения по объему информации меня смущают. Самое простое было бы сохранять что-либо в файл и при случае читать, но разработчики не предоставили такой возможности.

Ссылка на комментарий

Plotnick

Ну, например такая концепция:

Можно, например, сделать game_object - тот же блокнот. Повесить на него биндер, который кроме сейв/лоада ничего не делает.

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

Кстати, блокнот не обязятельно должен быть единственным, главное не разбивать данные по бессмысленным частям - не писать в один блокнот Х, а во второй = 1

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Я, конечно, оффтопю, но что-то блин... На всякий случай ещё раз подробно напишу что и как.

дядяСаша, разве кусок кода это совет? Что может быть проще, чем просто вписать в указанное несколькими людьми место этот код? Что именно тебе необходимо? Номер строки после которой вписывать этот код? Что именно ты подразумеваешь под когортой советчиков? Ты просил совет - тебе дали уже готовый код, хотя могли бы именно посоветовать:

"Поставь в калбеке на взятие предмета проверку на твой предмет и выдай инфопоршень" -- вот это - совет, а то, что тебе дали - это уже готовый код, который осталось всего лишь скопипастить в указанное место и просто вбить туда название секции предмета, место "вбивания" тоже указали. Чего ещё-то?

Вот, надеюсь это ты за совет не сочтешь:

Я говорю о скрипте из оригинала, не знаю, как у тебя. Ищешь 181 строчку в скрипте bind_stalker, которая выглядит так:

--game_stats.update_take_item (obj, self.object)

И после неё пишешь это:

    if not has_alife_info("ИМЯ_ТВОЕГО_ИНФОПОРШНЯ") and db.actor:object("ИМЯ_СЕКЦИИ_ТВОЕГО_ПРЕДМЕТА") then
        db.actor:give_info_portion("ИМЯ_ТВОЕГО_ИНФОПОРШНЯ")
    end

Всё, более ничего не нужно.

Изменено пользователем Disord
Ссылка на комментарий

Вопрос, как можно приостановить скрипт или запустить его через какое-то время?

Вообще цель приостановить открытие инвентаря, при этом игра должна естественно продолжаться, но даже если это удастся, отслеживается это получением инфопоршня, а он вручается ГГ чуть позже, чем открывается окно инвентаря. Выходит проскок окна (появляется и сразу исчезает). В солянке такое было (типа замок сломался и не открывается рюкзак). Так вот иногда после загрузки игры можно было успеть даже что то выложить или съесть, т.е. очень поздняя выдача инфопоршня была. Больше никак открытие инвентаря не отследить ?

PS: ТЧ.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Объясните пожалуйсто, как в xrs_armor.script для ТЧ добавлять новые костюмы.

 

И ещё, как сделать что бы только один раз при получении инфопоршня выполнялось задание?

 

 

Изменено пользователем Ulman
Ссылка на комментарий

Имеется код:

local level_name = {

["l01_escape"] = "Кордон",

["l02_garbage"] = "Свалка",

["l03_agroprom"] = "НИИ Агропром",

["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",

["l04_darkvalley"] = "Тёмная долина",

["l04u_labx18"] = "Лаборатория X-18",

["l05_bar"] = "Бар",

["l06_rostok"] = "Дикая территория",

["l07_military"] = "Арм.склады",

["l08_yantar"] = "Янтарь",

["l08u_brainlab"] = "Лаборатория X-16",

["l10u_bunker"] = "Лаборатория X-10",

["l10_radar"] = "Радар",

["l11_pripyat"] = "Припять",

["l12_stancia"] = "ЧАЭС",

["l12_stancia_2"] = "ЧАЭС",

["l12u_sarcofag"] = "Саркофаг",

["l12u_control_monolith"] = "Управление Монолитом"

}

 

local community = {

["stalker"] = "Сталкер",

["monolith"] = "Монолит",

["military"] = "Военные",

["bandit"] = "Бандит",

["killer"] = "Наемник",

["ecolog"] = "Эколог",

["dolg"] = "Долг",

["freedom"] = "Свобода",

["zombied"] = "Зомбированный",

["trader"] = "Торговец"

}

 

function kill_npc(victim, who)

if victim and IsStalker(victim) then

local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""

db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)

end

end

 

.

Далее делаю по иструкции:

Далее открываем xr_motivator.script, который находится в gamedata\scripts, ищем функцию:

 

function motivator_binder:death_callback(victim, who)

 

и после пишем: имя_вашего_файла.news_of_npc_kill(victim) в итоге:

 

function motivator_binder:death_callback(victim, who)

имя_вашего_файла.kill_npc(victim, who)

if who:id() == db.actor:id() then

xr_statistic.addKillCount(self.object)

end

 

Вот собственно и все!

.

На основных локациях работает, захожу на "предбанник", валю первого попавшегося npc получаю вылет:

* [win32]: free[884348 K], reserved[184740 K], committed[1028000 K]

* [ D3D ]: textures[345979 K]

* [x-ray]: crt heap[347446 K], process heap[509894 K], game lua[22431 K], engine lua[195 K], render[1255 K]

* [x-ray]: economy: strings[4565 K], smem[30037 K]

* MEMORY USAGE: 355412 K

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...t.a.l.k.e.r\gamedata\scripts\news_of_npc_kill.script:37: attempt to concatenate field '?' (a nil value)

 

 

stack trace:

.

 

Меняю код:

local level_name = {

["l01_escape"] = "Кордон",

["l02_garbage"] = "Свалка",

["l03_agroprom"] = "НИИ Агропром",

["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",

["l04_darkvalley"] = "Тёмная долина",

["l04u_labx18"] = "Лаборатория X-18",

["l05_bar"] = "Бар",

["l06_rostok"] = "Дикая территория",

["l07_military"] = "Арм.склады",

["l08_yantar"] = "Янтарь",

["l08u_brainlab"] = "Лаборатория X-16",

["l10u_bunker"] = "Лаборатория X-10",

["l10_radar"] = "Радар",

["l11_pripyat"] = "Припять",

["l12_stancia"] = "ЧАЭС",

["l12_stancia_2"] = "ЧАЭС",

["l12u_sarcofag"] = "Саркофаг",

["l12u_control_monolith"] = "Управление Монолитом"

["predbannik"] = "predbannik"

}

 

local community = {

["stalker"] = "Сталкер",

["monolith"] = "Монолит",

["military"] = "Военные",

["bandit"] = "Бандит",

["killer"] = "Наемник",

["ecolog"] = "Эколог",

["dolg"] = "Долг",

["freedom"] = "Свобода",

["zombied"] = "Зомбированный",

["trader"] = "Торговец"

}

 

function kill_npc(victim, who)

if victim and IsStalker(victim) then

local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""

db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)

end

end

, начинаю новую игру, валю первого попавшегося на "кордоне", получаю вылет:

Intro start 1361

* MEMORY USAGE: 333535 K

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:162: attempt to index global 'news_of_npc_kill' (a nil value)

 

 

stack trace:

 

.

Вопрос: что я не так сделал?

 

 

Лучше спросить глупость, чем её совершить.

Ссылка на комментарий
[error]Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:162: attempt to index global 'news_of_npc_kill' (a nil value)

Синтаксическая ошибка в новом скрипте. А вот и она:

["l12u_control_monolith"] = "Управление Монолитом"
["predbannik"] = "predbannik"

Запятую в студию :) Вот так

["l12u_control_monolith"] = "Управление Монолитом", --вот сюда
["predbannik"] = "predbannik"

PS: я эту локу не качал, папка с ней точно predbannik называется? Кстати, выведет по-английски (ты сам так написал). Сделай так ["predbannik"] = "Предбанник"

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

 

Люди помогите! Как можно вынести полоску апа ранга в мультиплеерной игре из инвентаря на худ (оставив и в инвентаре и на худе)?

Изменено пользователем 222RAZOR222
Ссылка на комментарий

Я писал свой вопрос, но внятного ответа не получил(или не понял :huh: )

Как в такой логике в конце отпустить НПС в симуляцию?

[logic]

active = remark@start

 

[meet]

close_anim = nil

close_snd_hello = nil

close_snd_bye = nil

close_victim = actor

far_distance = 10

far_anim = ward

far_victim = actor

trade_enable = false

use = {!actor_enemy} true

allow_break = false

meet_on_talking = false

abuse = false

 

[remark@start]

anim = hello_wpn

target = story | actor

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

on_info = {+start_dialog_complete} remark@go_away

on_info2 = {=dist_to_actor_ge(25)} %+actor_running_out%

on_actor_dist_le = 5 | remark@wait

meet = no_meet

 

[remark@wait]

target = story | actor

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

on_info = {+start_dialog_complete} remark@go_away

on_info2 = {=dist_to_actor_ge(30)} %+actor_running_out%

meet = meet

 

 

 

[remark@go_away]

active = nil

 

Не соответствует. N6260

Ссылка на комментарий
Ulman, Если в одном конкретном лагере ,то можно накрыть всю территорию лагеря рестриктором и укрытие другим и поставить им в логику условие на проверку находится ли в них НПС с конкретным сидом ,а если глобально всех нпс то смотри локику выброса АМК ,там нпс которые не в укрытии вроде получают хит или превращаются в зомби,значит проверка есть в укрытии они или нет,точнее не скажу т.к в скриптах не силен
Ссылка на комментарий

хочу создать функцию по которой при пересечении актором определенной черты включался бы таймер после которого следовала бы другая функция если бы условие после истечения таймера было бы true и сама эта линия не пересечена повторно в обратном направлении, но совсем незнаю как это сделать

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий
saruman_ten, А ты не аналог ли пси зоны из НС пытаешься сделать,или подобной в х16 в комнате с рубильниками?Т.е. зашел актер в зону включается таймер и если не вышел до истечения времени или не совершил определенное действие то срабатывает определенный эффект(в том случае смерть ГГ ).Если да то смотри логику соответствующих рестрикторов и даже скрипты могут не понадобится,если только для создания своего эффекта ^_^
Ссылка на комментарий

gruber, несовсем, если актор не выйдет до отключения таймера то его community изменится, а если выйдет то останется прежней

 

Добавлено через 34 мин.:

то есть при входе в зону получаем инфопорцию при этом срабатывает таймер после него забираем инфопорцию где и как это записать ?

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...