Top.Mail.Ru

[Квесты] Создаём собственные квесты (часть 1)

[Скопировать ссылку]
admin Опубликовано 2024-9-17 18:39:47 | Показать все сообщения |Режим чтения Распечатать Назад Вперед

Зарегистрируйтесь сейчас чтобы найти еще больше друзей, и получить полноценный доступ ко всем функциям сайта!

Для просмотра Вам необходимо авторизоваться Если Вы еще не зарегистрированы, перейдите по ссылке:Зарегистрироваться

x
Хроники        Interlude
& ?8 w/ M/ G3 \& @+ MСборка        L2j% B: D5 W- [+ O
Пример основан на сборке L2J.
; J/ A4 L- U$ m0 q2 P3 }3 H& v3 V# Q" J
Первое что нужно сделать, это добавить необходимые Java классы в квест." L& f- r+ H$ K; X% A

  1. * D9 L, G* A+ D" P8 Q4 |$ q
  2. <div><span style="color: rgb(20, 20, 20); font-family: Monaco, Menlo, Consolas, &quot;Roboto Mono&quot;, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; font-size: 12px; white-space-collapse: preserve; background-color: rgb(245, 245, 245);">(net.sf.l2j.gameserver.model.quest).</span>
    " o8 N& e2 l0 y2 B- t( R3 M

  3. 5 y9 y% ~& `( J; Y5 M
  4. </div>
Скопировать код
  1. import sys# s6 b% i! p1 H+ `
  2. from net.sf.l2j.gameserver.model.quest import State
    & W, g9 \# Y6 q+ j( i, t- C
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    ) b% J# l( l% E
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082: G& z  C$ J2 {5 N  \% C' I
  2. FANGS_ITEM_ID = 1859, u* j" C6 e- t* {/ F* P
  3. DROP_RATE = 5000000 f6 i' x7 ~. h, G! s
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :) `; W$ ~1 z* @* e1 m
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
' _, t0 |, h$ Q; H+ {) v- k
6 k3 ~# {4 K! v: N2 L
  1. def completed(st) :8 C8 h" h' x0 a" v" D* g8 q
  2. st.setState(COMPLETED)/ c# y* c3 d+ r9 [1 v5 F+ B
  3. st.clearQuestDrops()3 f1 V* R5 X, \7 I+ c: b
  4. st.takeItems(FANGS_ITEM_ID,-1)
    7 w( e* c5 `5 A3 {, Y6 P
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)4 x+ |: Z0 L+ o' I7 C/ {- \$ f
  6. st.exitQuest(False); r# ~$ E/ Y. N. `5 V5 L8 v6 l
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
4 G3 O$ ], w6 C4 t) T- {/ s2 K
+ \( R. h" W' g9 b  x# d3 d
2 @  N! d# T" x5 a8 H& M1 Q/ Y& ?) W

3 U  v7 Y, X, `& ^1 UИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):0 J# t: f/ l! k& s# u
  B3 E; T" @* L& o% L
  1. def check(st) :
    + @& s; N* @, M9 o
  2. if getCount(st) >= 4 :
    + u  P0 o) n! v  m$ v7 N1 A, n* ?
  3. completed(st)5 J% W. j" b( I+ l; m+ J
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
8 t8 P4 Z. I, |* Z- ~6 Q5 e  ?! f; o
" E0 L, z) u9 y$ }: D$ V
  1. class Quest (JQuest):- @; @" \8 @0 A
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)7 J% \3 \( X) U$ {# ~) M
  3. def onEvent (self,event,st):  T1 B6 C% q5 f# z4 ~
  4. id = st.getState(): F' y2 {! {* g* f0 `! |* V" l* A
  5. if id == CREATED : st.setState(STARTED)
    + B1 b! f. b$ }
  6. elif id == COMPLETED: pass7 `$ X$ C( P1 h/ e4 x$ O% y! H
  7. elif id == STARTED : check(st)  z3 F6 G& X3 W6 C4 ?6 ~# b1 a
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    + o4 ]: s, C+ `8 @
  2. QUEST.addStartNpc(7056)
Скопировать код
1 Q& l; ?& f3 m) r, H5 x
& I$ s  }6 A, {# s, w. z/ B1 {
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

Правил начисления баллов

Опубликовать
Сектор творческих людей
Горячая линия

638638758

С понедельника по воскресенье с 9:00 до 23:00

Обратной связь

admin@artace.ru Онлайн

QR-код

Powered by Discuz! X3.5© 2001-2021 Comsenz Inc.