Ir para conteúdo
  • 0

Sistema Luckoack - Mudar Uma Coisa! Qualquer Scripter Porfavor!


Lummos

Pergunta

 

<?xml version="1.0" encoding="UTF-8"?>

<mod name="Characters Market System" version="1.0" author="LuckOake" contact="none" enabled="yes">

------------------------------------------------------------------------------------

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

price = 27112

owner = 27113

level = 30 -- Level mínimo que o character deve ter para ser vendido

min_price = 100 -- Preço mínimo de um character

max_price = 1000000 -- Preço máximo de um character

 

function doTransferCharacter(cid, accId)

return db.executeQuery("UPDATE `players` SET `account_id` = "..accId.." WHERE `id` = "..getPlayerGUIDByName(cid).."")

end

 

function doOfflinePlayerAddMoney(guid, money)

return db.executeQuery("UPDATE `players` SET `balance` = `balance` + '"..money.."' WHERE `id` = '"..getPlayerGUIDByName(guid).."';")

end

 

function setOfflinePlayerStorageValue(name, key, value)

local result = db.getResult("SELECT * FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")

if result:getID() == -1 then

return db.executeQuery("INSERT INTO `player_storage` (`player_id`, `key`, `value`) VALUES (".. getPlayerGUIDByName(name) ..", ".. key ..", ".. value ..");")

else

result:free()

return db.executeQuery("UPDATE `player_storage` SET `value` = ".. value .." WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")

end

end

 

function getOfflinePlayerStorageValue(name, key)

local result, ret = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = '".. getPlayerGUIDByName(name) .."' AND `key` = ".. key ..";")

if result:getID() == -1 then

return nil

end

ret = result:getDataInt("value")

result:free()

return ret

end

 

function getOfflinePlayerValue(name, value)

local result, ret = db.getResult("SELECT `"..value.."` FROM `players` WHERE `id` = "..getPlayerGUIDByName(name)..";")

ret = result:getDataInt(value)

result:free()

return ret

end

 

function isCharacterForSale(name)

if not getOfflinePlayerStorageValue(name, price) or getOfflinePlayerStorageValue(name, price) < 1 then

return false

else

return true

end

end

]]></config>

------------------------------------------------------------------------------------

<talkaction words="!character" event="buffer"><![CDATA[

domodlib('market')

local t = string.explode(param, ",")

 

if t[1] == "sell" then

if not t[3] or not tonumber(t[3]) or t[4] or tonumber(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name and the price.") return true

elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true

elseif isCharacterForSale(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is already for sale.") return true

elseif getPlayerGUIDByName(t[2]) == getPlayerGUID(cid) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You cannot sell yourself.") return true

elseif getPlayerByName(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "The character must be offline to be sold.") return true

elseif getOfflinePlayerValue(t[2], "level") < level then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your character can't be sold until it has level "..level..".") return true

elseif tonumber(t[3]) < min_price then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the minimum price for selling a character is "..min_price..".") return true

elseif tonumber(t[3]) > max_price then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sorry, but the maximum price for selling a character is "..max_price..".") return true

end

 

setOfflinePlayerStorageValue(t[2], price, t[3])

setOfflinePlayerStorageValue(t[2], owner, getPlayerGUID(cid))

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" is now for sale for the price of "'..t[3]..'" gold coins.')

elseif t[1] == "buy" then

if not t[2] then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true

elseif not playerExists(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character doesn't exist.") return true

elseif getPlayerAccountId(cid) == getAccountIdByName(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can't buy your own character.") return true

elseif not isCharacterForSale(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true

elseif not doPlayerRemoveMoney(cid, getOfflinePlayerStorageValue(t[2], price)) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Not enough money. This character's price is "..getOfflinePlayerStorageValue(t[2], price).." gold coins.") return true

end

 

if not getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)) then

doOfflinePlayerAddMoney(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))

setOfflinePlayerStorageValue(getPlayerNameByGUID(getOfflinePlayerStorageValue(t[2], owner)), 41792, getPlayerGUIDByName(t[2]))

else

doPlayerAddMoney(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), getOfflinePlayerStorageValue(t[2], price))

doPlayerSendTextMessage(getPlayerByGUID(getOfflinePlayerStorageValue(t[2], owner)), MESSAGE_STATUS_CONSOLE_BLUE, 'Your character "'..t[2]..'" has been sold for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')

end

doTransferCharacter(t[2], getPlayerAccountId(cid))

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You bought the character "'..t[2]..'" for the price of '..getOfflinePlayerStorageValue(t[2], price)..' gold coins.')

setOfflinePlayerStorageValue(t[2], owner, -1)

setOfflinePlayerStorageValue(t[2], price, -1) return true

elseif t[1] == "remove" then

if not t[2] then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Incorrect Params. Specify the character name.") return true

elseif getPlayerAccountId(cid) ~= getAccountIdByName(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This is not your character.") return true

elseif not isCharacterForSale(t[2]) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "This character is not for sale.") return true

end

 

setOfflinePlayerStorageValue(t[2], price, -1)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You removed the character "'..t[2]..'" from the Characters Market.') return true

elseif t[1] == "list" then

local result = db.getResult("SELECT `name` FROM `players`")

if result:getID() == -1 then

return true

end

local msg = "Characters for Sale:\n\n"

while true do

local name = result:getDataString("name")

if isCharacterForSale(name) then

local sex = getOfflinePlayerValue(name, "sex") == 1 and "Male" or "Female"

msg = ""..msg.." - ".. name .." (Level: "..getOfflinePlayerValue(name, "level").." / Vocation: "..getVocationInfo(getOfflinePlayerValue(name, "vocation")).name.." / Sex: "..sex.." / Owner: "..getPlayerNameByGUID(getOfflinePlayerStorageValue(name, owner))..") [Price: "..getOfflinePlayerStorageValue(name, price).."] \n"

end

if not result:next() then

break

end

end

doPlayerPopupFYI(cid, msg) return true

elseif not t[1] or t[1] ~= "buy" or t[1] ~= "sell" or t[1] ~= "remove" or t[1] ~= "list" then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Incorrect params. You can only 'buy' or 'sell' a character, 'remove' it from the Characters Market or see the 'list' of characters for sale.") return true

end

return true

]]></talkaction>

------------------------------------------------------------------------------------

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

function onLogin(cid)

domodlib('market')

if getPlayerStorageValue(cid, price) > 0 then return false

elseif getPlayerStorageValue(cid, 41792) ~= -1 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You sold the character "..getPlayerNameByGUID(getPlayerStorageValue(cid, 41792))..". The money is in your bank account.")

setPlayerStorageValue(cid, 41792, -1)

end

return true

end

]]></event>

</mod>

 

 

 

Preciso, que para comprar um personagem, remova em vez de dinheiro do player, remova o item ID:9971. Mas para que o personagem seja comprado terá que pagar uma taxa a mais de 20 modas(ID:9971)

Exemplo:

Joao pos o Personagem a venda por 100 moedas(ID:9971), ai o Maria vai comprar o personagem de joao ai irá remover 120 moedas(ID:9971). Ou seja

100 do personagem + 20 da taxa.

E obrigado a quem tentar/fizer.

@Edit

Lembrado por um usuário.

A taxa de 20 moedas NÃO irá para o player que esta vendendo o comprador pagará 120 mas o vendedor receberá apenas as 100. As 20 somente serão da taxa mesmo.

 

Abraços;

Editado por Lummos
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

lummos esqueceu de explicar que exemplo o juca colocou o char dele a venda por 100 barras o script vai cobrar 120 porem o cara que colocou a venda so vai receber as 100 barras as outras 20 vão apenas ser removidas.

Link para o comentário
Compartilhar em outros sites

  • 0

lummos esqueceu de explicar que exemplo o juca colocou o char dele a venda por 100 barras o script vai cobrar 120 porem o cara que colocou a venda so vai receber as 100 barras as outras 20 vão apenas ser removidas.

 

Sim, obrigado por me lembrar. Será adicionado.

 

@Beeki

Me desculpe, não foi intencionalmente.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...