npc voc
Miłego czytania!

npc voc
#1
Siema wie kto?? jak to zrobi?? ??eby dawa?? nowa range z ni??szych profesji np ek na warriora, a nie tylko z voc 0 i ka??d?? prof?

Kod:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local vocation = {}
local town = {}

local config = {

    towns = {
        ["iniumx"] = 1
    },

    vocations = {
        ["mage"] = {
            text = "A MAGE! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!",
            vocationId = 9,
        },

        ["shaman"] = {
            text = "A SHAMAN! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!",
            vocationId = 10,
        },

        ["assassin"] = {
            text = "A ASSASSIN! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!",
            vocationId = 11,
        },

        ["warrior"] = {
            text = "A WARRIOR! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!",
            vocationId = 12,
        }
    }
}

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

local function greetCallback(cid)
    local player = Player(cid)
    local level = player:getLevel()
    if level < 500 then
        npcHandler:say("CHILD! COME BACK WHEN YOU HAVE GROWN UP!", cid)
        npcHandler:resetNpc(cid)
        return false
    elseif level > 3000 then
        npcHandler:say(player:getName() ..", I CAN'T LET YOU LEAVE - YOU ARE TOO STRONG ALREADY! YOU CAN ONLY LEAVE WITH LEVEL 3000 OR LOWER.", cid)
        npcHandler:resetNpc(cid)
        return false
    elseif player:getVocation():getId() > 0 then
        npcHandler:say("YOU ALREADY HAVE A VOCATION!", cid)
        npcHandler:resetNpc(cid)
        return false
    else
        npcHandler:setMessage(MESSAGE_GREET, player:getName() ..", ARE YOU PREPARED TO FACE YOUR DESTINY?")
    end
    return true
end

local function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
        return false
    end

    local player = Player(cid)
    if npcHandler.topic[cid] == 0 then
        if msgcontains(msg, "yes") then
            npcHandler:say("IN WHICH TOWN DO YOU WANT TO LIVE: {INIUMX}?", cid)
            npcHandler.topic[cid] = 1
        end
    elseif npcHandler.topic[cid] == 1 then
        local cityTable = config.towns[msg:lower()]
        if cityTable then
            town[cid] = cityTable
            npcHandler:say("IN ".. string.upper(msg) .."! AND WHAT PROFESSION HAVE YOU CHOSEN: {WARRIOR}, {ASSASSIN}, {MAGE}, OR {SHAMAN}?", cid)
            npcHandler.topic[cid] = 2
        else
            npcHandler:say("IN WHICH TOWN DO YOU WANT TO LIVE: {INIUMX}?", cid)
        end
    elseif npcHandler.topic[cid] == 2 then
        local vocationTable = config.vocations[msg:lower()]
        if vocationTable then
            npcHandler:say(vocationTable.text, cid)
            npcHandler.topic[cid] = 3
            vocation[cid] = vocationTable.vocationId
        else
            npcHandler:say("{WARRIOR}, {ASSASSIN}, {MAGE}, OR {SHAMAN}?", cid)
        end
    elseif npcHandler.topic[cid] == 3 then
        if msgcontains(msg, "yes") then
            npcHandler:say("SO BE IT!", cid)
            player:setVocation(Vocation(vocation[cid]))
            player:setTown(Town(town[cid]))
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            player:teleportTo(Town(town[cid]):getTemplePosition())
            player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received a backpack with starting items for reaching the mainlands.")
            local targetVocation = config.vocations[Vocation(vocation[cid]):getName():lower()]
            for i = 1, #targetVocation[1] do
                player:addItem(targetVocation[1][i][1], targetVocation[1][i][2])
            end
            local backpack = player:addItem(1988)
            for i = 1, #targetVocation[2] do
                backpack:addItem(targetVocation[2][i][1], targetVocation[2][i][2])
            end
        else
            npcHandler:say("THEN WHAT? {WARRIOR}, {ASSASSIN}, {MAGE}, OR {SHAMAN}?", cid)
            npcHandler.topic[cid] = 2
        end
    end
    return true
end

local function onAddFocus(cid)
    town[cid] = 1
    vocation[cid] = 0
end

local function onReleaseFocus(cid)
    town[cid] = nil
    vocation[cid] = nil
end

npcHandler:setCallback(CALLBACK_ONADDFOCUS, onAddFocus)
npcHandler:setCallback(CALLBACK_ONRELEASEFOCUS, onReleaseFocus)

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setMessage(MESSAGE_FAREWELL, "COME BACK WHEN YOU ARE PREPARED TO FACE YOUR DESTINY!")
npcHandler:setMessage(MESSAGE_WALKAWAY, "COME BACK WHEN YOU ARE PREPARED TO FACE YOUR DESTINY!")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())


 

 

Odpowiedz
#2
Pr??bowa??em ustawi?? vocation[cid] = 0 pod ka??d?? wcze??niejsz?? profke ale nadal wy??wietla ??e posiadam ju?? voc.

Odpowiedz