CA
sistema

Card Sytem

Por caotic, 13 de jun. de 2012 em Mods, funções e outros

card sytem
pet sytem
pets
card de pets
cards
script
otserv
11
3.9k
caoticC
13 de junho de 2012 às 19:09

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)

jhon992J
13 de junho de 2012 às 19:19

To sem tempo pra testar, mais parece legal. Parabéns!

Rep+, e continue trazendo conteúdo bom para o fórum.

caoticC
13 de junho de 2012 às 19:39

Vlw jhon

Vou logo citando que crei as funçoes lib para serem usadas e recomendo muito voce criar scripts adicionais pois as funçoes são muito faceis.

LeoxtibiaL
13 de junho de 2012 às 21:33

Bom sistema, parece ser legal mesmo ^^ Parabéns aí cara! Rep+

VildenV
13 de junho de 2012 às 21:56

Muito legal, estilo yu-gi-oh? Parece ser um bom conteúdo, rep+.

caoticC
14 de junho de 2012 às 12:58

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

VincV
14 de junho de 2012 às 18:25

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

caoticC
14 de junho de 2012 às 18:36

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.

OneshotO
15 de junho de 2012 às 07:17

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.

caoticC
15 de junho de 2012 às 10:51

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.

VincV
15 de junho de 2012 às 12:34

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.