Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude1 d8 `) a8 p  I, S# H7 p
Сборка        L2j3 ~1 a+ ?6 W5 o& j" H0 H3 Y
Пример основан на сборке L2J.
3 J: ]2 ]& B2 B& G3 g( j4 n, P6 P( U4 v% S; c/ ]/ Q# {
Первое что нужно сделать, это добавить необходимые Java классы в квест.
! v. ?! U# k3 m# \2 v  b
  1. & r( m! ?& X( L; e
  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>7 g; t& R. w( M! B5 V

  3. " q/ M6 A2 G$ `& f3 G" l: X
  4. </div>
Скопировать код
  1. import sys
    0 a7 Z* }9 n' [* E
  2. from net.sf.l2j.gameserver.model.quest import State6 w7 _6 v7 r* A8 D# L1 k. e
  3. from net.sf.l2j.gameserver.model.quest import QuestState0 d$ u, Z4 A; H+ ~0 `: \9 U
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    : x* K0 ]: J3 E" ?) R6 u
  2. FANGS_ITEM_ID = 18590 W' f4 B9 ?% |4 [! a' x, E
  3. DROP_RATE = 500000
    : D; q7 Q+ R+ d6 r5 B
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    - Q5 _" P3 n( G2 a
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):5 |" J, G* {" w

- {3 W2 |8 w+ b: j& t7 N/ p& W
  1. def completed(st) :
    0 Y" U7 Z; E" _% x8 t2 R
  2. st.setState(COMPLETED)5 r5 J" o5 I' n+ T& X2 Y# N9 {! K- d
  3. st.clearQuestDrops()* X* a; m: @: [
  4. st.takeItems(FANGS_ITEM_ID,-1)# [/ D5 ~2 ~# s+ [. E4 U
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    3 P5 R7 q' Y7 M% _! o- X, L: \
  6. st.exitQuest(False)
    5 W" B+ M/ K% X0 y7 r/ p# o
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
: @5 \5 G0 l, I$ p0 U+ {
- T, m4 w) |5 u4 W* O  Q6 E" {8 W. O5 ~0 h* E

4 ~; e9 S; p% V+ HИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
0 W& R- z$ o3 X& M2 \7 v$ k, Q9 T7 ]" {1 M! ~/ E1 g
  1. def check(st) :
    ! C& L) a2 d! E' ]% o  g0 a$ E
  2. if getCount(st) >= 4 :
    2 {7 L% ]; C: Z# V0 I# e2 c+ k
  3. completed(st)1 |% u3 Z. u* C& i9 D
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.; j  r6 ]( k. j2 P# v9 y/ ^" E
* F3 S0 P5 ?; `! S7 x, Y
  1. class Quest (JQuest):4 x4 ~! c. l; P7 O. T
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)9 ]0 s  I+ o5 B, S4 @$ n/ c# r! @
  3. def onEvent (self,event,st):4 q% C- @2 H4 V, a) y7 x. b9 x6 M
  4. id = st.getState()0 v; c3 ?7 k! q1 g- Z
  5. if id == CREATED : st.setState(STARTED), U+ O! t) f; |2 n
  6. elif id == COMPLETED: pass
    " |( r' H, U- n& s; v
  7. elif id == STARTED : check(st)6 u6 V- P3 `4 \1 K) I
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    7 X6 T/ X2 z. [3 L+ ?1 u
  2. QUEST.addStartNpc(7056)
Скопировать код

/ Y5 o- y- \1 O3 F; s0 d! q
( h% ?; f: E; X
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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