[Talkaction] Changename

Krono
Por Krono
em Actions e Talkactions

Krono

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 08/04/15Posts: 247

É um script que eu realmente achei excelente, e ajuda muito a servidores onde esse serviço não é vendido.

 

Segue o script

 

Em data/talkactions/scripts adicione um arquivo com o nome de changename.lua com o seguinte script:

    local config = {

    item = {

    Id = 1111,

    count = 0,

    },

    maxTextLenght = 15,

    blacklistParam = {"account manager", "god", "cm", "gm", "tutor", "tester"},

    minWordLenght = 3,

    delay = 2

    }



    function onSay(cid, words, param, channel)

    local textCancel, t = config.text, string.explode(param, ",")

    if(param == '') then

    return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")

    elseif((getPlayerGUIDByName(t[1]) ~= nil) and (not getBooleanFromString(t[2]))) then

    textCancel = "That name is already in use."

    elseif(getPlayerItemCount(cid, config.item.Id) < config.item.count) then

    textCancel = "You do not fulfill the requirements."

    elseif(not getTilePzInfo(getCreaturePosition(cid))) then

    textCancel = "You must be inside a protection zone to use this command."

    elseif(string.len(tostring(t[1])) >= config.maxTextLenght) then

    textCancel = "You can only use a maximum of " .. config.maxTextLenght .. " characters."

    elseif(string.find(t[1]:lower(), "[^%l%s]") ~= nil) then

    textCancel = "You cannot use symbols."

    else

    for blacklist = 1, table.maxn(config.blacklistParam) do

    if(string.find(t[1]:lower(), config.blacklistParam[blacklist]) ~= nil) then

    textCancel = "Invalid name entry."

    break

    end

    end

    end



    if(config.text ~= textCancel) then

    doPlayerSendCancel(cid, textCancel)

    return true

    end



    local paramTemp, space, oldName = '', '', getCreatureName(cid)

    for word in string.gmatch(t[1], "%a+") do

    if(string.len(word) < config.minWordLenght) then

    doPlayerSendCancel(cid, "Each word must have a minimum of " .. config.minWordLenght .. " characters.")

    return true

    end



    paramTemp = "" .. paramTemp .. "" .. space .. "" .. word .. ""

    if(space == '') then

    space = " "

    end

    end



    local guid = getPlayerGUID(cid)

    t[1] = paramTemp

    doPlayerRemoveItem(cid, config.item.Id, config.item.count)

    if(pcall(doPlayerChangeName, guid, oldName, t[1]) == false) then

    db.executeQuery("INSERT INTO `player_namelocks` (`player_id`, `name`, `new_name`, `date`) VALUES (" .. guid .. ", " .. db.escapeString(oldName) .. ", " .. db.escapeString(t[1]) .. ", " .. os.time() .. ");")

    db.executeQuery("UPDATE `players` SET `name` = " .. db.escapeString(t[1]) .. " WHERE `id` = " .. guid .. " LIMIT 1;")

    end



    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your name has been changed successfully. You will be kicked in " .. config.delay .. " seconds.")

    addEvent(function(cid, forceLogout)

    if(isPlayer(cid)) then

    doRemoveCreature(cid, forceLogout)

    end

    end, config.delay * 1000, cid, false)



    return true

    end

Em talkactions.xml adicione a tag:

    <talkaction words="!changename;/changename;!namechange;/namechange" script="changename.lua" />

Funcional em tfs 0.3.7 / 0.4.0

 

Credito: Ratser

 

Espero que aproveitem esse super script

Danihcv

I'm Coordenador, Bitch!
avatar
Conde
Conde

INFOS

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

Uma dica pra quem quiser isso apenas com quem é premium:

 

Basta adicionar uma checagem de dias premium:

--variaveis /\

function onSay(cid, words, param, channel)

  if getPlayerPremiumDays(cid) > 0 then

--contianuacao do script

end

return true
end

E uma dica, krono: não esqueça de identar (organizar os espaços entre uma linha e outra e o espaçamento no inicio de cada linha) os scripts pra facilitar a visualização dos membros. ^^

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

Atenciosamente,
                    Danihcv.
                           Abraços!

Fir3element

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 16/06/08Posts: 998Gênero: Masculino

Uma dica pra quem quiser isso apenas com quem é premium:

 

Basta adicionar uma checagem de dias premium:

--variaveis /\

function onSay(cid, words, param, channel)

  if getPlayerPremiumDays(cid) > 0 then

--contianuacao do script

end

return true
end

E uma dica, krono: não esqueça de identar (organizar os espaços entre uma linha e outra e o espaçamento no inicio de cada linha) os scripts pra facilitar a visualização dos membros. ^^

pode usar isPremium(cid) tbm

sobre o espaçamento, creio q seja um bug do fórum (aconteceu aqui uma vez)

Krono

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 08/04/15Posts: 247

É como o Fireelement disse, meu post alterou ao posta-lo.

Inclusive o seu também bugou.

Ariel Beltrame

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 6

Adiciona pra ter um custo de 20 barras de ouro ID 9971

YaaHikoo

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 6

Adiciona pra ter um custo de 20 barras de ouro ID 9971

 

Muda isso:

Id = 1111,
count = 0,

Por isso:

    Id = 2160,

    count = 20,

Ariel Beltrame

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 12/04/15Posts: 6

tem como colocar pra aparecer uma mensagem dizendo quando o player nao tem o item ou a quantidade necessária?


e tambem quando o nome foi trocado com sucesso

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

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

Ótimo script Krono :)

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.

 

 

Krono

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 08/04/15Posts: 247

Para a mensagem de item nescessario insuficiente seria esta linha,

textCancel = "You do not fulfill the requirements."

dentro das "aspas" você pode modificar a escrita a vontade, por exemplo para:

textCancel = "Você não tem dinheiro suficiente."

 

Já a mensagem de sucesso seria está:

  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your name has been changed successfully. You will be kicked in " .. config.delay .. " seconds.")

Podendo ser trocado tudo que está dentro das aspas, mais poderá não mostrar o kick automatico.