Jump to content
Sign in to follow this  
e1mer

Награждение персонажей за проведенное время в игре

Recommended Posts

Выдернул с зеста, может у кого-то есть в этом необходимость.

Суть: Каждые N минут, персонажу которое провел в игре N-ое количество времени, начисляем бонусы.

 

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

В принципе все строки прокомментированы, по этому вопросов должно быть по минимуму.

 

Функция cha_timer(), файл functions.lua.

 

-- Награждение персонажей за проведенное время в игре (на определенном уровне разные призы)
-- функция cha_timer (resource/script/calculate/functions.lua)

	--Награда за проведенное время в игре, если персонаж на карте GetChaMapName(role)
	if GetChaMapName ( role ) == "XXXX" then
		--Функция новичка, выдаем приз каждые newbie_now_tick минут
		local newbie_now_tick = 30
		--Конвертируем "Минуты" в с "Секунды"
		local newbie_now_min = newbie_now_tick * 60
		if math.mod(now_tick, newbie_now_min) == 0 then
			--Если игрок ниже 25 уровня или 25 уровень, то выдаем призы
			if Lv( role ) <= 25 then
				local newbie_radom_prize = math.random ( 1, 8 )
				if newbie_radom_prize == 1 then	
					if GetChaFreeBagGridNum ( role ) >= 4 then
						GiveItemX ( role , 0 , 3844 , math.random( 1, 2 ) , 4 )		--Небесная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 3845 , math.random( 1, 2 ) , 4 )		--Зачарованная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 0227 , math.random( 5, 10 ) , 4 )	--Питание феи (от 5 до 10 шт.)
						GiveItemX ( role , 0 , 0578 , math.random( 1, 4 ) , 4 )		--Фрукт роста (от 1 до 4 шт.)
						AddMoney  ( role , 0 , math.random( 15000, 30000 ))			--Призовое золото
						PlayEffect (role, 275 )
					else
						BickerNotice(role, "\199\224 \253\242\232 30 \236\232\237\243\242 \239\240\232\231\251 \237\229 \237\224\247\232\241\235\232\237\251. \206\241\226\238\225\238\228\232\242\229 4 \241\235\238\242\224 \226\238 \226\240\229\236\229\237\237\238\236 \236\229\248\234\229")
						--BickerNotice(role, "За эти 30 минут призы не начислины. Освободите 4 слота во временном мешке")
					end
				end
			end
		end
	end

 

Share this post


Link to post
Share on other sites
Guest
1 hour ago, josenieto said:

local newbie_now_tick = 30 тоесть это только newbie, а если убрать и оставить только now_tick = 30

то всем игрокам? 

Нет, newbie_now_tick - просто название переменной. 

Share this post


Link to post
Share on other sites

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

Edited by Zmurik

Share this post


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

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

Код покажите,
Скорей всего вы где то ошиблись или у вас что то не так с серверной машиной.


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

Share this post


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

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

Тут еще так сделано, что он выдает приз только персонажам ниже 26 уровня, которые находятся на определенной карте, и с вероятностью 12,5%. Так же игрок не должен покидать карту (телепортироваться), умирать и выходить из игры


Share this post


Link to post
Share on other sites
	--Награда за проведенное время в игре, если персонаж на карте GetChaMapName(role)
 	if GetChaMapName ( role ) == "garner" then
		--Функция новичка, выдаем приз каждые newbie_now_tick минут
		local newbie_now_tick = 5
		--Конвертируем "Минуты" в с "Секунды"
		local newbie_now_min = newbie_now_tick * 60
		if math.mod(now_tick, newbie_now_min) == 0 then
			--Если игрок ниже 55 уровня или 55 уровень, то выдаем призы
			if Lv( role ) <= 55 then
				local newbie_radom_prize = math.random ( 1, 8 )
				if newbie_radom_prize == 1 then	
					if GetChaFreeBagGridNum ( role ) >= 4 then
						GiveItemX ( role , 0 , 3844 , math.random( 1, 2 ) , 4 )		--Небесная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 3845 , math.random( 1, 2 ) , 4 )		--Зачарованная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 0227 , math.random( 2, 5 ) , 4 )		--Питание феи (от 5 до 10 шт.)
						GiveItemX ( role , 0 , 0578 , math.random( 1, 2 ) , 4 )		--Фрукт роста (от 1 до 4 шт.)
						AddMoney  ( role , 0 , math.random( 15000, 30000 ))			--Призовое золото
						PlayEffect (role, 275 )
					else
						BickerNotice(role, "\199\224 \253\242\232 30 \236\232\237\243\242 \239\240\232\231\251 \237\229 \237\224\247\232\241\235\232\237\251. \206\241\226\238\225\238\228\232\242\229 4 \241\235\238\242\224 \226\238 \226\240\229\236\229\237\237\238\236 \236\229\248\234\229")
						--BickerNotice(role, "За эти 30 минут призы не начислины. Освободите 4 слота во временном мешке")
					end
				end
			end
		end
	end	

 

