Cкачай, создай свой сервер Lineage2 Как создать сервер - Д7-4ДпоКП
Четверг, 08.12.2016, 12:50
Создай свой сервер Lineage 2
  C4 C5 C6 Interlude/Freya
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Разделы новостей
Java сервера [332]
Бесплатные Java сборки серверов Lineage2
Платные Cервера [0]
Платные Java, PTS сборки серверов Lineage2
Платные Web обвязки [0]
Платные Web обвязки
Web сервер [57]
Web обвязки, скины
Дополнения [66]
Дополнения для серверов, клиентов, скины, текстуры и т.д.
Программы [30]
Программы, софт, updaters и многое другое
Видео (manual) [8]
Обучающее видео и т.д.
Новости [13]
Форма входа
Логин:
Пароль:
Лидеры

pleomaxs
Кол.новостей: 16
Репутация: 36
Форум: 437

Beliy
Кол.новостей: 11
Репутация: 140
Форум: 1176

izac
Кол.новостей: 3
Репутация: 0
Форум: 65

legolas
Кол.новостей: 3
Репутация: 0
Форум: 0

xaxaxa
Кол.новостей: 3
Репутация: 38
Форум: 169

Ezildin
Кол.новостей: 3
Репутация: 325
Форум: 2569

pupoK
Кол.новостей: 2
Репутация: -1
Форум: 23

Warman
Кол.новостей: 2
Репутация: 53
Форум: 576

Zidane
Кол.новостей: 2
Репутация: 91
Форум: 780

IIIyXeP
Кол.новостей: 2
Репутация: 287
Форум: 3341
Календарь новостей
«  Декабрь 2016  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Поиск
ONLINE
Онлайн всего: 8
Гостей: 5
Пользователей: 3
C2nonell, geraldab1, tameraxy69

Посетившие сегодня:
ShepovalovOr, abarachetrorp, Aremaittag, Frankiegasp, VladimirGah, juristanpt, kapedMix, Suvasik, MichaelRanda, AgpixNum, Andrewcit, annaInemgync, StepanEteft, toledMix, Jaqmesereds, MichxealDen, Artemabima, Antonwam, LouiskeM, BorisincoT, C2konell, GladysSex, Belvakeync, whitneyhf11, ZelindaTer, lauratu16, EJMark, C2bonell, gertrudedt16, BeaulahNom, C2conell, [Полный список]
Друзья сайта

    Rambler's Top100

    Наша кнопка:


Наш опрос
Часто ли вы играете в Lineage2?
Всего ответов: 42987

 1 , 2 , 3 , 4

IV. ЧАСТЬ
 
Но для большей функциональности необходимо добавить различные проверки, к примеру можно внести проверку на минимальный лвл игрока:
   Код:
   if npcId == CARADINE:
      if cond == 0 and  onlyone == 0 :
         if st.getPlayer().getLevel() >= 60 :      # Ограничение по уровню игроков. Т.е. не ниже 60 лвл
            htmltext = "31740-01.htm"              # Если с уровнем все впорядке - можно проджолжать квест
         else :
            htmltext = "31740-05.htm"              # Если игрок слишком "молод"
            st.exitQuest(1)                        # Выход из состояния квеста с удалением всех данных о нем из таблицы `character_quests`
а так же на проверку наличия выбитого итема, если игрок вернулся, не выполнив поставленной задачи:
   Код:
      elif cond == 1 and st.getQuestItemsCount(FESTIVAL_ADENA_ID) == 0 : # Случай когда игрок получил задание но не выполнил его
         htmltext = "31740-03.htm"
Для усовершенствования и с целью усложнения квеста можно добавлять различные функции, при срабатывании которых сервер будет получать уведомления:
   Код:
onAttack(self, npc, player)
Эта функция вызывается, когда игрок атакует NPC, который зарегистрирован для квеста.
Параметр "npc" содержит ссылку на идентификатор (ID) NPC который был атакован.
Параметр "player" содержит ссылку на идентификатор игрока, который атаковал.
Параметр "self" работает так же как и в onEvent.
   Код:
onFirstTalk(self,npc, player)
Эта функция вызывается, когда игрок «разговаривает» с NPC, зарегистрированным для квеста. Это событие инициируется при первом «клике» на NPC, не через диалог.
ПРИМЕЧАНИЕ: Для каждого NPC может быть зарегистрировано не более одного квеста, для инициации(срабатывания) этой функции. Другими словами, один и тот же NPC не сможет ответить на запрос "onFirstTalk" из двух разных квестов. Попытка зарегистрировать NPC в двух разных квестах для использования этой функции приведёт к тому, что одна из двух регистраций будет проигнорирована.
ПРИМЕЧАНИЕ: Поскольку квестовая ссылка не была нажата, для достижения этого, статус квеста может быть неверным в пределах этой функции. Возможно вам нужно будет создать новое состояние квеста (если это необходимо), с использованием:
   Код:
st = self.newQuestState(player)
Все остальные параметры, такие же как и в onAttack.
   Код:
onDeath (self, npc, character, st)
Эта функция вызывается каждый раз, когда идентификатор (ID) персонажа, который был зарегистрирован для этого события, умирает. Регистрация для события onDeath не делается через квест непосредственно, но взамен использует QuestState конкретного игрока.
Параметр "npc" содержит ссылку на ID NPC, который убивает персонажа.
Параметр "character" содержит ссылку на ID персонажа, который был убит.
Параметр "st" содержит ссылку на QuestState того, кто заинтересован(ожидает) этого убийства.
Параметр "self" работает так же как и в onEvent.
Совсем недавно в квестовый движок была добавлена функция
   Код:
onSkillUse (self,npc,player,skill)
, которая срабатывает в случае если игрок использует какой нибудь скилл зарегистрированный в секции addSkillUse().
Параметр "npc" содержит ссылку на ID NPC, который ощутил на себе действие зарегистрированного скилла.
Параметр "player" содержит ссылку на идентификатор игрока, который использовал зарегистрированный скилл.
Параметр "skill" содержит ссылку на Skill который зарегистрированн в секции регистрации квеста.
Параметр "self" работает так же как и в onEvent.
Для большей функциональности квеста можно не ограничиваться импортом стандартных классов, а добавлять дополнительные из сервера, к примеру импорт класса
   Код:
from net.sf.l2j.gameserver.datatables  import SkillTable
Если игрок желает получить после удачного прохождения квеста скилы, которые не относятся к его игровому классу - необходимо добавить их получение через код квеста, но в стандартных классе QuestJython нет необходимых функций, вот в таких случаях используется импорт дополнительных классов.
После импорта необходимого Жаба-класса мы можем вписать в код получение скилов:
   Код:
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(325,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(326,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(327,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(1323,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(1324,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(1325,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(1326,1))
         st.getPlayer().addSkill(SkillTable.getInstance().getInfo(1327,1))
Теперь наш гамер получит желаемые скилы.
Для отладки кода квеста можно использовать метки, т.е. к примеру у нас ошибка в коде квеста, хотя он и подгружается с сервером и в логе написано что наш квест загрузился, но не все проверки или функции у него действуют.
Поэтому для этих целей можно использовать метки
   Код:
print 1
print 2
print 3
Для наглядности установим их в код квеста:
   Код:
   if npcId == CARADINE:
      if cond == 0 and  onlyone == 0 :
         print 1
         if st.getPlayer().getLevel() >= 60 :      # Ограничение по уровню игроков. Т.е. не ниже 60 лвл
            print 2
            htmltext == "31740-01.htm"              # Если с уровнем все впорядке - можно проджолжать квест
         else :
            print 3
            htmltext = "31740-05.htm"              # Если игрок слишком "молод"
            st.exitQuest(1)                        # Выход из состояния квеста с удалением всех данных о нем из таблицы `character_quests`
К примеру у нас игрок уровня более 60, но ему почемуто не выводится сообщение с предложением получить задание ("31740-01.htm"). Значит нам в самую пору смотреть что написано в логе ГеймСервера, а там будут стоять цифры :
   Код:
1
2
Странно, почемуто проверку на лвл игрока прошли нормально - но htm с предложением принять задание не было показано. Смотрим код квеста. А там... опля, в строке htmltext == "31740-01.htm" стоит двойной знак равенства, следовательно сервер сравнивает значение htmltext и "31740-01.htm", а не присваивает значение.
Иправляем на один знак равенства и перегружаем полностью сервер (так как у нас пока не работает перегрузка одного квеста). Пока сервер грузится смотрим логи, если наш квест присутствует в логе загрузки - значит при редактировании кода мы ошибок не допустили.
Подоходим к NPC и опять пытаемся взять квест. Теперь появляется окно диалога в котором есть ссылка на взятие квеста.
Ну вот вроде бы и все что хотел написать. Да кстати для написания квестов существует очень много функций, об этом было написано выше, поэтому составлять весь список этих функций нет смысла, тем более что при усовершенствовании кода сервера функции добавляются, удаляются или модифицируются.

 
 
Copyright SVOYL2 © 2007-2016
Находящиеся на сайте материалы принадлежат их авторам, при их использовании гиперссылка на svoyl2.ru обязательна!
Рейтинг@Mail.ru