Ir para conteúdo
  • Cadastre-se

(Resolvido)Sistema de "mate 3 ganhe 1 ponto"


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Primeiramente não sei se está certo o tópico kkkk Então vamos ao problema.

 

Gostaria de um script estilo o sistema do Aegis(servidores Rozinx) para matar 3 monstros e ganhar 1 ponto... Desde já muito obrigado

Link para o post
Compartilhar em outros sites
  • Solução

Vejo que é seu primeiro post, então nos próximos tente dar a maior quantidade possível de detalhes sobre o seu pedido como: a versão do seu servidor, a distro utilizada, além de detalhes sobre o próprio script que você quer. Isso facilitará com que as pessoas te ajudem e, por consequência, você tenha o seu pedido atendido o mais rápido possível. Como nunca vi que sistema é esse do qual você está se referindo, supondo que o script que desenvolvi será compatível com seu servidor e que o "ponto" que você se refere é o "premium point da account", siga os passos abaixo (não tive como testar o script):

 

Em data/lib crie um arquivo.lua e cole isto dentro:

 

Spoiler

AEGIS_SYS = {
    monster_name = "Aegis", -- nome do monstro
    kills_per_point = 3, -- quantidade de vezes que o monstro será morto para adicionar 1 ponto
    max_kills = -1, -- número máximo de vezes que a morte do monstro contará para adicionar o ponto (coloque -1 caso não tenha máximo)
    storages = {kills = 45696, total_kills = 45697} -- storages não utilizados no seu servidor, só modifique se necessário
}

 

 

Caso ainda não possua a função que adiciona os pontos em algum arquivo da pasta data/lib, adicione-a, no arquivo criado anteriormente, abaixo do "}":

 

Spoiler

function getAccountPoints(cid)
local res = db.getResult('select `premium_points` from accounts where name = \''..getPlayerAccount(cid)..'\'')
if(res:getID() == -1) then
return false
end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end

function doAccountAddPoints(cid, count)
return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end

