Advertisement
Guest User

Untitled

a guest
Jan 5th, 2014
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.71 KB | None | 0 0
  1. #Instance Event by Bloodshed
  2. from java.lang                                                 import System
  3. from java.sql                                                  import Connection
  4. from java.sql                                                  import PreparedStatement
  5. from java.sql                                                  import ResultSet
  6. from java.util.logging                                         import Level
  7. from java.util.logging                                         import Logger
  8.  
  9. from com.l2jserver                                             import L2DatabaseFactory
  10. from com.l2jserver.gameserver.instancemanager                  import InstanceManager
  11. from com.l2jserver.gameserver.model.instancezone               import InstanceWorld
  12. from com.l2jserver.gameserver.model.items.instance             import L2ItemInstance
  13. from com.l2jserver.gameserver.model                            import L2Object
  14. from com.l2jserver.gameserver.model                            import L2World
  15. from com.l2jserver.gameserver.model.actor                      import L2Character
  16. from com.l2jserver.gameserver.model.actor                      import L2Summon
  17. from com.l2jserver.gameserver.model.entity                     import Instance
  18. from com.l2jserver.gameserver.model.itemcontainer              import PcInventory
  19. from com.l2jserver.gameserver.model.quest                      import State
  20. from com.l2jserver.gameserver.model.quest                      import QuestState
  21. from com.l2jserver.gameserver.model.quest.jython               import QuestJython as JQuest
  22. from com.l2jserver.gameserver.network.serverpackets            import CreatureSay
  23. from com.l2jserver.gameserver.network.serverpackets            import InventoryUpdate
  24. from com.l2jserver.gameserver.network.serverpackets            import MagicSkillUse
  25. from com.l2jserver.gameserver.network.serverpackets            import SystemMessage
  26. from com.l2jserver.gameserver.network.serverpackets            import ExShowScreenMessage
  27. from com.l2jserver.gameserver.network.serverpackets            import Earthquake
  28. from com.l2jserver.gameserver.network                          import SystemMessageId
  29. from com.l2jserver.gameserver.util                             import Util
  30. from com.l2jserver.util                                        import Rnd
  31.  
  32. qn = "Bloodshed"
  33.  
  34. #Items
  35. E_APIGA = 14720
  36. ADENA   = 57
  37. STONE   = 9576
  38. STONE82 = 10486
  39. STONE84 = 14169
  40. SCROLL  = 960
  41. SCROLLB = 6577
  42.  
  43. #NPCs
  44. ROSE    = 40000
  45. CHEST   = 40001
  46.  
  47. #Monsters
  48. NAGLFAR = 40002
  49. SENTRY1 = 40003
  50. SENTRY2 = 40004
  51. HOUND   = 40005
  52.  
  53. #Timelimit
  54. TIMELIMIT = 86400000
  55.  
  56. #Instance Id
  57. INSTANCEID = 500000
  58.  
  59. #Doors
  60. DOOR1   = 12240001
  61. DOOR2   = 12240002
  62.  
  63. class PyObject:
  64.     pass
  65.  
  66. def openDoor(doorId,instanceId):
  67.     for door in InstanceManager.getInstance().getInstance(instanceId).getDoors():
  68.         if door.getDoorId() == doorId:
  69.             door.openMe()
  70.            
  71. def closeDoor(doorId,instanceId):
  72.     for door in InstanceManager.getInstance().getInstance(instanceId).getDoors():
  73.         if door.getDoorId() == doorId:
  74.             door.closeMe()
  75.            
  76. def checkConditions(player, new):
  77.     st = player.getQuestState(qn)
  78.     reentertime = InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID);
  79.     party = player.getParty()
  80.     if not party:
  81.         player.sendPacket(SystemMessage.sendString("You are not currently in a party, so you cannot enter."))
  82.         return False
  83.     if party and party.getMemberCount() < 2:
  84.         player.sendPacket(SystemMessage.sendString("You cannot enter because there is too less people in your party. Minimum is 4 people."))
  85.         return False
  86.     for partyMember in party.getMembers().toArray():
  87.         if partyMember.getLevel() < 78:
  88.             player.sendPacket(SystemMessage.sendString(partyMember.getName()+"s level is too low and cannot be entered."))
  89.             return False  
  90.         if not Util.checkIfInRange(1000, player, partyMember, True) and new:
  91.             player.sendPacket(SystemMessage.sendString(partyMember.getName()+" is too far away ask him to come here."))
  92.             return False
  93.         if System.currentTimeMillis() < reentertime :
  94.             InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
  95.             player.sendPacket(SystemMessage.sendString("Solo Instance: You may not re-enter yet."))
  96.             return False
  97.     return True
  98.  
  99. def teleportplayer(self,player,teleto):
  100.     player.setInstanceId(teleto.instanceId)
  101.     player.teleToLocation(teleto.x, teleto.y, teleto.z)
  102.     pet = player.getSummon()
  103.     if pet != None :
  104.         pet.setInstanceId(teleto.instanceId)
  105.         pet.teleToLocation(teleto.x, teleto.y, teleto.z)
  106.     return
  107.  
  108. def enterInstance(self,player,template,teleto):
  109.     instanceId = 0
  110.     party = player.getParty()
  111.     if party :
  112.         for partyMember in party.getMembers().toArray():
  113.             st = partyMember.getQuestState(qn)
  114.             if not st : st = self.newQuestState(partyMember)
  115.             if partyMember.getInstanceId()!=0:
  116.                 instanceId = partyMember.getInstanceId()
  117.     else :
  118.         if player.getInstanceId()!=0:
  119.             instanceId = player.getInstanceId()
  120.     if instanceId != 0:
  121.         if not checkConditions(player,False):
  122.             return 0
  123.         foundworld = False
  124.         for worldid in self.world_ids:
  125.             if worldid == instanceId:
  126.                 foundworld = True
  127.         if not foundworld:
  128.             player.sendPacket(SystemMessage.sendString("You have entered another zone, therefore you cannot enter this one."))
  129.             return 0
  130.         teleto.instanceId = instanceId
  131.         teleportplayer(self,player,teleto)
  132.         return instanceId
  133.     else:
  134.         if not checkConditions(player,True):
  135.             return 0
  136.         instanceId = InstanceManager.getInstance().createDynamicInstance(template)
  137.         if not instanceId in self.world_ids:
  138.             world = PyObject()
  139.             world.rewarded=[]
  140.             world.instanceId = instanceId
  141.             world.templateId = INSTANCEID
  142.             self.worlds[instanceId]=world
  143.             self.world_ids.append(instanceId)
  144.             print "Instance: Started " + template + " Instance: " +str(instanceId) + " created by " + str(player.getName())
  145.         st = player.getQuestState(qn)
  146.         InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))
  147.         teleto.instanceId = instanceId
  148.         for partyMember in party.getMembers().toArray():
  149.             teleportplayer(self,partyMember,teleto)
  150.         return instanceId
  151.     return instanceId
  152.  
  153. def exitInstance(player,tele):
  154.     party = player.getParty()
  155.     if party :
  156.         for partyMember in party.getMembers().toArray():
  157.             partyMember.setInstanceId(0)
  158.             partyMember.teleToLocation(tele.x, tele.y, tele.z)
  159.             pet = partyMember.getSummon()
  160.             if pet != None :
  161.                 pet.setInstanceId(0)
  162.                 pet.teleToLocation(tele.x, tele.y, tele.z)
  163.     else :
  164.         player.setInstanceId(0)
  165.         player.teleToLocation(tele.x, tele.y, tele.z)
  166.         pet = player.getSummon()
  167.         if pet != None :
  168.             pet.setInstanceId(0)
  169.             pet.teleToLocation(tele.x, tele.y, tele.z)
  170.     InstanceManager.getInstance().destroyInstance(player.getInstanceId())
  171.  
  172. class Bloodshed(JQuest):
  173.     def __init__(self,id,name,descr):
  174.         JQuest.__init__(self,id,name,descr)
  175.         self.worlds = {}
  176.         self.world_ids = []
  177.        
  178.     def onTalk (self,npc,player):
  179.         st = player.getQuestState(qn)
  180.         npcId = npc.getNpcId()
  181.         if npcId == ROSE :
  182.             tele = PyObject()
  183.             tele.x = -238599
  184.             tele.y = 219983
  185.             tele.z = -10144
  186.             enterInstance(self, player, "Bloodshed.xml", tele)
  187. #           st.playSound("ItemSound.quest_middle")
  188.         elif npcId == CHEST :
  189.             npc.decayMe()
  190.             tele = PyObject()
  191.             tele.x = 82200
  192.             tele.y = 148347
  193.             tele.z = -3467
  194.             party = player.getParty()
  195.             if party :
  196.                 for partyMember in party.getMembers().toArray():
  197.                     exitInstance(partyMember,tele)
  198.  
  199.             else:
  200.                 exitInstance(player,tele)
  201.             st.giveItems(ADENA,10000)
  202.             if Rnd.get(100) < 10 :
  203.                 st.giveItems(STONE84,1)
  204.             if Rnd.get(100) < 15 :
  205.                 st.giveItems(STONE82,1)
  206.             if Rnd.get(100) < 25 :
  207.                 st.giveItems(STONE,1)
  208.             if Rnd.get(100) < 25 :
  209.                 st.giveItems(SCROLLB,1)
  210.             if Rnd.get(100) < 50 :
  211.                 st.giveItems(SCROLL,1)
  212.             st.playSound("ItemSound.quest_finish")
  213.             player.sendPacket(ExShowScreenMessage("Solo Instance Event (78+): Completed", 8000))
  214.         return
  215.        
  216.     def onKill(self,npc,player,isPet):
  217.         st = player.getQuestState(qn)
  218.         npcId = npc.getNpcId()
  219.         if npcId == SENTRY1 :
  220.             if npc.getInstanceId() in self.worlds:
  221.                 world = self.worlds[npc.getInstanceId()]
  222.                 st.playSound("ItemSound.quest_middle")
  223.                 player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Master, Forgive Me!"))
  224.                 st.giveItems(E_APIGA,1)
  225.                 openDoor(DOOR1,npc.instanceId)
  226.         elif npcId == SENTRY2 :
  227.             if npc.getInstanceId() in self.worlds:
  228.                 world = self.worlds[npc.getInstanceId()]
  229.                 st.playSound("ItemSound.quest_middle")
  230.                 player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Master, Forgive Me!"))
  231.                 st.giveItems(E_APIGA,1)
  232.                 openDoor(DOOR2,npc.instanceId)
  233.         elif npcId == HOUND :
  234.             if npc.getInstanceId() in self.worlds:
  235.                 world = self.worlds[npc.getInstanceId()]
  236.                 st.playSound("ItemSound.quest_middle")
  237.                 st.giveItems(E_APIGA,2)
  238.                 player.sendPacket(ExShowScreenMessage("Demonic Lord Naglfar Has Appeared!", 8000))
  239.                 newNpc = self.addSpawn(NAGLFAR,-242754,219982,-9985,306,False,0,False,npc.instanceId)
  240.                 player.sendPacket(Earthquake(240826,219982,-9985,20,10))
  241.         elif npcId == NAGLFAR :
  242.             if npc.getInstanceId() in self.worlds:
  243.                 world = self.worlds[npc.getInstanceId()]
  244.                 player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Ugh.... Defeated.. How!?"))
  245.                 player.sendPacket(ExShowScreenMessage("Congratulations! You Have Defeated Demonic Lord Naglfar.", 12000))
  246.                 st.playSound("ItemSound.quest_finish")
  247.                 st.giveItems(E_APIGA,4)
  248.                 newNpc = self.addSpawn(CHEST,-242754,219982,-9985,306,False,0,False,npc.instanceId)
  249.         return
  250.  
  251. QUEST = Bloodshed(-1, qn, "Bloodshed")
  252. QUEST.addStartNpc(ROSE)
  253. QUEST.addTalkId(ROSE)
  254. QUEST.addTalkId(CHEST)
  255.  
  256. QUEST.addKillId(NAGLFAR)
  257. QUEST.addKillId(HOUND)
  258. QUEST.addKillId(SENTRY1)
  259. QUEST.addKillId(SENTRY2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement