Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Resumo: Para quem já jogou league of legends, o sistema é "parecido" com o Invite Friends, e para quem não jogou irei dar uma breve descrição sobre o sistema.
 
Descrição: O sistema oferece algumas premiações como: Itens, Premium Days, Premium Points(para site) e Outfits. Claro que isso tudo é configurável.
A ideia principal do sistema foi que essas premiações fossem exclusivas do sistema, digamos, que os jogadores só fossem recompensados e tivessem certas outfits se ele atingisse num número "X" de pontos por ter ajudado seu servidor a crescer!
Como todo mundo almeja algo exclusivo e difícil de ser obtido, iria instigar os jogadores a usar o sistema e convidar seus amigos para o servidor!
 
Como Funciona o Sistema?
 
O sistema foi planejado para que jogadores "espertinhos" não burlassem o sistema e acontece da seguinte maneira:
 
Temos o jogador João e a jogadora Maria:
 
Maria necessita ser level 30 ou menor que 30(Configurável) para utilizar uma talkactions e dizer por quem foi invitada para o servidor, vamos supor que João a convidou Maria para jogar, João por sua vez necessita também ter um level avançado, digamos 50 ou superior(Configurável). Feito com sucesso o uso do sistema, ele funciona da seguinte maneira:
OBS: Você pode dizer o nome do jogador mesmo que ele esteja OFFLINE! :)
 
OBS2: Um ou mais Players podem ser invitador pelo MESMO JOGADOR! ENTÃO QUANTO MAIS PLAYER VOCÊ CHAMAR, MAIS FÁCIL DE RECEBER PONTOS E PREMIAÇÕES 
 
O jogador invitado, no caso o João, teria que atingir um número "X" de pontos para receber premiações, por exemplo:
 
* Com 10 Pontos jogão recebe: Itens
* Com 25 Pontos jogão recebe: Itens e Premium Points
* Com 50 Pontos jogão recebe: Itens
* Com 100 Pontos jogão recebe: Itens, Premium Points, Premium Days e Outifit
(Claro que isso é tudo configurável em uma Tabela)
 
E como recebo Recebo esses Pontos VODKART SEU FILHO DA PUTA!
 
Se lembra que João Convidou Maria para Jogar? Então... Maria tem que atingir certos leveis para que João receba esses pontos! Por exemplo a tabela do sistema:

 

levels_win = {
[50] = 5,
[80] = 6,
[100] = 8,
[150] = 10
}


 
 
Se Maria atingir level 50, João recebe 5 pontos
Se Maria atingir level 80, João recebe 6 pontos
Etc... Claro que isso tudo é acumulativo!
 
E sabe o que mais? João recebe Pontos mesmo se estiver ONLINE ou OFFLINE!
 
Sem mais delongas, Vamos instalar o sistema!

 

 

data\creaturescripts\scripts

 

InviteFriends.lua

function onLogin(cid)
	registerCreatureEvent(cid, "FriendsPoints")
	if getPlayerStorageValue(cid, _invite_friends.storages[1]) < 0 then
		setPlayerStorageValue(cid, _invite_friends.storages[1], 0)
		setPlayerStorageValue(cid, _invite_friends.storages[4], 0)
	end
	if getInvitePoints(cid) > 0 then
	getRewardsFriend(getCreatureName(cid), getPlayerGUID(cid))
	end
	return true
end
function onAdvance(cid, skill, oldLevel, newLevel)
	if (skill == SKILL__LEVEL) then
		if hasInviteFriend(cid) and getPlayerStorageValue(cid, _invite_friends.storages[3]) < newLevel and _invite_friends.levels_win[newLevel] then
			local f_name, points = getNameFriend(cid), _invite_friends.levels_win[newLevel]
			local f_pid = getPlayerGUIDByName(f_name)
			setPlayerStorageValue(cid, _invite_friends.storages[3], newLevel)
			addInvitePoints(f_name, points)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Invite Friends] você atingiu o level "..newLevel.." e o seu amigou "..f_name.." recebeu "..points.." Friend Points. Obrigado!")
			if isPlayer(getPlayerByNameWildcard(f_name)) then
				getRewardsFriend(f_name, f_pid)
			end
		end
	end
	return true
end

 

creaturescript.xml

	<event type="login" name="FriendsLogin" event="script" value="InviteFriends.lua"/>
	<event type="advance" name="FriendsPoints" event="script" value="InviteFriends.lua"/>

 

 

data\talkactions\scripts

 

InviteFriends.lua

