Lua - вопросы и ответы
|
|
be@ver | Дата: Среда, 19.02.2014, 12:03 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| 1. Добавить в контекстное меню предмета пункт и выполнить определенные действия при его выборе - не проблема, но ни как не могу стартовать диалог для выбора из нескольких вариантов. Не добавлять же в контекстное меню 4-12 пунктов Подскажите, плиииииизз... 2. Название свойств предмета соответствуют используемым в файлах сохраненной игры?
|
|
| |
Vorot | Дата: Среда, 19.02.2014, 12:42 | Сообщение # 2 |
Поручик
Группа: Модераторы
Сообщений: 2806
Статус: Offline
| Цитата be@ver ( ) не могу стартовать диалог для выбора из нескольких вариантов. А как пытаешься?
Цитата be@ver ( ) Название свойств предмета соответствуют используемым в файлах сохраненной игры? Каких свойств, каких предметов?
"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)
Сообщение отредактировал Vorot - Среда, 19.02.2014, 13:22 |
|
| |
be@ver | Дата: Среда, 19.02.2014, 13:10 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| в Hardlife\lua\items\ добавил файл, прописав его в Hardlife\lua\main.lua Код function CanUseAmmoBox(item) return true end
function AmmoBoxReDraw(item) local monster = GetCurrentMerc():GetINI() SetTalkingWithInCode(monster) local chBox = 0 while chBox ~= 1 do userch("Ни чего не делать", 1) userch("Big Ammo box (7.62x39)", 2) userch("Ammo box (SB 7.62x39)", 3) userch("Ammo box (M67)", 4) chBox = askch() if chBox == 2 then item:ChangeItemType("Big Ammo box (7.62x39)") elseif chBox == 3 then item:ChangeItemType("Ammo box (SB 7.62x39)") elseif chBox == 4 then item:ChangeItemType("Ammo box (M67)") end return end end
AddItemContextMenu("Ammo box 7.62x39 Norinco", "Перерисовать", AmmoBoxReDraw, CanUseAmmoBox) Вроде бы всё работает, так, как ожидалось от этого кода. Но не могу выдать сообщение в верхнюю часть окна, и нужны параметры износа текущего предмета, с тем, что бы новому предмету установить износ.
|
|
| |
Vorot | Дата: Среда, 19.02.2014, 13:22 | Сообщение # 4 |
Поручик
Группа: Модераторы
Сообщений: 2806
Статус: Offline
| Если использовать ChangeItemType - то износ должен оставаться как на исходном предмете. Если тебе нужно его увеличить, то
local itemCondition = item:GetCondition() itemCondition = itemCondition*N item:SetCondition(itemCondition)
N - коэффициент от 0(=100% износ) до 1(=0% износ).
В верхнюю часть окна ты не можешь ничего выдать потому что не пишешь ничего и нигде.
"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)
Сообщение отредактировал Vorot - Среда, 19.02.2014, 13:27 |
|
| |
be@ver | Дата: Среда, 19.02.2014, 13:38 | Сообщение # 5 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Цитата local itemCondition = item:GetCondition() мда.. неоднозначно.... а где вообще глянуть все эти GetCondition? пытаюсь сообразить, как выкинуть патроны из пачки, которая в руках (ибо нефиг ) да и в CanUseAmmoBox хочу вставить проверку, что бы запретить действие в бою, в ящике, в магазине и вообще, можно только в руках. а в AmmoBoxReDraw проверить наличие авторучки (или карандаша), пачки сигарет (типа старую пачку патронов обернем) и, естественно, увеличим износ как для самой пачки, так и для авторучки... вот порядок перебора инвентаря и получения нужных параметров и интересует...
|
|
| |
Vorot | Дата: Среда, 19.02.2014, 14:29 | Сообщение # 6 |
Поручик
Группа: Модераторы
Сообщений: 2806
Статус: Offline
| Цитата be@ver ( ) а где вообще глянуть все эти GetCondition? Подсмотреть в других lua-скриптах.
Цитата be@ver ( ) очу вставить проверку, что бы запретить действие в бою, в ящике, в магазине и вообще, можно только в руках. Проверка на почти все (не магазин, не бой и есть инструменты) есть в CanCraft, осталось добавить то что предмет в руках. Примерно так:
function CanUseAmmoBox(item) local monster = GetCurrentMerc() local hands_item = monster:GetHands()
return HUDState() ~= 5 and not IsBattle() and monster:HasItem(item) and not item:IsShopItem() and (monster:HasItem("tool1") or monster:HasItem("tool2") or monster:HasItem("tool3"))
and hands_item = item end
"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)
|
|
| |
be@ver | Дата: Четверг, 20.02.2014, 09:11 | Сообщение # 7 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Код function userGetRealName(NameItem) ... return RealNameItem end Как получить RealName зная только Name предмета? Если определен предмет, то проблем нет: item:GetRealName() Но увы, предмет не определен...
|
|
| |
Vorot | Дата: Четверг, 20.02.2014, 16:09 | Сообщение # 8 |
Поручик
Группа: Модераторы
Сообщений: 2806
Статус: Offline
| Цитата be@ver ( ) Как получить RealName зная только Name предмета? А откуда в коде берется Name?
"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)
|
|
| |
be@ver | Дата: Четверг, 20.02.2014, 16:41 | Сообщение # 9 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Код local ListAmmoBox = { [1] = "Big Ammo box (7.62x39)", [2] = "Ammo box (SB 7.62x39)", [3] = "Ammo box (M67)", } function userGetRealName(NameItem) -- вот тут как сделать, непонятно return RealNameItem end for key, NameItem in pairs(ListAmmoBox) do RealNameItem = userGetRealName(NameItem) end примерно вот так планируется... то есть имеем строку с именем, нужно получить строку RealName
Сообщение отредактировал be@ver - Четверг, 20.02.2014, 16:45 |
|
| |
amre | Дата: Четверг, 20.02.2014, 17:07 | Сообщение # 10 |
Сержант
Группа: Пользователи
Сообщений: 26
Статус: Offline
| Цитата be@ver ( ) примерно вот так планируется... то есть имеем строку с именем, нужно получить строку RealName GetItem(itemname):GetRealName()
Для примера см lua/cars/main.lua
|
|
| |
be@ver | Дата: Четверг, 20.02.2014, 19:54 | Сообщение # 11 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| а есть где нибудь вообще полный список функций? а то тяжко... хотя бы в виде sting Object:GetRealName()
|
|
| |
amre | Дата: Четверг, 20.02.2014, 20:43 | Сообщение # 12 |
Сержант
Группа: Пользователи
Сообщений: 26
Статус: Offline
| Цитата be@ver ( ) а есть где нибудь вообще полный список функций? а то тяжко... хотя бы в виде sting Object:GetRealName() Где-то видел подобное в виде doc файла вроде бы, но не могу найти.
Посмотреть все методы объекта можно из консоли: Код lua dbg(getmetatable(GetCurrentMerc())) Вывод в hla.logДобавлено (20.02.2014, 20:43) ---------------------------------------------
Цитата amre ( ) пытаюсь сообразить, как выкинуть патроны из пачки, которая в руках (ибо нефиг ) См https://gist.github.com/anonymous/6046357 из http://hla.3dn.ru/forum/6-712-1#22764
|
|
| |
be@ver | Дата: Пятница, 21.02.2014, 08:05 | Сообщение # 13 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| amre, сенкс...
Как получить список присутствующих в секторе?
Что за Engine и как использовать?
|
|
| |
amre | Дата: Суббота, 22.02.2014, 19:40 | Сообщение # 14 |
Сержант
Группа: Пользователи
Сообщений: 26
Статус: Offline
| Цитата be@ver ( ) а есть где нибудь вообще полный список функций? Вообще полный список функций и переменных (включая встроенные lua) можно узнать из глобальной таблицы '_G':
Вывод у меня: https://gist.github.com/anonymous/9156685 К сожалению параметры функций так не узнать.
|
|
| |
be@ver | Дата: Понедельник, 24.02.2014, 15:20 | Сообщение # 15 |
Рядовой
Группа: Пользователи
Сообщений: 18
Статус: Offline
| как интересно с пачками патронов возиться Как правильнее распознать пачку патронов, большую пачку патронов (цинк) и деревянный ящик?
Код AmmoBox = GetItem("предположительно пачка патронов") if AmmoBox:GetFamily() == 7 -- магазины, обоймы, пачки и т.д. if AmmoBox:GetPlugType==1 -- отбрасываем магазины и обоймы if AmmoBox:GetSpecificInfo()["Rounds"] < 200 -- оставляем только бумажные пачки а вот как оставшиеся разделить на деревянные ящики и цинки? Искать в RealName слово "деревянный"?
PS. Насколько знаю, появление некоторых вещей привязано с CGL. Как программно глянуть CGL на котором появиться предмет?
|
|
| |