Talkactions Transferencia de Points entre Players

Lucasyeah
em Scripts

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

TFS, 860.

Olá pessoal, venho aki pedir um script bem legal, que será bastante útil para grande maioria (eu acho).

O script é o seguinte, uma talkactions que transfere premium points de um player para outro.

Exemplo:

 

Quem irá receber

\/

!transfere Druidzinho, 3 <~ Quantidade de pontos que irá transferir

 

Os premium points irão para a account do player Druidzinho...

Se o player que fizer o comando não tiver a quantidade necessária de premium points para transferir o script manda msg:

Você não tem isso para transferir.

 

Meu sistema de premium points é normal, uso Mysql com a tabela de premium points! yes.gif

 

Quem puder ajudar ae, agradeço e Curto button_ok.png

Omega

o/
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 17/06/07Posts: 1165Gênero: MasculinoChar no Tibia: Nenhum

 

 

function onSay(cid, words, param)
	local param = string.explode(param, ',')
	local days = param[2]
	local toPlayer = param[1]
	local player_prem_days = getPlayerPremiumDays(cid)
	if not days or not toPlayer then
		doPlayerSendCancel(cid, "You need to specify a valid online player and premium days to transfer premium days.")
	elseif not tonumber(days) then
		doPlayerSendCancel(cid, "You have to specify a valid number of premium days to transfer.")
	elseif player_prem_days < tonumber(days) then
		doPlayerSendCancel(cid, "You don't have the specified premium days to transfer.")
	else
		toPlayer = getCreatureByName(toPlayer)
		if not isPlayer(toPlayer) then
			doPlayerSendCancel(cid, "You have to specify a valid online player to transfer premium days.")
		else
			doPlayerRemovePremiumDays(cid, tonumber(days))
			doPlayerAddPremiumDays(toPlayer, tonumber(days))
			doPlayerSendTextMessage(cid, 27, "You have sucessfully transfered ".. days .." premium days.")
			doPlayerSendTextMessage(toPlayer, 27, getCreatureName(cid).." has transfered "..days.." premium days for your account.")
		end
	end
	return true
end

 

 

<talkaction words="!transfere" event="script" value="transferirprem.lua"/>

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

Omega, seu script no caso transferiria dias premium, certo? então, to precisando que o script transfira Points! (premium POINTS, aqueles que compram itens no shop do gesior). Vou tentar adaptar, se puder me ajudar.

A função seria essa: getAccountPoints(cid)

Kluivert

:)
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 06/07/13Posts: 634Gênero: MasculinoChar no Tibia: Kayinsz

Omega, seu script no caso transferiria dias premium, certo? então, to precisando que o script transfira Points! (premium POINTS, aqueles que compram itens no shop do gesior). Vou tentar adaptar, se puder me ajudar.

 

Creio que isso so seja possivel no site mano!

Att,

Kluivert.

 

2lQynzLAD.png

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

Sim Kluimaster, mas preciso do talkactions, eu consegui montar um script 90% funcional, porém ele transfere valores negativos, exemplo: !transfere Druidzinho, -3. Dai o Druidzinho fica com -3 points e quem usou o comando ganha +3 pontos de graça. Creio que alguém conseguirá me ajudar.

 

 

Edit --------------

Consegui adaptar sua Script Omega, porém ta com o mesmo problema da minha, o player pode usar o comando com valores negativos

function onSay(cid, words, param)
	local param = string.explode(param, ',')
	local pts = param[2]
	local toPlayer = param[1]
	local player_prem_pts = getAccountPoints(cid)
	if not pts or not toPlayer then
		doPlayerSendCancel(cid, "You need to specify a valid online player and premium days to transfer premium days.")
	elseif not tonumber(pts) then
		doPlayerSendCancel(cid, "You have to specify a valid number of premium days to transfer.")
	elseif player_prem_pts < tonumber(pts) then
		doPlayerSendCancel(cid, "You don't have the specified premium days to transfer.")
	else
		toPlayer = getCreatureByName(toPlayer)
		if not isPlayer(toPlayer) then
			doPlayerSendCancel(cid, "You have to specify a valid online player to transfer premium days.")
		else
			doAccountRemovePoints(cid, tonumber(pts))
			doAccountAddPoints(toPlayer, tonumber(pts))
			doPlayerSendTextMessage(cid, 27, "You have sucessfully transfered ".. pts .." premium days.")
			doPlayerSendTextMessage(toPlayer, 27, getCreatureName(cid).." has transfered "..pts.." premium days for your account.")
		end
	end
	return true
end

Exemplo:

 

ADM -> !transfere Druidzinha, -6

17:18 You have sucessfully transfered -6 premium points.

 

Druidzinha -> 17:18 [ADM] has transfered -6 premium points for your account.

17:19 Sua conta possui -6 points. Saiba mais sobre points no site......

Omega

o/
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 17/06/07Posts: 1165Gênero: MasculinoChar no Tibia: Nenhum

