Ir para conteúdo
  • Cadastre-se

(Resolvido)[Duvida] Adicionando skill automatico


Ir para solução Resolvido por Fir3element,

Posts Recomendados

Bom pessoal, tenho em meu otserver aqui, quando o player cria o char dele ja cai com os items desejados.

 

segue a baixo

local firstItems = {}
firstItems[0] =
{
2173,
2525,
3965,
2124,
2457,
2647,
2643
}
firstItems[1] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[2] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[3] =
{
2173,
2499,
8888,
2507,
2195,
8851,
6529,
7366,
2537
}
firstItems[4] =
{
2173,
2499,
8889,
2507,
2195,
2537,
8926
}



function onLogin(cid)
if getPlayerStorageValue(cid, 30001) == -1 then
for i = 1, table.maxn(firstItems[getPlayerVocation(cid)]) do
doPlayerAddItem(cid, firstItems[getPlayerVocation(cid)][i], 1)
end
if getPlayerSex(cid) == 0 then
doPlayerAddItem(cid, 2167, 2)
else
doPlayerAddItem(cid, 2167, 2)
end
local bag = doPlayerAddItem(cid, 1988, 1)
doAddContainerItem(bag, 2160, 100)
doAddContainerItem(bag, 2672, 10)
setPlayerStorageValue(cid, 30001, 1)
end
return TRUE
end

gostaria de estar adicionando para ele estar adicionando skills tbm

 

exemplo:

Paladin distance 350 Magic Level 30

Knight axe 350 Magic Level 11

Sorcerer and Druid Magic Level 200

 

obs: se eu por no config.lua pra nascer com ml vai para todas vocaçoes, sera que é possivel fazer isso ?

Link para o post
Compartilhar em outros sites

O tópico foi movido para a área correta, preste mais atenção da próxima vez!

Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:

De: "OTServAprovação de Tópicos de Conteúdos"

Para: "OTServSuporte OTServSuporte de Scripts"

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Existem funções para fazer isso por script, (doPlayeraddSkill, addskilltry..) mas já que vc quer que seja na criação do player, vc deveria fazer pelo seu banco de dados.  Você usa Account manager ou usa Site para fazer as contas?

Link para o post
Compartilhar em outros sites

Olá. Tente esse script (não testei,mas creio que vai funcionar):

 

local vocacao = getPlayerVocation(cid)


local firstItems = {}
firstItems[0] =
{
2173,
2525,
3965,
2124,
2457,
2647,
2643
}
firstItems[1] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[2] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[3] =
{
2173,
2499,
8888,
2507,
2195,
8851,
6529,
7366,
2537
}
firstItems[4] =
{
2173,
2499,
8889,
2507,
2195,
2537,
8926
}



function onLogin(cid)
if getPlayerStorageValue(cid, 30001) == -1 then
for i = 1, table.maxn(firstItems[getPlayerVocation(cid)]) do
doPlayerAddItem(cid, firstItems[getPlayerVocation(cid)], 1)
else
if vocacao == 1 or vocacao == 2 then
doPlayerAddMagLevel(cid, 200)
elseif vocacao == 3 then
doPlayerAddSkill(cid, SKILL_DISTANCE, 340)
doPlayerAddMagLevel(cid, 30)
elseif vocacao == 4 then
doPlayerAddSkill (cid, SKILL_AXE, 340)
doPlayerAddMagLevel (cid, 11)
end
if getPlayerSex(cid) == 0 then
doPlayerAddItem(cid, 2167, 2)
else
doPlayerAddItem(cid, 2167, 2)
end
local bag = doPlayerAddItem(cid, 1988, 1)
doAddContainerItem(bag, 2160, 100)
doAddContainerItem(bag, 2672, 10)
setPlayerStorageValue(cid, 30001, 1)
end
return TRUE
end

 

Explicações:

 

if vocacao == 1 or vocacao == 2 then
doPlayerAddMagLevel(cid, 200)

Aqui são as vocações Sorcerer e Druid,para alterar o ML que irá receber ao criar o char,mude o "200" da segunda linha para o valor que desejar (Nesse caso,usei o do seu exemplo).

 

 

