Hmm. Tak na szybko.
Łatwa weryfikacja, żeby user nie przeskoczył jakiegoś etapu.
Przy rozmowie z NPC sprawdza czy ma daną ilość lub dany przedmiot i myślę że fsio.
Nie uwzględniłem tutaj tego, że user ten SWORD musi mieć od NPC2. Bo może inaczej też może zdobyć

?
$quest[0
] = array(0
=> array(ID_NPC1
=> GET_SWORD007
), 1
=> array(ID_NPC2
=> COLLECT_WOOD_20
) )
dialogi:
'start' => 'Przynieś mi miecz od NPC2!'
, 'weryfikacja' => 'I co masz już mój miecz?'
, 'koniec' => 'Teraz możemy zniszczyć świat
');
Tabela Zadania(id, mission, min_lvl, nagroda)
Tabela Dialogi(id, id questa, id_etapu, start, weryfikacja, koniec)
Tabela z npc (id, imie, lokalizacja)
Tabela zadania userow(id user id zadania częsc zadania)
Budujesz klasę odpowiedzialną za to co user ma zrobić.
Obsługującą np. GET, COLLECT, ESCORT, TALK.
GET_SWORD007
COLLECT_WOOD_20
ESCORT_NPC5
TALK_NPC5