Omega, seu script no caso transferiria dias premium, certo? então, to precisando que o script transfira Points! (premium POINTS, aqueles que compram itens no shop do gesior). Vou tentar adaptar, se puder me ajudar.

A função seria essa: getAccountPoints(cid)

 

Abra seu banco de dados e me diga em que tabela essa coluna fica. Por exemplo, a coluna premium time fica na tabela accounts. Me diga onde essa coluna premium points fica.

E o nome exato das duas (tabela e coluna)

Maenilse

q manero em fera
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/09/12Posts: 711Char no Tibia: noé

se for o p'points v1.0 daqui do xtibia memo.

 

a coluna de onde fica no MySQL, é a p_points. eu uso o msm sistema.

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

Omega a coluna premium_points fica na tabela accounts. Atualiza a pagina ai, viu sobre os valores negativos ?

Omega

o/
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 17/06/07Posts: 1165Gênero: MasculinoChar no Tibia: Nenhum

Hauhauhaua, então tava dando pra roubar points dos outros?

 

 

function onSay(cid, words, param)
	local param = string.explode(param, ',')
	local pts = param[2]
	local toPlayer = param[1]
	local player_prem_pts = getAccountPoints(cid)
	if not pts or not toPlayer then
		doPlayerSendCancel(cid, "You need to specify a valid online player and premium days to transfer premium days.")
	elseif not tonumber(pts) then
		doPlayerSendCancel(cid, "You have to specify a valid number of premium days to transfer.")
	elseif player_prem_pts < tonumber(pts) then
		doPlayerSendCancel(cid, "You don't have the specified premium days to transfer.")
	elseif tonumber(pts) <= 0 then
		doPlayerSendCancel(cid, "You have to specify a number of days higher than 0 to transfer.")
	else
		toPlayer = getCreatureByName(toPlayer)
		if not isPlayer(toPlayer) then
			doPlayerSendCancel(cid, "You have to specify a valid online player to transfer premium days.")
		else
			doAccountRemovePoints(cid, tonumber(pts))
			doAccountAddPoints(toPlayer, tonumber(pts))
			doPlayerSendTextMessage(cid, 27, "You have sucessfully transfered ".. pts .." premium days.")
			doPlayerSendTextMessage(toPlayer, 27, getCreatureName(cid).." has transfered "..pts.." premium days for your account.")
		end
	end
	return true
end

 

 

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

Opa, a script aparentemente está 100% funcional sem bugs, vou fazer ,mais alguns testes e logo coloco no meu servidor. Te agradeço, Omega!

Lucasyeah

Humilde Aprendiz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/09/12Posts: 41

Olá Omega, queria te perguntar se tem como adicionar +1 função nesse script? Se possível gostaria que o script gerasse uma Log.txt de todos os players que utilizaram o comando !transfere. e a quantidade de pontos transferida... se tivesse como mostrar o dia e a hora que isso ocorreu. Tem como fazer isso ou é impossível?

yoh

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 08/01/07Posts: 58

Adicione em 050-function

function getPlayerVipPoints(cid)
    local Info = db.getResult("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. "")
        if Info:getID() ~= LUA_ERROR then
        local Points= Info:getDataInt("premium_points")
        Info:free()
        return Points
    end
     return LUA_ERROR
end

function doPlayerAddVipPoints(cid, points)
    local dif = getPlayerVipPoints(cid) + points
    if dif >= 0 then
        db.query("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. points .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";")
        return TRUE
    end
    return FALSE
end

function doPlayerRemoveVipPoints(cid, points)
    local dif = getPlayerVipPoints(cid) - points
    if dif >= 0 then
        db.query("UPDATE `accounts` SET `premium_points` = `premium_points` - " .. points .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";")
        return TRUE
    end
    return FALSE
end

Adione em Talkactions/scripts

 

transfer.lua

function onSay(cid, words, param, channel) 
 
local t = param:explode(",")
local player = getPlayerByName(t[1])
local m = tonumber(t[2])
  
    if param == "" then 
        return doPlayerSendCancel(cid, "Command requires param.") 
    elseif not isPlayer(player) then
        return doPlayerSendCancel(cid, "Sorry, not possible.")
    end
	
if(not m) then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Valor nao Digitado.\n Ex: /transfer "..getPlayerName(cid)..", 20")
        return TRUE
end

    if getPlayerVipPoints(cid) < m then
        return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce nao tem pontos suficiente!!")
    end 
    
    doPlayerRemoveVipPoints(cid, m)   
    doPlayerAddVipPoints(player, m)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Voce Transferiu "..m.." pontos para "..getPlayerName(player)..".")  
    f = io.open("data/logs/Pontos.txt", "a+")
    f:write("Player: "..getPlayerName(cid).." transferiu "..m.." pontos para "..getPlayerName(player).."\n\n----------------------------------------------------------\n")
    f:close()   
    return true 
end

XML :

<talkaction words="/transfer" event="script" value="transfer.lua"/>

Eu Utilizo isso no meu Servidor Funciona 100% e sem nenhum Bug !