Ir para conteúdo
  • Cadastre-se

action/talkaction Player Muda nome Por Comando se tiver X item.


Posts Recomendados

Em data/talkactions/script    Crie um Arquivo com o nome  playerchangename.lua Cole isto:

Spoiler

function doCorrectString(text)
	if type(text) == "number" then return "" end
	local str = text:explode(" ")
	local finish = {}
	for _, s in ipairs(str) do
		table.insert(finish, s:sub(1, 1):upper()..s:sub(2, #s):lower())
	end
	return table.concat(finish, (str[2] and " " or ""))
end

function doKickPlayer(cid)
	if not isCreature(cid) then return end
	doRemoveCreature(cid, true)
end

function onSay(cid, words, param)
	local maxLen = 20 -- tamanho maximo do nome
	local itemid = 5958 ------ Numero do Item que será removido
	local prohibited = {"!","@","*"} -- simbolos proibidos

	if(param == '') then
		doPlayerSendCancel(cid, "Você deve informar um nome.")
		return true
	end

	for i = 1, #prohibited do
		if string.find(param, prohibited[i]) then
			doPlayerSendCancel(cid, "Não pode usar símbolos em seu nome.")
			return true
		end
	end

	if string.len(param) > maxLen then
		doPlayerSendCancel(cid, "Você pode usar no máximo " .. maxLen .. " letras.")
		return true
	end

	if doCorrectString(param) ~= param then
		doPlayerSendCancel(cid, "Letras maiúsculas apenas no começo.")
		return true
	end

	if playerExists(param) then
		doPlayerSendCancel(cid, "Já existe um jogador com esse nome.")
		return true
	end

	if not getTilePzInfo(getThingPos(cid)) then
		doPlayerSendCancel(cid, "So pode ser usado em pz.")
		return true
	end

	if getPlayerItemCount(cid, itemid) >= 1 then
		doPlayerRemoveItem(cid, itemid, 1)
		db.Query("UPDATE `players` SET `name` = '"..param.."' WHERE `id` = "..getPlayerGUID(cid)..";")
		doPlayerSendTextMessage(cid, 25, "Você será kickado em 5 segundos.")
		addEvent(doKickPlayer, 5*1000, cid)
	else
		doPlayerSendCancel(cid, "Você não possui o item " .. getItemNameById(itemid) .. ".")
	end

	return true
end

 

em Talkaction Coloque isto

 

<talkaction words="!name" filter="quotation" event="script" value="playerchangename.lua"/>

 

No caso será usado assim:  (!name"Jon Snow)

 

Creditos @Noninhouh

Editado por Cain Jorge (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Tópico Aprovado! Obrigado por contribuir com a comunidade! REP+

 

Editado por Werner (veja o histórico de edições)

Talvez você queira ver:

BestBaiak

[FAQ]Remere's Map Editor - Dúvidas e soluções de bugs 

 

Contato:

1.png.dadb3fc3ee6ffd08292705b6a71e3d88.png Discord:

Link para o post
Compartilhar em outros sites

@Cain Jorge Boa noite amigo, pelo que vi, ele não faz uma checagem se já possui esse nome no banco de dados, então creio eu que isso causará um problema caso o player coloque um nome já existente, corrija-me se estiver errado.

Idéias são à prova de balas.

xS0NYx here

"Ser ateu é viver em razão de fatos, não de crenças; É aproveitar essa vida, não desperdiça-la na esperança de viver outra; É fazer o bem de coração, não por devoção. Ser ate, simplesmente, um ser livre."

Link para o post
Compartilhar em outros sites
Spoiler

function doCorrectString(text)
	if type(text) == "number" then return "" end
	local str = text:explode(" ")
	local finish = {}
	for _, s in ipairs(str) do
		table.insert(finish, s:sub(1, 1):upper()..s:sub(2, #s):lower())
	end
	return table.concat(finish, (str[2] and " " or ""))
end

function doKickPlayer(cid)
	if not isCreature(cid) then return end
	doRemoveCreature(cid, true)
end

function onSay(cid, words, param)
	local maxLen = 20 -- tamanho maximo do nome
	local itemid = 5958 ------ Numero do Item que será removido
	local prohibited = {"!","@","*"} -- simbolos proibidos

	if(param == '') then
		doPlayerSendCancel(cid, "Você deve informar um nome.")
		return true
	end

	for i = 1, #prohibited do
		if string.find(param, prohibited[i]) then
			doPlayerSendCancel(cid, "Não pode usar símbolos em seu nome.")
			return true
		end
	end

	if string.len(param) > maxLen then
		doPlayerSendCancel(cid, "Você pode usar no máximo " .. maxLen .. " letras.")
		return true
	end

	if doCorrectString(param) ~= param then
		doPlayerSendCancel(cid, "Letras maiúsculas apenas no começo.")
		return true
	end

	if playerExists(param) then
		doPlayerSendCancel(cid, "Já existe um jogador com esse nome.")
		return true
	end

	if not getTilePzInfo(getThingPos(cid)) then
		doPlayerSendCancel(cid, "So pode ser usado em pz.")
		return true
	end

	if getPlayerItemCount(cid, itemid) >= 1 then
		doPlayerRemoveItem(cid, itemid, 1)
		db.Query("UPDATE `players` SET `name` = '"..param.."' WHERE `id` = "..getPlayerGUID(cid)..";")
		doPlayerSendTextMessage(cid, 25, "Você será kickado em 5 segundos.")
		addEvent(doKickPlayer, 5*1000, cid)
	else
		doPlayerSendCancel(cid, "Você não possui o item " .. getItemNameById(itemid) .. ".")
	end

	return true
end

 

 

Acho que a função assim está consertada, como o @caiohp disse.

Não vou dar certeza que irá funcionar pois não sei se essa função playerExists(name) checa players offline também.

Editado por Noninhouh
Dúvidas (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Noninhouh Nunca usei essa função playerExists, não sei como ela funciona, mas se ela não funcionar é só fazer uma consulta no bd com o nome desejado e checar se retorna a algum ja existente.

Idéias são à prova de balas.

xS0NYx here

"Ser ateu é viver em razão de fatos, não de crenças; É aproveitar essa vida, não desperdiça-la na esperança de viver outra; É fazer o bem de coração, não por devoção. Ser ate, simplesmente, um ser livre."

Link para o post
Compartilhar em outros sites
Em 06/10/2017 em 01:06, Noninhouh disse:
  Ocultar conteúdo


function doCorrectString(text)
	if type(text) == "number" then return "" end
	local str = text:explode(" ")
	local finish = {}
	for _, s in ipairs(str) do
		table.insert(finish, s:sub(1, 1):upper()..s:sub(2, #s):lower())
	end
	return table.concat(finish, (str[2] and " " or ""))
end

function doKickPlayer(cid)
	if not isCreature(cid) then return end
	doRemoveCreature(cid, true)
end

function onSay(cid, words, param)
	local maxLen = 20 -- tamanho maximo do nome
	local itemid = 5958 ------ Numero do Item que será removido
	local prohibited = {"!","@","*"} -- simbolos proibidos

	if(param == '') then
		doPlayerSendCancel(cid, "Você deve informar um nome.")
		return true
	end

	for i = 1, #prohibited do
		if string.find(param, prohibited[i]) then
			doPlayerSendCancel(cid, "Não pode usar símbolos em seu nome.")
			return true
		end
	end

	if string.len(param) > maxLen then
		doPlayerSendCancel(cid, "Você pode usar no máximo " .. maxLen .. " letras.")
		return true
	end

	if doCorrectString(param) ~= param then
		doPlayerSendCancel(cid, "Letras maiúsculas apenas no começo.")
		return true
	end

	if playerExists(param) then
		doPlayerSendCancel(cid, "Já existe um jogador com esse nome.")
		return true
	end

	if not getTilePzInfo(getThingPos(cid)) then
		doPlayerSendCancel(cid, "So pode ser usado em pz.")
		return true
	end

	if getPlayerItemCount(cid, itemid) >= 1 then
		doPlayerRemoveItem(cid, itemid, 1)
		db.Query("UPDATE `players` SET `name` = '"..param.."' WHERE `id` = "..getPlayerGUID(cid)..";")
		doPlayerSendTextMessage(cid, 25, "Você será kickado em 5 segundos.")
		addEvent(doKickPlayer, 5*1000, cid)
	else
		doPlayerSendCancel(cid, "Você não possui o item " .. getItemNameById(itemid) .. ".")
	end

	return true
end

 

 

Acho que a função assim está consertada, como o @caiohp disse.

Não vou dar certeza que irá funcionar pois não sei se essa função playerExists(name) checa players offline também.

 

Amigo esse script não está funcionando, qualquer nome que eu coloco fala que já existe

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Sphynx1
      Olá comunidade.
      Eu criei um script a madrugada passada para tentar ajudar um amigo que usa 'OTX' porém dá um erro bizarro no 'lib/compat.lua' e a função 'doAddPlayerOutfit' retorna valor 'NIL'. Eu não sei como resolver, mas está funcionando perfeitamente no 'TFS 0.4'. Espero que alguém em algum lugar do tempoespaço possa se beneficiar desse script já que os que encontrei estão todos muito feios e confusos.

      1. Acesse a pasta 'data/talkactions/scripts' e crie um novo 'arquivo.lua' chamado 'addonpresent.lua', dentro adicione o conteúdo abaixo.
      function onSay(cid, words, param, channel) local maleOutfits = {["citizen"] = {128}, ["mage"] = {130}, ["knight"] = {131}, ["nobleman"] = {132}, ["summoner"] = {133}, ["warrior"] = {134} } local femaleOutfits = {["citizen"] = {136}, ["mage"] = {138}, ["knight"] = {139}, ["nobleman"] = {140}, ["summoner"] = {141}, ["warrior"] = {142} } local mensagens = {"Você recebeu o seu addon e consumiu o item bônus para isto.", "Verifique o que você digitou e tente novamente, parametros inválidos.", "Você não possui o item necessário para receber um addon.", "Certifique-se que você digitou o nome do addon corretamente e tente mais uma vez."} local efeitinga = {[1] = {name = CONST_ME_POFF}, [2] = {name = CONST_ME_CAKE}, [3] = {name = CONST_ME_HEARTS}, [4] = {name = CONST_ME_GIFT_WRAPS} -- efeitos que seram exibidos } local param = string.lower(param) if not isPremium(cid) then doCreatureSay(cid, "Você não possui Premium Account, portanto não poderá utilizar o item de addon.", TALKTYPE_ORANGE_1) -- MSG que será exibida p/ o nao premium return true end if getPlayerItemCount(cid, 6497) > 0 then -- 6497 é o ID do item que será usado por você, se for maior que 0 a quanidade na sua bag então if param ~= "" and maleOutfits[param] and femaleOutfits[param] then doPlayerRemoveItem(cid, 6497, 1) -- o item 6497 será consumido doCreatureSay(cid, mensagens[1], TALKTYPE_ORANGE_1) for k, v in pairs(efeitinga) do doSendMagicEffect(getCreaturePosition(cid), v.name) end if getPlayerSex(cid) == 0 then doPlayerAddOutfit(cid, femaleOutfits[param][1], 3) elseif getPlayerSex(cid) == 1 then doPlayerAddOutfit(cid, maleOutfits[param][1], 3) end else doCreatureSay(cid, mensagens[2], TALKTYPE_ORANGE_1) end else doCreatureSay(cid, mensagens[3], TALKTYPE_ORANGE_1) end return true end  
      2. Regresse até 'data/talkactions' e abra o arquivo 'talkactions.xml', dentro adicione o conteúdo abaixo.
      <talkaction words="!addon" event="script" value="addonpresent.lua"/>  
       
    • Por Movie
      Tentei fazer esse talkactions , mas não deu certo , alguém poderia me ajudar ?
       

       
         
       
    • Por eviltox
      Olá galera, tenho um problema com um script gringo.    
      Então a Função do Script é Ficar Mudando o Addon e sua cor Continuamente.
      O único problema do script até agora é a hora que o player desloga.   
       
      Então esse é o meu pedido, Gostaria de adicionar um OnLogout ou um meio de encerrar o script quando o player desloga(não entendo muito de script, mas acho que é isso que falta, se não for agradeço em adicionarem oque falta. *(Versão do TFS 0.3.1)*     
       
      O Script é esse:
      O Erro é esse:
      Dês de já, Agradeço. Darei Rep+ Para quem ajudar, mesmo que não funcione. Grato   
    • Por rolas69
      Estou com problema no talkaction /attr.
       
      Uso TFS 0.4 que veio sem o talk.
       
      Adicionei com a tag <talkaction log="yes" words="/attr" access="5" script="attr.lua"/> mas sempre dava "unknown comand". Quando mudei pra <talkaction log="yes" words="/attr" access="5" event="function" value="thingProporties"/>, parou de dar erro e aparece o efeito do script, mas nada acontece com o item/teleporte etc...
      O script adicionado é esse:



       
      Na segunda tag, o comando usado sem erro é por ex. /attr set attack 20.
       
      Algm sabe o que pode estar errado?
    • Por jonatasfl
      Ola, galera preciso de um talkaction que faça o seguinte, quando o player alcançar lvl 160 ele ganhara um item para sua vocação, achei um talkaction ele funciona e tudo mas ele só da o item se vc nao tiver promotion, caso vc for Master sorcerer e etc vc n ganha o item, e eu queria que ganhasse, tem como alguem me ajudar? vou postar o script que eu tenho. 
       
         
                  no talkactions.xml    
      Desculpe estar sem os créditos, não lembro quem criou o script.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo