Moin,
in der Shoutbox hat sich das jemand gewünscht, also here you go. Eine kleine Beispielquest hab ich auch geschrieben und wie man das benutzen kann seht ihr im GIF. Man könnte also Spieler dazu bringen, dass sie ein bestimmtes Item innerhalb einer Zone auf den Boden werfen, um bspw. in einem Dungeon etwas zu triggern oder so. Ich hab als Beispiel eine Quest geschrieben bei der der Spieler ein Osterei in die große Safezone im blauen Reich Map1 werfen muss.
Bitte melden Sie sich an, um dieses Bild zu sehen.
Server Source Part:
In common/service.h
einfügen
In game/questmanager.cpp
nach
suchen und darunter
einfügen.
In der gleichen Datei nach
suchen und DARÜBER
- #ifdef DROP_ITEM_QUEST_TRIGGER bool CQuestManager::DropItem(unsigned int pc, LPITEM item) { if (test_server) sys_log(0, "questmanager::DropItem Start : itemVnum : %d PC : %d", item->GetOriginalVnum(), pc); PC* pPC; if ((pPC = GetPC(pc))) { if (!CheckQuestLoaded(pPC)) { return false; } SetCurrentItem(item);
- return m_mapNPC[item->GetVnum()].OnDropItem(*pPC); } else { sys_err("QUEST DROP_ITEM_EVENT no such pc id : %d", pc); return false; } }
- #endif
einfügen
In game/questmanager.h nach
suchen und darunter
einfügen
in game/questnpc.cpp nach
suchen und DARÜBER
einfügen.
in game/questnpc.cpp nach
suchen und darunter
einfügen.
In game/quest.h
suchen und DARÜBER
einfügen
In game/char_item.cpp nach
suchen und darunter
ACHTUNG: Mit der letzten Änderung funktioniert dieser Quest-Trigger nur für Items mit dem Typ ITEM_QUEST bzw. 18. Solltet ihr das für alle Items machen wollen, entfernt einfach die Zeile
bzw. macht
aus dem Code.
Ich empfehle euch dies jedoch nicht zu tun, da ich nicht sicher sagen kann ob das zu Problemen im Livebetrieb mit vielen Spielern führt. Wenn ihr die Überprüfung entfernt wird für JEDES Item, das ein Spieler auf den Boden wirft überprüft, ob das zu einer Quest gehören und diese Triggern könnte. Aufpassen!
Beispiel-Quest:
- quest dropegg begin
- state start begin
- when login begin
- send_letter("Quest Example")
- end
- when button or info begin
- say("Du musst bitte unbedingt ")
- say_item_vnum(50165)
- say("in die Safezone von Map1 blau schmeissen!")
- say("ES GEHT UM LEBEN UND TOD")
- end
- when 50165.drop begin
- local isMap1Blue = pc.get_map_index() == 41
- local xMatches = pc.get_local_x() >= 357 and pc.get_local_x() <= 403
- local yMatches = pc.get_local_y() >= 626 and pc.get_local_y() <= 663
- if isMap1Blue and xMatches and yMatches then
- say_title("Das hast du krass gemacht, Kollege!")
- end
- end
- end
- end
Viel Spaß. Den Thread zu erstellen hat btw. länger gedauert als den Quest-Trigger...