TFS 0.X Grizzly Adams (Killing in the name of)

clario

OTS based on Heroes III Might and Magic
Joined
Feb 4, 2018
Messages
98
Reaction score
5
Hey there PPL , i got a bug witch dont count monster killed :
Code:
Grizzly Adams: Current -1 troll killed, you need to kill 2.

login.lua:
Code:
registerCreatureEvent(cid, "killinginthenameof")
creature scripts.lua
Code:
local questCreatures =
{
    ["troll"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15000, killsRequired = 1, raceName = "troll"},
    ["frost troll"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15001, killsRequired = 100, raceName = "Trolls"},
    ["furious troll"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15002, killsRequired = 100, raceName = "Trolls"},
    ["island troll"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15003, killsRequired = 100, raceName = "Trolls"},
    ["swamp troll"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15004, killsRequired = 100, raceName = "Trolls"},
    ["troll champion"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15005, killsRequired = 100, raceName = "Trolls"},
    ["troll legionnaire"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15006, killsRequired = 100, raceName = "Trolls"}
}
local msgType = MESSAGE_STATUS_CONSOLE_ORANGE

function onKill(cid, target, lastHit)

local creature = questCreatures[getCreatureName(target):lower()]

    if creature then
        if isPlayer(target) or isSummon(target) then return true end

        if getCreatureStorage(cid, creature.questStarted) > 0 then
            if getCreatureStorage(cid, creature.questStorage) < creature.killsRequired then
                if getCreatureStorage(cid, creature.questStorage) < 0 then
                    doCreatureSetStorage(cid, creature.questStorage, 0)
                end

                if getCreatureStorage(cid, creature.creatureStorage) < 0 then
                    doCreatureSetStorage(cid, creature.creatureStorage, 0)
                end
                doCreatureSetStorage(cid, creature.questStorage, getCreatureStorage(cid, creature.questStorage) + 1)
                doCreatureSetStorage(cid, creature.creatureStorage, getCreatureStorage(cid, creature.creatureStorage) + 1)
                doPlayerSendTextMessage(cid, msgType, getCreatureStorage(cid, creature.creatureStorage) .. " " .. getCreatureName(target) .. " defeated. Total [" .. getCreatureStorage(cid, creature.questStorage) .. "/" .. creature.killsRequired .. "] " .. creature.raceName .. ".")
            end
        end
    end
    return true
end
npc script.lua
Code:
local THESNAPPER_POSITION = {x = 100, y = 100, z = 7}
local HIDE_POSITION = {x = 100, y = 100, z = 7}
local THEBLOODTUSK_POSITION = {x = 100, y = 100, z = 7}
local SHARDHEAD_POSITION = {x = 100, y = 100, z = 7}
local THUL_POSITION = {x = 100, y = 100, z = 7}
local ESMERALDA_POSITION = {x = 100, y = 100, z = 7}
local THEOLDWIDOW_POSITION = {x = 100, y = 100, z = 7}
local THEMANY_POSITION = {x = 100, y = 100, z = 7}
local LEVIATHAN_POSITION = {x = 100, y = 100, z = 7}
local STONECRACKER_POSITION = {x = 100, y = 100, z = 7}
local THENOXIUSSPAWN_POSITION = {x = 100, y = 100, z = 7}
local MERIKHTHESLAUGHTERER_POSITION = {x = 100, y = 100, z = 7}
local FAHIMTHEWISE_POSITION = {x = 100, y = 100, z = 7}
local RANDOMPIRATEBOSS_POSITION = {x = 100, y = 100, z = 7}
local THEHORNEDFOX_POSITION = {x = 100, y = 100, z = 7}
local NECROPHARUS_POSITION = {x = 100, y = 100, z = 7}


local tasks =
{
    [1] = {questStarted = 1510, questStorage = 65000, killsRequired = 2, raceName = "troll", rewards = {{enable = true, type = "exp", values = 200}, {enable = true, type = "money", values = 200}}}
}

local rankStorage = 32150
local choose = {}

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)                          npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid)                       npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg)                  npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink()                                      npcHandler:eek:nThink() end

function getTasksStarted(cid)
    local tmp = {}
    for k, v in pairs(tasks) do
        if getCreatureStorage(cid, v.questStarted) == 1 then
            table.insert(tmp, k)
        end
    end
    return tmp
end

function getTaskByName(name)
    for k, v in pairs(tasks) do
        if v.raceName:lower() == name:lower() then
            return k
        end
    end
    return false
end