Share this post


Link to post
Share on other sites
local newbie_radom_prize = math.random ( 1, 8 )
				if newbie_radom_prize == 1 then	


				end

убери вот эти строчки и проверь, код рабочий.
тут вероятность  0,125 на то что дальнейший скрипт сработает:

if GetChaFreeBagGridNum ( role ) >= 4 then
						GiveItemX ( role , 0 , 3844 , math.random( 1, 2 ) , 4 )		--Небесная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 3845 , math.random( 1, 2 ) , 4 )		--Зачарованная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 0227 , math.random( 2, 5 ) , 4 )		--Питание феи (от 5 до 10 шт.)
						GiveItemX ( role , 0 , 0578 , math.random( 1, 2 ) , 4 )		--Фрукт роста (от 1 до 4 шт.)
						AddMoney  ( role , 0 , math.random( 15000, 30000 ))			--Призовое золото
						PlayEffect (role, 275 )
					else
						BickerNotice(role, "\199\224 \253\242\232 30 \236\232\237\243\242 \239\240\232\231\251 \237\229 \237\224\247\232\241\235\232\237\251. \206\241\226\238\225\238\228\232\242\229 4 \241\235\238\242\224 \226\238 \226\240\229\236\229\237\237\238\236 \236\229\248\234\229")
						--BickerNotice(role, "За эти 30 минут призы не начислины. Освободите 4 слота во временном мешке")
					end

 

  • Like 1

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

Share this post


Link to post
Share on other sites

Скрипт стал работать, выдавать по времени, но не понятное рандомное кол-во предметов и если выйти с персонажа и опять зайти, он выдаст предметы еще раз и так можно до бесконечности.

Share this post


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

Скрипт стал работать, выдавать по времени, но не понятное рандомное кол-во предметов и если выйти с персонажа и опять зайти, он выдаст предметы еще раз и так можно до бесконечности.

 

Попробуй заменить строку

if math.mod(now_tick, newbie_now_min) == 0 then

 

На 

if math.mod(now_tick + 1, newbie_now_min) == 0 then

 

Дело в том, что в начальный момент времени (персонаж зашел в игру) now_tick равно 0 и условие срабатывает

  • Like 2

Share this post


Link to post
Share on other sites
	----------------------------------------------------------------------------------------------------
	-- Награждение персонажей за проведенное время в игре (на определенном уровне разные призы)		   -
	-- функция cha_timer (resource/script/calculate/functions.lua)									   -
	----------------------------------------------------------------------------------------------------
	
	--Награда за проведенное время в игре, если персонаж на карте GetChaMapName(role)
	if GetChaMapName ( role ) == "garner" then
		--Функция новичка, выдаем приз каждые newbie_now_tick минут
		local newbie_now_tick = 2
		--Конвертируем "Минуты" в с "Секунды"
		local newbie_now_min = newbie_now_tick * 60
		if math.mod(now_tick + 1, newbie_now_min) == 0 then
			--Если игрок ниже 41 уровня или 41 уровень, то выдаем призы
			if Lv( role ) <= 41 then
					if GetChaFreeBagGridNum ( role ) >= 4 then
						GiveItemX ( role , 0 , 3844 , math.random( 1, 2 ) , 4 )		--Небесная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 3845 , math.random( 1, 2 ) , 4 )		--Зачарованная ягода (от 1 до 2 шт.)
						GiveItemX ( role , 0 , 0227 , math.random( 5, 10 ) , 4 )	--Питание феи (от 5 до 10 шт.)
						GiveItemX ( role , 0 , 0578 , math.random( 1, 4 ) , 4 )		--Фрукт роста (от 1 до 4 шт.)
						AddMoney  ( role , 0 , math.random( 15000, 30000 ))			--Призовое золото
						PlayEffect (role, 275 )
					else
						BickerNotice(role, "\199\224 \253\242\232 30 \236\232\237\243\242 \239\240\232\231\251 \237\229 \237\224\247\232\241\235\232\237\251. \206\241\226\238\225\238\228\232\242\229 4 \241\235\238\242\224 \226\238 \226\240\229\236\229\237\237\238\236 \236\229\248\234\229")
						--BickerNotice(role, "За эти 30 минут призы не начислины. Освободите 4 слота во временном мешке")
					end
			end
		end
	end

Спасибо большое за помощь, вот что получилось, у меня все работает.

  • Like 1

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...