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

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

local nv_type = {
        ["bad"] = { ["price"] = 10*k, ["id"] = 911 },
        ["good"] = { ["price"] = 25*k, ["id"] = 912 },
        ["bast"] = { ["price"] = 30*k, ["id"] = 918 }
                }

function get(choice)
local result = "nope"
    for k, v in pairs(nv_type) do
        if nv_type[k].id == choice then
            result = k
            break
        end
    end
    return result
end

PS: мне уже надоело редачить посты, чтобы исправлять табуляцию. Я ставлю одну, в посте их оказывается две. Сделал пробелами. Что я делаю не так? :az1000106:

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

Ранее был известен под ником BoBaH_671.

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

@Overfirst, твой пример можно сделать ещё проще, без повторного поиска в массиве: 

--...
if v.id == choice then
--...

А про табуляции отпиши в "вопросы и предложения", сюда админы могут и не заходить. :)

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

@Overfirst, Это, конечно, упущение, что вместо "break" из имеющихся примеров я поставил "else", который обратил первый же неправильный результат в "nope" вместо полного поиска по таблице. В остальном вопросов нет.

 

@Kirgudu, Такая конструкция работает, но как? Какова логическая цепочка в такой схеме поиска?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, и при чём же тут логическая цепочка? Когда мы пишем "for k, v in pairs(...)", на каждой итерации в переменную k попадает ключ (в нашем случае, например, "good"), а в переменную v - значение (в нашем случае {["price"] = 25*k, ["id"] = 912}), остаётся только сравнить.

Возможно, имеет смысл почитать какую-либо литературу по Lua.

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

Здрасьте.

 

Один и тот же код, скопированный из одной функции в другую, в одном случае выдает число, а в другом "nil". Посмотрите кто-нибудь…

https://c1.staticflickr.com/5/4874/45786150651_e989b29f76_o.png

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Закинь куда то текстом кусок скрипта, а лучше весь файл.

По картинкам сложнее гадать. Может там опечатка где. В слове price точно с - латинская?

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

При выделении слова "price" включается подсветка для такого же слова в следующей функции (которая выдает число), так что либо везде одна и та же ошибка, либо все же ошибка не в этом слове.

Spoiler

local nv_type = {
        ["bad"] = { ["price"] = 10*k, ["id"] = 911 },
        ["good"] = { ["price"] = 25*k, ["id"] = 912 },
        ["default"] = { ["price"] = 15*k, ["id"] = 913 },
        ["static"] = { ["price"] = 20*k, ["id"] = 914 },
        ["kat_eye"] = { ["price"] = 30*k, ["id"] = 915 },
        ["psy"] = { ["price"] = 25*k, ["id"] = 916 },
        ["moon"] = { ["price"] = 25*k, ["id"] = 917 },
        ["bast"] = { ["price"] = 30*k, ["id"] = 918 }
                }

 

function nv_price_check(first_speaker, second_speaker, dialog_id, phrase_id)

local choice = tonumber(phrase_id)

local nv = ""
    for i, v in pairs(nv_type) do
        if v.id == choice then
        nv = i
        break
        end
    end

local price = nv_type[nv].price

end

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Я потому и просил залить куда то сам файл.

Не знаю так ли и есть или это форму ломает, но у меня в "price" есть какой то непечатный символ

https://i.imgur.com/JU58Jnu.png

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

Я не вижу проблем со скриптом. Так же проверил через lua online - первый метод прекрасно находит цену.

В чем именно ошибка? Если вылет - закинь полный лог.

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

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...w of chernobyl\gamedata\scripts\armor_upgrade.script:237: attempt to index field '?' (a nil value)

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Так это у тебя не price nil, а nv, какой то левый, потому nv_type[nv] - nil и уже при вызове .price получаем ошибку.

Уверен что там phrase_id такой как есть в таблице?

Для precondition диалога в 4 параметр будет приходить phrase_id только что сказанной фразы, а не той, для которой проверка вызывается

Но, phrase_id фразы для которой вызывается проверка будет в 5 параметре.

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

"phrase_id только что сказанной фразы"

Все-таки придется писать несколько проверочных функций… Жалко, хотелось сделать красиво.

В любом случае, спасибо.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Как создать тайник, в который можно положить все что захочешь(именно что изначально хотел(на стадии создания мода)) (пример: мы убили сталка, залутали его, нам дался инфопоршень на спавн тайника , он спавнится в координатах которые задаешь в скриптах, содержимое его записываешь в логику. приходишь к нему, лутаешь и как только возьмешь все, что в нем было рюкзак исчезает из игры). Я сделал примерно так, но тайник спавнится до того как я получаю инфопоршень на работу скрипта.

Скрытый текст

; cse_alife_object properties
game_vertex_id = 61
distance = 0.0000002
level_vertex_id = 45293
object_flags = 0xffffffbf
custom_data = <<END
[logic]
active = kamp@walk_otdix

[known_info]
atp_body1_info

[kamp@walk_otdix]
center_point = enemy_look1
radius = 2
combat_ignore_cond = {+esc_melnik_attack}
END
story_id = 7409

Скрытый текст

<!-- Тайники с трупов -->
<info_portion id="atp_body1_info"><action>addon_mod1.spawn_body_habar1</action></info_portion>
<info_portion id="atp_body1_article"><article>atp_body1_info</article></info_portion>

 

Скрытый текст

-- Тайники с трупов -----------------------------------------------------------------------------------------------

function spawn_body_habar1()
    db.actor:give_info_portion ("atp_body1_article")
    alife():create("body_habar1", vector():set (-195.044, -19.788, -127.924), 56700, 56)
    news_manager.send_tip(db.actor, "treasure2", nil)
end  
 

Скрытый текст

;--------Хабары---------------------------------
[body_habar1]:habar_body2
visual = equipments\item_rukzak
radius = 1
custom_data = scripts\treasures\body_habar1.ltx
----------------------------------------------------------------ЭТО файл spawn_section---------------------------------

[inventory_box]
GroupControlSection    = spawn_group
discovery_dependency = 
$spawn                 = "devices\inventory box"
class                = O_INVBOX
cform                = skeleton
visual                = physics\box\expl_dinamit.ogf
script_binding      = bind_physic_object.init

[habar_body2]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "devices\inventory box"
class = O_INVBOX
cform = skeleton
visual = physics\box\expl_dinamit.ogf
script_binding = bind_physic_object.init

--------------------------------ЭТО ФАЙЛ devices--------------------------

Скрытый текст

[spawn]
ammo_5.45x39_ap = 3

Дополню: Я спавнюсь. бегу к найму у которого после того как его залутаешь дается инфопоршень(якобы на спавн тайник, но тайник спавнится до того как я взял инфопоршень). Но, когда я все таки лутаю чела, мне дается инфа которая идет с скриптом и выводится сообщение о том что получен тайник (см.спойлер СКРИПТ)

Ссылка на комментарий
В 03.11.2018 в 12:39, dsh сказал:

Например, что бы его потом по этому story_id найти и что нибудь с ним сделать. Или, что бы движок не удалил его трупик, если он будет долго лежать. А может ещё для чего, кто знает.

Это все элементарно делается поиском по имени объекта, никаких story_id для этого городить не нужно. Правда, это касается объектов заспавненных аллспавном. В ТЧ даже ф-ция для этого есть: alife():object("name")

В любом случае присваивание story_id нет-пакетом, когда он вступает в силу только при перезагрузке - не очень корректный метод, наверное, даже больше косячный.

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

Ребят, может, кто-нибудь дать примерный набросок скрипта с проигрованием анимации у ствола? Я представляю примерно, как его наполнить, но просто не хватает уверенности, что он заработает.
Проще говоря, хочу просто дополнить класс WP-PM, научив его проигрывать анимку затвора, который не хочет работать, если я сменю класс ствола. А жертвовать режимом автоматического огня или затвором, мне не очень хочется.

Ссылка на комментарий
31 минуту назад, Mr.Srears сказал:

может, кто-нибудь дать примерный набросок скрипта с проигрованием анимации у ствола?

Мне тут неделю назад популярно объяснили, что такого не существует. А то-что выдаёт поисковик, это хотелки, обращённые к тем, кто пытается править движек. И делает всякие Х-Ray экстеншины. Пытается делать...

Хотя, в каком-то моде видел, как из аптечки шприц вкалывали. Такой анимки в оригинале не было. Вроде сами добавили. Но что при этом исправли - большой вопрос.

Ссылка на комментарий
56 минут назад, Serge_888 сказал:

Мне тут неделю назад популярно объяснили, что такого не существует. А то-что выдаёт поисковик, это хотелки, обращённые к тем, кто пытается править движек. И делает всякие Х-Ray экстеншины. Пытается делать...

Хотя, в каком-то моде видел, как из аптечки шприц вкалывали. Такой анимки в оригинале не было. Вроде сами добавили. Но что при этом исправли - большой вопрос.

Ну, и что мне теперь делать? Лезть в движок и править класс WP-PM? Я даже приблизительно не знаю, где он там находится.
Или отказываться от режима автоматического огня у пистолетов на совсем, и делать их обычными однопатронными. Я вообще не пойму одного: в оригинале у той же Беретки и Вали 99 стояли режимы автоогня, и по 3 патрона они прекрасно работали, затвор там тоже работал. Хотя могу ошибаться, давно не играл в оригинал.

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

У беретты, сиг-220, ЮСП-45 и Р99 по дефолту самого начала класс WP_LR300. У пм, пб, кольта и ДЕ - WP_PM. У HPSA - свой WP_HPSA.

Добавь себе однорукий пп2000 и не мучайся ду..., гхм, я хотел сказать, ещё можно добавить АПС из свежих модов. Или ОЦ-33.

 

  • Спасибо 1
Ссылка на комментарий

Всем привет, кто может помочь разобраться со скриптом?(платформа СоС 1.4.22)

Задача такая: если актор подxодит к "термо аномалиям" - выдаём инфопоршень. С костром проблем нету, у него свой биндер, а вот с жарками проблема, биндер один на все аномалии, уже перепробовали кучу вариантов, последний такого вида:

Скрытый текст

 


function anomaly_zone_binder:update(delta, obj)
	object_binder.update(self, delta)
	--Система замерзания, чтоб греться у термо аномалий.
	if(obj) then
		local s_obj = alife():object(obj:id())
		local thermal_zones_tbl =
								{
									"zone_field_thermal",
									"zone_field_thermal_weak",
									"zone_field_thermal_average",
									"zone_field_thermal_strong",
								
									"zone_mine_thermal",
									"zone_mine_thermal_weak",
									"zone_mine_steam",
									"zone_mine_steam_weak",
									"zone_mine_steam_average",
								
									"zone_zharka_static",
									"zone_zharka_static_weak",
									"zone_zharka_static_average",
									"zone_zharka_static_strong"
								}
		if (s_obj) then
			for i = 1, #thermal_zones_tbl do
				if (s_obj:section_name() == thermal_zones_tbl[i]) then
					if db.actor:position():distance_to(self.object:position()) <= 4 then
    					if not has_alife_info("EugeniumFreezingSystemWarm") then
        					db.actor:give_info_portion("EugeniumFreezingSystemWarm")
						end
					end
    			end
    		end
    	end
    end
	--Система замерзания, чтоб греться у термо аномалий.
  ...
  ...
  ...
  end

 

  Как ещё можно проверить - "жарка ли это"?

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

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...