Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
- J3 C$ i# _" o7 P. \7 vСборка        L2j
5 q* D2 K* n( h" ?0 p, gПример основан на сборке L2J.( z; B4 C+ f! G9 a

7 i4 g5 \1 E; Z+ q$ O/ E2 yПервое что нужно сделать, это добавить необходимые Java классы в квест." `& `" O( P2 u$ {

  1. ) ?: s8 V" n( n4 B) h) s( F% g
  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>
    3 s  X0 \# H: A% t$ y
  3. 3 x+ L) f. k( M6 p
  4. </div>
Скопировать код
  1. import sys
    4 d( S: d% n2 O' k
  2. from net.sf.l2j.gameserver.model.quest import State
    $ W. S3 p0 d7 v
  3. from net.sf.l2j.gameserver.model.quest import QuestState
    7 Q9 c5 J9 n" {. X( Z1 L+ ~* X6 \5 G. Q
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082% g8 y$ d3 J% A1 L
  2. FANGS_ITEM_ID = 1859- y: v6 D5 X1 Y4 J- D, X
  3. DROP_RATE = 500000* e0 y0 s6 f: B, ^7 M! u# P
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :
    : x( k) p# [' b1 w( b" q
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
6 m. i' [8 [/ f5 a/ i! r' `6 s' h5 k% O1 \: `! h
  1. def completed(st) :. }. x9 s6 ^1 [" j1 K+ `. L# v4 D
  2. st.setState(COMPLETED)
    2 b& ]: J3 G, f
  3. st.clearQuestDrops()
    $ H% N% M! ]. h. G# _/ l# B7 F
  4. st.takeItems(FANGS_ITEM_ID,-1)
    ; _4 i: I" T# B# Y" |5 J1 k
  5. st.giveItems(WORLD_MAP_ITEM_ID,1), y7 f4 O/ P1 L( i1 V* [, g
  6. st.exitQuest(False)* W* g% j  e+ m* [, V7 b
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))
( ^1 v& A) x. H( g0 S0 Y1 N$ B+ B  h9 f1 H$ k7 W& y; e( M

6 m( A" Q' G6 S- m* O+ R* I

8 l& G- q* s5 T; H: {, `И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):4 ^% U' ]% g3 z
* N  T0 r/ e! l# h  y: G/ p: b( s
  1. def check(st) :9 [( q; ^& Q8 n) q! X  E3 m, {8 `
  2. if getCount(st) >= 4 :
    8 [1 |# c0 S  U  M' z
  3. completed(st)
    1 @. t! \& m# \+ P1 N* o3 J* R
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.
+ Y% G2 ^' X  e# G' R9 s  O
+ j  F4 j. J( I# i. V5 z8 ~9 l  {
  1. class Quest (JQuest):
    - }6 M: L$ z" m2 F* s
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)) l+ j" V% i1 F
  3. def onEvent (self,event,st):
    7 x+ j! h: _2 n$ u8 r- V0 _3 s( ]
  4. id = st.getState()8 d5 t3 W, m, }! f
  5. if id == CREATED : st.setState(STARTED)8 H- J- w# [  _" z- F# a9 b
  6. elif id == COMPLETED: pass" m( I- n( T1 }) i
  7. elif id == STARTED : check(st): C0 m# U# ^7 k* W1 u
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)
    : ]* ]* |$ j5 c$ _& p# k& s
  2. QUEST.addStartNpc(7056)
Скопировать код

$ R+ m# U; r8 _5 d* R- E  R
, T7 o* E  d+ x* p
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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