Ir para conteúdo

Away from keyboard [afk] system


Luga03

Posts Recomendados

 

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

 

 

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

  • Diretor

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

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

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

@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?

Link para o comentário
Compartilhar em outros sites

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 ^^

Link para o comentário
Compartilhar em outros sites

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))
 
 
 
 
 

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...