Ir para conteúdo
  • 0

[Pedido] Sistema de Profissão 8.60


baratask

Pergunta

Boa Noite Galera Xtibiana, venho por esse tópico fazer 1 pedido.

 

- Bom meu pedido é um sistema simples de profissão para servidor 8.60, onde por exemplo 1 jogador que é sorcerer se aperfeiçoa falando com 1 npc, esse npc vai perguntar se ele quer ser ferreiro, alquimista ou minerador. Após ele escolher a profissão ele passa a ter esse cargo e beneficios sendo assim continua sendo 1 sorcerer com suas devidas magias, mas em si 1 ferreiro por exemplo.

 

Bom, oque cada uma dessas 3 classes vai fazer?

 

Ferreiro: Vai poder forjar itens, somente ele vai poder usar o item de id 2557 "martelo" da use nesse item e usar emcima de algum rusty item "item sujo ou quebrado" de id 9811 9819 e 9808 , e virar um item eleátorio como armors, legs ou boots.

 

Alquimista: Como o nome ja diz, esse cargo vai poder conjurar pots de vida ou mana. Então o jogador que tem profissão como alquimista vai fala exemplo: conjure health pot ou conjure mana potion, e vai fazer um pot eleátorio de mana ou life sendo ele ou small , strong, ultimate ..

 

Minerador: Essa profissão é bem mais dificultosa pois para fazer sua função ele deve ter 1 item de id 2553 "pick" , usar esse item em rochas especiais e com isso podendo sair "diamantes" dessas rochas e trocar elas por golds ou itens no mercado. Essas rochas séria de id 8633 8634 8635 8636 , e os diamantes que podem sair delas apos usar a pick é 2153 e 2154.

 

É um bom sistema para um servidor rpg, espero que alguem me ajude com isso. Abraço!

Editado por baratask
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

faz ferreiro alquimista e minerador serem valores em um determinado storage, todos os outros scripts de cada classe podem checar se o storage do cara é 1 (ferreiro), 2 (alquimista) ou 3 (minerador).
Como o valor padrão de todo storage é -1 dá tranquilo.

E aí na action de mineração/ferreiro vc coloca

if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then
return true
end

e faz a mesma coisa na spell/talkaction mudando só o 1,3 e colocando 2 no lugar:

if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Esse código é basicamente a função do ferreiro, que escrevi baseando-me no que entendi da sua explicação. A atribuição da profissão é bem simples, bastando manipular a storage como o Wolf explicou.

local prof_config = {
    key = 8171,                            --Storage do sistema de profissões.
    storage_value = 1,                     --Valor da storage do sistema de profissões correspondente a ferreiro.
    fail_chance = xxx,                     --Chance de falha (%). Caso não haja, basta colocar false.
    material = {9811, 9819, 9808},         --Materiais.
    results = {xxx, xxx, xxx, ...}         --Possíveis resultados. (itemid)
}
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, prof_config.key) ~= prof_config.storage_value then
        return doPlayerSendCancel(cid, "You don't belong to this profession.")
    elseif not isInArray(prof_config.material, itemEx.itemid) then
        return doPlayerSendCancel(cid, "You can't use your hammer in this thing.")
    end
    
    doRemoveItem(itemEx.uid, 1)
    if prof_config.fail_chance and math.random(1, 100) > prof_config.fail_chance then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Fail. :/")
        doSendAnimatedText(toPosition, "Fail", 215)
    else
        local result = prof_config.results[math.random(#prof_config.results)]
        
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You created a "..getItemNameById(result).."!")
        doPlayerAddItem(cid, result, 1)
    end
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Eu entendi um pouco do script ai Zipter, só que como eu disse teria 1 npc que vai entregar a profissão, como faria isso? pra ele receber a profissão e tal e ja agir como ferreiro. e onde coloco esse script ai. Como dito anterior eu sou leigo em script e creio q esse sistema q eu pedi vai ser util pra muitos.

Link para o comentário
Compartilhar em outros sites

  • 0

O código que postei anteriormente deve ser colocado em data/actions/scripts. Na tag, coloque o itemid do martelo.

Quanto ao NPC que atribuiu a profissão, aqui está o script:

local professions = {
    storage = 8171,
    options = {
        ["blacksmith"] = 1,             --["profession"] = storage_value,
        ["alchemist"] = 2,
        ["miner"] = 3,
    }
}
 
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    
    if msgcontains(msg, "profession") then
        local options = {}
        
        if getPlayerStorageValue(cid, professions.storage) > -1 then 
            selfSay("You already belong to some profession.", cid)
            return true
        end
        
        for profession_name, _ in pairs(professions.options) do
            table.insert(options, profession_name)
        end
        selfSay("You can choose one between the following professions. Which one did you like more?", cid)
        doPlayerPopupFYI(cid, table.concat(options, "\n"))
        talkState[talkUser] = 1
    elseif talkState[talkUser] == 1 then
        if not professions.options[msg] then
            selfSay("I don't offer this kind of profession.", cid)
            return true
        end
        
        selfSay("Congratulations, now you're a "..msg.."!", cid)
        setPlayerStorageValue(cid, professions.storage, professions.options[msg])
        talkState[talkUser] = 0
    end            
    return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())        

Ele deve ser colocado em data/npc/scripts. O arquivo .xml, de data/npc, você pode criar baseando-se nos existentes em seu servidor.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Ok valeu, em breve irei adicionar e volto para avisar.

 

EDITADO: Bom deu certo, obrigado pela contribuição eu alterei tudo e fiz as 3 profissões funcionarem, rep+ .

 

Em breve farei o script completo pra postar aqui.

Editado por baratask
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...