Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Mulizeu/Latoy são a msm pessoa

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

Screns:

gZn8V.png

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

rmyfl.png

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

wWCxK.png

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

EAUHd.png

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

b0HF9.png

o buff "Couple damage"

apJVe.png

O buff "reflect damage"

Na sua db execute:

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 )

);
Mods MarriageSystem.xml
<?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:

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.

CREDITOS : 25% Ao vodkart pela lib e 75% ao mulizeu(eu) Pelos demais scripts

Editado por Latoy (veja o histórico de edições)

  • Respostas 21
  • Visualizações 5.7k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Conseguiu terminar os resto dos script? oloco parabéns mano, sistema fico show *-* ta completo, no decorrer do tempo vamos dando um upgrade =] rep++ vlw

  • Seria legal botar para verificar o IP dos players, porque da pra tirar um proveito usando MC.

  • hmm, verdade... bem lembrado kimos vou pedir que o mulizeu adc no script para checar o ip

Posted Images

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