Você está desconectado.

Conecte-se e veja nossos conteúdos exclusivos!
 

  


Marriage System

Compartilhe
avatar
GOD Vitor
Administrador
Administrador

King Coin(s) King Coin(s) : 33
Reputação : 13015
Facebook : Facebook.com/Vitor.Eduardo.5567
OTServ Favorito : otPokémonImeprium
Meu Char : Zoom
Seção Favorita : Spriting
Eu sou : Scripter
Tópicos : 256
Data de Cadastro : 26/09/2015
Idade : 19
Localização : Florianópolis

Marriage System

Mensagem por GOD Vitor em 5/12/2015, 23:07

Informações
Spoiler:
Sobre: É um sistema de casamento entre players, o diferencial do sistema é que eles podem upar o level do seu casamento(sistema), para isso eles terão que caçar juntos, também caçando junto eles recebem alguns bônus.
Sistema: O sistema tem stages, ou seja, a medida que o level do casamento ir aumentando, mais difícil vai ficar para alcançar o próximo nível do sistema, para aumentar o nível do sistema, eles terão que estar perto um do outro, então vão acumulando "marry exp", que é a exp do casamento.
Dependendo do level do casamento os jogadores vão ganhar um bônus experience(caso estiverem juntos), é por stages também, tudo configurável.
O casal não poderá se atacar, já que vão estar upando junto muitas vezes.
Também para não dar lag, na db fica salvo o casal, não os dois jogadores, isso quer dizer que se 10 jogadores casam, na db fica salvo só 5 colunas, compacta, e a exp do player é por storage, nada por db, para não lagar.
Bônus: Além da exp bônus para o casal, eles terão chances de conseguir dois "bufs" especiais:
1° [Reflect] - Chance de ser refletido o damage do monstro em 50%
2° [Couple Damage] - O casal compartilha da mesma dor, isso faz com que o dano recebido seja divido entre o casal.
Claro que os buffs só serão dados se ambos estiverem junto.
Comandos:
!marriage info -- mostra em uma janela informações sobre o sistema
!marriage status -- caso jogador for casado, mostra o status do casamento(exp,level, casado)
!marriage date -- mostra a data do casamento
!marriage accept -- para aceitar o convite de um casamento
!marriage reject -- para rejeitar o convite de um casamento
!marriage NAME -- isso faz com que você peça um jogador em casamento ex: !marriage mulizeu
!divorce -- para se divorcia do seu casamento, poder fazer isso msm quando um dos noivos estiver offline


Screenshots
Spoiler:

Uma mensagem na parte inferior da tela, dizendo quanto de "marry exp" ganhou no monstro que matou


comando !marriage info, faz com que monstre a informações do sistema, preços do casamento, divócio, level, etc...



comando !marriage status mostra o status do casamento do player, quando de "marry exp" para o próximo nível, etc...



Look que mostra com quem é casado e nível do casamento.



O Buff "Couple damage".



O uff "reflect damage".

Na sua db execute
Spoiler:
CREATE TABLE marriage_system (

id INTEGER NOT NULL,

player_id INTEGER NOT NULL,

partner VARCHAR( 255 ) NOT NULL,

marriage_date INTEGER NOT NULL,

PRIMARY KEY ( id )

);


Na pasta do seu server/mods, crie um arquivo com o nome MarriageSystem.xml, e adicione isto dentro dele:
Spoiler:
<?xml version="1.0" encoding="UTF-8"?>

<mod name="MarriageSystem" version="1.0" author="Mulizeu" contact="tibiaking.com" enabled="yes">

<config name="marry_func"><![CDATA[

marry_config = {

Premium = false,

OnlyDifferentSex = false,

Marry_Price = 300000,

Divorce_Price = 100000,

Level = 50,

MaxSqm = 7 -- to up system and win bonus

}

Marry_stage = {

[0] = {exp = 350000, marry_percent = 50, player_experience = 0},

[1] = {exp = 700000, marry_percent = 45, player_experience = 2},

[2] = {exp = 1050000, marry_percent = 40, player_experience = 4},

[3] = {exp = 1400000, marry_percent = 35, player_experience = 6},

[4] = {exp = 1750000, marry_percent = 30, player_experience = 8},

[5] = {exp = 2100000, marry_percent = 25, player_experience = 10},

[6] = {exp = 2450000, marry_percent = 20, player_experience = 12},

[7] = {exp = 2800000, marry_percent = 15, player_experience = 14},

[8] = {exp = 3150000, marry_percent = 10, player_experience = 16},

[9] = {exp = 3500000, marry_percent = 5, player_experience = 18},

[10] = {exp = 0, marry_percent = 0, player_experience = 20}

}

marriage_tabble = {exp = 350250,level = 340200}

function isMarried(cid)

local m = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")

if(m:getID() == -1) then

local e = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';")

if(e:getID() == -1) then

return false

end

end

return true

end

function isPatner(cid)

local p = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")

if(p:getID() == -1) then

return true

end

return false

end

function isMarryOnline(cid)

if not getPlayerByNameWildcard(getPartner(cid)) then

return false

end

return true

end

function getPartner(cid)

if isPatner(cid) then

a = db.getResult("SELECT `player_id` FROM `marriage_system` WHERE `partner` = '"..getPlayerGUID(cid).."';")

b = "player_id"

else

a = db.getResult("SELECT `partner` FROM `marriage_system` WHERE `player_id` = '"..getPlayerGUID(cid).."';")

b = "partner"

end

local query = a

return getPlayerNameByGUID(query:getDataString(b))

end

function doMarry(cid, patner)

return db.executeQuery("INSERT INTO `marriage_system` (`player_id`, `partner`, `marriage_date`) VALUES ('".. getPlayerGUID(cid) .."', '"..patner.."', '".. os.time() .."');")

end

function doDivorcePlayer(cid)

if isPatner(cid) then

pid,player = getPlayerGUIDByName(getPartner(cid)),getPlayerByNameWildcard(getPartner(cid))

else

pid,player = getPlayerGUID(cid),cid

end

if(not player or isPlayerGhost(player)) then

db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.level .. ";")

db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = " .. pid .. " AND `key` = " .. marriage_tabble.exp .. ";")

else

setPlayerStorageValue(player, marriage_tabble.level,0)

setPlayerStorageValue(player, marriage_tabble.exp,0)

end

return db.executeQuery("DELETE FROM `marriage_system` WHERE `player_id` = '" .. pid .. "';")

end

function getMarryStatus(cid, status)

player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid

return getPlayerStorageValue(player,status == "level" and marriage_tabble.level or marriage_tabble.exp) < 0 and 0 or getPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp)

end

function setMarryStatus(cid, status, amount)

player = isPatner(cid) and getPlayerByNameWildcard(getPartner(cid)) or cid

return setPlayerStorageValue(player, status == "level" and marriage_tabble.level or marriage_tabble.exp, getMarryStatus(player, status)+amount)

end

function getMarryExp(cid)

return getMarryStatus(cid, "exp")

end

function addMarryExp(cid, amount)

return setMarryStatus(cid, "exp", amount)

end

function addMarryLevel(cid, amount)

return setMarryStatus(cid, "level", amount)

end

function getMarryLevel(cid)

return getMarryStatus(cid, "level")

end

function getMarryDate(cid)

local player = isPatner(cid) and getPlayerGUIDByName(getPartner(cid)) or getPlayerGUID(cid)

local date = db.getResult("SELECT `marriage_date` FROM `marriage_system` WHERE `player_id` = '"..player.."';")

return os.date("%d %B %Y %X ", date:getDataInt("marriage_date"))

end

]]></config>

