Скриптование - Страница 386 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

Всем привет. Нужна помощь по функциям.

Есть код:

function blabla()

local number = self:edit_GetText()

end

function edit_GetText()

return self.edit:GetText()

end

edit_gettext это функция editbox. В editbox мы должны ввести число которое после должно записатся в переменную number, но оно не записывается. В чем же может быть проблема??

@naxac, я сначала делал так, но значение меняется жутко медленно, поэтому перешёл на trackbar и прикрутил вывод тек. значения рядом. Изменено пользователем Kirgudu

Такая проблема. Использую модифицированную ph_car от lscon.

Вот в чем проблема. Перевел функцию на новое хранилище обьектов, И так, переписал функцию.

 

 

function action_car:update_friends_and_target()
self.friends = {}
local obj

for k,v in pairs(db.btr_target) do
obj=level.object_by_id(k)
if obj and ( (IAmAStalker[obj:clsid()] and obj:character_community()=="military" and obj:alive()) or
(obj:section()=="vehicle_btr" and obj:id()~=self.object:id()) ) and
self.fire_range_sqr>self.object:position():distance_to_sqr(obj:position()) then
self.friends[k] = obj:section()
end
end

if self.st.fire_target == "monsters" then
-- враги монстры, значит друзья все сталкеры и выбираем ближайшего монстра в качестве цели
local dist = 0
local nearest = 100000
local nearest_limit = 25 -- но не ближе 5 м, иначе БТР сам себе мешает стрелять
local target = nil

for id,obj in pairs(db.btr_target) do
if obj:alive() then
dist = self.object:position():distance_to_sqr(obj:position())
if dist < self.fire_range_sqr then
if IAmAStalker[obj:clsid()] then
-- добираем всех сталкеров в друзей
self.friends[id] = obj:section()
elseif IAmAMonster[obj:clsid()] and nearest_limit < dist and dist < nearest and self.car:IsObjectVisible(obj) then
-- ищем ближайшего монстра в качестве цели
nearest = dist
target = obj
end
end
end
end

if target then
self.target_obj = target
self.state_firetarget = state_firetarget_enemy
else
self.target_obj = nil
self.state_firetarget = state_none
end
end
end

 

 

Теперь данные берем из db.btr_target. Там, вроде бы, храниться то, что нужно.

Вот инициализация хранилища:

 

 


function add_obj( obj )
if IsStalker(obj) then
creature[obj:id()] = true
elseif IsMonster(obj) then
creature[obj:id()] = false
end

if IsMonster(obj) then
monster_stock[obj:id()] = obj
end

if IsStalker(obj) and IsMonster(obj) then
btr_target[obj:id()] = true
end
end

function del_obj( obj )
storage [obj:id()] = nil
if IsStalker(obj) or IsMonster(obj) then
creature[obj:id()] = nil
end
if IsMonster(obj) then
monster_stock[obj:id()] = nil
end

if IsStalker(obj) and IsMonster(obj) then
btr_target[obj:id()] = nil
end
end

 

 

Итого - ничего. Если выставить db.creature - вылет со ссылкой на obj(мол boolean value). Если db.storage - вылет со ссылкой на метод alive(), мол его к obj применить нельзя...

Вроде все должно работать, в остальных частях схемы(логика БТР) проблем нет, брал прямо из ОП-2.

 

Кто-то скажет скопировать оригинальный btrs_friends = {}, еще раз говорю - на счет друзей БТР фишка не особо нужна. Тем более проверка на группировки и прочее уже вшита в функцию.

 

Жду вашей помощи...

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

Не соответствует правилам.

Всем привет. Нужна помощь по функциям.

Есть код:

function blabla()

local number = self:edit_GetText()

end

function edit_GetText()

return self.edit:GetText()

end

edit_gettext это функция editbox. В editbox мы должны ввести число которое после должно записатся в переменную number, но оно не записывается. В чем же может быть проблема??

Это ТЧ или ЗП?

