Ir para conteúdo

[Talkaction] Game


Demonbholder

Posts Recomendados

Boooas galera! E ai, tudo bem? Ontem a noite eu estava tomando um Redbull e percebi que não ira dormir tão cedo, então eu resolvi bolar um pequeno jogo que terá novas versões em breve. O mais impressionante é que eu fiz e deu certo quase de primeira.

 

Bom, vamos parar com a conversa fiada e vamos logo as explicações:

 

Como funciona:

 

Um breve resumo: dois jogadores devem ficar em duas posições escolhidas no script. Um comando inicial !start inicia o jogo, assim cada um recebe um número de carta, que pode variar de 1 a 20. Certo, depois disso vem a segunda parte, a seção de aposta. O primeiro jogador que apostar algo acima de 0 e menor que 1000 com o comando !bet Número vai ser o mandante. Depois disso, os dois jogadores devem falar !accept para ver quem tem a maior carta, assim o vencedor ganhará o dinheiro da aposta. Se algum jogador usar a palavra !reject ao invés de !accept o jogo reiniciará.

 

Algumas prevenções de bugs do sistema:

 

Se o oponente demorar muito para fazer sua jogada, tal como aceitar a aposta, é possível, depois de 3 minutos, o jogador falar !quitgame e o jogo reiniciar. Qualquer membro da staff com acesso maior que 3 pode usar o comando /endgame para encerrar algum jogo em andamento.

O script não deixa jogadores com o mesmo ip utilizarem o sistema por motivos claros.

Há um script de movement para não deixar os jogadores sair do tile após começar o jogo.

Há um script de creaturescripts para não deixar os jogadores logarem após começar o jogo.

 

Bom, é isso, acho que deu pra entender. Eu fiz o script tentando evitar o máximo que algum jogador abuse de bugs.

 

Talkaction:

 

function onSay(cid, words, param)

local random1 = math.random(1, 20)
local pos1 = getThingFromPos({x=, y=, z=, stackpos=253}).uid
local pos2 = getThingFromPos({x=, y=, z=, stackpos=253}).uid
local place1 = {x=, y=, z=}
local place2 = {x=, y=, z=}
local tempo = 180
local random2 = math.random(1, 20)

if words == "!start" then
if isPlayer(pos1) and isPlayer(pos2) and (pos1 == cid or pos2 == cid) then
if getPlayerStorageValue(pos1, 30001) == -1 and getPlayerStorageValue(pos2, 30001) == -1 then
if getPlayerIp(pos1) ~= getPlayerIp(pos2) then
setGlobalStorageValue(30002, -1)
doPlayerSendTextMessage(pos1, 22, "Game starting...")
doPlayerSendTextMessage(pos2, 22, "Game starting...")
setPlayerStorageValue(pos1, 30001, 1)
setPlayerStorageValue(pos2, 30001, 1)
setPlayerStorageValue(pos1, 30002, random1)
setPlayerStorageValue(pos2, 30002, random2)
doPlayerSendTextMessage(pos1, 4, "Sua carta é " .. random1)
doPlayerSendTextMessage(pos2, 4, "Sua carta é " .. random2)
doSendMagicEffect(getThingPos(pos1), 65)
doSendMagicEffect(getThingPos(pos2), 65)
setGlobalStorageValue(30002, tempo + os.time())
else
doPlayerSendCancel(cid, "Você e seu companheiro tem o mesmo ip.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você já esta no meio de um jogo.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você precisa ser um dos dois participantes.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!bet" then
if isNumber(tonumber(param)) and tonumber(param) <= 1000 and tonumber(param) > 0 then
if isPlayer(pos1) and isPlayer(pos2) and (pos1 == cid or pos2 == cid) then
if getPlayerStorageValue(pos1, 30001) == 1 and getPlayerStorageValue(pos2, 30001) == 1 then
setGlobalStorageValue(30002, -1)
setGlobalStorageValue(30001, tonumber(param))
setPlayerStorageValue(pos1, 30001, 2)
setPlayerStorageValue(pos2, 30001, 2)
doPlayerSendTextMessage(pos1, 4, "The bet is " .. param)
doPlayerSendTextMessage(pos2, 4, "The bet is " .. param)
setGlobalStorageValue(30002, tempo + os.time())
else
doPlayerSendCancel(cid, "O jogo não esta no estagio de apostas.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você precisa ser um dos dois participantes.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "A aposta deve ser menor 1000 e maior que 0.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!accept" then
if isPlayer(pos1) and isPlayer(pos2) and (pos1 == cid or pos2 == cid) then
if (getPlayerStorageValue(pos1, 30001) == 3 and pos1 ~= cid) or (getPlayerStorageValue(pos2, 30001) == 3 and pos2 ~= cid) then
local winner = getPlayerStorageValue(pos1, 30002) > getPlayerStorageValue(pos2, 30002) and pos1 or pos2
if getPlayerStorageValue(pos1, 30002) == getPlayerStorageValue(pos2, 30002) then
doPlayerSendTextMessage(pos1, 4, "Empate.")
doPlayerSendTextMessage(pos2, 4, "Empate.")
setPlayerStorageValue(pos1, 30001, -1)
setPlayerStorageValue(pos2, 30001, -1)
setPlayerStorageValue(pos1, 30002, -1)
setPlayerStorageValue(pos2, 30002, -1)
doPlayerSendTextMessage(pos1, 4, "O jogo foi resetado.")
doPlayerSendTextMessage(pos2, 4, "O jogo foi resetado.")
setGlobalStorageValue(30001, -1)
setGlobalStorageValue(30002, -1)
doSendMagicEffect(getThingPos(pos1), 37)
doSendMagicEffect(getThingPos(pos2), 37)
else
doPlayerAddMoney(winner, getGlobalStorageValue(30001))
doPlayerSendTextMessage(pos1, 4, "O ganhador é " .. getCreatureName(winner))
doPlayerSendTextMessage(pos2, 4, "O ganhador é " .. getCreatureName(winner))
setPlayerStorageValue(pos1, 30001, -1)
setPlayerStorageValue(pos2, 30001, -1)
setPlayerStorageValue(pos1, 30002, -1)
setPlayerStorageValue(pos2, 30002, -1)
doPlayerSendTextMessage(pos1, 4, "O jogo foi resetado.")
doPlayerSendTextMessage(pos2, 4, "O jogo foi resetado.")
setGlobalStorageValue(30001, -1)
setGlobalStorageValue(30002, -1)
doSendMagicEffect(getThingPos(pos1), 37)
doSendMagicEffect(getThingPos(pos2), 37)
end
elseif getPlayerStorageValue(pos1, 30001) > 1 and getPlayerStorageValue(pos2, 30001) > 1 and (getPlayerStorageValue(pos1, 30001) ~= 3 or getPlayerStorageValue(pos2, 30001) ~= 3) then
setGlobalStorageValue(30002, -1)
setPlayerStorageValue(cid, 30001, 3)
doPlayerSendTextMessage(pos1, 4, getCreatureName(cid) .. " Aceitou a aposta.")
doPlayerSendTextMessage(pos2, 4, getCreatureName(cid) .. " Aceitou a aposta.")
setGlobalStorageValue(30002, tempo + os.time())
end
end
end

if words == "!reject" then
if isPlayer(pos1) and isPlayer(pos2) and (pos1 == cid or pos2 == cid) then
if getPlayerStorageValue(pos1, 30001) > 1 and getPlayerStorageValue(pos2, 30001) > 1 and (getPlayerStorageValue(pos1, 30001) ~= 3 or getPlayerStorageValue(pos2, 30001) ~= 3) then
setPlayerStorageValue(pos1, 30001, -1)
setPlayerStorageValue(pos2, 30001, -1)
setPlayerStorageValue(pos1, 30002, -1)
setPlayerStorageValue(pos2, 30002, -1)
doPlayerSendTextMessage(pos1, 4, "O jogo foi resetado.")
doPlayerSendTextMessage(pos2, 4, "O jogo foi resetado.")
setGlobalStorageValue(30001, -1)
setGlobalStorageValue(30002, -1)
doSendMagicEffect(getThingPos(pos1), 37)
doSendMagicEffect(getThingPos(pos2), 37)
else
doPlayerSendCancel(cid, "Você não esta no estagio para rejeitar uma aposta.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você precisa ser um dos dois participantes.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "/endgame" or words == "!endgame" then
if getPlayerAccess(cid) > 3 then
if isPlayer(pos1) and isPlayer(pos2) then
if getPlayerStorageValue(pos1, 30001) ~= -1 and getPlayerStorageValue(pos2, 30001) ~= -1 then
setPlayerStorageValue(pos1, 30001, -1)
setPlayerStorageValue(pos2, 30001, -1)
setPlayerStorageValue(pos1, 30002, -1)
setPlayerStorageValue(pos2, 30002, -1)
doTeleportThing(pos1, place1)
doTeleportThing(pos2, place2)
doPlayerSendTextMessage(pos1, 4, "O jogo foi resetado por " .. getCreatureName(cid))
doPlayerSendTextMessage(pos2, 4, "O jogo foi resetado por " .. getCreatureName(cid)) 
setGlobalStorageValue(30001, -1)
doSendMagicEffect(getThingPos(pos1), 37)
doSendMagicEffect(getThingPos(pos2), 37)
setGlobalStorageValue(30002, -1)
else
doPlayerSendCancel(cid, "O jogo ainda não começou.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Não há dois jogadores nas posições marcadas.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você não pode executar este comando.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!quitgame" then
if isPlayer(pos1) and isPlayer(pos2) and (pos1 == cid or pos2 == cid) then
if getGlobalStorageValue(30002) - os.time() <= 0 and getGlobalStorageValue(30002) ~= -1 then
setPlayerStorageValue(pos1, 30001, -1)
setPlayerStorageValue(pos2, 30001, -1)
setPlayerStorageValue(pos1, 30002, -1)
setPlayerStorageValue(pos2, 30002, -1)
doPlayerSendTextMessage(pos1, 4, "O jogo foi resetado.")
doPlayerSendTextMessage(pos2, 4, "O jogo foi resetado.")
setGlobalStorageValue(30001, -1)
setGlobalStorageValue(30002, -1)
doSendMagicEffect(getThingPos(pos1), 37)
doSendMagicEffect(getThingPos(pos2), 37)
else
doPlayerSendCancel(cid, "Você não pode desistir a menos que seu companheiro tenha ficado inativo por muito tempo.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você precisa ser um dos dois participantes.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end
return TRUE
end

 

Explicações:

 

Pos1 e Pos2 são as posições onde os jogadores devem estar.

 

Place1 e Place2 são as posições para onde os jogadores serão teleportados caso o membro da staff usar o comando /endgame.

 

Tag:

 

<talkaction words="!start;!bet;!accept;!reject;!quitgame;/endgame;!endgame" script="NomeDoArquivo.lua" />

 

MoveEvent:

 

function StepOut(cid, item, position, fromPosition)

if getPlayerStorageValue(cid, 30001) > 0 then
doTeleportThing(cid, fromPosition)
else
return TRUE
end
end

 

Explicação:

 

Coloque um Action Id nos dois tiles onde os jogadores devem estar.

 

Tag:

 

<movevent event="StepOut" actionid="Action ID" script="NomeDoArquivo.lua" />

 

CreatureScript:

 

function onLogout(cid)

if getPlayerStorageValue(cid, 30001) > 0 then
doPlayerSendCancel(cid, "You can't logout while you are in a game.")
return FALSE
else
return TRUE
end
end

 

Tag:

 

<event type="logout" name="Game" event="script" value="NomeDoArquivo.lua"/>

 

Prevenção de alguns bugs:

 

Em alguns Ots, é possível que os Storages 30001 e 30002 já estejam sendo usados, caso acontecer, troque no script acima ou troque no outro arquivo que esta sendo usado os Storages.

 

Servidor Testado: New Styller Yourots 0.7.5

 

 

Instalando e testando o sistema:

 

http://www.youtube.com/watch?v=SrzO8P28GuM

 

 

Acho que é isso galera, espero que gostem, até mais galera.

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

funciona em TFS 3.6?

o comando para começar é só "!start", e como faiz para jogar, apos o comando aparece essa mensagem cancelada "-Você precisa ser 1 dos participantes."

 

não mechi em nada do script apenas implantei, as unicas modificações foram as nescessarias para o funcionamento.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...