<talkaction words="/marriage;!marriage;!divorce;/divorce" event="buffer"><![CDATA[

domodlib('marry_func')

config = {TimeAccept = 30, sqm = 3, storage1 = 873438, storage2 = 532579}

if words =="!marriage" or words =="/marriage" then

param = string.lower(param)

if (param == "") then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"invalid command, for more information enter !marriage info")

elseif(param == "info") then

msg = "Marriage Info".."\n\nLevel Minimum: "..marry_config.Level.."\nMarriage Cost: "..marry_config.Marry_Price.."\nDivorce Cost: "..marry_config.Divorce_Price.."\n\nMarried Players have a bonus exp as a wedding gift given by the union".."\n\nThis bonus is only given if the married players are nearby.\n\nTo marry use the command:\n!marriage NAME"

doShowTextDialog(cid,2160,msg)

elseif(param == "status") then

if isMarried(cid) then

msg = "Marriage Status".."\n\nMarried with: ["..getPartner(cid).."]\n\nMarry Experience: "..(getMarryLevel(cid) ~= 10 and "["..getMarryExp(cid).."/"..Marry_stage[getMarryLevel(cid)].exp.."]" or "[Max]").."\n\nMarry Level: "..(getMarryLevel(cid) ~= 10 and "["..getMarryLevel(cid).."]" or "[Max]").."\n"

else

msg = "you are not married"

end

doPlayerPopupFYI(cid, msg)

elseif (param =="date") then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..(isMarried(cid) and "The date of his marriage with "..getPartner(cid).." was: "..getMarryDate(cid).."." or "you are not married.").."")

elseif (param =="accept") then

player = getPlayerStorageValue(cid, config.storage2)

if getPlayerStorageValue(cid, config.storage1) >= os.time() then

if not isMarried(cid) then

if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) <= config.sqm then

doMarry(cid, getPlayerGUID(player))

doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! "..getCreatureName(cid).." accepted his marriage proposal.")

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations! you married with "..getCreatureName(player))

doSendMagicEffect(getCreaturePosition(cid), 35)

doSendMagicEffect(getCreaturePosition(player), 35)

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you're far away from her suitor.")

end

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.")

end

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.")

end

elseif (param =="reject") then

if getPlayerStorageValue(cid, config.storage1) >= os.time() then

if not isMarried(cid) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You just refuse the wedding invitation from player "..getCreatureName(getPlayerStorageValue(cid, config.storage2)))

doPlayerSendTextMessage(getPlayerStorageValue(cid, config.storage2), MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid).." rejected his marriage proposal.")

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are already married.")

end

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you do not received none wedding invitation.")

end

else

local player = getPlayerByNameWildcard(param)

if(not player)then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." is offline or does not exist.") return true

elseif isMarried(cid) or isMarried(player) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, ""..(isMarried(cid) and "you" or "he").." already is wedded.") return true

elseif marry_config.Premium == true then

if not isPremium(cid) or not isPremium(Player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must be premium") end

return true

elseif getPlayerLevel(cid) < marry_config.Level or getPlayerLevel(player) < marry_config.Level then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "players must to be level "..marry_config.Level) return true

elseif getPlayerStorageValue(player, config.storage1) >= os.time() then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param.." already have a wedding invitation, wait.") return true

elseif getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(player)) > config.sqm then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you are far away from each other to get married.") return true

elseif marry_config.OnlyDifferentSex and getPlayerSex(cid) == getPlayerSex(player) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "you can only marry the opposite sex") return true

elseif not doPlayerRemoveMoney(cid, marry_config.Marry_Price) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, but you do not have "..marry_config.Marry_Price.." gp(s) to ask "..param.." in marriage.") return true

end

setPlayerStorageValue(player, config.storage1,os.time()+config.TimeAccept)

setPlayerStorageValue(player, config.storage2, cid)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you asked "..param.." in marriage, wait a answer!")

doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE,getCreatureName(cid).." asked you in marriage, enter !marriage accept or !marriage reject")

end

elseif words =="!divorce" or words =="/divorce" then

if isMarried(cid) then

if doPlayerRemoveMoney(cid, marry_config.Divorce_Price) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Congratulations, you end up divorcing from player: "..getPartner(cid))

doDivorcePlayer(cid)

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Sorry, you do not have "..marry_config.Divorce_Price.." gp(s).")

end

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"you are not married.")

end

end

