Reklama
Pokazuje wyniki od 1 do 1 z 1

Temat: [NPC] [8.54 & 8.60] Task System [WYJAŚNIENIE]

  1. #1
    Avatar Pies
    Data rejestracji
    2016
    Położenie
    Natalinha z Ploeszti
    Wiek
    30
    Posty
    775
    Siła reputacji
    9

    Domyślny [NPC] [8.54 & 8.60] Task System [WYJAŚNIENIE]

    Siemaneczko! Zapraszam do zapoznania się z moim nowym poradnikiem dotyczącym NPC Task, no to jedziemy!

    UWAGA! Zaznaczam że nie jestem autorem danego skryptu, skrypt znaleziony w datapacku Podhalanskiego OTS (Edycja już niedostępna - Moon OTS 3.0), autor nie jest znany.

    I. Folder Creaturescripts:

    1. Tworzymy plik counter.lua w data/creaturescripts/scripts. A w nim:

    local monsters = {
    --name = storage
    ["mouse"] = 35001,
    ["rat"] = 35002,
    ["giant manta"] = 35003,
    ["fly"] = 35076,
    }

    function onKill(cid, target)
    if(isPlayer(target) ~= TRUE) then
    local name = getCreatureName(target)
    local monster = monsters[string.lower(name)]
    if(monster) then
    local killedMonsters = getPlayerStorageValue(cid, monster)
    if(killedMonsters == -1) then
    killedMonsters = 1
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have killed for now " .. killedMonsters .. " " .. name .. "'s.")
    setPlayerStorageValue(cid, monster, killedMonsters + 1)
    end
    end
    return TRUE
    end
    2. Nastepnie w creaturescripts.xml dodajemy linijkę:

    <event type="kill" name="KilledMonstersCounter" event="script" value="counter.lua"/>
    3. I kolejną w data/creaturescripts/scripts/login.lua gdzieś na końcu pliku:

    registerCreatureEvent(cid, "KilledMonstersCounter")

    II. Folder NPCs:

    1. W data/npc/ tworzymy plik Guard.xml, a w nim:


    <?xml version="1.0" encoding="UTF-8"?>
    <npc name="Guard" script="data/npc/scripts/shiptasker.lua" floorchange="0" access="5" level="1" maglevel="1">
    <health now="150" max="150"/>
    <look type="134" head="95" body="94" legs="92" feet="93" addons="2" corpse="2212"/>
    <parameters>
    <parameter key="message_greet" value="Hi! Welcome to our ship! We are sailing a lot of time, and have never meet the pirate bay. All in all we are sailing the same way, and its safe. If you search {work}? I think I can help you." />
    <parameter key="message_farewall" value="Bye bye!"/>
    <parameter key="message_walkaway" value="Cya!"/>
    </parameters>
    </npc>

    2. Tworzymy plik w data/npc/scripts/ o nazwie: shiptasker.lua, i tworzymy przykładowy skrypt:
    ------STORAGE-------
    ------100 do 104-------
    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, 'work')) then
    setPlayerStorageValue(cid,39002,1)
    selfSay('I have a good job for you. You must {clean} up my room. A lot of flies fly in my room. Please kill for me 5 flies.', cid)
    end
    ---------------------------------------------------------
    if(msgcontains(msg, 'clean')) then
    selfSay('You must have some experience to kill these small ugly monsters. If you end your cleaning please say me you have {done}.', cid)
    talkState[talkUser] = 1
    elseif(msgcontains(msg, 'done') and talkState[talkUser] == 1) then
    if (getPlayerStorageValue(cid,800) > 0) then
    selfSay('You already help me, thank you so much.', cid)
    else
    if (getPlayerStorageValue(cid,35076) > 4) then
    setPlayerStorageValue(cid,800,1)
    doPlayerAddExperience(cid,1000)
    selfSay('Thanks! For now you can go to the Ship Guard. Its all I can you give. {(given 1000 experience points)}', cid)
    else
    selfSay('You forget make your work? I remember everything boy, you should clean my room from flies, if you have done say {done}.', cid)
    end
    end
    return true
    end
    ----------------------------------------------------------
    end
    npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
    npcHandler:addModule(FocusModule:new())
    3. Wyjaśnienie:

    if(msgcontains(msg, 'work')) then
    setPlayerStorageValue(cid,39002,1)
    selfSay('I have a good job for you. You must {clean} up my room. A lot of flies fly in my room. Please kill for me 5 flies.', cid)
    end

    Jeżeli napiszemy "WORK" napisze wiadomość kluczową dla misji, przypisując storage -> 39002, co jest storage globalnym dla danego skryptu.

    Następnie:

    if(msgcontains(msg, 'clean')) then
    selfSay('You must have some experience to kill these small ugly monsters. If you end your cleaning please say me you have {done}.', cid)
    talkState[talkUser] = 1
    Jeśli napiszemy słowo zawarte, które oznaczyliśmy klamrą, zwróci daną uwagę - konwersacja misji rozpoczęta.

    Później:
    elseif(msgcontains(msg, 'done') and talkState[talkUser] == 1) then
    if (getPlayerStorageValue(cid,800) > 0) then
    selfSay('You already help me, thank you so much.', cid)
    Jeśli napiszemy done, i wewnętrzny storage sprawdzi nam że już robiliśmy tą misję zwróci nam komunikat 0, rozmowa wraca do poprzedniej wersji.

    Następnie:

    if (getPlayerStorageValue(cid,35076) > 4) then
    setPlayerStorageValue(cid,800,1)
    doPlayerAddExperience(cid,1000)
    selfSay('Thanks! For now you can go to the Ship Guard. Its all I can you give. {(given 1000 experience points)}', cid)
    else
    selfSay('You forget make your work? I remember everything boy, you should clean my room from flies, if you have done say {done}.', cid)
    end
    end
    Jeżeli zabiliśmy storage "FLY" z pliku counter.lua większe od 4 czyli 5, otrzymujemy wewnętrzny storage większy od zera w naszym przypadku jest to 800. Daje nam 1000 expa.

    W przeciwnym wypadku kończy rozmowę i wraca do poprzedniej wersji rozmowy.

    Przypisaliśmy storage dla potwora o nazwie "FLY" - (getPlayerStorageValue(cid,35076) > 4) , POWYŻEJ 4 CZYLI 5 SZTUK. TYLE MUSIMY ZABIĆ WAŻEK.

    III. ZASTOSOWANIE W QUEST LOGU LUB NA STRONIE WWW:

    1. W pliku quests.xml w folderze data/XML :


    <quest name="In the swimming ship" startstorageid="39002" startstoragevalue="1">
    <mission name="Cleaning up sailing team helper room" storageid="800" startvalue="1" endvalue="1">
    <missionstate id="1" description="You gained now your first task on this sailing ship. You stand up with good dream, and you are exhaused and feel terrible."/>
    </mission>
    </quest>

    storageid="800" --> ustalamy storage wewnętrzny

    startstorageid="39002" --> ustalamy storage z pliku NPC dającego misje (global storage dla pliku)

    questname / missionname --> nazwa nagłówka misji oraz misji

    2. Analogicznie na stronce WWW w accmakerze podajemy storage 39002


    --- PORADNIK Z DEDYKACJĄ DLA PXGAME & 4 FAME. ---

    IV. Filmik instruktażowy:


    Zachęcam do subskrypcji powiązanego kanału na YT!
    https://www.youtube.com/user/TibiaOTS2014/videos
    Ostatnio zmieniony przez Pies : 20-08-2016, 00:56
    Trafiłem do pokoju okazań gdzie przez lustro weneckie usłyszałem: To nie ten pan. Ale jak to nie ten? Toż powiedziałeś że to ten pan jest pedofilem, miałeś tak powiedzieć.
    To jest stallinowski kraj takich zwyrodnialców, gdzie w jeden dzień z szanowanego człowieka potrafią zrobić śmiecia a ze śmiecia człowieka.

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Odpowiedzi: 30
    Ostatni post: 06-03-2017, 21:07
  2. Odpowiedzi: 70
    Ostatni post: 20-10-2016, 13:40
  3. Eagle Shield - wyjaśnienie.
    Przez Flowman w dziale Tibia
    Odpowiedzi: 9
    Ostatni post: 31-03-2009, 06:59
  4. Nowy system rozmów z NPC
    Przez Silnikos w dziale Niusy
    Odpowiedzi: 132
    Ostatni post: 30-05-2008, 16:34

Tagi tego tematu

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •