Top.Mail.Ru

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

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

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

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

x
Хроники        Interlude
% g+ v( F0 K$ w( e, x  W$ _Сборка        L2j
0 {6 B* Y: ]. A! I* i% M$ NПример основан на сборке L2J.
4 a/ C5 K* `4 k& `9 z; `8 ^, O2 r+ Q  Q; p9 x
Первое что нужно сделать, это добавить необходимые Java классы в квест.
3 v, E; F! p) h" Q+ T/ d
  1. 5 s! e  y' r" L7 T! w
  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>
    ) U9 X+ I  ]# N8 W- n
  3. + @* f: K: \' l, X6 T* e# j5 I; s3 @
  4. </div>
Скопировать код
  1. import sys
      D$ m6 R1 o' ?
  2. from net.sf.l2j.gameserver.model.quest import State
    ' b2 {4 O8 Y9 `; R" ?( L: ?  V
  3. from net.sf.l2j.gameserver.model.quest import QuestState' E  e5 e4 }2 P  b+ ]
  4. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Скопировать код
  1. KELTIR_NPC_ID = 12082% _% j- ]8 D% w
  2. FANGS_ITEM_ID = 1859
    ( ^1 D0 c* J& c/ L' W( J4 T
  3. DROP_RATE = 5000003 R5 e: E  h0 v6 m* v# _
  4. WORLD_MAP_ITEM_ID = 1665
Скопировать код
  1. def getCount(st) :7 p/ g: n- J; p) ^  F
  2. return st.getQuestItemsCount(FANGS_ITEM_ID)
Скопировать код
Функция для завершения квеста (st должна быть в QuestState):
  p. }7 ^0 p" R: E+ m
+ r0 ^/ P  t5 P% M
  1. def completed(st) :: u0 Z$ v" q8 b2 Y6 o0 ^# T
  2. st.setState(COMPLETED)
    " e4 Z7 J2 v1 c
  3. st.clearQuestDrops()
    ) z- [. Q5 U4 t+ m5 F4 A
  4. st.takeItems(FANGS_ITEM_ID,-1)0 {! T, q, D, ]" `9 \) Q& L6 y5 H
  5. st.giveItems(WORLD_MAP_ITEM_ID,1)
    2 S3 s* }( y! v7 f0 t
  6. st.exitQuest(False)
    % e) p/ t" Y1 k% U
  7. return
Скопировать код
Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False))) E; j7 E, u5 h; N& X" R

/ X0 S' `1 r5 M- s: {; _  X, l- @) C3 E& b" Z4 ?1 H( S

! o, Q  h6 K+ H4 R8 hИ наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState):
; X. x7 E$ ~5 C5 E; I" a3 Q! A0 m6 Q3 |7 V& P
  1. def check(st) :1 i* R" [3 A" O1 m) i, B+ x
  2. if getCount(st) >= 4 :7 u4 ?% ^0 k1 g5 ]2 Y( P7 j- @
  3. completed(st)# |! u3 W% d; f. c1 D- L
  4. return
Скопировать код
Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJython. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал.. }$ i% C' g. Z& I
: }# W) z$ H. B
  1. class Quest (JQuest):
    1 m, o$ a" r8 ?
  2. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)" t7 R2 P1 X. s8 y' [' G& ?
  3. def onEvent (self,event,st):
    6 k* Y) d1 e# \  y/ f* P: ^$ y
  4. id = st.getState()  A9 m% h0 f$ ?& p6 q
  5. if id == CREATED : st.setState(STARTED)* n" o. F* U( e- o% _+ Z
  6. elif id == COMPLETED: pass
    ) \( H( Y3 d* ]* _3 e/ B$ r$ B
  7. elif id == STARTED : check(st)
    / C4 l6 r6 b4 b8 b5 P
  8. return
Скопировать код
  1. QUEST.setInitialState(CREATED)! B0 Y& }# G7 A4 w6 k
  2. QUEST.addStartNpc(7056)
Скопировать код

- b8 _* Z, u( |6 W
- {" U/ d. s8 ~2 j
Чтобы ответить, вам надо авторизироваться в системе Вход | Зарегистрироваться

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

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

638638758

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

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

admin@artace.ru Онлайн

QR-код

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