Away from keyboard [afk] system

Luga03
Por Luga03
em Actions e Talkactions
  • 1
  • 2

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino

 

Iaewww! Galerinha Ekz!! Eu estava com preguiça de fazer algo grande, então resolvi criar esse code, eu olhei nos outros e vi que eram muito mal feitos, então recriei pra postar pra vocês.

 

 

 

 

 

Como funciona?

 

 

Você diz !afk on e começa a sair mensagens em cima do player dizendo "Off-line", "Afk!", "Ausente!", etc (configurável) e fica imóvel (para players não moverem o player)

 

 

Para sair do modo ausente, ande com o personagem ou diga "!afk off"

 

 

 

 

 

NEW: Agora player não pode usar comando em área pvp e nem se tiver infight!

 

 

Player quando está com evento ativo não pode ser atacado!

 

 

Agora player não pode ser empurrado!

 

 

Code testado e funcionando 100%

 

 

 

 

 

 

 

 

Como instalar?

 

 

Vá em creaturescripts/scripts/login.lua abra ele e coloque isso:

 

 

 

 

 


registerCreatureEvent(cid, "AwayFromKeyboard1")

registerCreatureEvent(cid, "AwayFromKeyboard2")

setPlayerStorageValue(cid, 3123, -1)

 

Agora, em creaturescripts/scripts/ crie um arquivo chamado AwayFromKeyboard.lua e adicione isso:

 

 

 

 

 


function onPush(cid, target)

if cid ~= target then

if getPlayerStorageValue(target, 3123) ~= -1 then

doPlayerSendCancel(cid, "Você não pode empurrar esse player!")

return false

end

end

return true

end

 

function onCombat(cid, target)

if isPlayer(target) or isPlayer(cid) then

if getPlayerStorageValue(target, 3123) ~= -1 or getPlayerStorageValue(cid, 3123) ~= -1 then

return false

end

end

return true

end

 

Agora em creaturescripts.xml adicione isso:

 

 

 

 

 


<event type="push" name="AwayFromKeyboard1" event="script" value="AwayFromKeyboard.lua"/>

<event type="combat" name="AwayFromKeyboard2" event="script" value="AwayFromKeyboard.lua"/>

 

Vá em talkactions/scripts e crie um arquivo chamado AwayFromKeyboard.lua e adicione isso:

 

 

 

 

 


local msgss = {"AFK!", "OFF!", "Off-Line!", "Ausente!"}

local msgsss = {"On!", "Voltei!", "Online!", "On-Line!"}

 

function sendAfkMsg(cid, oldpos)

if isCreature(cid) then

oldpos1 = getCreaturePosition(cid)

if getPlayerStorageValue(cid, 3123) >= 1 and doComparePositions(oldpos, oldpos1) then

doSendAnimatedText(getCreaturePosition(cid), msgss[math.random(1, #msgss)], math.random(0, 256))

addEvent(sendAfkMsg, 1500, cid, oldpos1)

else

setPlayerStorageValue(cid, 3123, -1)

doSendAnimatedText(getCreaturePosition(cid), msgsss[math.random(1, #msgss)], math.random(0, 256))

end

end

end

 

function onSay(cid, words, param)

if param == "on" then

if getPlayerStorageValue(cid, 3123) >= 1 then

doPlayerSendTextMessage(cid, 27, "Você já está no modo afk!")

else

if getCreatureCondition(cid, CONDITION_INFIGHT) or getTileInfo(getThingPos(cid)).hardcore then

doPlayerSendTextMessage(cid, 27, "Você não pode usar esse comando enquanto estiver em fight ou em área PVP!")

return true

end

setPlayerStorageValue(cid, 3123, 1)

doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga ".. words .." off")

sendAfkMsg(cid, getCreaturePosition(cid))

end

elseif param == "off" then

if getPlayerStorageValue(cid, 3123) >= 1 then

setPlayerStorageValue(cid, 3123, -1)

doPlayerSendTextMessage(cid, 27, "Você acaba de sair do modo afk!")

doSendAnimatedText(getCreaturePosition(cid), msgsss[math.random(1, #msgss)], math.random(0, 256))

else

doPlayerSendTextMessage(cid, 27, "Você não está no modo afk para usar este comando!")

end

else

doPlayerSendTextMessage(cid, 27, "Você precisa declarar algum parâmetro (on/off)!")

end

return true

end

 

Pronto, para finalizar vá em talkactions.xml e adicione isso:

 

 

 

 

 


<talkaction hide="yes" words="!afk" event="script" value="AwayFromKeyboard.lua"/>

 

 

 

 

Espero que gostem do code :D

 

 

 

 

Créditos:

 

 

 

 

 

BielLucena1291 (Drazyn1291 - Eu) - Por fazer o script inteiro!

 

 

Os seguintes foram por dá ideias de melhorias!

 

 

@Poccnn

 

 

@samlecter

 

 

@Danihcv

 

 

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Yan Liima

Scripter,Programador,WebMaster.
avatar
Diretor
Diretor

INFOS

Grupo: DiretorRegistrado: 12/05/12Posts: 818Gênero: MasculinoChar no Tibia: [ADM] Night

Pô bacana xD há 2 anos atrás eu tinha feito um veja como tinha ficado:

Spoiler

-- Créditos para Yan Liima - Night criador da script.
local time = 2    -- em segundos 1 = 1 segundo 2 = 2 segundos...

    local say_events = {}
local function SayText(cid)
    if isPlayer(cid) == TRUE then
    if say_events[getPlayerGUID(cid)] ~= nil then
    if isPlayer(cid) == TRUE then
    doSendAnimatedText(getPlayerPosition(cid),"Ausente!", math.random(01,255))
    end
    say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000 / 2, cid)
    doCreatureSetNoMove(cid, true)
    end
    end
    return TRUE
end
function onSay(cid, words, param, channel)
    if(param == '') then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Utilize '".. words .. "' para ligar e '".. words .. " off' para desligar.")
    return true
    end
    if param == "on" then
    if isPlayer(cid) == TRUE then
    doSendAnimatedText(getPlayerPosition(cid),"Ausente!", math.random(01,255))
    end
    say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000, cid)
    doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você está em modo 'Afk'.")
    doPlayerSendTextMessage(cid,20,"Para sair do modo 'afk' diga ".. words .. " off")
    elseif param == "off" then
    stopEvent(say_events[getPlayerGUID(cid)])
    say_events[getPlayerGUID(cid)] = nil
    doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você não está mais em modo 'Afk'.")
    doCreatureSetNoMove(cid, false)
    end
    return TRUE
end
--**********************************************************************************************--
--|                                      Créditos                                                |
--|                                      By Night                                                |
--|                                      Contato:                                                |
--|                      Skype:         yan.brendo                                               |
--|      página no facebook: https://www.facebook.com/dbuoriginal                                |
--|       Grupo do facebook: https://www.facebook.com/groups/dbuoriginal/                        |
--|       Perfil no Xtibia: http://www.xtibia.com/forum/user/381894-yan-liima/                  |
--|             Não retire os créditos caso a contrario você não irá ganhar nada                 |
--***********************************************************************************************--

 

Seria melhor no lugar de

doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga !afk off")

Por " .. words .. " off ficando assim:

doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga ".. words .." off")

Igual fiz no meu, caso você queira mudar o comando no talkactions.xml não precisa ficar mudando a frase no .lua rsrs

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD]

Newstory dbo+nto+bleach[DOWNLOAD]

 

>> Mais infos <<

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.thumb.png.6840320998d0fc1a4652b3db81a585c0.png

Separador.PNG

Te Ajudei? Rep + e ficamos Quits

imageproxy.png.84dce08dd18d31663a72aa1ce37b858a.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.pngDiscord: Yan Liima #3702

Programador Júnior de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
1 minuto atrás, Yan Liima disse:

Pô bacana xD há 2 anos atrás eu tinha feito um veja como tinha ficado:

  Mostrar conteúdo oculto

-- Créditos para Yan Liima - Night criador da script.

local time = 2    -- em segundos 1 = 1 segundo 2 = 2 segundos...

    local say_events = {}

local function SayText(cid)

    if isPlayer(cid) == TRUE then

    if say_events[getPlayerGUID(cid)] ~= nil then

    if isPlayer(cid) == TRUE then

    doSendAnimatedText(getPlayerPosition(cid),"Ausente!", math.random(01,255))

    end

    say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000 / 2, cid)

    doCreatureSetNoMove(cid, true)

    end

    end

    return TRUE

end

function onSay(cid, words, param, channel)

    if(param == '') then

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Utilize '".. words .. "' para ligar e '".. words .. " off' para desligar.")

    return true

    end

    if param == "on" then

    if isPlayer(cid) == TRUE then

    doSendAnimatedText(getPlayerPosition(cid),"Ausente!", math.random(01,255))

    end

    say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000, cid)

    doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você está em modo 'Afk'.")

    doPlayerSendTextMessage(cid,20,"Para sair do modo 'afk' diga ".. words .. " off")

    elseif param == "off" then

    stopEvent(say_events[getPlayerGUID(cid)])

    say_events[getPlayerGUID(cid)] = nil

    doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você não está mais em modo 'Afk'.")

    doCreatureSetNoMove(cid, false)

    end

    return TRUE

end

--**********************************************************************************************--

--|                                      Créditos                                                |

--|                                      By Night                                                |

--|                                      Contato:                                                |

--|                      Skype:         yan.brendo                                               |

--|      página no facebook: https://www.facebook.com/dbuoriginal                                |

--|       Grupo do facebook: https://www.facebook.com/groups/dbuoriginal/                        |

--|       Perfil no Xtibia: http://www.xtibia.com/forum/user/381894-yan-liima/                  |

--|             Não retire os créditos caso a contrario você não irá ganhar nada                 |

--***********************************************************************************************--

 

Seria melhor no lugar de

doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga !afk off")

Por ".. words .. " off ficando assim:

doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga ".. words .. " off")

Igual fiz no meu, caso você queira mudar o comando no talkactions.xml não precisa ficar mudando a frase no .lua rsrs

Sim Sim, eu tlg nisso, é pq dificilmente o pessoal muda as words ai nem pensei em fazer isso ahsahs

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

kttallan

Lord Sorte
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 06/03/13Posts: 1574Gênero: MasculinoChar no Tibia: Lord Sorte

Parabéns otimo codigo..

 

Rep+

                                                                Scripter em Treinamento

 

Codigos

 

Simples Pet Sistema < New

 

Assim que possivel mais codigos, com criatividade.

Mendiguinho91

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/10/15Posts: 42

quando deslogar vai dar erro no console... coloca para checar se o jogador está online e depois checar a storage na função.

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
1 hora atrás, Mendiguinho91 disse:

quando deslogar vai dar erro no console... coloca para checar se o jogador está online e depois checar a storage na função.

Corrigi

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Deixa eu dar algumas dicas aqui para melhorar esse script.

Ao invés de usar storagevalue, você poderia criar uma tabela e adicionar os player nela; você poderia também deixar de usar o setnomove () e fazer uma mudança na função para verificar se o player saiu de seu lugar, desligando automaticamente o sistema; use o método recursivo apenas para chegar todos e não de um à um, causando assim lag quando tiver diversos jogadores usando o sistema.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Luga03

Gabriel Lucena :D
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 14/04/15Posts: 956Gênero: Masculino
5 minutos atrás, Poccnn disse:

Deixa eu dar algumas dicas aqui para melhorar esse script.

Ao invés de usar storagevalue, você poderia criar uma tabela e adicionar os player nela; você poderia também deixar de usar o setnomove () e fazer uma mudança na função para verificar se o player saiu de seu lugar, desligando automaticamente o sistema; use o método recursivo apenas para chegar todos e não de um à um, causando assim lag quando tiver diversos jogadores usando o sistema.

tlg, mas nem vou melhorar esse script, já que ele é meio inútil, só postei por postar mesmo, pq os que eu tinha achado na net eram mt ruins

Hello! How are you? It's fine? 

 

Okay, so you like my helps? if yes, then do you can like my post, give-me a reputation, you can't?

 

Good morning for everyone! And have a good day!

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

Grupo: AdministradorRegistrado: 09/07/05Posts: 5780Gênero: Outro

Essa ideia é antigona, em 2012 todos os OTs que eu entrava tinha esse script. Muito bacana ver vocês recriando e aperfeiçoando. :EWBTE-min:

DICA

Utilize botão @UP, no início de seu tópico, para atualizar o destaque de seu tópico em "Tópicos Recentes" na index, fará com que mais pessoas o vejam.

 

 

samlecter

"A felicidade só é verdadeira quando compartilhada"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 08/12/15Posts: 309Gênero: Masculino
1 hora atrás, Poccnn disse:

Deixa eu dar algumas dicas aqui para melhorar esse script.

Ao invés de usar storagevalue, você poderia criar uma tabela e adicionar os player nela; você poderia também deixar de usar o setnomove () e fazer uma mudança na função para verificar se o player saiu de seu lugar, desligando automaticamente o sistema; use o método recursivo apenas para chegar todos e não de um à um, causando assim lag quando tiver diversos jogadores usando o sistema.

Desculpe se estiver falando besteira, mas se trocar o setNoMove() pelo q vc disse, outros players iriam poder arrastar/empurrar o player Afk, não?

capa - Copia.png

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Sim. Mas isso pode ser resolvido fazendo uma verificação se foi ele ou outro que o movimentou.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Danihcv

I'm Coordenador, Bitch!
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 08/04/15Posts: 926Gênero: Masculino

@BielLucena1291, isso pode dar merda em pvp do jeito que tá, eu acho.

O ideal seria colocar uma checagem pra ver se o player tá in fight, se tiver, manda return false  e uma msg de q ñ pode estar em battle. E caso não esteja, ele fica impossível de atacar e ser atacado (eu ACHO que dá p fazer isso sem ter q mexer nas sources).

O que acha?

Te ajudei?? REP+ e ficamos quites... happyy.png

Atenciosamente,
                    Danihcv.
                           Abraços!

samlecter

"A felicidade só é verdadeira quando compartilhada"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 08/12/15Posts: 309Gênero: Masculino
5 minutos atrás, Danihcv disse:

@BielLucena1291, isso pode dar merda em pvp do jeito que tá, eu acho.

O ideal seria colocar uma checagem pra ver se o player tá in fight, se tiver, manda return false  e uma msg de q ñ pode estar em battle. E caso não esteja, ele fica impossível de atacar e ser atacado (eu ACHO que dá p fazer isso sem ter q mexer nas sources).

O que acha?

Acho que é assim:

if getCreatureCondition(cid, CONDITION_INFIGHT) and getTileInfo(getThingPos(cid)).pvp then
return false
end

Não testei pq não estou em casa ^^

capa - Copia.png

Danihcv

I'm Coordenador, Bitch!
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 08/04/15Posts: 926Gênero: Masculino

@samlecter, sim sim. O ngc msm é deixar o player inatacável.

Te ajudei?? REP+ e ficamos quites... happyy.png

Atenciosamente,
                    Danihcv.
                           Abraços!

samlecter

"A felicidade só é verdadeira quando compartilhada"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 08/12/15Posts: 309Gênero: Masculino
55 minutos atrás, Poccnn disse:

Sim. Mas isso pode ser resolvido fazendo uma verificação se foi ele ou outro que o movimentou.

Tem como fazer essa verificação em lua? 

Exemplo, caso o player se mexa, ele sai do modo Afk , porém outros players não conseguem arrasta-lo com o mouse

 

 

Na source, creio que seja em distance push (game.cpp)

tem como fazer uma checagem na função de mover os players com o mouse +/- assim: if getPlayerStorageValue(cid, 3123) >= 1 then return false end -- 3123 é a storage quando em modo afk

 

Se for na source, não sei fazer isso em C++.

 

 

em game.cpp, distance push:

 

Tem essa parte abaixo, acho que altera a velocidade que o player é movimentado quando arrastado por outro player: (&& delay > 0)

 

if(Position::areInRange<1,1,0>(movingCreature->getPosition(), player->getPosition()) && delay > 0

&& !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
 
 
 
 
 

 

capa - Copia.png

  • 1
  • 2