Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
% y+ J' {9 u3 k, i5 U1 ~* }Сборка        L2j
: Q- \/ `, h% N% Q0 IПример основан на сборке L2J.
; |  y1 L- V* f1 U
: Z% v# \; B$ v2 ^Первое что нужно сделать, это добавить необходимые Java классы в квест.
5 |. F: W% K! ^3 U2 J- R

  1. ; F8 K" S% p9 S) s. U2 s9 R
  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>
    2 k! S9 s1 g# ]0 V
  3. - g& E9 h8 u  ?1 _
  4. </div>
Скопировать код
  1. import sys
    9 X4 B  [: h! T5 J  S0 R
  2. from net.sf.l2j.gameserver.model.quest import State
      e; c/ o( b0 H" C/ A% I. J  h1 J
  3. from net.sf.l2j.gameserver.model.quest import QuestState( X2 T1 r( b8 N; o  o3 h
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082
    / L5 {, \7 K$ s) d& @3 y2 g8 r
  2. FANGS_ITEM_ID = 1859+ y) B6 D) V* ]
  3. DROP_RATE = 500000
    ) Q: t+ M: m. M+ E
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :2 E. ^0 p. _2 r" z
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):3 Z/ Q- Q( k' j' V9 q* @( Q

, H$ j$ o# |; I* W. i
  1. def completed(st) :
    2 M" s7 L' {/ y% @
  2. st.setState(COMPLETED)
    6 }4 d4 I( y( V# v& |$ D) h
  3. st.clearQuestDrops()
    ' L: x: X" G+ ?- E
  4. st.takeItems(FANGS_ITEM_ID,-1)' ^2 q1 Z: [) _0 o" e6 q( a
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    9 o/ n# P( }% O( v4 W( K6 T
  6. st.exitQuest(False)0 F; l- C0 Q6 V
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))5 M: H1 \, u! ?' k3 `
5 }: Z# Z& A% `4 C( t

% J% ?* i! K# F
% C) y% B/ T; C9 g2 F; e- \
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):: X4 W! a8 p, q2 e$ B. ^# q

, u7 X- `- x" w( V2 d5 b
  1. def check(st) :/ k7 J* A6 u& L3 r# X4 c
  2. if getCount(st) >= 4 :/ d# E6 R# h) v
  3. completed(st)
    5 }/ M* \, F0 O" F9 S4 c; Z( H
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.( W# i; v2 F+ e  M% Y+ l/ s) m, [
6 Z7 h; |( }# v+ C6 k
  1. class Quest (JQuest):+ u$ t- b7 I& q7 ^  N- A$ U
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr), w( _9 X4 r2 J6 v
  3. def onEvent (self,event,st):1 B* p6 L& M) z# M  N
  4. id = st.getState()
    * B  b! P* `' \: I: h4 R& ~
  5. if id == CREATED : st.setState(STARTED)
    . K! t' Z/ s) z
  6. elif id == COMPLETED: pass- U6 j8 Z$ K" W9 I
  7. elif id == STARTED : check(st)
    2 a7 \! H4 X, |! N
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    : i9 D8 ~. n% r; X0 ^; \
  2. QUEST.addStartNpc(7056)
Скопировать код

& q9 G7 D7 ^% @
. M( @% j7 J* R8 h% {. v
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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