return true

]]></talkaction>

<event type="login" name="MarryRegister" event="script"><![CDATA[

function onLogin(cid)

registerCreatureEvent(cid, "ExpMarry")

registerCreatureEvent(cid, "MarryLook")

registerCreatureEvent(cid, "MarryStats")

registerCreatureEvent(cid, "MarryNoAttack")

return true

end]]></event>

<event type="look" name="MarryLook" event="script"><![CDATA[

domodlib('marry_func')

function onLook(cid, thing, position, lookDistance)

if isPlayer(thing.uid) and isMarried(thing.uid) then

doPlayerSetSpecialDescription(thing.uid, "\nMarried with "..getPartner(thing.uid).." - [Nv: " .. getMarryLevel(thing.uid) .."]\n")

end

return true

end]]></event>

<event type="combat" name="MarryNoAttack" event="script"><![CDATA[

domodlib('marry_func')

if isPlayer(cid) and isPlayer(target) and isMarried(cid) and isMarried(target) then

if (getCreatureName(target) == getPartner(cid))then

doPlayerSendCancel(cid, "You may not attack this player.")

return false

end

end

return true

]]></event>

<event type="kill" name="ExpMarry" event="script"><![CDATA[

domodlib('marry_func')

function onKill(cid, target, lastHit)

if isMonster(target) then

conta = getMonsterInfo(string.lower(getCreatureName(target))).experience

if isMarried(cid) and isMarryOnline(cid) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then

if getMarryLevel(cid) ~= 10 then

mexp = math.ceil((conta*Marry_stage[getMarryLevel(cid)].marry_percent)/100)

addMarryExp(cid, mexp)

if isMarryOnline(cid) then

doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)),MESSAGE_STATUS_SMALL,"Marry exp + "..mexp)

end

doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL,"Marry exp + "..mexp)

if getMarryExp(cid) >= Marry_stage[getMarryLevel(cid)].exp then

addMarryLevel(cid, 1)

if isMarryOnline(cid) then

doPlayerSendTextMessage(getPlayerByNameWildcard(getPartner(cid)), MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].")

doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), 35)

end

doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_RED,"[Marriage System] Level Up! [Nv: "..getMarryLevel(cid).."].")

doSendMagicEffect(getCreaturePosition(cid), 35)

end

end

local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier)

local count = math.ceil(((getMonsterInfo(string.lower(getCreatureName(target))).experience*exp)*Marry_stage[getMarryLevel(cid)].player_experience)/100)

doPlayerAddExperience(cid, count)

end

end

return true

end]]></event>

<event type="statschange" name="MarryStats" event="script"><![CDATA[

domodlib('marry_func')

Damage_percent = 50 -- metade n mexa

Chance = 25 -- chance de conseguir o reflect ou couple damage

if isMonster(attacker) and type == STATSCHANGE_HEALTHLOSS then

if isMarried(cid) and isMarryOnline(cid) and getPlayerByNameWildcard(getPartner(cid)) and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(getPlayerByNameWildcard(getPartner(cid)))) <= marry_config.MaxSqm then

if (Chance > math.random(1, 100)) then

damage = math.ceil((value*Damage_percent)/100)

if (50 > math.random(1, 100)) then

doTargetCombatHealth(cid, attacker, COMBAT_PHYSICALDAMAGE, -damage, -damage, CONST_ME_HOLYDAMAGE)

doSendAnimatedText(getCreaturePosition(cid), "REFLECT!", 140)

else

doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HEARTS)

doSendAnimatedText(getCreaturePosition(cid), "Love!", 200)

doCreatureAddHealth(cid, damage)

if isMarryOnline(cid) then

doSendMagicEffect(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), CONST_ME_HEARTS)

doSendAnimatedText(getCreaturePosition(getPlayerByNameWildcard(getPartner(cid))), "Love!", 200)

doCreatureAddHealth(getPlayerByNameWildcard(getPartner(cid)), -damage)

end

end

end

end

end

return true

]]></event>

</mod>