elseif vocacao == 3 then
doPlayerAddSkill(cid, SKILL_DISTANCE, 340)

doPlayerAddMagLevel(cid, 30)

Aqui é a vocação Paladin. Para alterar a skill de distance que irá receber ao criar o char,mude o "340" para o valor que desejar,e para alterar o ML,mude o "30" para qualquer outro valor.

 

 

elseif vocacao == 4 then
doPlayerAddSkill (cid, SKILL_AXE, 340)
doPlayerAddMagLevel (cid, 11)

Aqui é a vocação Knight. Pra mudar o skill e o valor que ele vai receber,altere "SKILL_AXE, 340" (Axe é a skill que ele vai receber,pode trocar por Sword ou Club,340 é a quantidade de skill que ele vai ganhar). Para o ML,mesma coisa do Paladin.

 

Tentei explicar ao máximo como modificar para ficar mais fácil :P

Se der algum erro,por favor explique-o.

 

Não entendi a sua última pergunta.

 

"obs: se eu por no config.lua pra nascer com ml vai para todas vocaçoes, sera que é possivel fazer isso ?"

Link para o post
Compartilhar em outros sites
  • Sub-Admin

certinho :P

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

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

bom pessoal, teste aqui, nao deu erro no console nada. mas nao adicionou nada pra nenhuma vocação.

 

pode verificar na imagem

 

http://prntscr.com/6jyypr

 

pode ser que eu tenha adicionado errado ou seila

local firstItems = {}
firstItems[0] =
{
2173,
2525,
3965,
2124,
2457,
2647,
2643
}
firstItems[1] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[2] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[3] =
{
2173,
2499,
8888,
2507,
2195,
8851,
6529,
7366,
2537
}
firstItems[4] =
{
2173,
2499,
8889,
2507,
2195,
2537,
8926
}



function onLogin(cid)
if getPlayerStorageValue(cid, 30001) == -1 then
for i = 1, table.maxn(firstItems[getPlayerVocation(cid)]) do
doPlayerAddItem(cid, firstItems[getPlayerVocation(cid)][i], 1)
end
if getPlayerSex(cid) == 0 then
doPlayerAddItem(cid, 2167, 2)
else
doPlayerAddItem(cid, 2167, 2)
end
local bag = doPlayerAddItem(cid, 1988, 1)
doAddContainerItem(bag, 2160, 100)
doAddContainerItem(bag, 2672, 10)
setPlayerStorageValue(cid, 30001, 1)

if vocacao == 1 or vocacao == 2 then
doPlayerAddMagLevel(cid, 200)

elseif vocacao == 3 then
doPlayerAddSkill(cid, SKILL_DISTANCE, 345)
doPlayerAddMagLevel(cid, 30)

elseif vocacao == 4 then
doPlayerAddSkill (cid, SKILL_AXE, 345)
doPlayerAddSkill (cid, SKILL_SHIELDING, 345)
doPlayerAddMagLevel (cid, 12)
end
end
return TRUE
end
Link para o post
Compartilhar em outros sites

 

bom pessoal, teste aqui, nao deu erro no console nada. mas nao adicionou nada pra nenhuma vocação.

 

pode verificar na imagem

 

http://prntscr.com/6jyypr

 

pode ser que eu tenha adicionado errado ou seila

local firstItems = {}
firstItems[0] =
{
2173,
2525,
3965,
2124,
2457,
2647,
2643
}
firstItems[1] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[2] =
{
2173,
2499,
8871,
2507,
2195,
8918,
8922
}
firstItems[3] =
{
2173,
2499,
8888,
2507,
2195,
8851,
6529,
7366,
2537
}
firstItems[4] =
{
2173,
2499,
8889,
2507,
2195,
2537,
8926
}



function onLogin(cid)
if getPlayerStorageValue(cid, 30001) == -1 then
for i = 1, table.maxn(firstItems[getPlayerVocation(cid)]) do
doPlayerAddItem(cid, firstItems[getPlayerVocation(cid)][i], 1)
end
if getPlayerSex(cid) == 0 then
doPlayerAddItem(cid, 2167, 2)
else
doPlayerAddItem(cid, 2167, 2)
end
local bag = doPlayerAddItem(cid, 1988, 1)
doAddContainerItem(bag, 2160, 100)
doAddContainerItem(bag, 2672, 10)
setPlayerStorageValue(cid, 30001, 1)

if vocacao == 1 or vocacao == 2 then
doPlayerAddMagLevel(cid, 200)

elseif vocacao == 3 then
doPlayerAddSkill(cid, SKILL_DISTANCE, 345)
doPlayerAddMagLevel(cid, 30)

elseif vocacao == 4 then
doPlayerAddSkill (cid, SKILL_AXE, 345)
doPlayerAddSkill (cid, SKILL_SHIELDING, 345)
doPlayerAddMagLevel (cid, 12)
end
end
return TRUE
end

Sim,você adicionou errado.

Adicione "local vocacao = getPlayerVocation(cid)" no início do script.

@EDIT

Não se esqueça de criar outro char para testar.

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

Dependendo do TFS não vai funcionar, tem um certo limite na função.

Tenta esse:

local guid = getPlayerGUID(cid)
function addSkill(skillid, amount)
    return db.executeQuery("UPDATE `player_skills` SET `value` = `value` + " .. amount .. " WHERE `player_id` = " .. guid .. " and `skillid` = " .. skillid)
end

function addMagLevel(amount)
    return db.executeQuery("UPDATE `players` SET `maglevel` = `maglevel` + " .. amount .. " WHERE `id` = " .. guid)
end

local firstItems = {
    [0] = {2173, 2525, 3965, 2124, 2457, 2647, 2643},
    [1] = {2173, 2499, 8871, 2507, 2195, 8918, 8922},
    [2] = {2173, 2499, 8871, 2507, 2195, 8918, 8922},
    [3] = {2173, 2499, 8888, 2507, 2195, 8851, 6529, 7366, 2537},
    [4] = {2173, 2499, 8889, 2507, 2195, 2537, 8926}
}

function onLogin(cid)
    if getPlayerStorageValue(cid, 30001) == -1 then
        local voc, bag = getPlayerVocation(cid), doPlayerAddItem(cid, 1988, 1)
        for i = 1, table.maxn(firstItems[voc]) do
            doPlayerAddItem(cid, firstItems[voc][i], 1)
        end

        doPlayerAddItem(cid, 2167, 2)
        doAddContainerItem(bag, 2160, 100)
        doAddContainerItem(bag, 2672, 10)
        setPlayerStorageValue(cid, 30001, 1)
        if isInArray({1, 2, 5, 6}, voc) then
            addMagLevel(200)
        elseif voc == 3 or voc == 7 then
            addSkill(SKILL_DISTANCE, 350)
            addMagLevel(30)
        elseif voc == 4 or voc == 8 then
            addSkill(SKILL_AXE, 350)
            addSkill(SKILL_SHIELDING, 350)
            addMagLevel(11)
        end

        doRemoveCreature(cid, true) -- Precisa deslogar o player para adicionar as skills
    end
    return true
end
Editado por fireelement (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@colpsolain mano, do adicionei la, mas não foi também.

@fireelement testei o seu e deu um erro aqui, e quando entro no acc manager ele nem loga,  no console diz que logo e deslogo

 

http://prntscr.com/6k0zc9

 

 

estou testando na tfs 0.4 proto 8.6

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

@colpsolain mano, do adicionei la, mas não foi também.

@fireelement testei o seu e deu um erro aqui, e quando entro no acc manager ele nem loga,  no console diz que logo e deslogo

 

http://prntscr.com/6k0zc9

 

 

estou testando na tfs 0.4 proto 8.6

Quando você adicionou a linha,não aconteceu nada ou deu erro? (É no login.lua onde você está colocando ou em outro lugar? especifique).

Link para o post
Compartilhar em outros sites

ata, eu tava colocando no firstitems. entao é no login lua ?

Não não,é que se fosse no login.lua eu ia pensar em outro jeito (acredito que estaria infuncional se estivesse fazendo por ele). Vou tentar denovo aqui,já edito com o script.

 

@EDIT

 

Tenta isso aqui:

Vai no "data\creaturescripts\scripts" e cria um novo arquivo chamado "InicialSkill.lua". Coloque isso dentro:

.

 

Depois vai em "data\creaturescripts",abre o "creaturescripts.xml" e adiciona essa tag:

.

 

Não testei denovo,pois estou sem nenhum servidor de teste aqui.

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

Troca a storage no script do ColpSolain, vou tentar arrumar o meu.

 

@ColpSolain

Arruma a segunda linha do seu script.

Fiz o teste aqui e foi o que eu disse, skill/maglevel tem um certo limite usando a função (não adicionou os 200).

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

brother, ta dificil rsrsrs nao foi nao em @Colpsolain

 

olha o que deu 

 

http://prntscr.com/6k6sxu

 

 

acho que vou se for tipo uma quest é melhor né. se nao der esse, tem como voce uma quest com essas funcoes ?

Link para o post
Compartilhar em outros sites

brother, ta dificil rsrsrs nao foi nao em @Colpsolain

 

olha o que deu 

 

http://prntscr.com/6k6sxu

 

 

acho que vou se for tipo uma quest é melhor né. se nao der esse, tem como voce uma quest com essas funcoes ?

Troca a segunda linha:

local vocation = getvocationation(cid)

 

por:

local vocation = getPlayerVocation(cid)
Link para o post
Compartilhar em outros sites

nada fire

 

ele nao deu bug, mas também nao fez nada. criei uns 2 chares e nada

 

to pensando aqui

 

tem como adicionar isso nesse script aqui ?

-- SCRIPT COM TODOS OS DIREITOS RESERVADOS A FIREELEMENT TIBIAKING --

function onUse(cid, item, frompos, item2, topos)
    local config = {
        level = 350, -- Level para resetar
        _level = 350, -- Level depois do reset. Se quiser voltar pro level que o player estava antes, usa getPlayerLevel(cid)
        str = 4597, -- Storage
        resets = 20, -- Quantidade de resets adicionado
        guid = getPlayerGUID(cid), -- UID do player
        msg = {
            "Parabens, Voce Ganhou 20 RESETS. Voce sera deslogado por motivo de seguranca.", -- Mensagem recebida ao concluir a quest
            "Desculpe. Nao e possivel." -- Mensagem recebida se o player jรก fez a quest
        }
    }

    if item.uid == config.str then
        if getPlayerStorageValue(cid, config.str) == -1 then
            doPlayerAddLevel(cid, config.level * config.resets)
            setResets(cid, config.resets)
            doPlayerSendTextMessage(cid, 22, config.msg[1])
            doSendMagicEffect(frompos, CONST_ME_MAGIC_BLUE)
            setPlayerStorageValue(cid, config.str, 1)
			doTeleportThing(cid,{x=101, y=116, z=7})
			doRemoveCreature(cid, true)
            db.executeQuery("UPDATE `players` SET `level` = " .. config._level .. ", `experience` = " .. getExperienceForLevel(config._level) .. " WHERE `id` = " .. config.guid)
        else
            doPlayerSendTextMessage(cid, 22, config.msg[2])
        end
    end
    return true
end

Esse dai é uma quest que da reset . se der pra adicionar pra dar os skills ai nao tem problema.

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

Primeiro vá na sua lib/functions adicione essas 2 funções:

function doPlayerSetMagic(cid, amount)	
	
	local pid = getPlayerGUID(cid)

		db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid)

	return true
end

function doPlayerSetSkill(cid, skill, amount)
	local pid = getPlayerGUID(cid) 

		db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";") 
		
	return true 
end

Agora como pediu a alteração do script do @fireelement :

-- SCRIPT COM TODOS OS DIREITOS RESERVADOS A FIREELEMENT TIBIAKING --

function onUse(cid, item, frompos, item2, topos)
    local config = {
        level = 350, -- Level para resetar
        _level = 350, -- Level depois do reset. Se quiser voltar pro level que o player estava antes, usa getPlayerLevel(cid)
        str = 4597, -- Storage
        resets = 20, -- Quantidade de resets adicionado
        guid = getPlayerGUID(cid), -- UID do player
        msg = {
            "Parabens, Voce Ganhou 20 RESETS. Voce sera deslogado por motivo de seguranca.", -- Mensagem recebida ao concluir a quest
            "Desculpe. Nao e possivel." -- Mensagem recebida se o player jรก fez a quest
        },
        voc_sorc_druid = {1, 2, 5, 6},
        voc_pala = {3, 7},
        voc_kina = {4, 8},
    }

    if item.uid == config.str then
        if getPlayerStorageValue(cid, config.str) == -1 then
            doPlayerAddLevel(cid, config.level)
            setResets(cid, config.resets)
            doPlayerSendTextMessage(cid, 22, config.msg[1])
            doSendMagicEffect(frompos, CONST_ME_MAGIC_BLUE)
            setPlayerStorageValue(cid, config.str, 1)
			doTeleportThing(cid,{x= 101, y= 116, z= 7})
			db.executeQuery("UPDATE `players` SET `level` = " .. config._level .. ", `experience` = " .. getExperienceForLevel(config._level) .. " WHERE `id` = " .. config.guid)
			if isInArray(config.voc_sorc_druid, getPlayerVocation(cid)) then
				doPlayerSetMagic(cid, 200)
doRemoveCreature(cid,true)
			elseif isInArray(config.voc_pala, getPlayerVocation(cid)) then
				doPlayerSetMagic(cid, 30)
				doPlayerSetSkill(cid, SKILL_DISTANCE, 350)
                                doRemoveCreature(cid,true)
			elseif isInArray(config.voc_kina, getPlayerVocation(cid)) then
				doPlayerSetMagic(cid, 11)
				doPlayerSetSkill(cid,  SKILL_AXE, 350)
                                doRemoveCreature(cid,true)
			end
        else
            doPlayerSendTextMessage(cid, 22, config.msg[2])
        end
    end
    return true
end

abrçs

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

EQD4Qy4.gif

Link para o post
Compartilhar em outros sites

Consegui arrumar o meu:

* o client não vai reconhecer a skill real mas acho que está tudo ok, verifiquei na database

local firstItems = {
    [0] = {2173, 2525, 3965, 2124, 2457, 2647, 2643},
    [1] = {2173, 2499, 8871, 2507, 2195, 8918, 8922},
    [2] = {2173, 2499, 8871, 2507, 2195, 8918, 8922},
    [3] = {2173, 2499, 8888, 2507, 2195, 8851, 6529, 7366, 2537},
    [4] = {2173, 2499, 8889, 2507, 2195, 2537, 8926}
}

function onLogin(cid)
    local guid = getPlayerGUID(cid)
    local function addSkill(skillid, amount)
        db.executeQuery("UPDATE `player_skills` SET `value` = " .. amount .. " WHERE `player_id` = " .. guid .. " and `skillid` = " .. skillid)
    end

    local function addMagLevel(amount)
        db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = " .. guid)
    end

    if getPlayerStorageValue(cid, 25989) == -1 then
        local voc, bag = getPlayerVocation(cid), doPlayerAddItem(cid, 1988, 1)
        for i = 1, table.maxn(firstItems[voc]) do
            doPlayerAddItem(cid, firstItems[voc][i], 1)
        end

        doPlayerAddItem(cid, 2167, 2)
        doAddContainerItem(bag, 2160, 100)
        doAddContainerItem(bag, 2672, 10)
        setPlayerStorageValue(cid, 25989, 1)
        addEvent(function()
            doRemoveCreature(cid, true)
            if isInArray({1, 2, 5, 6}, voc) then
                addMagLevel(200)
            elseif voc == 3 or voc == 7 then
                addSkill(4, 350)
                addMagLevel(30)
            elseif voc == 4 or voc == 8 then
                addSkill(3, 350)
                addSkill(5, 350)
                addMagLevel(11)
            end
        end, 0.0001)
    end
    return true
end
Editado por fireelement (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Summ acabei de testar o que voce pediu, bom primeiro que o reset bugo o player reseto e ao invez de volta pro lvl 350, foi pro 7000. uma coisa boa que adicionou o Magic level, mas o distance nao adicionou, olha o erro do console ai

 

http://prntscr.com/6kcxnq

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo