Sla-Sla 43 Опубликовано 27 Мая 2016 Поделиться Опубликовано 27 Мая 2016 @abramcumner, некоторых несколько лежит и с ними все норм. Ссылка на комментарий
abramcumner 1 161 Опубликовано 27 Мая 2016 Поделиться Опубликовано 27 Мая 2016 (изменено) @Sla-Sla, очень сомнительно. У тебя в скрипте стоит цикл по всем предметам в рюкзаке. Каждый из них добавляется в список как отдельная строка и для каждого ты считаешь количества. Хуже того у тебя количество патронов - это количество пачек на самом деле и у тебя в списке 15 строчек 5.45 х15. Заведи таблицу, в которой ключом будет секция, значением количество. В ней аккумулируешь информацию о количестве предметов с одинаковой секцией. Тогда функция FillList будет примерно такой: function CUIScriptInventory:FillList() local temp = {} for i=0, db.actor:object_count()-1 do local obj = db.actor:object(i) local quan = temp[obj:section()] if quan == nil then quan = 0 end --учесть на будущее количество патронов в пачке quan = quan + 1 temp[obj:section()] = quan --возможно стоит запоминать еще ид предметов end for section, quantity in pairs(temp) do local item = ItemList() item:SetSection(section) local name = game.translate_string(system_ini():r_string(section, "inv_name")) item.text:SetText(name .. " x"..quantity) self.list:AddItem(item) end end Изменено 27 Мая 2016 пользователем abramcumner 1 1 Ссылка на комментарий
hi_flyer 75 Опубликовано 28 Мая 2016 Поделиться Опубликовано 28 Мая 2016 Такой вопрос - можно ли через скрипты получить объект респавнера, и скриптово вызвать у него респавн? Ссылка на комментарий
naxac 2 447 Опубликовано 28 Мая 2016 Поделиться Опубликовано 28 Мая 2016 (изменено) @hi_flyer, можно, если известно его имя из all.spawn, или еще какой-нибудь идентефикатор (id или story_id) local respawn = alife():object("respawn_name") respawn:spawn(100) Изменено 28 Мая 2016 пользователем naxac 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 29 Мая 2016 Поделиться Опубликовано 29 Мая 2016 Как отрисовать линию от точки A до точки B? Имееться ввиду линия в 3d пронстранстве, проекцируемая на наш 2d монитор. Не прибугая к средствам DirectX, используя сугубо LUA. Наверняка в движке подобные ф-ии заложенны. Не соответствует правилам. Ссылка на комментарий
Zander_driver 10 334 Опубликовано 30 Мая 2016 Поделиться Опубликовано 30 Мая 2016 (изменено) используя сугубо LUA Наверняка в движке Сами себе противоречите. Таки вам надо на Lua, или в исходниках движка ковыряться. Если все же на Lua, то вот function point_projection(point) --проекция точки в 3д-пространстве игры на экран local dev = device() local scr_w = dev.width local scr_h = dev.height local fov2 = (dev.fov/2) * (math.pi/180) local scr_dist = 0.5 * scr_h / math.tan(fov2) local ppp = vector():sub(point, dev.cam_pos) local dp = dev.cam_dir:dotproduct(ppp) local x = 512 + dev.cam_right:dotproduct(ppp) * scr_dist / dp * (1024/scr_w) local y = 384 - dev.cam_top:dotproduct(ppp) * scr_dist / dp * (768/scr_h) return {x, y} end --Функция учитывает возможное разрешение экрана, режим зума и то, что камера может наклоняться. Можно использовать в различных целеуказателях. function add_traectory(start_pos, fin_pos, step_pix) -- функция генерирует набор точек, лежащих на прямой, соединяющей точки start_pos {x, y}, fin_pos {x, y}. точки выражены как таблицы с двумя числами. -- третий аргумент step_pix - число. величина шага между точками в пикселах. -- возвращает таблицу, заполненную элементами вида {x, y}, т.е. координатами точек. local v1 = vector():set(start_pos[1], start_pos[2], 0) local v2 = vector():set(fin_pos[1], fin_pos[2], 0) local d = v1:distance_to(v2) local vtable = {} if d > step_pix * 2 then local step_count = round(d / step_pix) local x_step_size = (fin_pos[1] - start_pos[1]) / step_count local y_step_size = (fin_pos[2] - start_pos[2]) / step_count local i = 1 while i < step_count do local t_x = round(start_pos[1] + (x_step_size * i)) local t_y = round(start_pos[2] + (y_step_size * i)) local t = {t_x, t_y} table.insert(vtable, t) i = i + 1 end end return vtable end Изменено 30 Мая 2016 пользователем Zander_driver 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
aromatizer 4 460 Опубликовано 30 Мая 2016 Поделиться Опубликовано 30 Мая 2016 (изменено) Если в СЗ тоже будут подробные комментарии, то мод однозначно станет востребованной платформой для создания других проектов. Во многих модах есть интересные решения, но, не оставляя описания для чего то или это и как оно работает, авторы фактически заживо хоронят свой труд, ибо весьма не многие обладают знаниями, позволяющими разобраться в коде самостоятельно и использовать его в других модах. Изменено 30 Мая 2016 пользователем aromatizer 2 Отношения между людьми- главная ценность в человеческом обществе.Любая полученная информация- это только повод для размышлений, а не побуждение к действию.Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAEНакопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt Ссылка на комментарий
Zander_driver 10 334 Опубликовано 30 Мая 2016 Поделиться Опубликовано 30 Мая 2016 @aromatizer, Ну я практически из файлов мода это и взял. Без подробных комментариев я бы сам в СЗ давно запутался, т.к невозможно все про все скрипты и функции помнить, что она делает, по какому принципу работает и какой результат возвращает. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Sla-Sla 43 Опубликовано 31 Мая 2016 Поделиться Опубликовано 31 Мая 2016 Всем доброго дня, такая проблема: вывожу в статик описание выбранного предмета, все работает, но если описание слишком длинное, то получается некрасиво и вообще фу. Как сделать многострочное поле для текста? 2 Ссылка на комментарий
Charsi 440 Опубликовано 31 Мая 2016 Поделиться Опубликовано 31 Мая 2016 @Sla-Sla, для тега text статика укажи параметр complex_mode="1". Но если описание будет слишком большое, то оно вылезет за нижнюю границу статика. Как вариант, можно вручную разбить текст на строки нужной ширины и сформировать из них список. 1 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Zander_driver 10 334 Опубликовано 31 Мая 2016 Поделиться Опубликовано 31 Мая 2016 Как вариант, можно вручную разбить текст на строки нужной ширины и сформировать из них список. В "СЗ" кстати, так и сделано. на сами статики выводится одна строчка, а разбивкой длинного текста на строки занимается отдельная функция, с учетом размера шрифта и ширины окна. Имхо, так удобнее + для любого текста можно сразу узнать, сколько строк он займет. 1 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
naxac 2 447 Опубликовано 31 Мая 2016 Поделиться Опубликовано 31 Мая 2016 (изменено) @Sla-Sla, либо использовать CUIScrollView, в который добавлять статик с текстом. Изменено 31 Мая 2016 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
DoK74rus 19 Опубликовано 2 Июня 2016 Поделиться Опубликовано 2 Июня 2016 Привет, народ подскажите как сделать что бы во время запуска игры выходило не меню игры, а например сетевая игра с регистрацией? Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 6 Июня 2016 Поделиться Опубликовано 6 Июня 2016 (изменено) Добрый день. Как изменить логику(двери) скриптом? То есть есть файл enc_door и надо его заменить на enc_door_1. А точнее мне нужно скриптом дверь у Сидора открыть. И: вот вызываю я функцию из функции(например: Kober.outfit() ). Но вызывать мне ее надо не из файла Kober.script, а из этого же файла в котором я вызываю. Например я вызываю из none.script. Мне тогда так и писать none.outfit()? Правильно ли я создал таблицу? T = {ammo_9x18_fmj ammo_5.45x39_fmj ammo_5.7x28_fmj} function none () alife():create("T",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end Изменено 6 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Max_Raf 35 Опубликовано 6 Июня 2016 Поделиться Опубликовано 6 Июня 2016 @Kober(BRUC), функцию, которая написана в файле скрипта вызывается просто по имени, без указания, в каком файле. Из твоего примера - вызывать просто outfit() внутри скрипта none.script . А что насчёт таблиц: -- "ammo_9x18_fmj" это строковый тип данных, не цифры, обозначаются всегда кавычками -- к примеру переменная с числовым типом данных k = 1, и так же со строкой k = "string" T = {"ammo_9x18_fmj", -- в таблице должно быть перечисление каждой строки через запятую "ammo_5.45x39_fmj", -- кстати данные будут записаны в таком виде: T[1] = "ammo_9x18_fmj" "ammo_5.7x28_fmj"} -- таблица построена как массив, ключи выдаются по порядку. скажем "ammo_5.7x28_fmj" поставь первым - он будет первым function none () -- движковая функция create вроде не предусматривает перебор в таблице по значениям, -- потому надо "вручную" перебирать строки в таблице T и вызывать функцию с этим входным параметром -- для этого надо цикл for key = 1, #T do -- #T означает конечный ключ в таблице T (можно и так: for key, section in ipairs(T) только в функцию вместо T[key] просто section, но лучше загугли о таком) -- входным параметром является значение в таблице T по ключу key, который будет с каждым повтором -- прибавлять +1 до #T (в нашем случае это будет 3, тк всего 3 строковых переменных в таблице) alife():create(T[key],db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end end Надеюсь правильно объяснил. Оо 1 ... А наше дело маленькое - с ружьём да по болотам. (с) Ссылка на комментарий
Zander_driver 10 334 Опубликовано 6 Июня 2016 Поделиться Опубликовано 6 Июня 2016 (изменено) Но вызывать мне ее надо не из файла Kober.script, а из этого же файла Вообще-то, при вызове вида файл.функция() не имеет значения откуда вы вызываете свою функцию, имеет значение лишь где она находится. Ну и как уже было сказано, если вы находитесь в том же файле, где объявлена сама эта функция, то имя файла можно не писать. Изменено 6 Июня 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) Добрый день. Написал я такой код: local pos_tbl={ set_01 = {lvid=261995, gvid=187, pos = -15.300880,5.824976,292.832062}, set_02 = {lvid=261995, gvid=187, pos = -13.200880,3.716976,292.832062}, set_03 = {lvid=261995, gvid=187, pos = -11.400880,1.908976,292.832062}, set_04 = {lvid=261995, gvid=187, pos = -19.100880,7.600976,292.832062} } function spawn_z_escape_1(section) local lv = math.random(pos_tbl[set_0 .. math.random(1,4)]["lvid"]) --Левел вертекс local gv = pos_tbl[set_0 .. math.random(1,4)]["gvid"] --Гэйм вертекс local ps = pos_tbl[set_0 .. math.random(1,4)]["pos"] --Position return alife():create(section, vector():set(ps),lv,gv) --Около фермы end function r_zombie_1() spawn_z_escape_1("zombie_new_k_1") spawn_z_escape_1("zombie_new_k_1") end Ловлю такой вылет: Expression : fatal errorFunction : CScriptEngine::lua_errorFile : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cppLine : 73Description :Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\new_script.script:13: attempt to concatenate global 'set_0' (a nil value) Не знаю как это собственно исправлять. Как я понимаю вылет из-за того, что он не может рандомно вызвать одно из четырех "set_0*". Значит ошибка здесь: [set_0 .. math.random(1,4)]. Но вот как мне по-другому вызывать? Изменено 9 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 @Kober(BRUC), не изобретай велосипед... Вот готовый код, пользуйся . local tbl_dekoder_red={{position={x=70.637008666992,y=16.557912826538,z=18.104104995728},lv=253116,gv=371--position={x=44.793453216553,y=0.91162407398224,z=243.92503356934},--lv=218601,--gv=359},{position={x=-58.544227600098,y=23.022161483765,z=-102.28317260742},lv=158711,gv=296},{position={x=-66.466384887695,y=20.586454391479,z=111.6127166748},lv=107654,gv=336}}local a = tbl_dekoder_red[math.random(table.getn(tbl_dekoder_red))]function spawn()alife():create("af_cristall", vector():set(a.position.x,a.position.y,a.position.z), a.lv, a.gv) end Не соответствует правилам. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) @CRAZY_STALKER666, проблема то в том, что пользоваться мне этим не особо то и надо. А ваш велосипед я в интернете находил(иль похожий). А свой писать начал, так как интересно сделать что-то свое... Хоть это уже и есть, и даже лучше... но это то свое! Изменено 9 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Nazgool 250 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) @Kober(BRUC), 2.5.4 - Конкатенация Оператор конкатенации (соединения) строк в Lua обозначается двумя точками ('..'). Если оба операнда являются строками или числами, то они будут преобразованы в строки согласно правилам §2.2.1. Иначе будет вызван метаметод "concat" ...2.2.1 - Приведение типовLua обеспечивает автоматическое преобразование между строковыми и числовыми значениями в процессе выполнения... Разберись, какие значения операндов в set_0 .. math.random(1,4) abramcumner Решения давать не хорошо Человек хочет свое делать. А как он будет делать, если пока не понимает основ? Там же ещё ошибки есть. Изменено 9 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти