Luga03 331 Postado Junho 22, 2016 Share Postado Junho 22, 2016 (editado) 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 Créditos: BielLucena1291 (Drazyn1291 - Eu) - Por fazer o script inteiro! Os seguintes foram por dá ideias de melhorias! @Poccnn @samlecter @Danihcv Editado Julho 1, 2016 por BielLucena1291 Link para o comentário Compartilhar em outros sites More sharing options...
Diretor Yan Liima 577 Postado Junho 22, 2016 Diretor Share Postado Junho 22, 2016 (editado) 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 Junho 22, 2016 por nedroesdoksdja Link para o comentário Compartilhar em outros sites More sharing options...
Luga03 331 Postado Junho 22, 2016 Autor Share Postado Junho 22, 2016 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 More sharing options...
kttallan 318 Postado Junho 22, 2016 Share Postado Junho 22, 2016 Parabéns otimo codigo.. Rep+ Link para o comentário Compartilhar em outros sites More sharing options...
Mendiguinho91 14 Postado Junho 27, 2016 Share Postado Junho 27, 2016 quando deslogar vai dar erro no console... coloca para checar se o jogador está online e depois checar a storage na função. Link para o comentário Compartilhar em outros sites More sharing options...
Luga03 331 Postado Junho 27, 2016 Autor Share Postado Junho 27, 2016 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 More sharing options...
Poccnn 385 Postado Junho 27, 2016 Share Postado Junho 27, 2016 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 More sharing options...
Luga03 331 Postado Junho 27, 2016 Autor Share Postado Junho 27, 2016 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 More sharing options...
Administrador Administrador 1435 Postado Junho 27, 2016 Administrador Share Postado Junho 27, 2016 Essa ideia é antigona, em 2012 todos os OTs que eu entrava tinha esse script. Muito bacana ver vocês recriando e aperfeiçoando. Link para o comentário Compartilhar em outros sites More sharing options...
samlecter 133 Postado Junho 27, 2016 Share Postado Junho 27, 2016 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 More sharing options...
Poccnn 385 Postado Junho 27, 2016 Share Postado Junho 27, 2016 Sim. Mas isso pode ser resolvido fazendo uma verificação se foi ele ou outro que o movimentou. Link para o comentário Compartilhar em outros sites More sharing options...
Danihcv 335 Postado Junho 27, 2016 Share Postado Junho 27, 2016 @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 More sharing options...
samlecter 133 Postado Junho 27, 2016 Share Postado Junho 27, 2016 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 More sharing options...
Danihcv 335 Postado Junho 27, 2016 Share Postado Junho 27, 2016 @samlecter, sim sim. O ngc msm é deixar o player inatacável. Link para o comentário Compartilhar em outros sites More sharing options...
samlecter 133 Postado Junho 27, 2016 Share Postado Junho 27, 2016 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 More sharing options...
Posts Recomendados