Перейти к контенту

Скриптование


Svoboда

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

Привет, извиняюсь за глупый вопрос, но как определить динамически позицию, левел и гэйм вертексы заспавненного объекта?
А теперь поясню:
В инвентаре есть item мы "съедаем" его и он спавниться на позиции ГГ, иак вот как можно с течением времени заспавнить на эти координаты другие объекты? Знаю что можно сделать так:
 

local pos = db.actor:position()
local vid = db.actor:level_vertex_id()  
local gvid = db.actor:game_vertex_id()
local obj=alife():create(spawn_item, pos, vid, gvid)
obj:position()

 

...но с obj:level_vertex_id() и obj:game_vertex_id() не срабатывает, и вообще нужно обратиться к координатам заспавненного объекта в другой функции запускающейся таймером. Весь код готов, в этом ничего сложного нет, а вот к динамическим  координатам обратиться мозгов не хватает.
Заранее спасибо!

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте всем, возникла проблемка с худом образовалась, пытаюсь прибиндить в инвентарь показатели объема вещей, но вот не задача, метод который я использую работает в SoC но ругается в CoP, говорит что не знает что такое level.main_input_receiver()

local btn=nil
local uWnd
function Init()
       uWnd = level.main_input_receiver()
if btn or not uWnd then return end
        
		local iPosX, iPosY=432, 285
		btn = CUIStatic()
		btn:Init(iPosX, iPosY, 150, 40)
		btn:InitTexture("ui\\ui_button_02")
		btn:SetAutoDelete(false)
	    uWnd:AttachChild(btn)
		btn:SetText("Vol 0.0 / 0.0")
		btn:SetTextAlign(0)
		btn:SetTextX(5)
		btn:SetTextY(10)
	    btn:SetFont(GetFontGraffiti22Russian())
	    btn:SetTextColor(255,231,153,22)
		ShowVolume()
 
end 
 
 
function ShowVolume()
local vol_M = 30 --Для теста я написал значения от балды, просто чтобы проверить вывод формата чисел
local vol_c = 31 --Впоследствии создам класс для подсчета объема всех предметов
    if btn then
	
	local a,r,g, b = 255,231,153,22

	local txt 
	if  (vol_c >=vol_M ) then
		a,r,g, b = 255, 255, 0, 0
    end
	txt = string.format("Vol %.2f / %.1f", vol_c, vol_M)
    btn:SetTextColor(a,r,g,
	btn:SetText(txt)
   end
end

function HideVolume()
    if btn and uWnd then
        uWnd:DetachChild(btn)
		btn = nil
		uWnd = nil
	end
end
 

 

 

Может существует альтернатива? Заранее очень бладгодарен!

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

Поделиться этим сообщением


Ссылка на сообщение

@MalandrinusЭто если использовать метод AddDialogToRender и RemoveDialogToRender?

 

@Viнt@rь, Я уже разобрался, когда забрел в тему Справочника по функциям и классам, но когда я путешествовал по луа_хелп, я как раз таки нашел все эти методы. Извините может я что то путаю, но вот:

Это из моего S.T.A.L.K.E.R. CoP:  

C++ class CUIStatic : CUIWindow {
    CUIStatic ();    
    function SetWindowName(string);
    function GetWndPos(CUIWindow*);
    function TextControl();
    function SetAutoDelete(boolean);
    function GetTextureRect();
    function AttachChild(CUIWindow*);
    function SetStretchTexture(boolean);
    function SetWndPos(vector2);
    function SetTextureRect(Frect*);
    function SetWndSize(vector2);
    function DetachChild(CUIWindow*);
    function SetPPMode();
    function WindowName();
    function IsShown();
    function SetWndRect(Frect);
    function Show(boolean);
    function GetHeight() const;
    function GetWidth() const;
    function InitTexture(string);
    function IsEnabled();
    function ResetPPMode();
    function Enable(boolean);
    function IsAutoDelete();
}; 

 

 

Ну и где ты здесь нашёл метод main_input_receiver?

ColR_iT

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

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение

@Viнt@rь, Ну он и не утверждает обратного, просто я сам уже дня три мучаюсь с CoP'ом, и просто не доходило о вырезанности метода, потом когда залез на форум понял что это не сработает, затем стал пытаться пробовать и мучиться с   AddDialogRender и Add(Get)CustomStatic, и так же ничего не выходило( Затем совсем отчаявшись уже написал сюда, и вот дали совсем простой и в тоже время действенный способ. 
Charsi, премного благодарен)

Поделиться этим сообщением


Ссылка на сообщение

@dukekan,Скорее всего логическая, так как на синтаксис, движок в лог выпечатывает имя "убитого" скрипта, или функции что довольно редко  

Поделиться этим сообщением


Ссылка на сообщение

@Viнt@rь,В виду того что GSC очень сильно урезали класс CUIStatic, видимо был введен новый класс, CUILines,который расширяет возможности CUIStatic.
Вот как выглядит CUILines:

C++ class CUILines {

function GetText();

function SetTextST(string);

function SetTextColor(number);

function SetText(string);

function SetFont(CGameFont*);

function SetElipsis(boolean);
 

};


Как я понимаю function SetTextColor должен быть записан в виде  wnd:SetTextColor[a,r,g,b] (на самом деле в круглых, но движок сайта думает что это смайлы) и должен служить альтернативой "статиковскому" SetTextColor'у

 

Я сам правда не пробовал еще, (мне бы в мой рюкзак тоже понадобилось изменять цвет при приближении текущего объема к максимальному, переходить  зеленый->желтый->красный), если попробуешь напиши в ЛС о результатах, буду благодарен) 


@Viнt@rь,черт, кажется я понял)) ты только о текстурах) 

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

Поделиться этим сообщением


Ссылка на сообщение

@Dennis_Chikin,попробуй делать проверки на жизнь/не жизнь монстров, думаю только это нужно делать глобальными апдейтами(правда думается мне, что это "секс двух друзей" в чистом виде). Хотя на самом деле не вижу проблемы, в том, что они "мертвяком" схемы переключают. Что именно тебя беспокоит?

Поделиться этим сообщением


Ссылка на сообщение

Сразу извинюсь, за немного глупый вопрос. Проблема в том, что бы забить все id объектов инвентаря в таблицу и на всякий пожарный еще и их состояние, создал две идентичные таблички и на одной и той же итерации, добавляю по объекту и его состоянию параллельно в обе таблички соответственно, но когда пытаюсь проверить и вывести, состояние у всех объектов равно 1, не смотря на то, что там есть изодранный в хламину сталкерский костюм, еле живой шлем и побитый автомат...

--Вот функция загрузки таблиц
local tItems={}
local tCond={}
function Actor_Has_ListItems()
local cnt = db.actor:object_count()
for i=0, cnt-1 do
local item = db.actor:object(i)
local sobj = alife():object(item:id())
if sobj then
table.insert(tItems,item)
table.insert(tCond,item:condition())
end
end
end
--Этой я проверяю состояние
function test_t(n)
text="His condition -"..tCond[n]
news_manager.send_tip(db.actor,text , nil, nil, 30000)
end 

 

 

n-параметр, который вводится с помощью горячих клавиш, На numpad'e(1-9).То есть, могу вывести состояние 9 различных объектов их таблицы(теоретически). где я допустил ошибку? Заранее спасибо)

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

Поделиться этим сообщением


Ссылка на сообщение

,нет, все так как и сказал. У всех предметов, кондишн по единице.

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

Поделиться этим сообщением


Ссылка на сообщение

@kmsk,Состояние очень легко 

wpnObject:condition() -- это сохраняешь в переменную скажем cond
wpnObject:set_condition(cond)-- это когда будешь спавнить свой ствол, просто дописываешь после спавна


@kmsk,небольшой апдейт.
проверить наличие аддонов можно так(не знаю прокатит ли, но в ЛУА_хелпе иного нет совсем )
 

weapon_scope_status()
weapon_grenadelauncher_status()
weapon_silincer_status()
--Данная группа функций должна возвращать наличие или отсутствие аддонов на стволе.
weapon_is_silencer()
weapon_is_scope()
weapon_is_grenadelauncher()
-эта группа должна выводить тип, если есть. Могу ошибаться, лучше проверить.  

Поделиться этим сообщением


Ссылка на сообщение

@kmsk, да, прости. Я думал ты уже разобрался с мутками клиентских объектов и работу с ними.
@*Shoker*,Слушай, а не подскажешь как можно функционально прикрутить/снять к/у стволу/а аддоны? а то вот как раз не смог найти такой функции. Вывод, либо ее нет, либо не там искал, конечно же...

Поделиться этим сообщением


Ссылка на сообщение
Доброго времени суток всем форумчанам! Не так давно столкнулся с довольно специфичной проблемой, попробовал свои силы в примитивах  ИК на x-ray (инверсной кинематики) и встал перед стеной вопроса. Возможно ли, получить "динамически" id НПС? Поясню, мы наводим прицел на НПС и нам игра(думаю все таки движок ибо в скриптах такого рода функций не встречал) имя НПС, его группировку и отношение к ГГ. Мне это нужно для следующего: есть id нпс, по которому мы вычисляем дистанцию до цели. После чего если, наша дистанция удовлетворяет условию мы проводим с НПС некие действия, скажем запускаем кат сцену с воровством, просто здороваемся и много чего еще чего душе угодно.
Дабы не быть голословным и не нарушать правила темы, прилагаю ниже свою версию скрипта который должен выступить в роли решения моей проблемы
 
function test_ik()
local dist = se_obj:position():distance_to(db.actor:position()) 
for a = 1,65534 do  
        local se_obj = alife():object(a)
        if se_obj and isStalker(se_obj) then
        if dist <= 3 then 
        news_manager.send_tip(db.actor,"Hi GG!")
            end  
        end
    end
end

Но в моем примере уже куча проблем, ибо таких сталкеров может быть 2, 3 и тп. Да и думаю это лишком будет нагружать "калькуляторы". У кого нибудь есть идеи по решению данного вопроса? 
Заранее благодарен!

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

Поделиться этим сообщением


Ссылка на сообщение

@Desertir,скорее всего форум. у меня вроде ровный был. Но я же говорю, что этот скрипт тоже рабочий, но есть одно но, в радиусе может быть n колличество сталкеров, а мне нужен один, желательно тот на которого указан курсор(прицел), в этом и беда. 

Поделиться этим сообщением


Ссылка на сообщение

@*Shoker*,мда, мой косяк. ЗП. Спасибо за прямой ответ, буду рыскать ибо это направление одно из самых малоизученных, но наверное одно из перспективнейших, если конечно в стакере вообще можно говорить о перспективах ;)

 

Устное предупреждение.

Правила форума, п. 2.1.1, также п.5 шапки темы.

Благодарности, пожалуйста, в личку.

Оффтопика, пожалуйста, не надо.

Murarius

Поделиться этим сообщением


Ссылка на сообщение

@k01jan,ну я не помню стопроцентного метода, но возможно, тебе поможет "оживление трупов". Попробуй ставить совсем малое количество жизней, пусть хоть сотую часть, и затем тут же удаляй. Метка по идее должна пропасть после "оживления". 

 

И чем именно должно помочь это оживление ? dc

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

Поделиться этим сообщением


Ссылка на сообщение

Привет, форумчане! Боюсь вопрос смешон до безумия, но я сам слеп и не вижу причин вылета(
Идея такова:

1)Перебираем все и вся в инвентаре
2)Записываем каждый элемент инвентаря в таблицу
3)Удаляем все
4)При необходимости спавним все элементы таблицы поочередно в инвентарь обратно

local t_temp = {}
function RI()
local cnt = db.actor:object_count()
for i = 1, cnt-1 do  
        local se_obj = alife():object(i)
        if se_obj then
		table.insert(t_temp,1,se_obj:section_name())
end
end
end

function SI()
for a = 1, #t_temp do  
alife():create(t_temp[a], db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
end
end

 

 

Версия игры 1.6.2 хотя я думаю это не важно.
Лог No such operator

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

Поделиться этим сообщением


Ссылка на сообщение

Ребят, здравствуйте всем. Вопрос для кого то покажется банальным, но к сожалению на форуме я подобного не нашел. Как работать с прогресс баром? Если можно то пример, если нельзя, то хотя бы в двух словах, можно ли передавать туда значения на апдейте, что бы шкала росла? И вообще есть ли функции подобного рода? 
Просто если его не существует, придется писать вручную систему проверки значений и "дорисовки палочек" (замены статиков на худе) на апдейте, что весьма муторно, особенно если учесть что прогресс бары нужны в многих местах... Заранее спасибо.

Поделиться этим сообщением


Ссылка на сообщение

, а можно несколько глупый вопрос?  У метода SetProgressPos есть ли максимальные значения? ну скажем как можно адекватно указать "шкале", что она должен расти скажем от нуля до 1000?

Поделиться этим сообщением


Ссылка на сообщение

Всем привет. Недавно столкнулся с проблемой, которую пока решить не могу(мозгов видимо нету). Может подскажите чего. 
       Есть функция, которая работает со строкой(Она считывает значение соответствующего edit_box и записывает в переменную textstring). Далее запускается функция которая сверяет строку(значение textstring) с значениями элементов таблицы(в таблице написаны названия имеющихся в файле функций). Тут думаю всем понятно, что если имеется совпадение, то на этой итерации вызывается функция с именем которое есть в таблице. (На этом этапе все работает отлично). Вопрос состоит в том, что бы перенести эти функции(для экономии места в файле) в другой, тем самым создав, что то вроде "библиотеки". И вот здесь уже проблема. Ибо я додумался лишь до конструкции типа:

 

 

 

local fun_table = {
"QWERTY",
"GETWEAPON",
"GETMEDKIT"
}


function start_fun(textstring)
local flag = 0
for i=1,#fun_table do
if textstring == fun_table[i] then
flag = 1
end
end
if flag == 1 then 
this[textstring]()
flag = 0
end
end

 

 

 

Красным выделена сама конструкция вызова соответствующей функции. 
Как  ее  можно было модернизировать, что бы я мог вызывать таким "компактным" способом функции из другого файла?

Заранее благодарю.

P.S. Код детский, написан для примера.


Извиняюсь, в пред просмотре было выделено) 

  1. this[textstring]() --вот этот оператор меня интересует. 
Изменено пользователем mumie

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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