function onSay(cid, words, param, channel)
	local param = param:lower()
	if param == "" or not param then
		doPlayerSendCancel(cid, "Você precisa digitar o nome de um jogador.") return true
	elseif param == "points" then
		doPlayerPopupFYI(cid,"[+] Invite Friend System [+]\n\nvocê tem ["..getInvitePoints(cid).."] Friends Points.") return true
	elseif hasInviteFriend(cid) then
		doPlayerSendCancel(cid, "Você já agradeceu o jogador ["..getNameFriend(cid).."] por te convidar a jogar neste servidor.") return true
	elseif not getPlayerGUIDByName(param) then
		doPlayerSendCancel(cid, "Desculpe, mas o jogador [" .. param .. "] não existe.") return true
	elseif getPlayerLevel(cid) > _invite_friends.level_max or db.getResult("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(param)):getDataInt("level") < _invite_friends.level_need then
		doPlayerSendCancel(cid, (getPlayerLevel(cid) > _invite_friends.level_max and "Desculpe, mas você precisa ter no minimo level ".._invite_friends.level_max.." para usar este comando." or "Desculpe, mas o jogador ["..param.."] precisa ter no minimo level ".._invite_friends.level_need.." para ser escolhido.")) return true
	elseif getPlayerIp(cid) == tonumber(db.getResult("SELECT `lastip` FROM `players` WHERE `id` = "..getPlayerGUIDByName(param)):getDataString("lastip")) then
		doPlayerSendCancel(cid, "Desculpe, mas você não pode se auto invitar por estar com o mesmo IP.") return true
	elseif getCreatureName(cid):lower() == param then
		doPlayerSendCancel(cid, "Desculpe, mas você não pode se auto invitar.") return true
	end
	doInviteFriend(cid, getPlayerGUIDByName(param))
	doPlayerSendTextMessage(cid, 25, "Você indicou o jogador "..param..", este sistema é uma forma de agradecer a vocês por trazerem seus amigos para jogar.")
	doSendMagicEffect(getCreaturePosition(cid), math.random(28,30))
	return true
end

 

talkactions.xml

<talkaction words="/invited;!invited" event="script" value="InviteFriends.lua"/>

 

 

 

data/lib

 

InviteFriends.lua

_invite_friends = {
	storages = {202301, 202302, 202303, 202304}, -- points, jogador, recompensa lvl, recompensa items
	level_max = 20, -- até que level ele precisa falar seu friend
	level_need = 30, -- que lever o jogador precisa ser para ganhar pontos
	levels_win = { -- leveis que receberão os pontos(feito pelo onAdvance)
		[50] = 5,
		[80] = 6,
		[100] = 8,
		[150] = 10
	},
	rewards = { -- a cada tantos pontos, que tipo de reward ele irá receber(automático onLogin)
		[10] = {items = {{2160,1},{2173,1}}, p_days = 1, p_points = 0 , out = {0,0}},
		[25] = {items = {{2160,2},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
		[50] = {items = {{2160,3},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
		[100] = {items = {{2160,4},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
		[200] = {items = {{2160,5},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
		[250] = {items = {{2160,6},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
		[500] = {items = {{2160,7},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}}
	}
}
function getInvitePoints(cid)
	return getPlayerStorageValue(cid, _invite_friends.storages[1]) < 0 and 0 or getPlayerStorageValue(cid, _invite_friends.storages[1])
end
function hasInviteFriend(cid)
	return getPlayerStorageValue(cid, _invite_friends.storages[2]) > 0 and true or false
end
function doInviteFriend(cid, GUID)
	return setPlayerStorageValue(cid, _invite_friends.storages[2], GUID)
end
function getNameFriend(cid)
	return getPlayerNameByGUID(getPlayerStorageValue(cid, _invite_friends.storages[2]))
end
function addInvitePoints(name, amount)
	local pid, Guid = getPlayerByNameWildcard(name), getPlayerGUIDByName(name)
	if not pid then
		local getFriendPoints = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1])
		if (getFriendPoints:getID() ~= -1) then
			db.executeQuery("UPDATE `player_storage` SET `value` = ".. (getFriendPoints:getDataInt("value")+amount) .." WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1])
		end
	else
		setPlayerStorageValue(getPlayerByName(name), _invite_friends.storages[1], getInvitePoints(getPlayerByName(name))+amount)
	end
	return true
end
function getRewardsFriend(name, pid)
	local acc = getAccountIdByName(name)
	if isPlayer(getPlayerByNameWildcard(name)) then
		local target = getPlayerByNameWildcard(name)
		local FriendPoints, CheckPoints = getInvitePoints(target), getPlayerStorageValue(target, _invite_friends.storages[4])
		for vod, ka in pairs(_invite_friends.rewards) do
			local str = ""
			if FriendPoints >= vod and CheckPoints < vod then
				str = str.."--> Invite Players System <--\n\nVocê acaba de receber algumas recompensas:\n\nItems: \n"..getItemsFromList(ka.items)..".\n\n"
				if ka.p_days > 0 then 
					doPlayerAddPremiumDays(target, ka.p_days) 
					str = str.."Premium Days:\n"..ka.p_days.." Premium Days." 
				end
				if ka.p_points > 0 then 
					db.executeQuery('UPDATE accounts SET premium_points=premium_points+' .. ka.p_points ..' WHERE id=' .. acc)
					str = str.."Premium Points:\n"..ka.p_points.." Premium Points."
				end
				if ka.out[1] > 0 then 
					doPlayerAddOutfit(target, getPlayerSex(target) == 0 and ka.out[1] or ka.out[2], 3)
					str = str.."[New Outfit]\nRecebeu uma Nova Outfit."
				end
				setPlayerStorageValue(target, _invite_friends.storages[4], FriendPoints)
				MandarItensProDp(name, ka.items, str)
				doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_ORANGE,"[Invite Players System] Você Recebeu algumas premiações por estar convidando jogadores para o servidor, Por favor conferir os itens no Depot.")
			end
		end
	end
	return true
end
function MandarItensProDp(name, items, texto)
	local parcel = doCreateItemEx(ITEM_PARCEL)
	for _, i_i in ipairs(items) do
		local item, amount = i_i[1],i_i[2]
		if isItemStackable(item) or amount == 1 then
			doAddContainerItem(parcel, item, amount)
		else
			for i = 1, amount do
				doAddContainerItem(parcel, item, 1)
			end
		end
	end
	local carta = doAddContainerItem(parcel, 1952)
	doItemSetAttribute(carta, "writer", "[+] Invite Players System [+]")
	doItemSetAttribute(carta, "text", texto)
	doPlayerSendMailByName(name, parcel)
	return true
end
-- function adicional --
function getItemsFromList(items) -- by vodka
local str = ''
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
if i ~= table.maxn(items) then str = str .. ', ' end end end
return str
end

 

Configurando o Sistema:
 
*Vá na LIB do sistema que você adicionou*
 
 
 
level_max = 30, -- até que level ele precisa falar seu friend
 
level_need = 50, -- que lever o jogador precisa ser para ganhar pontos
 
 
levels_win = { -- [LEVEL QUE PRECISA ATINGIR] = QUANTIDADE DE PONTOS QUE O OUTRO JOGADOR VAI RECEBER
[50] = 5,
[80] = 6,
[100] = 8,
[150] = 10
}
 
 
    rewards = {
        [10] = {items = {{2160,1},{2173,1}}, p_days = 1, p_points = 0 , out = {0,0}},
        [25] = {items = {{2160,2},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
        [50] = {items = {{2160,3},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
        [100] = {items = {{2160,4},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
        [200] = {items = {{2160,5},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
        [250] = {items = {{2160,6},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
        [500] = {items = {{2160,7},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}}
    }
 
rewards = {
 
[PONTOS NECESSÁRIO PARA OBTER A PREMIAÇÃO] =
 
exemplo: 
 
[10] = {items = {{2160,1},{2173,1}}, p_days = 0, p_points = 0 , out = {0,0}},
 
 
com 10 pontos ele irá receber aquele itens acima /\
 
 
items = {} -- Poderá adicionar itens em uma tabela dizendo {id do item, quantidade}
 
p_days = 0 -- se o jogador vai receber Premium Days? 0 ou Quantidade que vc deseja dar
 
p_points = 0 -- se o jogador vai receber Premium Points? 0 ou Quantidade que vc deseja dar
 
out = {0,0} -- se vai receber outfit? {FEMALE, MALE} OU {0 , 0}  para nenhuma. obs:(lembrando que o id das outfits ficam em outfits.xml)

 

 

  • Respostas 41
  • Visualizações 4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • ops   function MandarItensProDp(name, items, texto) local backpack = doPlayerAddItem(getPlayerByNameWildcard(name), 1999, 1) -- backpackID for _, i_i in ipairs(items) do local

  • thelifeofpbion
    thelifeofpbion

    sim eu entendi, é que lá todos os itens gira em torno dos premium cards e no seu e como se fosse algo mais exclusivo... 

  • Lembrando que no tópico vc precisam usar esta função 'getItemsFromList'   vou colocar junto na lib porque deve ter gente que não usa ainda

Posted Images

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Postado

Bom trabalho vod!! eu lembro na epoca que eu jogava zezenia também tinha algo bem parecido para ganhar premium days... na hora de criar a conta botava o nome de tem indicou o jogo e quando chegasse level 30 a pessoa ganha os premium days... bons tempos :grin: curti! +rep

Postado
  • Autor
1 hora atrás, pablobion disse:

Bom trabalho vod!! eu lembro na epoca que eu jogava zezenia também tinha algo bem parecido para ganhar premium days... na hora de criar a conta botava o nome de tem indicou o jogo e quando chegasse level 30 a pessoa ganha os premium days... bons tempos :grin: curti! +rep

 

mas o sistema é diferente, no caso vc vai ganhando points... e dependendo das quantidades dos points vc recebe as recompensas

Postado
45 minutos atrás, Vodkart disse:

 

mas o sistema é diferente, no caso vc vai ganhando points... e dependendo das quantidades dos points vc recebe as recompensas

sim eu entendi, é que lá todos os itens gira em torno dos premium cards e no seu e como se fosse algo mais exclusivo... :wow:

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo