- Хроники
- Interlude
- Исходники
- Отсутствуют
- Сборка
- l2jorion
Всем привет, подскажите что я делаю не так=)
Взял Скрипт переделали на python и вроде всё хорошо и даже запускается скрипт но проблема в том что при взаимодействие с npc ничего не происходит.
Взял Скрипт переделали на python и вроде всё хорошо и даже запускается скрипт но проблема в том что при взаимодействие с npc ничего не происходит.
Python:
import sys
from java.text import SimpleDateFormat
from java.util import Date
from java.util.concurrent import ScheduledFuture
from java.lang import Runnable
from l2jorion import Config
from l2jorion.log import Log;
from l2jorion.game.model.quest import QuestState
from l2jorion.game.model import L2Party, L2Effect
from l2jorion.game.model.actor.instance import L2NpcInstance, L2PcInstance, L2PlayableInstance
from l2jorion.game.model.quest.jython import QuestJython as JQuest
from l2jorion.game.model.quest import State
from l2jorion.game.thread import ThreadPoolManager
from l2jorion.game.datatables import SkillTable
from l2jorion.game.datatables.sql import NpcTable
from l2jorion.game.templates import L2NpcTemplate
from l2jorion.game.model.spawn import L2Spawn
from l2jorion.game.model.entity import Announcements
from l2jorion.game.util import Util
from l2jorion.game.network.serverpackets import ItemList
class Kamaloka(JQuest):
print" Kamaloka [OK] "
# Константы
npcId = 11
BossIds = 29040
cd = 320
time = 30
count = 1
itemid = 9502
itemcount = 1
START = "start.htm"
announceTask = None
spawnTsk = None
annTsk = None
def __init__(self, questId, name, descr):
JQuest.__init__(self, questId, name, descr)
st = State("Start", self)
self.setInitialState(st)
self.addStartNpc(self.npcId)
self.addTalkId(self.npcId)
self.addKillId(self.BossIds)
def onTalk(self, npc, player):
if self.annTsk:
return "Квест откатывается, подождите немного..."
if not player.getQuestState(self.getName()):
self.newQuestState(player)
return self.START
def onAdvEvent(self, event, npc, player):
if event.startswith("partytp"):
if not player.getParty():
player.sendMessage("Войдите в отряд для продолжения")
return None
party = player.getParty()
if party.getMemberCount() < self.count:
player.sendMessage("Не достаточное количество человек")
player.sendMessage("Нужное кол-во человек в пати: %d" % self.count)
else:
if not self.spawnTsk:
self.spawnTsk = ThreadPoolManager.getInstance().scheduleGeneral(self.timeTask(), 5 * 1000)
for kparty in party.getPartyMembers():
kparty.setIsImobilised(True)
kparty.sendMessage("Вы были успешно перемещены")
SkillTable.getInstance().getInfo(8027, 1).getEffects(kparty, kparty)
kparty.sendMessage("На Вас наложено проклятие рейда")
ThreadPoolManager.getInstance().scheduleGeneral(self.teleportTask(kparty, 86708, 257918, -11671, "Вы были успешно перемещены"), 1)
if Config.QUEST_LOG_ENABLE:
date = SimpleDateFormat("dd/MM/yyyy H:mm:ss").format(Date())
Log.add("Player: %s used teleport on Kamaloka party. Date: %s" % (kparty.getName(), date), "QuestLog")
return "The Boss is Waiting for You!"
def onKill(self, npc, killer, isPet):
party = killer.getParty()
if not party:
self._teleportAndReward(killer, npc)
else:
for kparty in party.getPartyMembers():
if not Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, kparty, True):
kparty.sendMessage("Вы слишком далеко от Босса!")
return None
summon = kparty.getPet()
if summon and summon.isPet():
if not Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, summon, True):
kparty.sendMessage("Вы слишком далеко от Босса!")
return None
self._teleportAndReward(kparty, npc)
self.annTsk = ThreadPoolManager.getInstance().scheduleGeneral(self.annTask(), self.cd * 60 * 1000)
return None
def _teleportAndReward(self, player, npc):
player.setIsImobilised(True)
if self.announceTask:
self.announceTask.cancel(True)
self.announceTask = None
if self.spawnTsk:
self.spawnTsk.cancel(True)
self.spawnTsk = None
ThreadPoolManager.getInstance().scheduleGeneral(self.teleportTask(player, 83425, 148585, -3406, "Вы были успешно перемещены"), 1)
effect = player.getFirstEffect(8027)
if effect:
effect.exit()
if Config.QUEST_LOG_ENABLE:
date = SimpleDateFormat("dd/MM/yyyy H:mm:ss").format(Date())
Log.add("Игрок: %s убил Босса: %d и был перенесен обратно Kamaloka. Дата: %s" % (player.getName(), npc.getNpcId(), date), "QuestLog")
player.getInventory().addItem("Reward", self.itemid, self.itemcount, player, None)
player.sendMessage("Вы получили Top Life Stone")
player.sendPacket(ItemList(player, False))
class teleportTask(Runnable):
def __init__(self, player, x, y, z, message):
self._player = player
self._x = x
self._y = y
self._z = z
self._message = message
def run(self):
if self._player:
self._player.teleToLocation(self._x, self._y, self._z)
self._player.sendMessage(self._message)
self._player.setIsImobilised(False)
class annTask(Runnable):
def run(self):
try:
if Kamaloka.annTsk:
Kamaloka.annTsk.cancel(True)
Kamaloka.annTsk = None
Announcements.getInstance().announceToAll("momo ожидает Вас. Успейте пройти к РБ!")
except:
print("Kamaloka can't ann boss.")
class timeTask(Runnable):
def run(self):
try:
template = NpcTable.getInstance().getTemplate(Kamaloka.BossIds)
spawn = L2Spawn(template)
spawn.setLocx(86951)
spawn.setLocy(258458)
spawn.setLocz(-11672)
spawn.setRespawnDelay(600000)
spawn.setHeading(2412)
spawn.spawnOne()
spawn.stopRespawn()
Kamaloka.announceTask = ThreadPoolManager.getInstance().scheduleGeneral(Kamaloka.DeleteNpc(spawn), Kamaloka.time * 60 * 1000)
except:
print("Kamaloka can't spawn boss.")
class DeleteNpc(Runnable):
def __init__(self, spawn):
self.spawn = spawn
def run(self):
if self.spawn:
if Kamaloka.announceTask:
Kamaloka.announceTask.cancel(True)
Kamaloka.announceTask = None
if Kamaloka.spawnTsk:
Kamaloka.spawnTsk.cancel(True)
Kamaloka.spawnTsk = None
Announcements.getInstance().announceToAll("momo")
self.spawn.getLastSpawn().doDie(self.spawn.getLastSpawn())
def main():
QUEST = Kamaloka(2006, "Kamaloka", "custom/2006_Kamaloka")
HTML:
<!-- start.htm for Kamaloka quest (UTF-8, no BOM) -->
<html>
<head><title>Kamaloka</title></head>
<body>
<center>
<h3>Добро пожаловать в Kamaloka</h3>
<p>Нажмите кнопку ниже, чтобы телепортировать всю пати к боссу.</p>
<p>Требуется участников в пати: 1</p>
<p>Награда: 15 x Top Life Stone (ID: 8762)</p>
<a action="bypass -h Quest 2006_Kamaloka partytp">Войти в Камалоку</a><br>
<a action="bypass -h Quest 2006_Kamaloka">Отмена</a>
<!-- Вариант A: стандартный вызов Quest (часто работает в L2J-скриптах) -->
<p><a action="bypass -h quest Kamaloka partytp">Телепортировать пати (Quest)</a></p>
<!-- Вариант B: вызов через NPC (если используется шаблон npc_%objectId%) -->
<p><a action="bypass -h npc_%objectId%_partytp">Телепортировать пати (NPC)</a></p>
<!-- Вариант C: по ID квеста (если загрузчик ожидает числовой id) -->
<p><a action="bypass -h quest 2005 partytp">Телепортировать пати (Quest ID 2005)</a></p>
<br/>
<p><a action="bypass -h close">Закрыть</a></p>
</center>
</body>
</html>