Итак, после over9000 вылетов, поломок update() и результатов = nil, я добился этого - БТР гасит монстров!!!

Может, пригодиться кому.

Для чистого ТЧ, разве что нужно объявить хранилище monster_stock, там только монстры...

 

 

function action_car:update_friends_and_target()

 
get_console():execute("CHEKING!!!")
 if self.st.fire_target == "monsters" then
for k in pairs(db.monster_stock) do
local obj = level.object_by_id(k)
if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then
               self.target_obj = obj
               self.state_firetarget = state_firetarget_enemy
get_console():execute(" !!_"..obj:name().."_!!")
end
end
end
end
  • Нравится 1

Не соответствует правилам.

@saymon6996, покажите полный код (только под спойлер уберите), а так могу предположить что функция не назначена на кнопку (я же не прав? ;) ))

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

@saymon6996, покажите полный код (только под спойлер уберите), а так могу предположить что функция не назначена на кнопку (я же не прав? ;) ))

А не подскажешь как под спойлер текст пустить, а то я с телефона, интернет только на нем. Я за городом)

@mortan,

 

class "NewUI" (CUIScriptWnd)

 

function NewUI:__init() super()

self:InitControls()

self:InitCallBacks()

end

 

function NewUI:__finalize()

end

 

function NewUI:InitControls()

local xml = CScriptXmlInit()

self:SetWndRect(Frect():set(0,0,1024,768))

xml:ParseFile("NewUI.xml")

self.Static = xml:InitStatic("Static", self)

xml:InitFrame("Static:List_frame", self.Static)

self.List = xml:InitList("List", self)

self.List:ShowSelectedItem(true)

self:Register(self.List, "List")

xml:InitFrame("Static:frame4", self.Static)

self.label = xml:InitStatic("label", self)

self.edit = xml:InitEditBox("edit", self)

self.section_name = xml:InitStatic("section_name", self)

self:Register(xml:Init3tButton("button1", self), "btn_mob")

self:Register(xml:Init3tButton("button2", self), "btn_weapons")

self:Register(xml:Init3tButton("button3", self), "btn_ammo")

self:Register(xml:Init3tButton("button4", self), "btn_outf")

self:Register(xml:Init3tButton("button5", self), "btn_stalkers")

self:Register(xml:Init3tButton("button6", self), "btn_artefacts")

self:Register(xml:Init3tButton("button7", self), "btn_items")

self:Register(xml:Init3tButton("button8", self), "btn_addons")

self:Register(xml:Init3tButton("button9", self), "btn_quest")

self:Register(xml:Init3tButton("button10", self), "btn_unique")

self:Register(xml:Init3tButton("btn_exit", self), "btn_exit")

self:Register(xml:Init3tButton("button12", self), "actor_spawn")

self:Register(xml:Init3tButton("button13", self), "spawn")

 

end

 

function NewUI:InitCallBacks()

self:AddCallback("List", ui_events.LIST_ITEM_CLICKED, self.On_List_item_clicked, self)

self:AddCallback("btn_mob", ui_events.BUTTON_CLICKED, self.btn_mob_button_clicked, self)

self:AddCallback("btn_weapons", ui_events.BUTTON_CLICKED, self.btn_weapons_button_clicked, self)

self:AddCallback("btn_ammo", ui_events.BUTTON_CLICKED, self.btn_ammo_button_clicked, self)

self:AddCallback("btn_outf", ui_events.BUTTON_CLICKED, self.btn_outfits_button_clicked, self)

self:AddCallback("btn_stalkers", ui_events.BUTTON_CLICKED, self.btn_stalkers_button_clicked, self)

self:AddCallback("btn_artefacts", ui_events.BUTTON_CLICKED, self.btn_artefacts_button_clicked, self)

self:AddCallback("btn_items", ui_events.BUTTON_CLICKED, self.btn_items_button_clicked, self)

self:AddCallback("btn_addons", ui_events.BUTTON_CLICKED, self.btn_addons_button_clicked, self)

self:AddCallback("btn_quest", ui_events.BUTTON_CLICKED, self.btn_quest_button_clicked, self)

self:AddCallback("btn_unique", ui_events.BUTTON_CLICKED, self.btn_unique_button_clicked, self)

self:AddCallback("btn_exit", ui_events.BUTTON_CLICKED, self.Hide, self)

self:AddCallback("actor_spawn", ui_events.BUTTON_CLICKED, self.btn_spawn, self)

self:AddCallback("spawn", ui_events.BUTTON_CLICKED, self.btn_spawn_dist, self)

end

 

------------------- >>> Класс элемента списка List > END 50 then item_name = string.sub(item_name,1,50).."..." end

local _itm = ListItem()

_itm.text_item:SetText(item_name)

_itm.sct:SetText(sect)

self.List:AddItem(_itm)

end

end

 

function check_game()

return alife()~=nil and db.actor and db.actor:alive()

end

 

function NewUI:read_if_exist(what, section, line, def, ini)

if not ini then ini = system_ini() end

if section and ini:section_exist(section) and ini:line_exist(section,line) then

if what == "flt" then

return ini:r_float(section,line)

elseif what == "u32" then

return ini:r_u32(section,line)

elseif what == "str" then

return ini:r_string(section,line)

elseif what == "bln" then

return ini:r_bool(section,line)

end

end

return def

end

 

function NewUI:check_item(section)

if system_ini():section_exist(section) then

if self:read_if_exist("bln", section, "can_take", true)==true

and self:read_if_exist("str", section, "class", nil)~=nil

and self:read_if_exist("str", section, "description", nil)~=nil

and self:read_if_exist("str", section, "inv_name", nil)~=nil

and self:read_if_exist("str", section, "visual", nil)~=nil then return true

else self:tolog("ERROR! Incorrect section for spawn [%s]",section) return false end

else

self:tolog("ERROR! Section not found: [%s]",section)

return false

end

end

 

function NewUI:spawn_item(section)

if not section then return end

if spawn_type == "alive" then return end

if check_game() then

alife():create(section, vector(),0,0,0)

local snd = sound_object([[detectors\contact_1]])

snd:play(db.actor, 0, sound_object.s2d)

end

end

 

function NewUI:spawn_item_dist(section, dist)

if not section then return end

if check_game() then

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(section, pos, 1, db.actor:game_vertex_id())

local snd = sound_object([[detectors\contact_1]])

snd:play(db.actor, 0, sound_object.s2d)

end

end

 

function NewUI:Hide()

self:GetHolder():start_stop_menu(self.owner, true)

self:GetHolder():start_stop_menu(self, true)

self.owner:Show(true)

end

 

function NewUI:tolog(fmt,...)

if alife()~=nil then

local con = get_console()

local msg = string.format(fmt,...)

con:execute("load ~cheat~ "..msg)

end

end

 

 

Все, разобрался)

@saymon6996,разобрались со спойлером или проблемой?) Ну елки,в коде не видно вашей функции,так что я могу только догадываться что вы еще добавили в него. Когда у вас вызывается функция - после нажатия кнопки или по мере ввода?

@saymon6996,разобрались со спойлером или проблемой?) Ну елки,в коде не видно вашей функции,так что я могу только догадываться что вы еще добавили в него. Когда у вас вызывается функция - после нажатия кнопки или по мере ввода?

Не знаю как так телефон мог скопировать, что именно середняя часть кода не отображается.

Вообщем вот все, что касается этих функций:

 

class "NewUI" (CUIScriptWnd)

 

function NewUI:__init() super()

self:InitControls()

self:InitCallBacks()

end

 

function NewUI:__finalize()

end

 

function NewUI:InitControls()

local xml = CScriptXmlInit()

self:SetWndRect(Frect():set(0,0,1024,768))

xml:ParseFile("NewUI.xml")

self.edit = xml:InitEditBox("edit", self)

self:Register(xml:Init3tButton("button13", self), "spawn")

end

function NewUI:InitCallBacks()

self:AddCallback("spawn", ui_events.BUTTON_CLICKED, self.btn_spawn_dist, self)

end

function NewUI:btn_spawn_dist()

if self.List:GetSize()==0 then

return

end

local index = self.List:GetSelectedItem()

if index == -1 then

return

end

local itm = self.List:GetItem(index)

if itm == nil then return end

local sect = itm.sct:GetText()

!!!!------> тут, по идее, distance должно принимать значение из editbox'a

local distance = self:edit_GetText()

self:spawn_item_dist(sect, distance)

------------!!!!

end

function NewUI:edit_GetText() --это функция editbox'a

return self.edit:GetText()

end

 

 

 

Не знаю как так телефон мог скопировать, что именно середняя часть кода не отображается.

Вообщем вот все, что касается этих функций:

 

class "NewUI" (CUIScriptWnd)

 

function NewUI:__init() super()

self:InitControls()

self:InitCallBacks()

end

 

function NewUI:__finalize()

end

 

function NewUI:InitControls()

local xml = CScriptXmlInit()

self:SetWndRect(Frect():set(0,0,1024,768))

xml:ParseFile("NewUI.xml")

self.edit = xml:InitEditBox("edit", self)

self:Register(xml:Init3tButton("button13", self), "spawn")

end

function NewUI:InitCallBacks()

self:AddCallback("spawn", ui_events.BUTTON_CLICKED, self.btn_spawn_dist, self)

end

function NewUI:btn_spawn_dist()

if self.List:GetSize()==0 then

return

end

local index = self.List:GetSelectedItem()

if index == -1 then

return

end

local itm = self.List:GetItem(index)

if itm == nil then return end

local sect = itm.sct:GetText()

!!!!------> тут, по идее, distance должно принимать значение из editbox'a

local distance = self:edit_GetText()

self:spawn_item_dist(sect, distance)

------------!!!!

end

function NewUI:edit_GetText() --это функция editbox'a

return self.edit:GetText()

end

 

 

 

Вот весь код:

 

 

class "NewUI" (CUIScriptWnd)

 

function NewUI:__init() super()

self:InitControls()

self:InitCallBacks()

end

 

function NewUI:__finalize()

end

 

function NewUI:InitControls()

local xml = CScriptXmlInit()

self:SetWndRect(Frect():set(0,0,1024,768))

xml:ParseFile("NewUI.xml")

self.Static = xml:InitStatic("Static", self)

xml:InitFrame("Static:List_frame", self.Static)

self.List = xml:InitList("List", self)

self.List:ShowSelectedItem(true)

self:Register(self.List, "List")

xml:InitFrame("Static:frame4", self.Static)

self.label = xml:InitStatic("label", self)

self.edit = xml:InitEditBox("edit", self)

self.section_name = xml:InitStatic("section_name", self)

self:Register(xml:Init3tButton("button1", self), "btn_mob")

self:Register(xml:Init3tButton("button2", self), "btn_weapons")

self:Register(xml:Init3tButton("button3", self), "btn_ammo")

self:Register(xml:Init3tButton("button4", self), "btn_outf")

self:Register(xml:Init3tButton("button5", self), "btn_stalkers")

self:Register(xml:Init3tButton("button6", self), "btn_artefacts")

self:Register(xml:Init3tButton("button7", self), "btn_items")

self:Register(xml:Init3tButton("button8", self), "btn_addons")

self:Register(xml:Init3tButton("button9", self), "btn_quest")

self:Register(xml:Init3tButton("button10", self), "btn_unique")

self:Register(xml:Init3tButton("btn_exit", self), "btn_exit")

self:Register(xml:Init3tButton("button12", self), "actor_spawn")

self:Register(xml:Init3tButton("button13", self), "spawn")

 

end

 

function NewUI:InitCallBacks()

