Камалока

OopsSun

Путник
Участник
Сообщения
37
Розыгрыши
0
Репутация
1
Реакции
13
Баллы
16
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
l2jorion
Всем привет, подскажите что я делаю не так=)
Взял Скрипт переделали на 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>
 
Попробуйте поправить код тут:
Python:
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.sendMessage("Вы были успешно перемещены")
                SkillTable.getInstance().getInfo(8027, 1).getEffects(kparty, kparty)
                kparty.sendMessage("На Вас наложено проклятие рейда")

                # Directly teleport the player
                kparty.teleToLocation(86708, 257918, -11671)
                kparty.sendMessage("Вы были успешно перемещены")

                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!"
 
с таким кодом ошибка загрузки
Код:
Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('inconsistent dedent', ('custom/2006_Kamaloka/__init__.py', 55, 2, ' def onAdvEvent(self, event, npc, player):'))
 
Это на глаз делалось и дело не в самой функции, посмотрите как реализован телепорт к антарасу через диалог с нпц.
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…