function creatureSayCallback(cid, type, msg)

    if(not npcHandler:isFocused(cid)) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
    if isInArray({"task", "tasks"}, msg:lower()) then
        selfSay("There you can see the following tasks, please tell me the number of the task that you want to do.", cid)
        local text = ""
        for i = 1, table.maxn(tasks) do
            text = text .. (text == "" and "" or "\n") .. i .. "  -  " .. tasks.raceName .. (getCreatureStorage(cid, tasks.questStarted) == 1 and " [...]" or getCreatureStorage(cid, tasks.questStarted) == 2 and " [x]" or "")
        end
        return doShowTextDialog(cid, 5956, text)

    elseif getTaskByName(msg) or tasks[tonumber(msg)] then
        msg = (getTaskByName(msg) or tonumber(msg))
        if getCreatureStorage(cid, tasks[msg].questStarted) == 1 then
            selfSay("You already started this task.", cid)
            talkState[talkUser] = 0
            return true
        end
        if getCreatureStorage(cid, tasks[msg].questStarted) == 2 then
            selfSay("You already finished this task.", cid)
            talkState[talkUser] = 0
            return true
        end
        if tasks[msg].level and getPlayerLevel(cid) < tasks[msg].level then
            selfSay("You need level " .. tasks[msg].level .. " or higher to make this task.", cid)
            talkState[talkUser] = 0
            return true
        end
        selfSay("Are you sure that do you want to start the task number " .. msg .. "? In this task you will need to defeat " .. tasks[msg].killsRequired .. " " .. tasks[msg].raceName .. ".", cid)
        choose[cid] = msg
        talkState[talkUser] = 1
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
        doCreatureSetStorage(cid, tasks[choose[cid]].questStarted, 1)
        selfSay("You have started the task number " .. choose[cid] .. ", remember... in this task you will need to defeat " .. tasks[choose[cid]].killsRequired .. " " .. tasks[choose[cid]].raceName .. ". Good luck!", cid)
        talkState[talkUser] = 0
        return true

    elseif msg:lower() == "report" then
        local t = getTasksStarted(cid)
        local response = "You are currently making " .. (#t > 1 and "these" or "this") .. " task" .. (#t > 1 and "s" or "") .. ":\n"
        if table.maxn(t) > 0 then
            for _, tsk in ipairs(t) do
                if getCreatureStorage(cid, tasks[tsk].questStorage) < 0 then doCreatureSetStorage(cid, tasks[tsk].questStorage, 0) end
                response = response .. "     Name: " .. tasks[tsk].raceName .. "     Kills: " .. getCreatureStorage(cid, tasks[tsk].questStorage) .. " - " .. tasks[tsk].killsRequired .. ".\n"
            end
            response = response .. "Please say report and the name of the task that do you want to report, example: 'Report Trolls'."
            return selfSay(response, cid)
        else
            return selfSay("You need to start at least one task first.", cid)
        end
    elseif string.sub(msg:lower(), 0, 6) == "report" then
        local t = getTaskByName(string.sub(msg, 8, string.len(msg)))
        if not t then
            return selfSay("That task does not exists.", cid)
        end

        if getCreatureStorage(cid, tasks[t].questStarted) == 2 then
            return selfSay("You already finished this task.", cid)
        end

        if getCreatureStorage(cid, tasks[t].questStarted) < 1 then
            return selfSay("You don't have started this task.", cid)
        end

        if tasks[t].killsRequired > getCreatureStorage(cid, tasks[t].questStorage) then
            return selfSay("Current " .. getCreatureStorage(cid, tasks[t].questStorage) .. " " .. tasks[t].raceName .. " killed, you need to kill " .. tasks[t].killsRequired .. ".", cid)
        end

        for i = 1, table.maxn(tasks[t].rewards) do
            if(tasks[t].rewards.enable) then
                if isInArray({"boss", "teleport", 1}, tasks[t].rewards.type) then
                    doTeleportThing(cid, tasks[t].rewards.values)
                elseif isInArray({"exp", "experience", 2}, tasks[t].rewards.type) then
                    doPlayerAddExperience(cid, tasks[t].rewards.values)
                elseif isInArray({"item", 3}, tasks[t].rewards.type) then
                    doPlayerAddItem(cid, v.rewards.values[1], tasks[t].rewards.values[2])
                elseif isInArray({"money", 4}, tasks[t].rewards.type) then
                    doPlayerAddMoney(cid, tasks[t].rewards.values)
                elseif isInArray({"storage", "stor", 5}, tasks[t].rewards.type) then
                    doCreatureSetStorage(cid, tasks[t].rewards.values[1], tasks[t].rewards.values[2])
                elseif isInArray({"points", "rank", 2}, tasks[t].rewards.type) then
                    doCreatureSetStorage(cid, rankStorage, getCreatureStorage(cid, rankStorage) + tasks[t].rewards.values)
                else
                    print("[Warning - Npc::KillingInTheNameOf] Wrong reward type: " .. (tasks[t].rewards.type or "nil") .. ", reward could not be loaded.")
                end
            end
        end
        local rank = getCreatureStorage(cid, rankStorage)
        selfSay("Great!... you have finished the task number " .. t .. "" .. (rank > 4 and ", you are a " or "") .. "" .. (((rank > 4 and rank < 10) and ("Huntsman") or (rank > 9 and rank < 20) and ("Ranger") or (rank > 19 and rank < 30) and ("Big Game Hunter") or (rank > 29 and rank < 50) and ("Trophy Hunter") or (rank > 49) and ("Elite Hunter")) or "") .. ". Good job.", cid)
        return doCreatureSetStorage(cid, tasks[t].questStarted, 2)
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
npc.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>

<npc name="Grizzly Adams" script="data/npc/scripts/killinginthenameof.lua" access="3" walkinterval="2000" lookdir="2">
    <mana now="800" max="800"/>
    <health now="200" max="200"/>
<look type="144" head="97" body="97" legs="94" feet="97" addons="3"/>
</npc>
Beging for help?
 
Last edited by a moderator:
OP
clario

clario

OTS based on Heroes III Might and Magic
Joined
Feb 4, 2018
Messages
98
Reaction score
5
Yeah as kill event
 
OP
clario

clario

OTS based on Heroes III Might and Magic
Joined
Feb 4, 2018
Messages
98
Reaction score
5
Whhen i can iwil do it)):)
 
Top