11-05-2011, 01:06 AM
Необходимо создать простого бафера для interlude, сборка l2jfrozen
Руководствуясь documentation.txt, вот этим гайдом http://forum.zone-game.info/showthread.php?t=15 и исходниками баферов из других сборок написал вот такой вот скрипт:
Руководствуясь documentation.txt, вот этим гайдом http://forum.zone-game.info/showthread.php?t=15 и исходниками баферов из других сборок написал вот такой вот скрипт:
PHP код:
<?php
import sys
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jfrozen.gameserver.datatables import SkillTable
from java.util import Iterator
from com.l2jfrozen.gameserver.model.actor.instance import L2PcInstance
from com.l2jfrozen import L2DatabaseFactory
BUFF_LIST=[
[1204,2], # 0 - Wind Walk
[1032,3], # 1 - Invigore
[1035,4], # 2 - Mental Shield
[1036,2], # 3 - Magic Barrier
[1040,3], # 4 - Shield
[1043,1], # 5 - Holy Weapon
[1044,3], # 6 - Regeneration
[1045,6], # 7 - Blessed Body
[1048,6], # 8 - Blessed Soul
[1062,2], # 9 - Berserker Spirit
[1068,3], # 10 - Might
[1077,3], # 11 - Focus
[1078,6], # 12 - Concentration
[1085,3], # 13 - Acumen
[1086,2], # 14 - Haste
[1087,3], # 15 - Agility
[1182,3], # 16 - Resist Aqua
[1189,3], # 17 - Resist Wind
[1191,3], # 18 - Resist Fire
[1033,3], # 19 - Resist Potion
[1240,3], # 20 - Guidance
[1242,3], # 21 - Death Whisper
[1243,6], # 22 - Bless Shield
[1257,3], # 23 - Decrease Weight
[1259,4], # 24 - Resist Shock
[1303,2], # 25 - Wild Magic
[1304,3], # 26 - Advanced Block
[1352,1], # 27 - Elemental Protection
[1353,1], # 28 - Divine Protection
[1354,1], # 29 - Arcane Protection
[1392,1], # 30 - Holy Resistance
[1393,1], # 31 - UnHoly Resistance
[1397,3], # 32 - Clarity
[1059,3], # 33 - Greater Empower
[1268,4], # 34 - Vampiric Rage
[1073,2], # 35 - Kiss of Eve
[271,1], # 36 - Dance of Warior
[272,1], # 37 - Dance of Inspiration
[273,1], # 38 - Dance of Mystic
[274,1], # 39 - Dance of Fire
[275,1], # 40 - Dance of Fury
[276,1], # 41 - Dance of Concentration
[277,1], # 42 - Dance of Light
[307,1], # 43 - Dance of Aqua Guard
[309,1], # 44 - Dance of Earth Guard
[310,1], # 45 - Dance of the Vampire
[311,1], # 46 - Dance of Protection
[365,1], # 47 - Sirens Dance
[366,1], # 48 - Dance of Shadow
[264,1], # 49 - Song of Earth
[265,1], # 50 - Song of Life
[266,1], # 51 - Song of Water
[267,1], # 52 - Song of Warding
[268,1], # 53 - Song of Wind
[269,1], # 54 - Song of Hunter
[270,1], # 55 - Song of Invocation
[304,1], # 57 - Song of Vitality
[305,1], # 58 - Song of Vengeance
[306,1], # 59 - Song of Flame Guard
[308,1], # 60 - Song of Storm Guard
[349,1], # 61 - Song of Renewal
[363,1], # 62 - Song of Meditation
[364,1], # 63 - Song of Champion
[1003,3], # 64 - Pa agrian Gift
[1005,3], # 65 - Blessing of Pa agrio
[1004,3], # 66 - The Wisdom of Pa agrio
[1008,3], # 67 - The Glory of Pa agrio
[1249,3], # 68 - The Vision of Pa agrio
[1250,3], # 69 - Under The Protection of Pa agrio
[1260,3], # 70 - The Tact of Pa agrio
[1261,2], # 71 - The Rage of Pa agrio
[1282,2], # 72 - Pa agrio Haste
[1364,1], # 73 - The Eye of Pa agrio
[1365,1], # 74 - The Soul of Pa agrio
[1414,1], # 75 - Victories of Pa agrio
[1416,1], # 76 - Pa agrio Fist
[1002,3], # 77 - Flame Chant
[1006,3], # 78 - Chant of Fire
[1007,3], # 79 - Chant of Battle
[1009,3], # 80 - Chant of Shielding
[1251,2], # 81 - Chant of Fury
[1252,3], # 82 - Chant of Evasion
[1253,3], # 83 - Chant of Rage
[1284,3], # 84 - Chant of Revenge
[1308,3], # 85 - Chant of Predator
[1309,3], # 86 - Chant of Eagle
[1310,4], # 87 - Chant of Vampire
[1362,1], # 88 - Chant of Spirit
[1356,1], # 89 - Prophecy of Fire
[1355,1], # 90 - Prophecy of Water
[1357,1], # 91 - Prophecy of Wind
[1363,1], # 92 - Chant of Victory
[1388,3], # 93 - Greate Might
[1389,3], # 94 - Greate Shield
[1390,3], # 95 - War Chant
[1391,3], # 96 - Earth Chant
[4702,8], # 97 - Blessing of Seraphim
[4703,8], # 98 - Gift of Seraphim
[4699,8], # 99 - Blessing of Queen
[4700,8], # 100 - Gift of Queen
[67,7], # 101 - Summon Life
[1280,9], # 102 - Summon Aqua
[1328,8], # 103 - Summon Storm
[1279,9], # 104 - Summon Binding
[1281,9], # 105 - Summon Spark
[33,8], # 106 - Summon Phantom
]
# Нужно добавить номера скилов из списка выше, например,
# WARIOR_LIST = [0, 1] добавит в список бафов воина Wind Walk и Invigore
WARIOR_LIST = [0, 1]
# То же и для магов...
MAGUS_LIST = [13, 25]
# Минимальный уровень игрока для использования баффера - 10, максимальный - 80
PlayerLvl = [10, 80]
# ID валюты, которая будет тратиться при покупке баффа
AdenaID = 57
FA_ID = 6673
CUR_ID = 0
PRICE = 0
# Бафером будет НИП с ID 100001
NPC = 100001
# Описание квеста
qn = "9998_GMSimpleBuffer"
QuestID = 9998
QuestName = "GMSimpleBuffer"
QuestDescr = "custom"
# Html-страницы диалогов
InitialHtml = str(NPS) + "-1.htm" # страничка с выбором баффов
NotSuitableHtml = str(NPC) + "-2.htm" # lvl игрока не соответствует PlayerLvl
NoSolvencyHtml = str(NPC) + "-3.htm" # игрок не обладает нужной валютой в нужном количестве
class Quest (JQuest):
def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
def onFirstTalk(self, npc, player):
st = player.getQuestState(qn)
if not st:
st = player.newQuestState(qn)
st.setState(STARTED)
return InitialHtml
def onEvent(self, event, st):
htmltext = event
# Проверяем уровень персонажа, устанавливаем валюту
lvl = st.getPlayer().getLevel()
if lvl < PlayerLvl[0] or lvl > PlayerLvl[1]:
htmltext = NotSuitableHtml
st.setState(COMPLITED)
else:
# Если уровень игрока меньше 40, берем за бафф Адену, иначе FA
if lvl < 40:
CUR_ID = AdenaID
PRICE = 100
else:
CUR_ID = FA_ID
PRICE = 5
# Подсчитаем денюжки у игрока
CurCount = st.getQuestItemsCount(CUR_ID)
# Если игрок хочет бафф для воина
if event = "1":
BuffCost = len(WARIOR_LIST) * PRICE
if CurCount >= BuffCost:
#Игрок платежеспособен, берем у него деньги, даём ему бафф
st.takeItems(CUR_ID, BuffCost)
st.getPlayer().stopAllEffects()
st.getPlayer().setTarget(st.getPlayer())
for Buff in WARIOR_LIST:
Skill = BUFF_LIST[Buff]
SkillID = Skill[0]
SkillLvl = Skill[1]
st.getPlayer().useMAgic(SkillTable.getInstance().getInfo(SkillID, SkillLvl), False, False)
st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
return InitialHtml
st.setState(COMPLETED)
else:
# Игрок не платежеспособен. Предлагаем ему сначала немного подзаработать...
return NoSolvencyHtml
st.setState(COMPLETED)
# Если игрок хочет бафф для мага
if event = "2":
BuffCost = len(MAGUS_LIST) * PRICE
if CurCount >= BuffCost:
#Игрок платежеспособен, берем у него деньги, даём ему бафф
st.takeItems(CUR_ID, BuffCost)
st.getPlayer().stopAllEffects()
st.getPlayer().setTarget(st.getPlayer())
for Buff in MAGUS_LIST:
Skill = BUFF_LIST[Buff]
SkillID = Skill[0]
SkillLvl = Skill[1]
st.getPlayer().useMAgic(SkillTable.getInstance().getInfo(SkillID, SkillLvl), False, False)
st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
return InitialHtml
st.setState(COMPLETED)
else:
# Игрок не платежеспособен. Предлагаем ему сначала немного подзаработать...
return NoSolvencyHtml
st.setState(COMPLETED)
if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)
return htmltext
QUEST = Quest(QuestId,qn,QuestDescr)
CREATED=State('Start',QUEST)
STARTED=State('Started',QUEST)
COMPLETED=State('Completed',QUEST)
QUEST.setInitialState(CREATED)
QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)
добавил html-файлы в папку с квестом
создал НИПа с ID = 100001, в качестве шаблона взял 'Beryl the Cat'.
добавил ссылку на квест в файл /data/scripts.cfg
запустил сервер... нип спавнится, но показывает какую-то левую страничку. Не то что мне нужно.
В указанном выше мануале обращается внимание на следующее:
Обратите внимание: в файле htm стартового NCP обязательно должна быть ссылка на квест:
PHP код:
<a action="bypass -h npc_%objectId%_Quest">
однако там нет рекомендации относительно того в какой папке датапака должен лежать файл с этой ссылкой, к сожалению. Прошу прояснить этот момент. Скорее всего существует некое соглашение о том где что должно лежать в датапаке. Буду благодарен, если кто ссылку даст.
и еще после запуска __init__.py выдал лог:
Error on: D:\L2SERVER\l2jfrozen\gameserver\data\scripts\quests\9998_GMSimpleBuffer\__init__.py.error.log
Line: -1 - Column: -1
Traceback (innermost last):
(no code object) at line 0
SyntaxError: ('Lexical error at line 1, column 1. Encountered: "\\u00ff" (255), after : ""', ('__init__.py', 1, 1, '\xFFimport sys'))
Это первый мой скрипт на питоне... впрочем это первый мой квест... прошу подсказать в чем проблема и "в каком направлении копать", чтобы побыстрее повысить квалификацию. Заранее спасибо всем откликнувшимся.
С уважением,
catchword