Configuração
Spoiler:
marry_config = {
Premium = false, -- se o jogador precisa ser premium para casar
OnlyDifferentSex = false, -- se precisa ser do sexo oposto
Marry_Price = 300000, -- qnto vai custar o pedido de casamento
Divorce_Price = 100000, -- quanto vai custar o divórcio
Level = 50, -- que level precisa ser para casar
MaxSqm = 7 -- aqui é quantos sqm eles precisam estar perto um do outro para ganha exp, bonus, etc...
}
Marry_stage = {
[0] = {exp = 350000, marry_percent = 50, player_experience = 0},
[1] = {exp = 700000, marry_percent = 45, player_experience = 2},
[2] = {exp = 1050000, marry_percent = 40, player_experience = 4},
[3] = {exp = 1400000, marry_percent = 35, player_experience = 6},
[4] = {exp = 1750000, marry_percent = 30, player_experience = 8},
[5] = {exp = 2100000, marry_percent = 25, player_experience = 10},
[6] = {exp = 2450000, marry_percent = 20, player_experience = 12},
[7] = {exp = 2800000, marry_percent = 15, player_experience = 14},
[8] = {exp = 3150000, marry_percent = 10, player_experience = 16},
[9] = {exp = 3500000, marry_percent = 5, player_experience = 18},
[10] = {exp = 0, marry_percent = 0, player_experience = 20}
}
[LEVEL DO CASAMENTO] = {
exp = Quanto de exp precisa pra avançar de nível do casamento
marry_percent = quanto de exp eles receberão a matar um montro, por exemplo, no level 0 eles matando um demon que de digamos dê 6000 de exp, eles irão ganhar 50% de 6000, que fica 3000 para o sistema de casamento.
player_experience = bônus exp em % para os players que estiverem upando junto, varia o level do casamento, no level 10, que é o máximo, se eles uparem junto vão receber bônus de 20% experience.


Créditos
Vodkart
Mulizeu

avatar
Yullian
Membro
Membro

King Coin(s) King Coin(s) : 2
Reputação : 0
Tópicos : 2
Data de Cadastro : 18/02/2016

Re: Marriage System

Mensagem por Yullian em 18/2/2016, 22:47

mano,fiz tudo certo, o seu jeito, deu tudo certo ate um certo ponto, mas na hora de aceitar , ele funciona e diz parabéns ela aceitou a proposta de casamento, mas na hora q eu dou status ou divorce, ele diz q eu n to casado, pq isso aconteceu? pode me explicar pq? Sad Sad :facepalm:
avatar
GOD Vitor
Administrador
Administrador

King Coin(s) King Coin(s) : 33
Reputação : 13015
Facebook : Facebook.com/Vitor.Eduardo.5567
OTServ Favorito : otPokémonImeprium
Meu Char : Zoom
Seção Favorita : Spriting
Eu sou : Scripter
Tópicos : 256
Data de Cadastro : 26/09/2015
Idade : 19
Localização : Florianópolis

Re: Marriage System

Mensagem por GOD Vitor em 20/2/2016, 03:24

@Yullian escreveu:mano,fiz tudo certo, o seu jeito, deu tudo certo ate um certo ponto, mas na hora de aceitar , ele funciona e diz parabéns ela aceitou a proposta de casamento, mas na hora q eu dou status ou divorce, ele diz q eu n to casado, pq isso aconteceu? pode me explicar pq? Sad Sad :facepalm:

Oi Yullian, a distro apresentou algum erro?
avatar
Yullian
Membro
Membro

King Coin(s) King Coin(s) : 2
Reputação : 0
Tópicos : 2
Data de Cadastro : 18/02/2016

Re: Marriage System

Mensagem por Yullian em 21/2/2016, 16:28

Pula sai do chão,
fire wave do dragão,
libera exura vita to na red meu irmão,
o noob tá ferrado acabo as UH,
e o draggy ta animado esse noob vai deitar!

Conteúdo patrocinado

Re: Marriage System

Mensagem por Conteúdo patrocinado


    Data/hora atual: 24/8/2017, 07:38