• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

NPC Advance tasks system.

Status
Zamknięty.

Oskar

Forum friend
Dołączył
Styczeń 24, 2009
Posty
2256
Liczba reakcji
331
Oto kolejna ju? wersja mojego task systemu, czyli misji na zabijanie potwork?w.


~~MODS~~
W wy?ej wymienionym folderze tworzymy plik o nazwie advanceTasksSystem.xml i wklejamy do niego:
Kod:
<?xml version="1.0" encoding="UTF-8"?> 
<mod name="Advance Tasks System" version="1.0" author="Oskar" contact="http://tibia.net.pl/members/oskar.html" enabled="yes"> 
<config name="advanceTasks_conf"><![CDATA[ 
task = { 
        --each monsters 
        --['monsterName'] = {storage = storage, beginStorageValue = startingStorageValue, finishStorageValue = finishingStorageValue, count = countOfMonster} 
        ['crocodile'] = {storage = 9960, beginStorageValue = 39, finishStorageValue = 40, count = 300}, 
        ['tarantula'] = {storage = 9959, beginStorageValue = 41, finishStorageValue = 42, count = 300}, 
        ['carniphila'] = {storage = 9958, beginStorageValue = 43, finishStorageValue = 44, count = 250}, 
        ['stone golem'] = {storage = 9957, beginStorageValue = 45, finishStorageValue = 46, count = 200}, 
        ['mutated rat'] = {storage = 9956, beginStorageValue = 47, finishStorageValue = 48, count = 200}, 
        ['giant spider'] = {storage = 9955, beginStorageValue = 49, finishStorageValue = 50, count = 500}, 
        ['hydra'] = {storage = 9954, beginStorageValue = 51, finishStorageValue = 52, count = 650}, 
        ['behemoth'] = {storage = 9953, beginStorageValue = 53, finishStorageValue = 54, count = 700}, 
        ['serpent spawn'] = {storage = 9952, beginStorageValue = 55, finishStorageValue = 56, count = 550}, 
        ['demon'] = {storage = 9951, beginStorageValue = 57, finishStorageValue = 58, count = 350}, 
         
        --mass monsters 
        --['race name'] = {monsterTypes = {['name1'] = storage1, ['name2'] = storage2 ...}, 
        --                beginStorageValue = startingStorageValue, finishStorageValue = finishingStorageValue, count = countOfMonster} 
        ['trolls'] = {monsterTypes = {['troll']=9950,['swamp troll']=9949,['island troll']=9948,['frost troll']=9947,['troll champion']=9946}, 
                        beginStorageValue = 1, finishStorageValue = 2, count = 150}, 
        ['goblins'] = {monsterTypes = {['goblin']=9945,['goblin assassin']=9944,['goblin scavenger']=9943}, 
                        beginStorageValue = 3, finishStorageValue = 4, count = 150}, 
        ['rotworms'] = {monsterTypes = {['rotworm']=9942,['carrion worm']=9941}, 
                        beginStorageValue = 5, finishStorageValue = 6, count = 300}, 
        ['cyclops'] = {monsterTypes = {['cyclops']=9940,['cyclops drone']=9939,['cyclops smith']=9938}, 
                        beginStorageValue = 7, finishStorageValue = 8, count = 500}, 
        ['quaras'] = {monsterTypes = {['quara predator']=9937,['quara constrictor']=9936,['quara hydromancer']=9935,['quara mantassin']=9934,['quara pincher']=9933}, 
                        beginStorageValue = 9, finishStorageValue = 10, count = 300}, 
        ['water'] = {monsterTypes = {['water elemental']=9932,['massive water elemental']=9931}, 
                        beginStorageValue = 11, finishStorageValue = 12, count = 70}, 
        ['fire'] = {monsterTypes = {['fire elemental']=9930,['massive fire elemental']=9929}, 
                        beginStorageValue = 13, finishStorageValue = 14, count = 70}, 
        ['earth'] = {monsterTypes = {['earth elemental']=9928,['massive earth elemental']=9927}, 
                        beginStorageValue = 15, finishStorageValue = 16, count = 70}, 
        ['energy'] = {monsterTypes = {['energy elemental']=9926,['massive energy elemental']=9925}, 
                        beginStorageValue = 17, finishStorageValue = 18, count = 70}, 
        ['sea serpents'] = {monsterTypes = {['sea serpent']=9924,['young sea serpent']=9923}, 
                        beginStorageValue = 19, finishStorageValue = 20, count = 700}, 
        ['green djinns'] = {monsterTypes = {['green djinn']=9922,['efreet']=9921}, 
                        beginStorageValue = 21, finishStorageValue = 22, count = 500}, 
        ['blue djinns'] = {monsterTypes = {['blue djinn']=9920,['marid']=9919}, 
                        beginStorageValue = 23, finishStorageValue = 24, count = 500}, 
        ['pirates'] = {monsterTypes = {['pirate buccaneer']=9918,['pirate corsair']=9917,['pirate ghost']=9916,['pirate marauder']=9915,['pirate cutthroat']=9914,['pirate skeleton']=9913}, 
                        beginStorageValue = 25, finishStorageValue = 26, count = 1500}, 
        ['minotaurs'] = {monsterTypes = {['minotaur']=9912,['minotaur archer']=9911,['minotaur guard']=9910,['minotaur mage']=9909}, 
                        beginStorageValue = 27, finishStorageValue = 28, count = 5000}, 
        ['necromancers'] = {monsterTypes = {['necromancer']=9908,['priestess']=9907}, 
                        beginStorageValue = 29, finishStorageValue = 30, count = 2000}, 
        ['high class lizards'] = {monsterTypes = {['lizard zaogun']=9906,['lizard noble']=9905,['lizard magistratus']=9904,['lizard legionnaire']=9903,['lizard high guard']=9902,['lizard dragon priest']=9901,['lizard chosen']=9900}, 
                        beginStorageValue = 31, finishStorageValue = 32, count = 800}, 
        ['dragons'] = {monsterTypes = {['dragon']=9899,['dragon lord']=9898,['frost dragon']=9897,['wyrm']=9896}, 
                        beginStorageValue = 33, finishStorageValue = 34, count = 500}, 
        ['dragon hatchlings'] = {monsterTypes = {['dragon hatchling']=9895,['dragon lord hatchling']=9894,['frost dragon hatchling']=9893}, 
                        beginStorageValue = 35, finishStorageValue = 36, count = 750}, 
        ['undead dragons'] = {monsterTypes = {['undead dragon']=9892,['ghastly dragon']=9891}, 
                        beginStorageValue = 37, finishStorageValue = 38, count = 350}, 
        } 
specialTask = { 
                --bosses 
                --    ['boss name'] = {beginStorageValue = startingStorageValue, finishStorageValue = finishingStorageValue
                                --    [itemUid] = {effect = effectOnPlayerSpawn, centerRoomPosition = playerSpawnAndCenterRoomPosition, 
                                        --    bossSummonPlace = whereSummonBoss, bossEffect = effectOnBossSpawn, 
                                        --    sizeRoom = roomSize{cordinateX, cordinateY}} 
                    ['the snapper'] = {beginBossStorageValue = 1, finishedBossStorageValue = 2, 
                                    [5302] = {effect = CONST_ME_CARNIPHILA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_CARNIPHILA, 
                                             sizeRoom = {5,5}}}, 
                    ['hide'] = {beginBossStorageValue = 3, finishedBossStorageValue = 4, 
                                    [5303] = {effect = CONST_ME_STONES, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_STONES, 
                                             sizeRoom = {5,5}}}, 
                    ['deathbine'] = {beginBossStorageValue = 5, finishedBossStorageValue = 6, 
                                    [5304] = {effect = CONST_ME_CARNIPHILA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_CARNIPHILA, 
                                             sizeRoom = {5,5}}}, 
                    ['the bloodtusk'] = {beginBossStorageValue = 7, finishedBossStorageValue = 8, 
                                    [5305] = {effect = CONST_ME_ICEAREA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_ICEAREA, 
                                             sizeRoom = {5,5}}}, 
                    ['shardhead'] = {beginBossStorageValue = 9, finishedBossStorageValue = 10, 
                                    [5306] = {effect = CONST_ME_ICEATTACK, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_ICEATTACK, 
                                             sizeRoom = {5,5}}}, 
                    ['esmeralda'] = {beginBossStorageValue = 11, finishedBossStorageValue = 12, 
                                    [5307] = {effect = CONST_ME_HITBYPOISON, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_HITBYPOISON, 
                                             sizeRoom = {5,5}}}, 
                    ['bloodweb'] = {beginBossStorageValue = 13, finishedBossStorageValue = 14, 
                                    [5308] = {effect = CONST_ME_ICEATTACK, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_ICEATTACK, 
                                             sizeRoom = {5,5}}}, 
                    ['fleshcrawler'] = {beginBossStorageValue = 15, finishedBossStorageValue = 16, 
                                    [5309] = {effect = CONST_ME_SMALLPLANTS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_SMALLPLANTS, 
                                             sizeRoom = {5,5}}}, 
                    ['ribstride'] = {beginBossStorageValue = 17, finishedBossStorageValue = 18, 
                                    [5310] = {effect = CONST_ME_SMALLCLOUDS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_SMALLCLOUDS, 
                                             sizeRoom = {5,5}}}, 
                    ['the old widow'] = {beginBossStorageValue = 19, finishedBossStorageValue = 20, 
                                    [5311] = {effect = CONST_ME_SMALLPLANTS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_SMALLPLANTS, 
                                             sizeRoom = {5,5}}}, 
                    ['thul'] = {beginBossStorageValue = 21, finishedBossStorageValue = 22, 
                                    [5312] = {effect = CONST_ME_WATERSPLASH, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_WATERSPLASH, 
                                             sizeRoom = {5,5}}}, 
                    ['flameborn'] = {beginBossStorageValue = 23, finishedBossStorageValue = 24, 
                                    [5313] = {effect = CONST_ME_HITBYFIRE, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_HITBYFIRE, 
                                             sizeRoom = {5,5}}}, 
                    ['sulphur scuttler'] = {beginBossStorageValue = 25, finishedBossStorageValue = 26, 
                                    [5314] = {effect = CONST_ME_SMALLPLANTS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_SMALLPLANTS, 
                                             sizeRoom = {5,5}}}, 
                    ['the many'] = {beginBossStorageValue = 27, finishedBossStorageValue = 28, 
                                    [5315] = {effect = CONST_ME_SMALLPLANTS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_SMALLPLANTS, 
                                             sizeRoom = {5,5}}}, 
                    ['leviathan'] = {beginBossStorageValue = 29, finishedBossStorageValue = 30, 
                                    [5316] = {effect = CONST_ME_ICEATTACK, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_ICEATTACK, 
                                             sizeRoom = {5,5}}}, 
                    ['stonecracker'] = {beginBossStorageValue = 31, finishedBossStorageValue = 32, 
                                    [5317] = {effect = CONST_ME_POFF, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_POFF, 
                                             sizeRoom = {5,5}}}, 
                    ['the noxious spawn'] = {beginBossStorageValue = 33, finishedBossStorageValue = 34, 
                                    [5318] = {effect = CONST_ME_YELLOW_RINGS, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_YELLOW_RINGS, 
                                             sizeRoom = {5,5}}}, 
                    ['gorgo'] = {beginBossStorageValue = 35, finishedBossStorageValue = 36, 
                                    [5319] = {effect = CONST_ME_GROUNDSHAKER, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_GROUNDSHAKER, 
                                             sizeRoom = {5,5}}}, 
                    ['kerberos'] = {beginBossStorageValue = 37, finishedBossStorageValue = 38, 
                                    [5320] = {effect = CONST_ME_FIREAREA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_FIREAREA, 
                                             sizeRoom = {5,5}}}, 
                    ['ethershrek'] = {beginBossStorageValue = 39, finishedBossStorageValue = 40, 
                                    [5321] = {effect = CONST_ME_MORTAREA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_MORTAREA, 
                                             sizeRoom = {5,5}}} 
                    } 
mainStorage = 10001 
bossesStorage = 10002 

function isSummon(cid) 
    if(not isCreature(cid)) then 
        return false 
    end 
    return getCreatureMaster(cid) ~= cid 
end 
]]></config> 

<event type="kill" name="advanceTasksKill" event="script"><![CDATA[ 
domodlib('advanceTasks_conf') 
function onKill(cid, target) 
if isPlayer(target) or isSummon(target) or isNpc(target) then  
    return true  
end 
for k, v in pairs(task) do 
    if (v.monsterTypes and v.monsterTypes[getCreatureName(target):lower()]) or k:lower() == getCreatureName(target):lower() then 
        if getPlayerStorageValue(cid, mainStorage) == v.beginStorageValue then 
            storages = v.monsterTypes and v.monsterTypes[getCreatureName(target)] or v.storage 
            if getPlayerStorageValue(cid, storages) <= v.count then 
                local x, s = 0, 'You killed ' 
                if v.monsterTypes then 
                    for monster, storage in pairs(v.monsterTypes) do 
                        if getPlayerStorageValue(cid, storage) == -1 then 
                            doPlayerSetStorageValue(cid, storage, 0) 
                        end 
                        if monster:lower() == getCreatureName(target):lower() then 
                            doPlayerSetStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1) 
                        end 
                        x = x + getPlayerStorageValue(cid, storage) 
                        s = s .. getPlayerStorageValue(cid, storage) .. ' ' .. monster .. ', ' 
                    end 
                else 
                    doPlayerSetStorageValue(cid, storages, getPlayerStorageValue(cid, storages) + 1) 
                    s = s .. getPlayerStorageValue(cid, storages) .. ' of ' .. v.count .. ' ' .. k .. '.' 
                end 
                s = (x > 0 and (string.sub(s, 1, string.len(s) - 2)..'. You have killed ' .. x ..' of '.. v.count ..' '..k..'.') or s) 
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, s) 
                if getPlayerStorageValue(cid, storages) == v.count then 
                    doPlayerSetStorageValue(cid, mainStorage, v.finishStorageValue) 
                    if v.monsterTypes then 
                        for monster, storage in pairs(v.monsterTypes) do 
                            doPlayerSetStorageValue(cid, storage, 0) 
                        end 
                    else 
                        doPlayerSetStorageValue(cid, v.storage, 0) 
                    end 
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Congratulations! You have killed enough '..(v.monsterTypes and k or getCreatureName(target)..'s')..'.') 
                end 
            end 
        end 
    end 
end 
for k, v in pairs(specialTask) do 
    if k:lower() == getCreatureName(target):lower() and v.storage and getPlayerStorageValue(cid, v.storage) == v.beginBossStorageValue then 
        doPlayerSetStorageValue(cid, v.storage, v.finishedBossStorageValue) 
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Congratulations! You have killed '..getCreatureName(target)..'.') 
    elseif k:lower() == getCreatureName(target):lower() and getPlayerStorageValue(cid, bossesStorage) == v.beginBossStorageValue then 
        doPlayerSetStorageValue(cid, bossesStorage, v.finishedBossStorageValue) 
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Congratulations! You have killed '..getCreatureName(target)..'.') 
    end 
end 
return true 
end 
]]></event> 

