Ir para conteúdo

Posts Recomendados

Bem eu resolvi criar um pet sytem diferente nomeado "Card sytem" por que considero os pets como cartas de invocar.

Na realidade o maior proposito e as funçoes lib que criei porque nelas ficara bem mais facil "se quiser" criar outros sistema relacionados como um por exemplo um npc que da uma card.

O sistema foi construido para ediçao facil e mesmo grande e de facil entendimento.

Crie um arquivo LUA chamado cardsytem na pasta inicial do seu otserv(onde fica o seu executavel,dlls e config.lua)

 

tab = {

["Bug"] = {"bug", 50001, 1},

["Troll"] = {"troll", 50002, 40},

["Demon"] = {"demon", 50003, 80}

}

 

Agora vá em lib e crie um arquivo LUA chamado card e coloque isto:

 

 

function doPlayerStartCards(cid, namecard, pos)

dofile("./cardsytem.lua")

local n = namecard

local monster = tab[n]

 

pk = doSummonCreature(monster[1], pos)

doConvinceCreature(cid, pk)

return true

end

function doShowTextDialgListCards(cid, itemid)

dofile("./cardsytem.lua")

local n = namecard

local str = ""

str = str .. "Cards :\n\n"

for name, tab in pairs(tab) do

str = str..name.."\n"

end

str = str .. ""

doShowTextDialog(cid, itemid, str)

return TRUE

end

 

function getPlayerCard(cid, namecard)

dofile("./cardsytem.lua")

local n = namecard

local card = tab[n]

local cardname = card[2]

local cardnumber = getPlayerStorageValue(cid, cardname)

return cardnumber

end

 

function doPlayerAddNewCards(cid, namecard)

dofile("./cardsytem.lua")

local n = namecard

local newcard = tab[n]

setPlayerStorageValue(cid, newcard[2], 1)

return true

end

function getLevelCard(namecard)

dofile("./cardsytem.lua")

local n = namecard

local newcard = tab[n]

local cardlevel = newcard[3]

return cardlevel

end

function getCardprice(namecard)

dofile("./cardsytem.lua")

local n = namecard

local newcard = tab[n]

local newcardlevel = newcard[3]*4

return newcardlevel

end

function getCardId(namecard)

dofile("./cardsytem.lua")

local n = namecard

local newcard = tab[n]

local pricecard = newcard[2]-50000

return pricecard

end

function getPlayerPositionPz(cid)

local pz = getTilePzInfo(getCreaturePosition(cid))

return pz

end

 

function getCardStorage(namecard)

dofile("./cardsytem.lua")

local n = namecard

local newcard = tab[n]

local pricecard = newcard[2]

return pricecard

end

function getExistNameCard(namecard)

dofile("./cardsytem.lua")

local monster = tab

return monster[namecard]

end

 

 

 

Crie um arquivo Lua em talkactions/scripts chamado Card

 

 

Coloque isto:

 

 

local tempo = {

exhausted = 1000,

storage = 88448

}

 

 

function onSay(cid, words, param)

if not getExistNameCard(param) then

doShowTextDialgListCards(cid, 1397)

return true

end

if getPlayerPositionPz(cid) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não e possivel invocar cards em pz")

return true

end

local playerlevelcard = getLevelCard(param)

if(getPlayerStorageValue(cid, tempo.storage) > os.time() and getPlayerStorageValue(cid, tempo.storage) < 100+os.time()) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Espere " .. getPlayerStorageValue(cid, tempo.storage) - os.time() .. ' second' .. ((getPlayerStorageValue(cid, tempo.storage) - os.time()) == 1 and "" or "s") .. " para invocar uma nova card.")

return true

end

if #getCreatureSummons(cid) >= 1 then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Retire o Summon diga /removecard para invocar outro")

return true

end

if getPlayerLevel(cid) < playerlevelcard then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa de "..playerlevelcard.." de level.")

return true

end

if getPlayerCard(cid, param) == 1 then

doPlayerStartCards(cid, param, getThingPos(cid))

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce invoco o "..param..".")

setPlayerStorageValue(cid, tempo.storage, os.time() + tempo.exhausted)

return true

end

return true

end

 

 

Agora crie um arquivo LUA chamado buycard em talkactions/scripts

 

 

 

function onSay(cid, words, param)

local playerlevelcard = getLevelCard(param)

 

if not getExistNameCard(param) then

doShowTextDialgListCards(cid, 1397)

return true

end

if not (doPlayerRemoveMoney(cid, getCardprice(param)) == TRUE) then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa de "..getCardprice(param).." de price.")

return true

end

if getPlayerLevel(cid) < playerlevelcard then

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa de "..playerlevelcard.." de level.")

return true

end

doPlayerAddNewCards(cid, param)

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sucesso voce comprou a card "..param..".")

return true

end

 

Na mesma pasta crie outro arquivo Lua chamado removecard e coloque isto

 

 

function onSay(cid, words, param)

local summons = getCreatureSummons(cid)

for _, k in ipairs(summons) do

doRemoveCreature(k)

return true

end

return true

end

 

 

 

Agora vá em talkactions e abra talkactions.xml e coloque estas tags:

<talkaction words="/invocarcard" event="script" value="card.lua"/>
<talkaction words="/removecard" event="script" value="removecard.lua"/>
<talkaction words="/buycard" event="script" value="buycard.lua"/>

 

Para usar o sistema e facil

Para comprar Cards e so dizer /buycard(Nome da Card)

Para Invocar Cards e so dizer /invocarcard(Nome da Card)

Para remover Cards e so dizer /removecard

 

 

-----Configuraçao do sistema---

O sistema e configurado em cardsytem.lua e de facil configuraçao

 

["Bug"] = {"bug", 50001, 1}

 

Verde(Bug) ----- E o nome da card

Vermelho(bug) ------Creature da card que vai ser invocada

Cyan(5001) ------ Este numero deve ser sempre aumentado por mais a cada card exemplo nesta e 5001 na debaixo sera 5002

Azul(1) ------- Level Necessario para usar a card

 

 

 

----------------------------Funçoes-----------------------------------------

Se voce pretende ultilizar as funçoes para outro sistema ou para o seu propio card sytem bem tanto faz.....
Eu vou explicar cada funçao.



doPlayerStartCards(cid, namecard, pos) ---- Invoca a card(cid, nome da card, posiçao que sera invocado)

doShowTextDialgListCards(cid, itemid) ----Monstra a tabela de Cards em uma Lista(cid, que item aparecera na lista)

getPlayerCard(cid, namecard) ---------Verifica se o Player tem a card(cid, nome da card)

doPlayerAddNewCards(cid, namecard) ----Adciona uma nova card ao player(cid, nome da card)

getLevelCard(namecard) --- Verifica o level da card(nome da card)

getCardprice(namecard) ----Verifica dando uma  deduçao do preço da Crad(Nome da Card)

getCardId(namecard) ------ Verifica o id da card(nome da card)

getPlayerPositionPz(cid) -------Verifica se o player esta em pz(cid)

getCardStorage(namecard) ------ Verifica a storage da card(Nome da Card)

getExistNameCard(namecard) ----- Verifica se existe a Card(Nome da Card)

Link para o comentário
Compartilhar em outros sites

Não e bem yu gi oh mais um pet sytem diferente por cards mais não e mal ideia.

Com estas funçoes e bastante trabalho da para fazer um sistema parecido com yu gi oh

Link para o comentário
Compartilhar em outros sites

dahorinha,mas seria mais dahora se fosse por um item(que depois alguem poderia criar uma sprite de carta pra ele),dai usa actionid(pra sibolizar qual pet é,e que substituiria o storage) no item ,dai se da use no item sumona o bixo,e se da use denovo, remove ele, e que podese invoca até 5 e fazer as as fusões(tres green dragon of red eyes(drafon) vira um red eyes ultimate green dragon(hydra))

aparte riscada é só zuera

 

 

mas pra que se iguala tanta veses a mesma coisa desnessesariamente?(em execesso isso só confundi mais)

tipo esse

local n = namecard
local newcard = tab[n]
local newcardlevel = newcard[3]*4
return newcardlevel

que seria simplesmente

 return tab[namecard][3]*4

Link para o comentário
Compartilhar em outros sites

So por bobagens gosto de coisas assim.

Sei la acho que melhora o visual da funçao ou sei la.

 

Mais então ade yu gi oh e uma boa pensei em desenolver um tabuleiro quando iniciar uma battle mais seria bem chatinho fazer pois teria que um lugar sem arvores e ficaria chato se tivesse arvore removeria ela.

Link para o comentário
Compartilhar em outros sites

caotic,

 

O código está simples, mas contém vários pequenos erros. Porque você chama o arquivo cardsystem.lua uma vez em cada função? Isso é totalmente desnecessário. Simplesmente use dofile no começo da biblioteca.

Link para o comentário
Compartilhar em outros sites

Não sabia pensava quando iniciava uma nova funçao teria que recoloar o dofile pois poderia perder o caminho do direitorio.

 

Obrigado OneShot pela dica.

 

Mais nao traz nennum efeito nocivo ao script.

Link para o comentário
Compartilhar em outros sites

mas se fosse uma arquivo grande o que vc chama por dofile ia pesa muito,mas nesse caso é so uma table,então n vai da lag no sistema.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...