Jump to content
Sign in to follow this  
e1mer

[FYI] Время использования предмета

Recommended Posts

Для чего это нужно? 
Собсна для совершенно разных целей, можно например реализовать подобную функцию:

9f1f0326d8e3.png

 

Разберем по порядку, что нам нужно?

  1. Записать время в глобальную переменную когда было использован предмет, я использую os.time()
  2. При использовании, добавить к записанному времени необходимое время на которое нужно заблокировать предмет, время вычислять необходимо в секундах
  3. Прибавляем к записанному времени (п.1) наше необходимое время (п.2) по формуле: текущее время + необходимое
  4. Парсим наши полученные данные функцией os.date()
  5. Выводим результат в систему

 

Это из разряда "как сделать предмет на время", принцип схож.

Все просто, готовых примеров давать не буду, вроде и так все доступно описал, если есть вопросы, спрашивайте.

Share this post


Link to post
Share on other sites

Привет @e1mer!

 

Все-таки хочется увидеть реализацию


Share this post


Link to post
Share on other sites
1 минуту назад, V3ct0r сказал:

Привет @e1mer!

 

Все-таки хочется увидеть реализацию

Давай посмотрим, реализует ли кто?

А потом и я готов выложить готовый пример реализации, если интересно, могу в скайпе описать и показать.

Share this post


Link to post
Share on other sites

Парсим наши полученные данные функцией os.date()

 

Вот получаю я 

local cooldown = DropEXP[name].UsedTime - os.time()

if cooldown > 0 then

SystemNotice(role,"Небесная ягода уже активна, повторно активировать можно через "..cooldown.." сек.!")

 

Каким образом отобразить os.time в минутах и секундах через os.date. В секундах всё нормально, а как конвертировать время непонятно

Share this post


Link to post
Share on other sites

Неверно, после релога персонажа эффект от усилителя спадает, и таймер обнуляется, я протестировал.

 

Время записанное с помощью os.time () в секундах, получится что-то типо 906000490.

Парсим данные с помощью функции os.date(), например: os.date("%M:%S", 906000490).

Share this post


Link to post
Share on other sites

@e1mer спасибо, возьму на заметку, но мы не ищем легких путей

local cooldown = DropEXP[name].UsedTime - os.time()
local cooldown2 = math.floor(cooldown/60)                 
local cooldown1 = (cooldown - math.floor(cooldown/60)*60)    

Share this post


Link to post
Share on other sites
function ItemUse_MoreExpGz( role , Item )
	local statelv = 1
	local ChaStateLv = GetChaStateLv ( role , STATE_SBJYGZ )
	 local name = GetChaDefaultName(role)
	if DropEXP[name] == nil then
        DropEXP[name] = { UsedTime = os.time() }
    end
	if ChaStateLv > statelv then --если уровень этого фрукта меньше уже работающего
		SystemNotice ( role , "Более мощный усилитель опыта еще не окончился " )
		UseItemFailed ( role )
		return
	end
local cooldown = DropEXP[name].UsedTime - os.time()
	if ChaStateLv == statelv then
		 if cooldown > 0 then
local cooldown2 = math.floor(cooldown/60)		 		
local cooldown1 = (cooldown - math.floor(cooldown/60)*60)		 
        SystemNotice(role,"Небесная ягода уже активна, повторно активировать можно через "..cooldown2.." минут "..cooldown1.." сек.!")
		UseItemFailed ( role )
		return
	end
end
	local statetime = 900
	local Cha_Boat = 0
	Cha_Boat = GetCtrlBoat ( role )
	if Cha_Boat ==  nil then
		AddState( role , role , STATE_SBJYGZ , statelv , statetime )
	else
		AddState( Cha_Boat , Cha_Boat , STATE_SBJYGZ , statelv , statetime )
	end
	DropEXP[name].UsedTime = os.time()+900
	SystemNotice ( role ,"Небесная ягода активирована " )
end

 

Share this post


Link to post
Share on other sites

А нет, я допустил ошибку, возможен баг с тем что переменная действительно не обнуляется, и может забагаться фрукт у других игроков, но это тоже можно пофиксить.

Share this post


Link to post
Share on other sites

Да это же элементарно , могу написать функцию полноценную, если кого либо интересует , с релогом перса и остановкой счетчика и тд )

Edited by BotPRO

Share this post


Link to post
Share on other sites
8 минут назад, BotPRO сказал:

Да это же элементарно , могу написать функцию полноценную, если кого либо интересует , с релогом перса и остановкой счетчика и тд )

сверху есть функция уже, вроде как без багов)
Покажи свою.
Как бы в этом и была задумка, аля напиши сам.


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
В 01.12.2016 в 02:28, BotPRO сказал:

Да это же элементарно , могу написать функцию полноценную, если кого либо интересует , с релогом перса и остановкой счетчика и тд )

На словах я лев толстой, или как там дальше, не помню.

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

 

Суть подобных топиков в том, чтобы научить население, чтобы они пытались что-то написать своими руками, а не тупо копипастить с форумов.

 

В 01.12.2016 в 02:37, NMS3RR сказал:

Как бы в этом и была задумка, аля напиши сам.

 

Share this post


Link to post
Share on other sites
В 01.12.2016 в 00:05, e1mer сказал:

А нет, я допустил ошибку, возможен баг с тем что переменная действительно не обнуляется, и может забагаться фрукт у других игроков, но это тоже можно пофиксить.

тот код, что сверху полностью рабочий, багов мы не заметили.
метод вывода конечно отличается от того который используешь ты, но мы старались)

у тебя под каждый предмет своя константа или ты каким то образом юзаешь одну?
 


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
11 hours ago, e1mer said:

На словах я лев толстой, или как там дальше, не помню.

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

 

Суть подобных топиков в том, чтобы научить население, чтобы они пытались что-то написать своими руками, а не тупо копипастить с форумов.

 

 

 

К чему ты это написал ? Твоя самооценка мне понятна, твоего варианта реализации я к сожалению не увидел!

А теперь держи мой, и впредь веди себя по проще, а то залетел тут с наездом, "разработчик от бога" блин.

 

 

cha_timer в самое начало.

CoolDown(role)

function в самый конец.

function CoolDown(role)

local servertime = os.time()
local cha_name = GetChaDefaultName(role)

if COOL_DOWNS[cha_name] < servertime then                             
COOL_DOWNS[cha_name] = 0
                                    
	end
end

varieble в самое начало.

COOL_DOWNS = {}

ItemEffect в самый конец.

--Свиток Баффа

function ItemUse_Buff(role) 
 
	local server_time = os.time() + 100 -- Время в секундах	
	local cha_name = GetChaDefaultName(role)

	if COOL_DOWNS[cha_name] == nil then
	COOL_DOWNS[cha_name] = 0
	return
	end
	
	if (COOL_DOWNS[cha_name] >= 1) then
	finish = COOL_DOWNS[cha_name] - os.time()	
	UseItemFailed ( role )  
	datetime = os.date("!*t", finish )
	SystemNotice(role, "Что бы использовать предмет, нужно подожать: осталось подождать ".. tostring(datetime.min) .. " минут(а, ы), ".. tostring(datetime.sec) .. " секунд(ы, у). ")	

	elseif (COOL_DOWNS[cha_name] == 0) then

       AddState (role, role, STATE_XLZH, 10, 1800) 
       AddState (role, role, STATE_SHPF, 10, 1800) 
       AddState (role, role, STATE_MLCH, 10, 1800) 
       AddState (role, role, STATE_FZLZ, 10, 1800)       
       AddState (role, role, STATE_TSHD, 10, 1800)  

    SystemNotice (role, "Вам предоставлены все бафы 10 уровня на 30 минут , приятного фарма! ") 
	COOL_DOWNS[cha_name] = server_time
	
		end

end

Вот и всё,  и не нужно тут никого унижать, ты тут не основной тип, просто не каждому это барахло надо, что бы время на него тратить, Лев Толстой ...

Edited by BotPRO
  • Thanks 1

Share this post


Link to post
Share on other sites

@e1mer и @BotPRO давайте без взаимных оскорблений и измерения длинны кода у каждого из вас.

Спасибо заранее за благоразумие.

 


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
38 minutes ago, NMS3RR said:

@e1mer и @BotPRO давайте без взаимных оскорблений и измерения длинны кода у каждого из вас.

Спасибо заранее за благоразумие.

 

 

Причём тут длинна кода, это работает ? - Работает, при желании можно сократить, тратить на это время - мне не интересно, и не я заявил всякую чушь изначально, мои намерения миролюбивые, просто кому то стоит себя по проще вести.

Share this post


Link to post
Share on other sites
Только что, BotPRO сказал:

 

Причём тут длинна кода, это работает ? - Работает, при желании можно сократить, тратить на это время - мне не интересно, и не я заявил всякую чушь изначально, мои намерения миролюбивые, просто кому то стоит себя по проще вести.

Длинна кода - это замена другому слову.
Вы как в детском саду.

По факту все правильно написали, если хочешь - предложи свою разработку или задай вопросы чтоб тебе помогли(для новичков)
Бездумное копирование готовых скриптов это дело не очень хорошее., не помогает начинающему разработчику.
А вот твое заявление "Да это же элементарно , могу написать функцию полноценную, если кого либо интересует , с релогом перса и остановкой счетчика и тд )"  - слегка не в тему, так что понятное дело почему началась агрессия.
Тут люди делятся своими алгоритмами, а не выставляют на показ что это ИЗИ.
 

PS тот вариант что у нас работает без багов, так что можно не делать проверку в cha_timer


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
Just now, NMS3RR said:

Длинна кода - это замена другому слову.
Вы как в детском саду.

По факту все правильно написали, если хочешь - предложи свою разработку или задай вопросы чтоб тебе помогли(для новичков)
Бездумное копирование готовых скриптов это дело не очень хорошее., не помогает начинающему разработчику.
А вот твое заявление "Да это же элементарно , могу написать функцию полноценную, если кого либо интересует , с релогом перса и остановкой счетчика и тд )"  - слегка не в тему, так что понятное дело почему началась агрессия.
Тут люди делятся своими алгоритмами, а не выставляют на показ что это ИЗИ.
 

PS тот вариант что у нас работает без багов, так что можно не делать проверку в cha_timer

cha_timer - обнуляет код,  без этого будут проблемы, я просто сказал, что если людям интересно, я могу сделать, а агрессия тут была лишней.

Share this post


Link to post
Share on other sites

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

 

остальной диалог продолжим позже, я в другом городе сейчас, и с телефона.

Share this post


Link to post
Share on other sites
Just now, e1mer said:

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

 

остальной диалог продолжим позже, я в другом городе сейчас, и с телефона.

Каких выскочек ? я тебе предоставил реализацию, ни откуда я не вытаскивал эту функцию, а именно написал её ! Или ты мне обратное хочешь доказать ? В отличии от тебя я реализацию выложил, а ведешь себя агрессивно настроено именно ты. Не нужно себя ставить выше других, тут все равны. Или ты лично видел, как я выдёргивал ? Мне не нужно ничего выдёргивать я сам в состоянии это всё реализовать, заметил он .

Продолжим ? А что продолжать ? Хочешь свою обиду на меня вылить ? Мне это не интересно, будь проще и мир к тебе потянется.

Edited by BotPRO

Share this post


Link to post
Share on other sites

307c1512667b.png

 

Судя по этому куску понятно что писал ты это не для сие топика как утверждаешь ты.

 

забей, закрой вкладку с этой темой, не обращай внимания на меня.

Share this post


Link to post
Share on other sites

Картинка битая, судя по чему ? Писал всё именно для этого топика, на моём сервере нету и близко таких функций ибо не вижу надобности в этом.

Share this post


Link to post
Share on other sites

local zaderjka = GetChaStateLv ( role , 5 )

local statelv = 1

local statetime = 5
if zaderjka == 0 then
AddState ( role, role, 5, statelv, statetime )

 

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

Думаю нет, это лишь моё мнение.

Edited by BotPRO

Share this post


Link to post
Share on other sites
2 часа назад, BotPRO сказал:

Картинка битая, судя по чему ? Писал всё именно для этого топика, на моём сервере нету и близко таких функций ибо не вижу надобности в этом.

См. Скрин выше

 

2 часа назад, BotPRO сказал:

local zaderjka = GetChaStateLv ( role , 5 )

local statelv = 1

local statetime = 5
if zaderjka == 0 then
AddState ( role, role, 5, statelv, statetime )

 

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

Думаю нет, это лишь моё мнение.

Нужно, это удобно игрокам, бывают такие ситуации когда необходимо знать точное время.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...