function doAccountRemovePoints(cid, count)
return db.query("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end

 

 

Em data/creaturescripts/scripts crie um arquivo.lua e cole isto dentro:

 

Spoiler

function onDeath(cid, corpse, deathList)
    local killer = deathList[1]
    if not isPlayer(killer) then return true end
    local mname, kneeded, str, check_max = getCreatureName(cid), AEGIS_SYS.kills_per_point, "", (AEGIS_SYS.max_kills ~= -1)
    local player_kills = getPlayerStorageValue(killer, AEGIS_SYS.storages.kills) > 0 and getPlayerStorageValue(killer, AEGIS_SYS.storages.kills) or 0
    local total_kills = getPlayerStorageValue(killer, AEGIS_SYS.storages.total_kills) > 0 and getPlayerStorageValue(killer, AEGIS_SYS.storages.total_kills) or 0
    if (not check_max) or (check_max and ((total_kills + 1) <= AEGIS_SYS.max_kills)) then
        if (player_kills + 1) == AEGIS_SYS.kills_per_point then
            doAccountAddPoints(killer, 1)
            setPlayerStorageValue(killer, AEGIS_SYS.storages.kills, 0)
            doSendMagicEffect(getPlayerPosition(killer), CONST_ME_HOLYAREA)
            doPlayerSendTextMessage(killer, MESSAGE_INFO_DESCR, "You have earned a premium point for killing the monster '" .. mname .. "' " .. kneeded .. " times.") 
            str = " (finished)"
        else
            str = " to earn 1 premium point."
            setPlayerStorageValue(killer, AEGIS_SYS.storages.kills, player_kills + 1)
        end
        doPlayerSendTextMessage(killer, MESSAGE_STATUS_CONSOLE_ORANGE, mname.. " kills: [".. (player_kills + 1) .. "/".. kneeded .."]".. str)
        if (total_kills + 1) == (AEGIS_SYS.max_kills) then
            doPlayerSendTextMessage(killer, MESSAGE_STATUS_CONSOLE_ORANGE, "You have already reached maximum number of kills for " .. mname .. ".")
        end
        setPlayerStorageValue(killer, AEGIS_SYS.storages.total_kills, total_kills + 1)
    else
        if check_max then
            doPlayerSendTextMessage(killer, MESSAGE_STATUS_CONSOLE_ORANGE, "You have already reached maximum number of kills for " .. mname .. ".")
        end
    end
    return true
end

 

 

No creaturescripts.xml, adicione a tag:

<event type="death" name="AegisDeath" event="script" value="NOMEDOARQUIVO.lua"/>

No arquivo.xml do monstro, antes de:

</monster>

adicione:

<script>
	<event name = "AegisDeath"/>
</script>

 

Fiz um comando adicional aqui rapidinho, caso o jogador queira verificar a quantidade de monstros mortos:

 

Em data/talkactions/scripts crie um arquivo.lua e cole isto dentro:

 

Spoiler

function onSay(cid, words, param, channel)
    local str, check_max = ">> Aegis Kills", (AEGIS_SYS.max_kills ~= -1 )
    if check_max then
        if getPlayerStorageValue(cid, AEGIS_SYS.storages.total_kills) >= AEGIS_SYS.max_kills then
            str = str .. "\n\nYou have already reached maximum number of kills for " .. AEGIS_SYS.monster_name .. "."
            return doPlayerPopupFYI(cid, str)
        end
    end
    local player_kills = getPlayerStorageValue(cid, AEGIS_SYS.storages.kills) > 0 and getPlayerStorageValue(cid, AEGIS_SYS.storages.kills) or 0
    str = str .. " [".. (player_kills) .. "/".. AEGIS_SYS.kills_per_point .."]"
    doPlayerPopupFYI(cid, str)
    return true
end

 

 

No talkactions.xml, adicione a tag. Por exemplo:

<talkaction words="!aegis" event="script" value="NOMEDOARQUIVO.lua"/>

Espero que seja isso o que você queria.

Contato:

 

Link para o post
Compartilhar em outros sites

Opa! Boa noite! Desculpa, é meu primeiro tópico... Mas vamos lá...

Eu testei, porém não deu certo... Os pontos que eu disse são "points" para o player comprar os itens após clicarem nos baús... Ou seja... A cada 3 monstros que ele mata, ele ganha 1 points. Porém eu mato o monstro mas nao consigo ganhar os points. A versão é 8.6 mesmo. 

Link para o post
Compartilhar em outros sites
7 horas atrás, Vinni012 disse:

Opa! Boa noite! Desculpa, é meu primeiro tópico... Mas vamos lá...

Eu testei, porém não deu certo... Os pontos que eu disse são "points" para o player comprar os itens após clicarem nos baús... Ou seja... A cada 3 monstros que ele mata, ele ganha 1 points. Porém eu mato o monstro mas nao consigo ganhar os points. A versão é 8.6 mesmo. 

 

Testei aqui e o script está 100% funcional. No entanto, a diferença pode ser nesse sistema de pontos que você quer. Você já tem o script de clicar no baú e receber o item? Poste-o para que eu possa adaptar o script desenvolvido a esse seu.

Contato:

 

Link para o post
Compartilhar em outros sites

Segue o script... Esse é o sistema do player clicar no bau e comprar o item com points

 

 

 

local lever = {
[6001] = {40,10022},
[6002] = {25,10133},
[6003] = {25,10064},
[6004] = {15,12606},
[6005] = {15,12603},
[6006] = {15,12604},
[6007] = {15,12609},
[6008] = {15,12605},
[6009] = {15,12610},
[60010] = {12,10134},
[60011] = {12,10310},
[60012] = {8,9777},
[60013] = {8,2390},
[60014] = {8,9933},
[60015] = {8,8888},
[60016] = {8,7839},
[60017] = {8,8858},
[60018] = {8,8905},
[60019] = {8,9778},
[60020] = {35,10135}
}
function onUse(cid,item,fromPosition,itemEx,toPosition)
if getPoints(cid) < lever[item.actionid][1] then
return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Você precisa de "..lever[item.actionid][1].." points.")
end
doPlayerAddItem(cid,lever[item.actionid][2], isItemStackable(lever[item.actionid][2]) and  1)
removePoints(cid,lever[item.actionid][1])
doPlayerSendTextMessage(cid,22,"você comprou um " .. getItemNameById(lever[item.actionid][2]))
return true
end

Refiz todo o processo desde o inicio, e até o monstro bugou, não conseguindo Summonar ou colocar no RME

systempoints.lua  Esse é meu sistema de points

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo