Меню сайта
HardLife addon
Статистика
Вход

Последнее в блоге
[02.10.2015]
О релизе в steam (14)
[17.06.2015]
Как всё начиналось (3)
Последние картинки
Четверг, 18.04.2024, 17:50
Приветствую Вас Гость

Lua - вопросы и ответы - Форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Модификации » Наука модификации » Lua - вопросы и ответы
Lua - вопросы и ответы
be@verДата: Среда, 19.02.2014, 12:03 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 18
Репутация: 1
Статус: Offline
1. Добавить в контекстное меню предмета пункт и выполнить определенные действия при его выборе - не проблема, но ни как не могу стартовать диалог для выбора из нескольких вариантов. Не добавлять же в контекстное меню 4-12 пунктов biggrin
Подскажите, плиииииизз...
2. Название свойств предмета соответствуют используемым в файлах сохраненной игры?
 
VorotДата: Среда, 19.02.2014, 12:42 | Сообщение # 2
Поручик
Группа: Модераторы
Сообщений: 2806
Репутация: 112
Статус: Offline
Цитата be@ver ()
не могу стартовать диалог для выбора из нескольких вариантов.

А как пытаешься?

Цитата be@ver ()
Название свойств предмета соответствуют используемым в файлах сохраненной игры?

Каких свойств, каких предметов?


"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)

Сообщение отредактировал Vorot - Среда, 19.02.2014, 13:22
 
be@verДата: Среда, 19.02.2014, 13:10 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 18
Репутация: 1
Статус: 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
Репутация: 112
Статус: 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
Репутация: 1
Статус: Offline
Цитата
local itemCondition = item:GetCondition()
мда.. неоднозначно....
а где вообще глянуть все эти GetCondition?
пытаюсь сообразить, как выкинуть патроны из пачки, которая в руках (ибо нефиг biggrin )
да и в CanUseAmmoBox хочу вставить проверку, что бы запретить действие в бою, в ящике, в магазине и вообще, можно только в руках. а в AmmoBoxReDraw проверить наличие авторучки (или карандаша), пачки сигарет (типа старую пачку патронов обернем) и, естественно, увеличим износ как для самой пачки, так и для авторучки... biggrin
вот порядок перебора инвентаря и получения нужных параметров и интересует...
 
VorotДата: Среда, 19.02.2014, 14:29 | Сообщение # 6
Поручик
Группа: Модераторы
Сообщений: 2806
Репутация: 112
Статус: 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
Репутация: 1
Статус: Offline
Код
function userGetRealName(NameItem)
...
return RealNameItem
end
Как получить RealName зная только Name предмета? Если определен предмет, то проблем нет: item:GetRealName()
Но увы, предмет не определен...
 
VorotДата: Четверг, 20.02.2014, 16:09 | Сообщение # 8
Поручик
Группа: Модераторы
Сообщений: 2806
Репутация: 112
Статус: Offline
Цитата be@ver ()
Как получить RealName зная только Name предмета?

А откуда в коде берется Name?


"Они хотели нас похоронить, но не знали, что мы семена" (мексиканская пословица)
 
be@verДата: Четверг, 20.02.2014, 16:41 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 18
Репутация: 1
Статус: 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
Репутация: 5
Статус: Offline
Цитата be@ver ()
примерно вот так планируется... то есть имеем строку с именем, нужно получить строку RealName

GetItem(itemname):GetRealName()

Для примера см lua/cars/main.lua
 
be@verДата: Четверг, 20.02.2014, 19:54 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 18
Репутация: 1
Статус: Offline
а есть где нибудь вообще полный список функций? а то тяжко... хотя бы в виде sting Object:GetRealName()
 
amreДата: Четверг, 20.02.2014, 20:43 | Сообщение # 12
Сержант
Группа: Пользователи
Сообщений: 26
Репутация: 5
Статус: 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
Репутация: 1
Статус: Offline
amre, сенкс...

Как получить список присутствующих в секторе?

Что за Engine и как использовать?
 
amreДата: Суббота, 22.02.2014, 19:40 | Сообщение # 14
Сержант
Группа: Пользователи
Сообщений: 26
Репутация: 5
Статус: Offline
Цитата be@ver ()
а есть где нибудь вообще полный список функций?

Вообще полный список функций и переменных (включая встроенные lua) можно узнать из глобальной таблицы '_G':


Код
lua dbg(_G)

Вывод у меня: https://gist.github.com/anonymous/9156685
К сожалению параметры функций так не узнать.
 
be@verДата: Понедельник, 24.02.2014, 15:20 | Сообщение # 15
Рядовой
Группа: Пользователи
Сообщений: 18
Репутация: 1
Статус: Offline
как интересно с пачками патронов возиться biggrin
Как правильнее распознать пачку патронов, большую пачку патронов (цинк) и деревянный ящик?

Код
AmmoBox = GetItem("предположительно пачка патронов")
if AmmoBox:GetFamily() == 7
-- магазины, обоймы, пачки и т.д.
if AmmoBox:GetPlugType==1
-- отбрасываем магазины и обоймы
if AmmoBox:GetSpecificInfo()["Rounds"] < 200
-- оставляем только бумажные пачки
а вот как оставшиеся разделить на деревянные ящики и цинки? Искать в RealName слово "деревянный"? cool

PS. Насколько знаю, появление некоторых вещей привязано с CGL. Как программно глянуть CGL на котором появиться предмет?
 
Форум » Модификации » Наука модификации » Lua - вопросы и ответы
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: