abramcumner 1 157 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) @Kober(BRUC), добавь после 12-й строки: local set_0 = "set_0" Человек хочет свое делать. А как он будет делать, если пока не понимает основ? Там же ещё ошибки есть.Ну это не решение. Решение - обойтись без этой строчки. А это просто подумать, что значит одна и та же строка в кавычках и без. А до конкатенации и приведения типов тут далеко. Тут хотя бы переменные отличать от констант, находить в коде вызовы функций и прочее. Книги и доки, я так понимаю, в данном случае не котируются, только грабли, шишки и кодирование наугад. Изменено 9 Июня 2016 пользователем abramcumner 1 2 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) Разберись, какие значения операндов Как я понял нужно всего навсего изменить set_0 на: "set_0" Изменено 9 Июня 2016 пользователем Kober(BRUC) 2 Ссылка на комментарий
Nazgool 250 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) @Kober(BRUC), С одним разобрались ) Теперь смотри на это : vector():set(ps) и разберись что такое 'ps' Только не спеши. Мы все понимаем что ты хотел сделать, но получилось не так. Подсказка 2.5.7 - Конструкторы таблиц ... описание синтаксиса конструкторов: ... fieldsep ::= ',' | ';' если перевести 'fieldsep', то выйдет 'разделитель полей' таблицы. Т.е. либо запятая, либо точка с запятой. И теперь посмотри какие поля у тебя в таблицах 'set_0*' Изменено 9 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Zander_driver 10 334 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 Я бы еще обратил внимание, что из таблицы разных вариантов координат, по отдельности выбирается, гейм_вертекс, левел-вертекс, и позиция. Т.е. возможен случай когда для спавна будут выбраны например, гейм-вертекс из 3-го варианта, левел-вертекс из 1-го, а позиция из второго. Но так же нельзя делать) Точнее, это смысла не имеет. Координаты в сталкере - это взаимосвязь gv, lv, position. Таким образом не надо 3 раза дергать math.random, достаточно вызвать его 1 раз, выбрать один вариант из таблицы, и уже все параметры (lv, gv, pos) брать из этого варианта. А если хочется больше разнообразия то увеличивать число вариантов в таблице. О настоящем рандомном спавне тут пока речь вести рано) Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Nazgool 250 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) возможен случай когда для спавна будут выбраны например, гейм-вертекс из 3-го варианта, левел-вертекс из 1-го, а позиция из второго Об этом я хотел сказать чуть позже. После того как с основами построения таблиц и обращения к полям всё станет ясно. Ну чтобы не вываливать всё сразу. Изменено 9 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
mole venomous 3 429 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 Господа модмейкеры, надеюсь на вашу помощь. После нескольких тщетных попыток всё же решил обратиться сюда. Вопрос в том, как определить тип патронов в стволе в текущий момент, для получения коэффициентов ттх. Всё это нужно для краткого инфо об оружии в виде сообщения. На всякий случай вот код, как его составил на данный момент, потребует ли он кардинальной правки? --------------------------------------------------------------------------------------------------------------------------" информация об оружии------------------------------------------------------------------------------------------------------------------------local time_update = 500local time_addlocal conditionlocal damagelocal velocitylocal dispersionfunction weapon_info()local time = time_global()if time_add == nil thentime_add = time_global() + time_updateendlocal active_slot = db.actor:active_item()if active_slot and db.actor:active_slot()==1 thenif time > time_add thentime_add = time_global() + time_updatelocal sect=db.actor:item_in_slot(1):section()local name = tostring(system_ini():r_string(sect,"inv_name_short"))local a=tonumber(system_ini():r_string(sect,"hit_power"))local b=tonumber(system_ini():r_string(sect,"bullet_speed"))local c=tonumber(system_ini():r_string(sect,"fire_dispersion_base"))local d=tonumber(system_ini():r_string(sect,"fire_dispersion_condition_factor"))damage=a*100velocity=bcondition=db.actor:item_in_slot(1):condition()dispersion=(c*100)*(1+(d*(1-condition)))local text = "\\n%c[0,0,255,255]Текущее оружие: \\n%c[255,160,160,160]"..game.translate_string(tostring(name)).."\\n%c[255,1,255,1]повреждение = "..game.translate_string(tostring(damage)).."\\n%c[255,1,255,1]скорость пули = "..game.translate_string(tostring(velocity)).."\\n%c[255,1,255,1]кучность = "..game.translate_string(tostring(dispersion)).."\\n%c[255,1,255,1]состояние = "..game.translate_string(tostring(condition))db.actor:give_game_news(text,"ui\\ui_IconsTotalKrot",Frect():set(0,48,83,47),50,10000)endtime_add = nilendif active_slot and db.actor:active_slot()==2 thenif time > time_add thentime_add = time_global() + time_updatelocal sect=db.actor:item_in_slot(2):section()local name = tostring(system_ini():r_string(sect,"inv_name_short"))local a=tonumber(system_ini():r_string(sect,"hit_power"))local b=tonumber(system_ini():r_string(sect,"bullet_speed"))local c=tonumber(system_ini():r_string(sect,"fire_dispersion_base"))local d=tonumber(system_ini():r_string(sect,"fire_dispersion_condition_factor"))damage=a*100velocity=bcondition=db.actor:item_in_slot(2):condition()dispersion=(c*100)*(1+(d*(1-condition)))local text = "\\n%c[0,0,255,255]Текущее оружие: \\n%c[255,160,160,160]"..game.translate_string(tostring(name)).."\\n%c[255,1,255,1]повреждение = "..game.translate_string(tostring(damage)).."\\n%c[255,1,255,1]скорость пули = "..game.translate_string(tostring(velocity)).."\\n%c[255,1,255,1]кучность = "..game.translate_string(tostring(dispersion)).."\\n%c[255,1,255,1]состояние = "..game.translate_string(tostring(condition))db.actor:give_game_news(text,"ui\\ui_IconsTotalKrot",Frect():set(0,0,83,47),50,10000)endtime_add = nilendend Здесь могла быть ваша реклама. Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 @Nazgool, т.е. между "x" "y" "z" нужно поставить”;”, так как если будет запятая, то он выберет только "x". З.ы. я себя чувствую дураком... Как я сразу это не заметил составляя таблицу координат?.. @Zander_driver, а гейм-вертекс и левел-вертекс во всех четырех вариантах совпадают. Ссылка на комментарий
abramcumner 1 157 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 @Kober(BRUC), прочитай уж доку наконец. Там разбирается пример один в один как у тебя. И нет, запятая и точка с запятой в конструкторах таблиц означают одно и тоже. 1 Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Kober(BRUC), Ты немного не понял. Я говорил посмотри какие поля у тебя в таблицах А про сепараторы - это было для того, чтобы ты понял как определить где же поля.Хорошо. Давай разбирать. Но прежде, как правильно сказал abramcumner, прочитай. Вот на русском http://www.lua.ru/doc/2.5.7.html set_01 = {lvid=261995, gvid=187, pos = -15.300880,5.824976,292.832062} Ищем разделители. У тебя это запятые (но могут быть и точки с запятой). Значит у тебя будет 5 полей : lvid=261995 gvid=187 pos = -15.300880 5.824976 292.832062 Ты уже почитал доки ( ) и знаешь, что поля записываются как пара "ключ=значение" Разберем эти поля: ключ | значение | -----|----------| lvid | 261995 | -----|----------| gvid | 187 | -----|----------| pos |-15.300880| -----|----------| | 5.824976 | -----|----------| |292.832060| ----------------- Как видишь в последних двух случаях ключи не указаны, но после прочтения доков ты моментально поймешь, что ключи будут инициализированы самой lua автоматически, по правилам индексированного массива. А именно: -----|----------| [1] | 5.824976 | -----|----------| [2] |292.832060| ----------------- А теперь повторюсь : разберись что такое 'ps' в выражении vector():set(ps) и с какими аргументами сколько аргументов передаются при вызове метода vector():set(...) Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Nazgool, то есть это должно выглядеть так: return alife():create(section, vector():set(ps,ps[1],ps[2]),lv,gv) --Около фермы Изменено 10 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Kober(BRUC), Уже теплее Итак, ты пишешь : ps[1],ps[2] Т.е. подразумеваешь, что 'ps' таблица, и получаешь значения полей [1] и [2]. А что же у тебя всё-таки 'ps'? Таблица или не таблица? Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 @Nazgool, скорее не таблица, а ее компонент. Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) Нужно в доки добавить новое определение.Давай разбирать local ps = pos_tbl[set_0 .. math.random(1,4)]["pos"] Выходит, что 'ps' это значения поля таблицы 'pos_tbl[какая-то_рандомная]' с индексом ['pos']А что у тебя записано в этом поле? Скажем таблица 'pos_tbl[какая-то_рандомная]' это 'set_01' Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Nazgool, координаты, левел и гейм-вертексы Изменено 10 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) Одному ключу можно присвоить только одно значение. И как же то, что мы уже разобрали ? -----|----------| pos |-15.300880| -----|----------| И всё. В 'pos' записана только координата 'x'Значит и 'ps' будет иметь значение ..... какое? Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 @Nazgool, я когда говорил координаты я подразумевал ps - x; ps[1] - y; ps[2] - z. Но как я понял это не правильно. То есть нужно изменить таблицу на такую?: ... А вот на какую что бы, я со своими скудными познаниями смог вызвать из этой таблицы и "x", и "y", и "z", из этой строки вызывались сразу три: local ps = pos_tbl["set_0" .. math.random(1,4)]["pos"] --Position Значит нужно сделать так: local pos_tbl={ set_01 = {lvid=261995, gvid=187, pos = -15.300880, pos[1] = 5.824976, pos[2] = 292.832062}, set_02 = {lvid=261995, gvid=187, pos = -13.200880, pos[1] = 3.716976, pos[2] = 292.832062}, set_03 = {lvid=261995, gvid=187, pos = -11.400880, pos[1] = 1.908976, pos[2] = 292.832062}, set_04 = {lvid=261995, gvid=187, pos = -19.100880, pos[1] = 7.600976, pos[2] = 292.832062} } ... local ps = pos_tbl["set_0" .. math.random(1,4)]["pos"] --Position local ps[1] = pos_tbl["set_0" .. math.random(1,4)]["pos[1]"] --Position local ps[2] = pos_tbl["set_0" .. math.random(1,4)]["pos[2]"] --Position Но вот проблема тогда появляется. Тогда рандомно из всех четырех "set_0*" будет вызываться разные координаты "x", "y" и "z". Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Kober(BRUC), Ладно. Давай пойдем от обратного.Вот готовый вариант. Специально написал более развернуто, чтобы ты пошагово понимал что происходит local pos_tbl={ {lvid=261995, gvid=187, pos = {-15.300880,5.824976,292.832062}}, {lvid=261995, gvid=187, pos = {-13.200880,3.716976,292.832062}}, {lvid=261995, gvid=187, pos = {-11.400880,1.908976,292.832062}}, {lvid=261995, gvid=187, pos = {-19.100880,7.600976,292.832062}}, } function spawn_z_escape_1(section) local data = math.random(#pos_tbl) -- Один раз получить какую-то таблицу с координатами local lv = data.lvid --Левел вертекс local gv = data.gvid --Гэйм вертекс local pos = data.pos --Position - Это таблица с координатами x,y,z local x = pos[1] -- теперь уже из таблицы 'pos' получаем первое поле 'x' local y = pos[2] -- второе 'y' local z = pos[3] -- и наконец третье 'z' return alife():create(section, vector():set(x,y,z),lvid,gvid) --Около фермы end function r_zombie_1() spawn_z_escape_1("zombie_new_k_1") spawn_z_escape_1("zombie_new_k_1") end Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Nazgool, а у меня ведь была идея сделать из pos еще одну таблицу... Что я понял из вашего кода: 1) Вы гениальны. 2) благодаря этой строчке: local data = math.random(#pos_tbl) -- Один раз получить таблицу с координатами можно решить проблему вызова левел-вертексов, гейм-вертексов и координат x, y,z из разных set_0* 3) То что в вашем коде pos является таблицей, а pos[1] - x и т.д. Изменено 10 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Nazgool 250 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) Даже не знаю как и отреагировать.@Kober(BRUC), Почитай доки. Там написано ровно столько, чтобы все стали гениальны Это код не окончательный, а только для разъяснения.Окончательный выглядит несколько иначе, т.к. ещё не всё разобрали. Изменено 10 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 10 Июня 2016 Поделиться Опубликовано 10 Июня 2016 (изменено) @Nazgool, а чем же окончательный отличается? Вроде бы и этот прекрасно должен работать. Я кажется понял отличие. Нет числа рандомного спавна. Точнее от сколки и до сколки зомби заспавнятся. Изменено 10 Июня 2016 пользователем Kober(BRUC) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти