Proibir nome de monstro script LUA

znotewebsite
em Scripts

znotewebsite

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/06/13Posts: 11

Eae galerinha, eu uso ZNOTE como plataforma por diversos motivos alguns até obrigatórios, mas eu acho ele a melhor plataforma hoje então não ligo, só que eu não sei como bloquear nome de criaturas por lá, teria alguma forma de bloquear nome de criaturas? Tipo ao player logar... nome = dragon,rotworm = kick,ban ou qlqr coisa, teleportado pra algum lugar... Alguém saberia alguma forma de me ajudar?

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

tem como bloquear por script, assim:

 

cria um arquivo chamado monstername.lua em data/creaturescripts/scripts e cole isso dentro:

 

function onLogin(cid)
   local result = doCreateMonster(getCreatureName(cid), getThingPos(cid), false)
   if tonumber(result) then
       doRemoveCreature(result)
   end
return not result
end

 

agora abra o arquivo creaturescripts.xml (data/creaturescripts) e adicione essa tag:

 

<event type="login" name="CheckMonsterName" event="script" value="monstername.lua"/>

5303fg1.png

AdilsonHacker

shutdown -i
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 24/11/12Posts: 474Gênero: Masculino

Amigo testei aqui deu erro , qualquer player que logar o script pensa que e monster é não acontece nada , só da esse erro no console , se desse pra arruma e pra quando o player com nome de monstro logar é for kikado aparecer a msg "Proibido Nomes De Monstro" ou algo assim ficaria legal !

 

SS

 

 

 

post-360171-0-85837700-1370798470_thumb.jpg

 

 

 

Abraços!

Atenciosamente : AdilsonTsunami


Te ajudei? click em 8vxocx.png

 

Meus Trabalhos:

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

ah você usa versão mais antiga, aí complica... testa assim:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
   monsters = xml:read("*all")
   xml:close()
end

function onLogin(cid)

   if monsters and monsters:find('name="'..getCreatureName..'"') then
       return false
   end

return true
end

5303fg1.png

AdilsonHacker

shutdown -i
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 24/11/12Posts: 474Gênero: Masculino

Versão 8.60 , amigo tenta fazer um que não permita o player criar personagens com nome que possamos editar o nomes que não são permitidos! exemplo :

 

Local monster : "demon","frost dragon","fury" , é assim por diante !

 

Só uma ideia!

 

Flw

Atenciosamente : AdilsonTsunami


Te ajudei? click em 8vxocx.png

 

Meus Trabalhos:

znotewebsite

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/06/13Posts: 11

Versão 8.60 , amigo tenta fazer um que não permita o player criar personagens com nome que possamos editar o nomes que não são permitidos! exemplo :

 

Local monster : "demon","frost dragon","fury" , é assim por diante !

 

Só uma ideia!

 

Flw

 

Incentiva o cara ai da um rep :D

 

ah você usa versão mais antiga, aí complica... testa assim:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
monsters = xml:read("*all")
xml:close()
end

function onLogin(cid)

if monsters and monsters:find('name="'..getCreatureName..'"') then
	return false
end

return true
end

 

Cara n funfo nenhum dos dois :\

+rep por ter tentado ajudar

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

usa essa script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
   monsters = xml:read("*all")
   xml:close()
end

function onLogin(cid)

   print(type(monsters))
   print(getDataDir().."monster/monsters.xml")

   if monsters and monsters:find('name="'..getCreatureName..'"') then
       return false
   end

return true
end

 

vai aparecer 2 mensagens no seu console, me mostra elas

5303fg1.png

znotewebsite

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/06/13Posts: 11

usa essa script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
monsters = xml:read("*all")
xml:close()
end

function onLogin(cid)

print(type(monsters))
print(getDataDir().."monster/monsters.xml")

if monsters and monsters:find('name="'..getCreatureName..'"') then
	return false
end

return true
end

 

vai aparecer 2 mensagens no seu console, me mostra elas

 

[Error - CreatureScript Interface]

data/creaturescripts/scripts/monstername.lua:onLogin

Description:

data/creaturescripts/scripts/monstername.lua:13: attempt to concatenate global 'getCreatureName' <a function value>

stack traceback:

data/creaturescripts/scripts/monstername.lua:13: in function <data/creaturescripts/scripts/monstername.lua:8>

Skymagnum

Hamburguer
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/08/12Posts: 1025Char no Tibia: Maurolkit

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
       monsters = xml:read("*all")
       xml:close()
end

function onLogin(cid)

       print(type(monsters))
       print(getDataDir().."monster/monsters.xml")

       if monsters and monsters:find('name="'..getCreatureName(cid)..'"') then
               return false
       end

return true
end

or

function getAllMonsterNames()

local tmp = {}

   local file = io.open("data/monster/monster.xml", "r")

   for i in file:read("*a"):gmatch("<monsters(.-)</monsters>") do
       table.insert(tmp, i:match("monster name=(.-)"))
   end

   return tmp
end

function onLogin(cid)

   if isInArray(getAllMonsterNames(), getCreatureName(cid)) then
       doAddNamelock(getCreatureName(cid))
       return false
   end

   return true
end

jeoz.png

brun123

vash
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 24/09/06Posts: 512

sky, seu loop do for é executado apenas uma vez e a captura é feita incorretamente... o certo seria algo assim:

 

function getAllMonsterNames()
local tmp = {}
local file = io.open("monsters.xml", "r")
for i in file:read("*a"):gmatch("<(.-)>") do
	local name = i:match('.+name="(.-)".+')
	if name then
		table.insert(tmp, name)
	end
end
return tmp
end

 

mas o problema dessa função é que sempre que um player fizer login, o servidor vai ter que abrir o monsters.xml, fazer um loop considerável e depois fechar o arquivo (coisa que faltou na função) e se vários players logarem ao mesmo tempo, o server pode travar... então o mais correto seria abrir o arquivo apenas uma vez e armazenar os nomes dos monstros lidos e guardar as informações em uma variável que permanece até que o servidor feche, assim o arquivo só será aberto uma vez

 

usa esse script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
local text = xml:read("*all")
xml:close()
monsters = {}
for monstername in text:gmatch('name="(.-)"') do
	table.insert(monsters, monstername)
end
end

function onLogin(cid)

if monsters and isInArray(monsters, getCreatureName(cid)) then
	return false
end

return true
end

5303fg1.png

znotewebsite

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/06/13Posts: 11

Funcionou o ultimo, amanha termino de dar os reps de geral!

Qnd tento entrar com dragon lord, na distro da q ele deu out e no tibia fica só carregando :D

 

Valeu ai!

Enself

banido
avatar
Banidos
Banidos

INFOS

Grupo: BanidosRegistrado: 03/06/13Posts: 213

Topico Resolvido / Reportado para Moverem

Usuário banido por divulgação indevida.

vital900

Xtibia, agente se vê por aqui!
avatar
Grão-Duque
Grão-Duque

INFOS

Grupo: Grão-DuqueRegistrado: 28/07/11Posts: 3455Gênero: MasculinoChar no Tibia: Transloko

resolvido/fechado/movido.


 

CoroNelas.png