self:AddCallback("List", ui_events.LIST_ITEM_CLICKED, self.On_List_item_clicked, self)

self:AddCallback("btn_mob", ui_events.BUTTON_CLICKED, self.btn_mob_button_clicked, self)

self:AddCallback("btn_weapons", ui_events.BUTTON_CLICKED, self.btn_weapons_button_clicked, self)

self:AddCallback("btn_ammo", ui_events.BUTTON_CLICKED, self.btn_ammo_button_clicked, self)

self:AddCallback("btn_outf", ui_events.BUTTON_CLICKED, self.btn_outfits_button_clicked, self)

self:AddCallback("btn_stalkers", ui_events.BUTTON_CLICKED, self.btn_stalkers_button_clicked, self)

self:AddCallback("btn_artefacts", ui_events.BUTTON_CLICKED, self.btn_artefacts_button_clicked, self)

self:AddCallback("btn_items", ui_events.BUTTON_CLICKED, self.btn_items_button_clicked, self)

self:AddCallback("btn_addons", ui_events.BUTTON_CLICKED, self.btn_addons_button_clicked, self)

self:AddCallback("btn_quest", ui_events.BUTTON_CLICKED, self.btn_quest_button_clicked, self)

self:AddCallback("btn_unique", ui_events.BUTTON_CLICKED, self.btn_unique_button_clicked, self)

self:AddCallback("btn_exit", ui_events.BUTTON_CLICKED, self.Hide, self)

self:AddCallback("actor_spawn", ui_events.BUTTON_CLICKED, self.btn_spawn, self)

self:AddCallback("spawn", ui_events.BUTTON_CLICKED, self.btn_spawn_dist, self)

end

 

------------------- >>> Класс элемента списка List <<< -------------------

 

class "ListItem"(CUIListItemEx)

function ListItem:__init() super()

self.text_item = CUIStatic()

self.text_item:SetAutoDelete(true)

self:AttachChild (self.text_item)

self.text_item:SetText ("name")

self.text_item:SetFont (GetFontLetterica18Russian())

self.text_item:SetTextColor (255,216,186,140)

 

self.sct = CUIStatic ()

self.sct:SetAutoDelete (true)

self:AttachChild (self.sct)

self.sct:SetWndRect (230,0,200,22)

self.sct:SetText ("section")

self.sct:SetFont (GetFontLetterica16Russian())

self.sct:SetTextColor (0,0,0,0)

end

------------------- >>> END <<< -------------------

 

function NewUI:On_List_item_clicked()

if self.List:GetSize()==0 then return end

local itm_index = self.List:GetSelectedItem()

if itm_index < 0 then return end

local itm = self.List:GetItem(itm_index)

if itm == nil then return end

local sect = itm.sct:GetText()

local sizes = self:give_icon_params(sect)

 

local pw = (sizes.width/5)*4

local ph = (sizes.height/5)*4

local px = 690-(pw/2)

local py = 450-(ph/2)

 

if self.pict==nil then

self.pict = CUIStatic()

self.pict:SetWindowName("pict")

self.pict:SetAutoDelete(true)

self:AttachChild(self.pict)

end

if spawn_type == "alive" then

self.section_name:SetText(sect)

self.pict:Show(false)

return end

self.pict:Show(true)

self.pict:InitTexture("ui\\ui_icon_equipment")

self.pict:SetOriginalRect(sizes.x,sizes.y,sizes.width,sizes.height)

self.pict:Init(px,py,pw,ph)

self.pict:SetStretchTexture(true)

 

self.section_name:SetText(sect)

end

 

function NewUI:give_icon_params(section)

local t = {}

t.width = self:read_if_exist("u32", section, "inv_grid_width", 1)*50

t.height = self:read_if_exist("u32", section, "inv_grid_height", 1)*50

t.x = self:read_if_exist("u32", section, "inv_grid_x", 8)*50

t.y = self:read_if_exist("u32", section, "inv_grid_y", 13)*50

return t

end

 

function NewUI:btn_mob_button_clicked()

self.List:RemoveAll()

spawn_type="alive"

for i = 1, #mob_table do

self:AddItemToList(mob_table)

end

end

function NewUI:btn_weapons_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #wpn_table do

self:AddItemToList(wpn_table)

end

end

function NewUI:btn_ammo_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #ammo_table do

self:AddItemToList(ammo_table)

end

end

function NewUI:btn_outfits_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #outf_table do

self:AddItemToList(outf_table)

end

end

function NewUI:btn_stalkers_button_clicked()

self.List:RemoveAll()

spawn_type="alive"

for i = 1, #stalkers_table do

self:AddItemToList(stalkers_table)

end

end

function NewUI:btn_artefacts_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #artefacts_table do

self:AddItemToList(artefacts_table)

end

end

function NewUI:btn_items_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #items_table do

self:AddItemToList(items_table)

end

end

function NewUI:btn_addons_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #addons_table do

self:AddItemToList(addons_table)

end

end

function NewUI:btn_quest_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #quest_table do

self:AddItemToList(quest_table)

end

end

function NewUI:btn_unique_button_clicked()

self.List:RemoveAll()

spawn_type="actor"

for i = 1, #unique_table do

self:AddItemToList(unique_table)

end

end

 

function NewUI:btn_spawn()

if self.List:GetSize()==0 then

return

end

local index = self.List:GetSelectedItem()

if index == -1 then

return

end

local itm = self.List:GetItem(index)

if itm == nil then return end

local sect = itm.sct:GetText()

self:spawn_item(sect)

end

 

function NewUI:btn_spawn_dist()

if self.List:GetSize()==0 then

return

end

local index = self.List:GetSelectedItem()

if index == -1 then

return

end

local itm = self.List:GetItem(index)

if itm == nil then return end

local sect = itm.sct:GetText()

local distance = self:edit_GetText()

self:spawn_item_dist(sect, distance)

end

 

function NewUI:edit_GetText() --/получить введенную дистанцию из edit

return self.edit:GetText()

end

 

function NewUI:AddItemToList(sect) --/Добавление элемента в список List

if spawn_type == "alive" then

local item_name = game.translate_string(self:read_if_exist("str", sect, "id", sect))

if string.len(item_name)>50 then item_name = string.sub(item_name,1,50).."..." end

local _itm = ListItem()

_itm.text_item:SetText(item_name)

_itm.sct:SetText(sect)

self.List:AddItem(_itm)

else

if self:check_item(sect) == false then return end

local item_name = game.translate_string(self:read_if_exist("str", sect, "inv_name", sect))

if string.len(item_name)>50 then item_name = string.sub(item_name,1,50).."..." end

local _itm = ListItem()

_itm.text_item:SetText(item_name)

_itm.sct:SetText(sect)

self.List:AddItem(_itm)

end

end

 

function check_game()

return alife()~=nil and db.actor and db.actor:alive()

end

 

function NewUI:read_if_exist(what, section, line, def, ini)

if not ini then ini = system_ini() end

if section and ini:section_exist(section) and ini:line_exist(section,line) then

if what == "flt" then

return ini:r_float(section,line)

elseif what == "u32" then

return ini:r_u32(section,line)

elseif what == "str" then

return ini:r_string(section,line)

elseif what == "bln" then

return ini:r_bool(section,line)

end

end

return def

end

 

function NewUI:check_item(section)

if system_ini():section_exist(section) then

if self:read_if_exist("bln", section, "can_take", true)==true

and self:read_if_exist("str", section, "class", nil)~=nil

and self:read_if_exist("str", section, "description", nil)~=nil

and self:read_if_exist("str", section, "inv_name", nil)~=nil

and self:read_if_exist("str", section, "visual", nil)~=nil then return true

else self:tolog("ERROR! Incorrect section for spawn [%s]",section) return false end

else

self:tolog("ERROR! Section not found: [%s]",section)

return false

end

end

 

function NewUI:spawn_item(section)

if not section then return end

if spawn_type == "alive" then return end

if check_game() then

alife():create(section, vector(),0,0,0)

local snd = sound_object([[detectors\contact_1]])

snd:play(db.actor, 0, sound_object.s2d)

end

end

 

function NewUI:spawn_item_dist(section, dist)

if not section then return end

if check_game() then

local pos = db.actor:position()

local dir = db.actor:direction()

pos = pos:add(dir:mul(dist))

alife():create(section, pos, 1, db.actor:game_vertex_id())

local snd = sound_object([[detectors\contact_1]])

snd:play(db.actor, 0, sound_object.s2d)

end

end

 

function NewUI:Hide()

self:GetHolder():start_stop_menu(self.owner, true)

self:GetHolder():start_stop_menu(self, true)

self.owner:Show(true)

end

 

function NewUI:tolog(fmt,...)

if alife()~=nil then

local con = get_console()

local msg = string.format(fmt,...)

con:execute("load ~cheat~ "..msg)

end

end

 

 

 

 

Добрый день. Есть у меня файл item.ltx. В нем есть секция: [New_eat]:bread. В секции есть значение item_create = перечисление, любых_секций, например, bread.

Так же есть скрипт. И в нем пустая таблица. Допустим local item_tbl = {}

 

Как мне заполнять эту таблицу значениями из item_create?

Изменено пользователем Kober(BRUC)
upgrades_string = ini:r_string(destr_item:section(), "upgrades")
tab_u = string.split(upgrades_string, 1, ",")

tab_u - нужная таблица.

В _g.script добавить:

--[[
 Функция разделения строки.
 Авторы: Gun12, Garry_Galler, Artos
--]]
string.split = function(str, mode, div, pattern)
    local tbl = {}
 if div then
  pattern = '%s*([^'..div..']+)%s*'
 elseif not pattern then
  pattern = '[%w%_]+'
 end
    if mode == nil then 
        for str_parse in str:gmatch(pattern) do
            table.insert(tbl, str_parse)
        end
    elseif mode == true then 
        for str_parse in str:gmatch(pattern) do
            tbl[str_parse] = true
        end
    elseif type(mode) == "number" then 
        for str_parse in str:gmatch(pattern) do
   tbl[#tbl+1] = tonumber(str_parse) or str_parse
        end
    end
 return tbl
end

Наткнулся на интересную штучку в секции [spawner]

 

 

[spawner]

cond = never

(Была у БТР в Припяти, хотя я там вообще БТР в оригинале не припомню...

 

В xr_spawner.script такого условия "never" нет...

Выходит её теоретическое значение : когда спавнить - НИКОГДА!!11 ? :D

А зачем она тогда?)

Не соответствует правилам.

 

 

хотя я там вообще БТР в оригинале не припомню...

Может потому и нет его в оригинале, что "never" ?

Может потому и нет его в оригинале, что "never" ?

 

А описание скриптовое этого never где? А?

 

P.S Условие спавна - "никогда" сводит на нет весь сокральный смысл секции спавна БТР, ведь описание всех его параметров просто не нужно в итоге, ведь "never-never" не будет использовано....

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

Не соответствует правилам.

 

 

И при чем здесь xr_spawner ?

 

Цитирую(http://stalkerin.gameru.net):

Общая секция спавнер

та секция, которая присутствует как у NPC, так и у монстров....

 

В самом конце:

Файл: gamedata\scripts\xr_spawner.script

Не соответствует правилам.

@CRAZY_STALKER666, от него требуется только секцию взять. Я его в две строки переписал, тут по моему даже выкладывал. Секция 'never' ничего не значит, если ее не будет, он на нее просто не перейдет, вот и все, функция вернет nil и проверка не пройдет. Проверь если есть желание.

  • Спасибо 1

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

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

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

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

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

Войти

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

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

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