<moveevent type="stepIn" name="advanceTasksStepIn" fromuid="5300" touid="5321" event="script"><![CDATA[ 
domodlib('advanceTasks_conf') 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) 
for k, v in pairs(specialTask) do 
    if v[item.uid] and isPlayer(cid) then 
        if getSpectators(v[item.uid].centerRoomPosition, v[item.uid].sizeRoom[1], v[item.uid].sizeRoom[2]) then 
            for _, target in ipairs(getSpectators(v[item.uid].centerRoomPosition, v[item.uid].sizeRoom[1], v[item.uid].sizeRoom[2])) do 
                if isPlayer(target) then 
                    return doTeleportThing(cid, fromPosition, true) and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Somebody fight with '..k..'!') 
                elseif isMonster(target) then 
                    doRemoveThing(target) 
                end 
            end 
        end 
        if getPlayerStorageValue(cid, bossesStorage) == v.beginBossStorageValue then 
            doTeleportThing(cid, v[item.uid].centerRoomPosition, true) 
            doSendMagicEffect(v[item.uid].centerRoomPosition, v[item.uid].effect) 
            doSendMagicEffect(v[item.uid].bossSummonPlace, v[item.uid].bossEffect) 
            return doCreateMonster(k, v[item.uid].bossSummonPlace) 
        end 
        return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You can\'t enter here!') 
    elseif v[item.uid-100] and isPlayer(cid) then 
        if getSpectators(v[item.uid-100].centerRoomPosition, v[item.uid-100].sizeRoom[1], v[item.uid-100].sizeRoom[2]) then
            for _, target in ipairs(getSpectators(v[item.uid-100].centerRoomPosition, v[item.uid-100].sizeRoom[1], v[item.uid-100].sizeRoom[2])) do 
                if isMonster(target) then 
                    doRemoveThing(target) 
                end 
            end 
        end 
        return true 
    end 
end 
return true 
end 
]]></moveevent> 

<event type="login" name="advanceTasksLogin" event="buffer"><![CDATA[ 
    registerCreatureEvent(cid, 'advanceTasksKill') 
]]></event> 
</mod>



~~NPC~~
Do folderu data/npc/scripts wrzucamy nowy plik i nazywamy go np. advanceTaskSystem.lua i wklejamy do niego:
PHP:
local function doNPCTalkALot(cid, npc, delay, messages) 
    for i = 1, #messages do 
        addEvent(function() 
                        if isPlayer(cid) then 
                            doCreatureSay(npc, messages[i], TALKTYPE_PRIVATE_NP, false, cid) 
                        end end, 
                        (i > 1 and 5000*i+delay or delay), 
                        cid, messages, i) 
    end 
end 

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 

local main_storage, bosses_storage = 10001, 10002 
local good_hunting = {'Happy hunting, old chap! Come back to me when you are through with your {task}.', 'Good show, old chap! Speak to me again when you are done hunting.'}     
local good_job = {'That took some time, huh? Good hunting though. If you\'re up for another hunting mission just ask me for a {task}.', 'If you\'re up for another hunting mission just ask me for a {task}.'} 
local tasks = { 
            ['trolls'] = {min_level = 8, max_level = 20, 
                    rewards = {'money', 0, 200, 'exp', 0, 200}, 
                    begin_storage_value = 1, finish_storage_value = 2, boss = false, talkstate = 1}, 
            ['goblins'] = {min_level = 10, max_level = 20, 
                    rewards = {'money', 0, 250, 'exp', 0, 300}, 
                    begin_storage_value = 3, finish_storage_value = 4, boss = false, talkstate = 2}, 
            ['rotworms'] = {min_level = 15, max_level = 30, 
                    rewards = {'money', 0, 400, 'exp', 0, 1000}, 
                    begin_storage_value = 5, finish_storage_value = 6, boss = true, before_kill_boss = 1, after_kill_boss = 2, talkstate = 3}, 
            ['cyclops'] = {min_level = 18, max_level = 50, 
                    rewards = {'money', 0, 800, 'exp', 0, 3000, 'item', 2381, 1}, 
                    begin_storage_value = 7, finish_storage_value = 8, boss = false, talkstate = 4}, 
            ['quaras'] = {min_level = 30, max_level = 80, 
                    rewards = {'exp', 0, 12000, 'item', 5895, 1}, 
                    begin_storage_value = 9, finish_storage_value = 10, boss = false, talkstate = 9}, 
            ['water elementals'] = {min_level = 35, max_level = 60, 
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 11, finish_storage_value = 12, boss = false, talkstate = 10}, 
            ['fire elementals'] = {min_level = 35, max_level = 60,  
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 13, finish_storage_value = 14, boss = false, talkstate = 13}, 
            ['earth elementals'] = {min_level = 35, max_level = 60, 
                    rewards = {'exp', 0, 10000, 'money', 0, 2000}, 
                    begin_storage_value = 15, finish_storage_value = 16, boss = false, talkstate = 11}, 
            ['energy elementals'] = {min_level = 35, max_level = 60,  
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 17, finish_storage_value = 18, boss = false, talkstate = 12}, 
            ['sea serpents'] = {min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 10000, 'skill', SKILL__LEVEL, 1}, 
                    begin_storage_value = 19, finish_storage_value = 20, boss = false, talkstate = 17}, 
            ['green djinns'] = {min_level = 40, max_level = 100, 
                    rewards = {'money', 0, 5000, 'exp', 0, 10000}, 
                    begin_storage_value = 21, finish_storage_value = 22, boss = false, talkstate = 20}, 
            ['blue djinns'] = {min_level = 40, max_level = 100, 
                    rewards = {'money', 0, 5000, 'exp', 0, 10000}, 
                    begin_storage_value = 23, finish_storage_value = 24, boss = false, talkstate = 21}, 
            ['pirates'] = {min_level = 50, max_level = 120, 
                    rewards = {'money', 0, 5000, 'addon', {151,155}, 1, 'exp', 0, 10000}, 
                    begin_storage_value = 25, finish_storage_value = 26, boss = false, talkstate = 22}, 
            ['minotaurs'] = {min_level = 20, max_level = 60,  
                    rewards = {}, 
                    begin_storage_value = 27, finish_storage_value = 28, boss = true, before_kill_boss = 3, after_kill_boss = 4, talkstate = 23}, 
            ['necromancers'] = {min_level = 40, max_level = 110,  
                    rewards = {'addon', {145,149}, 1}, 
                    begin_storage_value = 29, finish_storage_value = 30, boss = true, before_kill_boss = 5, after_kill_boss = 6, talkstate = 24}, 
            ['high lizards'] = {min_level = 80, max_level = 220,  
                    rewards = {'item', 11295, 1, 'addon', {335,336}, 1}, 
                    begin_storage_value = 31, finish_storage_value = 32, boss = false, talkstate = 26}, 
            ['dragons'] = {min_level = 40, max_level = 180,  
                    rewards = {'item', 2516, 1, 'exp', 0, 10000, 'money', 0, 5000}, 
                    begin_storage_value = 33, finish_storage_value = 34, boss = true, before_kill_boss = 7, after_kill_boss = 8, talkstate = 27}, 
            ['dragon hatchlings'] = {min_level = 20, max_level = 50,  
                    rewards = {'item', 2434, 1, 'exp', 0, 4000}, 
                    begin_storage_value = 35, finish_storage_value = 36, boss = false, talkstate = 28}, 
            ['undead dragons'] = {min_level = 100, max_level = 300,  
                    rewards = {'item', 11299, 1, 'exp', 0, 25000, 'addon', {335,336}, 2}, 
                    begin_storage_value = 37, finish_storage_value = 38, boss = false, talkstate = 29}, 
             
            ['crocodile'] = {min_level = 20, max_level = 45, 
                    rewards = {'exp', 0, 800}, 
                    begin_storage_value = 39, finish_storage_value = 40, boss = false, talkstate = 5}, 
            ['tarantula'] = {min_level = 20, max_level = 50, 
                    rewards = {'money', 0, 1500}, 
                    begin_storage_value = 41, finish_storage_value = 42, boss = false, talkstate = 6}, 
            ['carniphila'] = {min_level = 20, max_level = 50, 
                    rewards = {'exp', 0, 1500}, 
                    begin_storage_value = 43, finish_storage_value = 44, boss = false, talkstate = 7}, 
            ['stone golem'] = {min_level = 24, max_level = 50, 
                    rewards = {'exp', 0, 2000, 'item', 5880, 1}, 
                    begin_storage_value = 45, finish_storage_value = 46, boss = false, talkstate = 8}, 
            ['mutated rat'] = {min_level = 40, max_level = 80,  
                    rewards = {'exp', 0, 10000}, 
                    begin_storage_value = 47, finish_storage_value = 48, boss = false, talkstate = 14}, 
            ['giant spider'] = {min_level = 50, max_level = 90, 
                    rewards = {'exp', 0, 5000, 'item', 5879, 1}, 
                    begin_storage_value = 49, finish_storage_value = 50, boss = true, before_kill_boss = 9, after_kill_boss = 10, talkstate = 15}, 
            ['hydra'] = {min_level = 90, max_level = 250, 
                    rewards = {'exp', 0, 15000, 'addon', {144,148}, 1}, 
                    begin_storage_value = 51, finish_storage_value = 52, boss = false, talkstate = 16}, 
            ['behemoth'] = {name = ,  min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 5000, 'addon', {143,147}, 2, 'skill', SKILL_AXE, 1}, 
                    begin_storage_value = 53, finish_storage_value = 54, boss = true, before_kill_boss = 11, after_kill_boss = 12, talkstate = 18}, 
            ['serpent spawn'] = {min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 15000, 'addon', {144,148}, 2}, 
                    begin_storage_value = 55, finish_storage_value = 56, boss = false, talkstate = 19}, 
            ['demon'] = {min_level = 100, max_level = 300, 
                    rewards = {'item', 2128, 75, 'addon', {288,289}, 2, 'item', 10518, 1}, 
                    begin_storage_value = 57, finish_storage_value = 58, boss = true, before_kill_boss = 13, after_kill_boss = 14, talkstate = 25}, 
            } 

local function doTakeReward(cid, table) 
for i = 1, #table/3 do 
    if table[i*3-2] == 'item' then 
        doPlayerAddItem(cid, table[i*3-1], table[i*3], true) 
    elseif table[i*3-2] == 'exp' then 
        doAddExp(cid, table[i*3]) 
    elseif table[i*3-2] == 'storage' then 
        doPlayerSetStorageValue(cid, table[i*3-1], table[i*3]) 
    elseif table[i*3-2] == 'money' then 
        doPlayerAddMoney(cid, table[i*3]) 
    elseif table[i*3-2] == 'skill' then 
        doPlayerAddSkill(cid, table[i*3-1], table[i*3]) 
    elseif table[i*3-2] == 'addon' then 
        doPlayerAddOutfit(cid, (getPlayerSex(cid) == 0 and table[i*3-1][1] or table[i*3-1][2]), table[i*3]) 
    end 
end 
return true 
end 

function creatureSayCallback(cid, type, msg) 
s = 'All right, what would you like to hunt - ' 
for k, v in pairs(tasks) do 
    s = s .. (getPlayerLevel(cid) >= v.min_level and getPlayerLevel(cid) <= v.max_level and '{'..k..',} ' or '') 
end 
s = string.sub(s, 1, s:len() - 3)..'}.' 
if isInArray({'task','mission','quest'}, msg:lower()) then 
    if getPlayerStorageValue(cid, main_storage) <= 0 then 
        talkState[cid] = 100 
        return doNPCTalkALot(cid, getNpcCid(), 200, s) 
    else 
        for k, v in pairs(tasks) do 
            if getPlayerStorageValue(cid, main_storage) == v.finish_storage_value and getPlayerStorageValue(cid, bosses_storage) < v.before_kill_boss then 
                if v.boss then 
                    doPlayerSetStorageValue(cid, bosses_storage, v.before_kill_boss) 
                    return doNPCTalkALot(cid, getNpcCid(), 200, {'Good job, go kill boss of '..k..'.'}) 
                else  
                    doPlayerSetStorageValue(cid, bosses_storage, 0) 
                    doPlayerSetStorageValue(cid, main_storage, 0) 
                    doTakeReward(cid, v.rewards) 
                    return doNPCTalkALot(cid, getNpcCid(), 200, {good_job[math.random(#good_job)]}) 
                end 
            elseif getPlayerStorageValue(cid, bosses_storage) == v.after_kill_boss then 
                doPlayerSetStorageValue(cid, bosses_storage, -1) 
                doPlayerSetStorageValue(cid, main_storage, -1) 
                doTakeReward(cid, v.rewards) 
                return doNPCTalkALot(cid, getNpcCid(), 200, {good_job[math.random(#good_job)]}) 
            elseif getPlayerStorageValue(cid, bosses_storage) == v.before_kill_boss then 
                return doNPCTalkALot(cid, getNpcCid(), 200, {'You do not kill boss yet.'}) 
            end 
        end 
    end 
elseif isInArray({'cancel','abort','stop'}, msg:lower()) then 
    if getPlayerStorageValue(cid, main_storage) > 0 then 
        talkState[cid] = 101 
        return doNPCTalkALot(cid, getNpcCid(), 200, {'Do you want cancel actual mission?'}) 
    else 
        return doNPCTalkALot(cid, getNpcCid(), 200, {'You don\'t have started any task!'}) 
    end 
end 
for k, v in pairs(tasks) do 
    if isInArray({'yes','ok','yep'}, msg:lower()) then 
        if talkState[cid] == v.talkstate then 
            doPlayerSetStorageValue(cid, main_storage, v.begin_storage_value) 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {good_hunting[math.random(#good_hunting)]}) 
        elseif talkState[cid] == 101 and getPlayerStorageValue(cid, main_storage) > 0 then 
            doPlayerSetStorageValue(cid, main_storage, -1) 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'Speak to me again when you are done hunting.'}) 
        end 
    elseif isInArray({'no','never','nope'}, msg:lower()) and talkState[cid] > 0 then 
        return doNPCTalkALot(cid, getNpcCid(), 5000, {'Ok then.'}) 
    elseif isInArray({k,string.sub(k, 1, k:len() - 1)}, msg:lower()) and talkState[cid] == 100 then 
        if getPlayerLevel(cid) >= v.min_level and getPlayerLevel(cid) <= v.max_level then 
            talkState[cid] = v.talkstate 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'Do you want hunt '..k..'?'}) 
        else 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'You do not have enough level.'}) 
        end 
    end 
end 
return true 
end 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) 
npcHandler:addModule(FocusModule:new())


Wi?kszo?? potwor?w jest ju? dodana do skryptu, wi?c nie trzeba wiele si? babra?, ale wyja?ni? config.
Dla pojedynczej rasy potwor?w (czyli w takich gdzie znajduje si? tylko jeden osobnik):
PHP:
['crocodile'] = {storage = 9960, beginStorageValue = 39, finishStorageValue = 40, count = 300},
Indeksami s? nazwy potwor?w, storage to storage zapisuj?ce ilo?? zabitych potwork?w, beginStorageValue to pocz?tkowe storage upowa?niaj?ce skrypt do liczenia zabitych potwor?w danego typu, finishStorageValue storage value ko?cowe, kt?re otrzymujemy po zabiciu odpowiedniej ilo?ci potwor?w, count wymagana ilo?? potwor?w, kt?re trzeba zabi? by sko?czy? taska.

Dla masowej rasy potwor?w (czyli w takich gdzie mamy kilka rodzaj?w danego monstera, np lizardy, drakeny czy smoki):
PHP:
['trolls'] = {monsterTypes = {['troll']=9950,['swamp troll']=9949,['island troll']=9948,['frost troll']=9947,['troll champion']=9946}, 
                        beginStorageValue = 1, finishStorageValue = 2, count = 150},
Indeks to nazwa rasy, monsterTypes to tabelka, w kt?rej wpisujemy wszystkie nazwy potwor?w nale??ce do tej rasy, liczba przypisana do ka?dej nazwy to storage licz?ce ilo?? zabitych potwor?w danego typu, reszta tak jak wy?ej.


Je?li chcemy doda? bossy do taska to wystarczy doda?/edytowa? t? cz??? kodu:
PHP:
['the snapper'] = {beginBossStorageValue = 1, finishedBossStorageValue = 2, 
                                    [5302] = {effect = CONST_ME_CARNIPHILA, centerRoomPosition = {x=1000,y=1000,z=7}, 
                                             bossSummonPlace = {x=1000,y=1000,z=7}, bossEffect = CONST_ME_CARNIPHILA, 
                                             sizeRoom = {5,5}}},
Indeks to nazwa bossa, beginBossStorageValue to storage value pocz?tkowe upowa?niaj?ce skrypt do zaliczenia bossa, finishedBossStorageValue storage value, kt?re otrzymujemy po zabiciu bossa, obie warto?ci ustawi? adekwatnie do tych w pliku NPCta.
I teraz pokoje z bossami.
Indeks to uniqueItem teleportu prowadz?cego do pomieszczenia z bossem, nie wpisujemy do niego ?adnych wsp??rz?dnych! effect to efekt jaki pojawi si? pod graczem w momencie przeteleportowania na aren?, centerRoomPosition to dok?adnie ?rodek pomieszczenia z bossem, wa?ne jest by si? nie pomyli? w tej wsp??rz?dnej. bossSummonPlace to pozycja gdzie postawi nam bossa, z kt?rym mamy walczy?. bossEffect to efekt jaki pojawi si? pod bossem w momencie jego stworzenia. sizeRoom to wielko?? pokoju z bossem, gdzie pierwsza pozycja to wsp??rz?dna 'x', a druga 'y'. Odleg?o?? liczymy w ten spos?b:
Liczymy ilo?? sqm od kraw?dzi/?ciany pomieszczenia do jej przeciwleg?ej strony (w najszerszym miejscu) i dzielimy przez dwa. Robimy tak dwa razy, pierwszy raz w pozycji poziomej w celu otrzymania wielko?ci 'x' pokoju oraz pionowej dla 'y'.


To teraz NPC
PHP:
['trolls'] = {min_level = 8, max_level = 20, 
                    rewards = {'money', 0, 200, 'exp', 0, 200}, 
                    begin_storage_value = 1, finish_storage_value = 2, boss = true, before_kill_boss = 3, after_kill_boss = 4, talkstate = 23},
Indeks to nazwa rasy, mo?na wpisa? co si? chce tak naprawd?. min_level to minimalny poziom by rozpocz?? taska, max_level to maksymalny poziom by m?c wzi?? taska. rewards to nagrody. I tutaj opisz? troch? szerzej:
Nagr?d mo?na dawa? niesko?czon? ilo?? zachowuj?c odpowiedni porz?dek. Nagr?d jest sze?? (item, exp, storage, money, skill, addon), kt?re mog? si? powtarza?.
Samo wype?nienie tabelki odpowiedzialnej za nagrody robimy w ten spos?b:
{typNagrody, warto??Nagrody, ilo??Nagrody, typNagrody1, warto??Nagrody1, ilo??Nagrody1 ... typNagrodyX, warto??NagrodyX, ilo??NagrodyX}
Gdzie typNagrody to jest to co napisa?em przed chwil?, czyli "item", "exp", "storage", "money", "skill" oraz "addon". warto??Nagrody tyczy si? tylko do "item", "storage", "skill" oraz "addon", dla pozosta?ych typ?w wpisujemy "0" (zero). I po kolei:
Dla "item" b?dzie to itemid nagrody
Dla "storage" b?dzie to numer storage do zapisania
Dla "skill" b?dzie to typ skilla (SKILL_AXE, SKILL__LEVEL itd)
Dla "addon" b?dzie to numer outfitu

ilo??Nagrody tyczy si? wszystkich typ?w i b?d? to kolejno:
Dla "item" ilo?? przedmiot?w
Dla "exp" ilo?? przyznanych punkt?w do?wiadczenia
Dla "storage" jest to storage value nadpisywane na storage z warto??Nagrody
Dla "money" to ilo?? got?wki przekazywanej graczowi
Dla "skill" jest to ilo?? przyznawanych punkt?w skilla
Dla "addon" jest to ilo?? addon?w (0-?aden,1-pierwszy,2-drugi,3-oba)


begin_storage_value/finish_storage_value , pisa?em o tym u g?ry.
boss - czy po sko?czeniu taska musimy i?? zabi? bossa by otrzyma? nagrody czy te? nie
before_kill_boss - storage value upowa?niaj?ce nas do zabicia bossa
after_kill_boss - storage value potrzebne do otrzymania nagrody
talkstate - ustawi? tak by si? nie powtarza?o
 
Odp: Advance tasks system.

Moderator?w, Administrator?w, itp. Prosz? o nie banowanie mnie mimo, ?e od?wie?am temat, kt?ry ma 91 dni. Wiem jakie s? konsekwencje jednak na serio wol? zapyta? oryginalnego autora ni? inne osoby. Przecie? i tak ma?o os?b pisz? w bibliotekach wi?c jeszcze raz bardzo prosz?.
Dzi?kuj?.


@topic
ja mam pytania.
czy skrypt b?dzie dzia?a? na otsie do tibii 8.6, czy 4.4.0

no bo niby da?em tak jak m?wi?e? no nie? no i grizzly adamsowi zmieni?em linijk?
z:
Kod:
script="data/npc/scripts/[COLOR="blue"]killinginthenameof.lu[/COLOR]a"
na
Kod:
script="data/npc/scripts/[COLOR="Blue"]advanceTaskSystem.lua[/COLOR]"

no i mam niby wszystko ok (w skryptachh NIC NIE ZMIENIA?Em! ?adnych pozycji ani nic!)... wpisuje "/reload npc" i nagle setki b??d?w tego typu:
2m3lmyw.jpg


czy to mo?liwe dlatego, ?e po prostu nie powpisywa?em dobrze pozycji tych pokoi i teleport?w?

no i zrestartowa?em te? silnik no nie? no to tam b??dy, ?e monstera nie mog?o znale?? ;o no ale to wiem dlaczego. po prostu nie mam wiele monster?w boss?w z tego skryptu ale to nie problem, zrobi? sobie je.

No tylko po prostu, nie b?d? tego wszystkiego robi? jezeli nie b?d? mia? pewnosci, ?e ten skrypt b?dzie dzia?a? na tym tfs do 8.6 (wersja 4.4.0)

albo to si? te? m?wi 0_4 dev? ;d
 
Odp: Advance tasks system.

w skrypcie masz wielki b??d, kt?rego znalaz?em... w sumie to tylko pisownia ale ona sprawi?a, ?e si? z tym m?czy?em i nadal nie dzia?a do ko?ca.

prosz?, tutaj jest poprawiony skrypt npc. wystarczy?o usun?? jeden wyraz, kt?ry nie powinien by? w jednym miejscu:
PHP:
local function doNPCTalkALot(cid, npc, delay, messages) 
    for i = 1, #messages do 
        addEvent(function() 
                        if isPlayer(cid) then 
                            doCreatureSay(npc, messages[i], TALKTYPE_PRIVATE_NP, false, cid) 
                        end end, 
                        (i > 1 and 5000*i+delay or delay), 
                        cid, messages, i) 
    end 
end 

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 

local main_storage, bosses_storage = 10001, 10002 
local good_hunting = {'Happy hunting, old chap! Come back to me when you are through with your {task}.', 'Good show, old chap! Speak to me again when you are done hunting.'}     
local good_job = {'That took some time, huh? Good hunting though. If you\'re up for another hunting mission just ask me for a {task}.', 'If you\'re up for another hunting mission just ask me for a {task}.'} 
local tasks = { 
            ['trolls'] = {min_level = 8, max_level = 20, 
                    rewards = {'money', 0, 200, 'exp', 0, 200}, 
                    begin_storage_value = 1, finish_storage_value = 2, boss = false, talkstate = 1}, 
            ['goblins'] = {min_level = 10, max_level = 20, 
                    rewards = {'money', 0, 250, 'exp', 0, 300}, 
                    begin_storage_value = 3, finish_storage_value = 4, boss = false, talkstate = 2}, 
            ['rotworms'] = {min_level = 15, max_level = 30, 
                    rewards = {'money', 0, 400, 'exp', 0, 1000}, 
                    begin_storage_value = 5, finish_storage_value = 6, boss = true, before_kill_boss = 1, after_kill_boss = 2, talkstate = 3}, 
            ['cyclops'] = {min_level = 18, max_level = 50, 
                    rewards = {'money', 0, 800, 'exp', 0, 3000, 'item', 2381, 1}, 
                    begin_storage_value = 7, finish_storage_value = 8, boss = false, talkstate = 4}, 
            ['quaras'] = {min_level = 30, max_level = 80, 
                    rewards = {'exp', 0, 12000, 'item', 5895, 1}, 
                    begin_storage_value = 9, finish_storage_value = 10, boss = false, talkstate = 9}, 
            ['water elementals'] = {min_level = 35, max_level = 60, 
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 11, finish_storage_value = 12, boss = false, talkstate = 10}, 
            ['fire elementals'] = {min_level = 35, max_level = 60,  
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 13, finish_storage_value = 14, boss = false, talkstate = 13}, 
            ['earth elementals'] = {min_level = 35, max_level = 60, 
                    rewards = {'exp', 0, 10000, 'money', 0, 2000}, 
                    begin_storage_value = 15, finish_storage_value = 16, boss = false, talkstate = 11}, 
            ['energy elementals'] = {min_level = 35, max_level = 60,  
                    rewards = {'exp', 0, 7000, 'money', 0, 3000}, 
                    begin_storage_value = 17, finish_storage_value = 18, boss = false, talkstate = 12}, 
            ['sea serpents'] = {min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 10000, 'skill', SKILL__LEVEL, 1}, 
                    begin_storage_value = 19, finish_storage_value = 20, boss = false, talkstate = 17}, 
            ['green djinns'] = {min_level = 40, max_level = 100, 
                    rewards = {'money', 0, 5000, 'exp', 0, 10000}, 
                    begin_storage_value = 21, finish_storage_value = 22, boss = false, talkstate = 20}, 
            ['blue djinns'] = {min_level = 40, max_level = 100, 
                    rewards = {'money', 0, 5000, 'exp', 0, 10000}, 
                    begin_storage_value = 23, finish_storage_value = 24, boss = false, talkstate = 21}, 
            ['pirates'] = {min_level = 50, max_level = 120, 
                    rewards = {'money', 0, 5000, 'addon', {151,155}, 1, 'exp', 0, 10000}, 
                    begin_storage_value = 25, finish_storage_value = 26, boss = false, talkstate = 22}, 
            ['minotaurs'] = {min_level = 20, max_level = 60,  
                    rewards = {}, 
                    begin_storage_value = 27, finish_storage_value = 28, boss = true, before_kill_boss = 3, after_kill_boss = 4, talkstate = 23}, 
            ['necromancers'] = {min_level = 40, max_level = 110,  
                    rewards = {'addon', {145,149}, 1}, 
                    begin_storage_value = 29, finish_storage_value = 30, boss = true, before_kill_boss = 5, after_kill_boss = 6, talkstate = 24}, 
            ['high lizards'] = {min_level = 80, max_level = 220,  
                    rewards = {'item', 11295, 1, 'addon', {335,336}, 1}, 
                    begin_storage_value = 31, finish_storage_value = 32, boss = false, talkstate = 26}, 
            ['dragons'] = {min_level = 40, max_level = 180,  
                    rewards = {'item', 2516, 1, 'exp', 0, 10000, 'money', 0, 5000}, 
                    begin_storage_value = 33, finish_storage_value = 34, boss = true, before_kill_boss = 7, after_kill_boss = 8, talkstate = 27}, 
            ['dragon hatchlings'] = {min_level = 20, max_level = 50,  
                    rewards = {'item', 2434, 1, 'exp', 0, 4000}, 
                    begin_storage_value = 35, finish_storage_value = 36, boss = false, talkstate = 28}, 
            ['undead dragons'] = {min_level = 100, max_level = 300,  
                    rewards = {'item', 11299, 1, 'exp', 0, 25000, 'addon', {335,336}, 2}, 
                    begin_storage_value = 37, finish_storage_value = 38, boss = false, talkstate = 29}, 
             
            ['crocodile'] = {min_level = 20, max_level = 45, 
                    rewards = {'exp', 0, 800}, 
                    begin_storage_value = 39, finish_storage_value = 40, boss = false, talkstate = 5}, 
            ['tarantula'] = {min_level = 20, max_level = 50, 
                    rewards = {'money', 0, 1500}, 
                    begin_storage_value = 41, finish_storage_value = 42, boss = false, talkstate = 6}, 
            ['carniphila'] = {min_level = 20, max_level = 50, 
                    rewards = {'exp', 0, 1500}, 
                    begin_storage_value = 43, finish_storage_value = 44, boss = false, talkstate = 7}, 
            ['stone golem'] = {min_level = 24, max_level = 50, 
                    rewards = {'exp', 0, 2000, 'item', 5880, 1}, 
                    begin_storage_value = 45, finish_storage_value = 46, boss = false, talkstate = 8}, 
            ['mutated rat'] = {min_level = 40, max_level = 80,  
                    rewards = {'exp', 0, 10000}, 
                    begin_storage_value = 47, finish_storage_value = 48, boss = false, talkstate = 14}, 
            ['giant spider'] = {min_level = 50, max_level = 90, 
                    rewards = {'exp', 0, 5000, 'item', 5879, 1}, 
                    begin_storage_value = 49, finish_storage_value = 50, boss = true, before_kill_boss = 9, after_kill_boss = 10, talkstate = 15}, 
            ['hydra'] = {min_level = 90, max_level = 250, 
                    rewards = {'exp', 0, 15000, 'addon', {144,148}, 1}, 
                    begin_storage_value = 51, finish_storage_value = 52, boss = false, talkstate = 16}, 
            ['behemoth'] = {min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 5000, 'addon', {143,147}, 2, 'skill', SKILL_AXE, 1}, 
                    begin_storage_value = 53, finish_storage_value = 54, boss = true, before_kill_boss = 11, after_kill_boss = 12, talkstate = 18}, 
            ['serpent spawn'] = {min_level = 90, max_level = 250, 
                    rewards = {'money', 0, 15000, 'addon', {144,148}, 2}, 
                    begin_storage_value = 55, finish_storage_value = 56, boss = false, talkstate = 19}, 
            ['demon'] = {min_level = 100, max_level = 300, 
                    rewards = {'item', 2128, 75, 'addon', {288,289}, 2, 'item', 10518, 1}, 
                    begin_storage_value = 57, finish_storage_value = 58, boss = true, before_kill_boss = 13, after_kill_boss = 14, talkstate = 25}, 
            } 

local function doTakeReward(cid, table) 
for i = 1, #table/3 do 
    if table[i*3-2] == 'item' then 
        doPlayerAddItem(cid, table[i*3-1], table[i*3], true) 
    elseif table[i*3-2] == 'exp' then 
        doAddExp(cid, table[i*3]) 
    elseif table[i*3-2] == 'storage' then 
        doPlayerSetStorageValue(cid, table[i*3-1], table[i*3]) 
    elseif table[i*3-2] == 'money' then 
        doPlayerAddMoney(cid, table[i*3]) 
    elseif table[i*3-2] == 'skill' then 
        doPlayerAddSkill(cid, table[i*3-1], table[i*3]) 
    elseif table[i*3-2] == 'addon' then 
        doPlayerAddOutfit(cid, (getPlayerSex(cid) == 0 and table[i*3-1][1] or table[i*3-1][2]), table[i*3]) 
    end 
end 
return true 
end 

function creatureSayCallback(cid, type, msg) 
s = 'All right, what would you like to hunt - ' 
for k, v in pairs(tasks) do 
    s = s .. (getPlayerLevel(cid) >= v.min_level and getPlayerLevel(cid) <= v.max_level and '{'..k..',} ' or '') 
end 
s = string.sub(s, 1, s:len() - 3)..'}.' 
if isInArray({'task','mission','quest'}, msg:lower()) then 
    if getPlayerStorageValue(cid, main_storage) <= 0 then 
        talkState[cid] = 100 
        return doNPCTalkALot(cid, getNpcCid(), 200, s) 
    else 
        for k, v in pairs(tasks) do 
            if getPlayerStorageValue(cid, main_storage) == v.finish_storage_value and getPlayerStorageValue(cid, bosses_storage) < v.before_kill_boss then 
                if v.boss then 
                    doPlayerSetStorageValue(cid, bosses_storage, v.before_kill_boss) 
                    return doNPCTalkALot(cid, getNpcCid(), 200, {'Good job, go kill boss of '..k..'.'}) 
                else  
                    doPlayerSetStorageValue(cid, bosses_storage, 0) 
                    doPlayerSetStorageValue(cid, main_storage, 0) 
                    doTakeReward(cid, v.rewards) 
                    return doNPCTalkALot(cid, getNpcCid(), 200, {good_job[math.random(#good_job)]}) 
                end 
            elseif getPlayerStorageValue(cid, bosses_storage) == v.after_kill_boss then 
                doPlayerSetStorageValue(cid, bosses_storage, -1) 
                doPlayerSetStorageValue(cid, main_storage, -1) 
                doTakeReward(cid, v.rewards) 
                return doNPCTalkALot(cid, getNpcCid(), 200, {good_job[math.random(#good_job)]}) 
            elseif getPlayerStorageValue(cid, bosses_storage) == v.before_kill_boss then 
                return doNPCTalkALot(cid, getNpcCid(), 200, {'You do not kill boss yet.'}) 
            end 
        end 
    end 
elseif isInArray({'cancel','abort','stop'}, msg:lower()) then 
    if getPlayerStorageValue(cid, main_storage) > 0 then 
        talkState[cid] = 101 
        return doNPCTalkALot(cid, getNpcCid(), 200, {'Do you want cancel actual mission?'}) 
    else 
        return doNPCTalkALot(cid, getNpcCid(), 200, {'You don\'t have started any task!'}) 
    end 
end 
for k, v in pairs(tasks) do 
    if isInArray({'yes','ok','yep'}, msg:lower()) then 
        if talkState[cid] == v.talkstate then 
            doPlayerSetStorageValue(cid, main_storage, v.begin_storage_value) 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {good_hunting[math.random(#good_hunting)]}) 
        elseif talkState[cid] == 101 and getPlayerStorageValue(cid, main_storage) > 0 then 
            doPlayerSetStorageValue(cid, main_storage, -1) 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'Speak to me again when you are done hunting.'}) 
        end 
    elseif isInArray({'no','never','nope'}, msg:lower()) and talkState[cid] > 0 then 
        return doNPCTalkALot(cid, getNpcCid(), 5000, {'Ok then.'}) 
    elseif isInArray({k,string.sub(k, 1, k:len() - 1)}, msg:lower()) and talkState[cid] == 100 then 
        if getPlayerLevel(cid) >= v.min_level and getPlayerLevel(cid) <= v.max_level then 
            talkState[cid] = v.talkstate 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'Do you want hunt '..k..'?'}) 
        else 
            return doNPCTalkALot(cid, getNpcCid(), 5000, {'You do not have enough level.'}) 
        end 
    end 
end 
return true 
end 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) 
npcHandler:addModule(FocusModule:new())

jednak ca?y czas skrypt mi nie dzia?a dok?adnie. przy w??czaniu konsoli wyskakuj? b??dy typu:
[Warning - Monster::Monster] Unknown event name - KillingInTheNameOf
no mn?stwo ich wyskakuje...

kolejny b??d to to, ?e npc odpisuje ca?y czas takie co?:
02:00 Grizzly Adams:
02:00 Grizzly Adams:
02:00 Grizzly Adams:
02:00 Grizzly Adams:
02:01 Grizzly Adams:
nawet jak si? powie bye... ca?y czas pisz? na tym NPC Channel. ;/
 
Odp: Advance tasks system.

Fakt, m?j b??d. Oba b??dy spowodowane moim niedopatrzeniem.
Mam to naprawione, ale nie wstawiam ju? nowej wersji na forum, nauczy?em si?, ?e nie warto.
 
Odp: Advance tasks system.

Witam, Oskar . Posiadasz mo?e wersj? tego skrypta , kt?ra dzia?a?a by pod The Forgotten Server v0.4 8.6 ? poszukuje go..
 
Odp: Advance tasks system.

Na pewno nie mo?esz zamie?ci? tutaj poprawionego kodu? By?bym wdzi?czny.
I kolejne pytanie: jak jako nagrod? ustawie addon i zrobie na 0, to doda mi chocia? sam outfit o ile by? questowy, a nie dost?pny od razu?

edit: Sory za podw?jne wstawienie tych samych pyta?, ale nie za bardzo ogarniam jeszcze to forum ;p wy?szy post mo?na usun??.
 
Ostatnia edycja:
Status
Zamknięty.
Do góry