Merge pull request #1220 from cdmpse/master

Updates to Quests
This commit is contained in:
tacef
2014-09-26 23:23:39 +02:00
52 changed files with 864 additions and 184 deletions
-3
View File
@@ -18,8 +18,5 @@ def run(core, actor, target, commandString):
if quest is None:
return
if (quest.getActiveTask() != (core.questService.getQuestData(quest.getName()).getTasks().size() - 1)):
return
core.questService.completeQuest(player, quest)
return
@@ -0,0 +1,42 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
options = Vector()
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/generic_broker_1:s_17'), 0)) # Yes.
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/generic_broker_1:s_18'), 0)) # Not right now.
core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/generic_broker_1:s_14'))
core.conversationService.sendConversationOptions(actor, npc, options, handleOptionsOne)
return
elif player.getFactionStanding() >= 1000:
core.conversationService.sendStopConversation(actor, npc, 'conversation/generic_broker_1', 's_8')
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/generic_broker_1', 's_4')
return
def handleOptionsOne(core, actor, npc, selection):
if selection == 0: # Yes.
options = Vector()
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/generic_broker_1:s_24'), 0)) # OK
core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/generic_broker_1:s_22'))
core.conversationService.sendConversationOptions(actor, npc, options, handleOptionsTwo)
elif selection == 1: # Not right now.
core.conversationService.sendStopConversation(actor, npc, 'conversation/generic_broker_1', 's_30')
return
def handleOptionsTwo(core, actor, npc, selection):
core.conversationService.sendStopConversation(actor, npc, 'conversation/generic_broker_1', 's_26')
core.questService.sendQuestAcceptWindow(actor, 'quest/smuggle_generic_1')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/generic_broker_1', 's_4')
return
+9 -12
View File
@@ -6,28 +6,30 @@ import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('tatooine_eisley_tdc')
if quest is None:
options = Vector()
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/tatooine_eisley_byxle:s_58'), 0))
core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/tatooine_eisley_byxle:s_56'))
core.conversationService.sendConversationOptions(actor, npc, options, handleOptionsOne)
return
if quest.getActiveTask() == 8:
elif quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48')
elif quest.getActiveTask() == 8:
options = Vector()
# I don't know. He seemed pretty mad.
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/tatooine_eisley_byxle:s_29'), 0))
core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/tatooine_eisley_byxle:s_17'))
core.conversationService.sendConversationOptions(actor, npc, options, handleOptionsFive)
elif quest.isCompleted() == True:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48')
else:
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48')
return
def handleOptionsOne(core, actor, npc, selection):
@@ -69,12 +71,7 @@ def handleOptionsFive(core, actor, npc, selection):
def handleOptionsSix(core, actor, npc, selection):
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_70')
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('tatooine_eisley_tdc')
core.questService.completeActiveTask(actor, quest)
core.questService.sendQuestCompleteWindow(actor, 'quest/tatooine_eisley_tdc')
core.questService.handleActivateSignal(actor, npc, 'tatooine_eisley_tdc', 'tat_eisley_tdc_e9')
return
def endConversation(core, actor, npc):
@@ -0,0 +1,23 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
elif quest.isTaskActive(3) and quest.isTaskCompleted(7):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_5')
core.questService.completeTask(actor, quest, 3)
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_9')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
return
@@ -11,7 +11,7 @@ def startConversation(core, actor, npc):
quest = player.getQuest('tatooine_eisley_tdc')
if quest is None:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_drixa', 's_43')
elif quest.isCompleted() == True or quest.getActiveTask() > 1:
elif quest.isCompleted() or quest.getActiveTask() > 1:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_drixa', 's_40')
else:
options = Vector()
@@ -47,11 +47,7 @@ def handleOptionsThree(core, actor, npc, selection):
def handleOptionsFour(core, actor, npc, selection):
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_drixa', 's_40')
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('tatooine_eisley_tdc')
core.questService.handleActivateSignal(actor, npc, quest, 2)
core.questService.handleActivateSignal(actor, npc, 'tatooine_eisley_tdc', 'tat_eisley_tdc_e1')
return
def endConversation(core, actor, npc):
@@ -0,0 +1,23 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
elif quest.isTaskActive(2) and quest.isTaskCompleted(7):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_5')
core.questService.completeTask(actor, quest, 2)
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_9')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
return
+5 -21
View File
@@ -12,7 +12,9 @@ def startConversation(core, actor, npc):
quest = player.getQuest('tatooine_eisley_tdc')
if quest is None:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_22')
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_22')
elif quest.isCompleted() or quest.getActiveTask() > 6:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_16')
elif quest.getActiveTask() == 4:
options = Vector()
# Here you go, four chewy Chuba combos.
@@ -25,8 +27,6 @@ def startConversation(core, actor, npc):
options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/tatooine_eisley_jano:s_13'), 0))
core.conversationService.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/tatooine_eisley_jano:s_6'))
core.conversationService.sendConversationOptions(actor, npc, options, handleOptionsTwo)
elif quest.isCompleted() == True or quest.getActiveTask() > 6:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_16')
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_22')
@@ -34,19 +34,7 @@ def startConversation(core, actor, npc):
def handleOptionsOne(core, actor, npc, selection):
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_20')
pos = actor.getWorldPosition()
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('tatooine_eisley_tdc')
data = core.questService.getQuestData(quest.getName())
task = data.getTasks().get(5);
count = task.getCount()
type = task.getCreatureType()
for i in xrange(0, count):
core.spawnService.spawnCreature('chuba', actor.getPlanet().getName(), 0, pos.x+1, pos.y, pos.z, 1, 0, 1, 0, 1)
core.questService.completeActiveTask(actor, quest)
core.questService.handleActivateSignal(actor, npc, 'tatooine_eisley_tdc', 'tat_eisley_tdc_e5')
return
def handleOptionsTwo(core, actor, npc, selection):
@@ -58,12 +46,8 @@ def handleOptionsTwo(core, actor, npc, selection):
return
def handleOptionsThree(core, actor, npc, selection):
player = actor.getPlayerObject()
if player is None:
return
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_jano', 's_16')
quest = player.getQuest('tatooine_eisley_tdc')
core.questService.handleActivateSignal(actor, npc, quest, 6)
core.questService.handleActivateSignal(actor, npc, 'tatooine_eisley_tdc', 'tat_eisley_tdc_e7')
return
def endConversation(core, actor, npc):
@@ -0,0 +1,23 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
elif quest.isTaskActive(1) and quest.isTaskCompleted(7):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_5')
core.questService.completeTask(actor, quest, 1)
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_9')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
return
@@ -0,0 +1,23 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
elif quest.isTaskActive(5) and quest.isTaskCompleted(7):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_5')
core.questService.completeTask(actor, quest, 5)
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_9')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
return
@@ -14,7 +14,7 @@ def startConversation(core, actor, npc):
if quest is None:
# Too busy getting this cargo ready, no time to talk.
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_nogri', 's_48')
elif quest.isCompleted() == True or quest.getActiveTask() > 3:
elif quest.isCompleted() or quest.getActiveTask() > 3:
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_nogri', 's_42')
else:
options = Vector()
@@ -81,12 +81,8 @@ def handleOptionsSeven(core, actor, npc, selection):
return
def handleOptionsEight(core, actor, npc, selection):
player = actor.getPlayerObject()
if player is None:
return
core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_nogri', 's_42')
quest = player.getQuest('tatooine_eisley_tdc')
core.questService.handleActivateSignal(actor, npc, quest, 4)
core.questService.handleActivateSignal(actor, npc, 'tatooine_eisley_tdc', 'tat_eisley_tdc_e3')
return
def endConversation(core, actor, npc):
@@ -0,0 +1,23 @@
from resources.common import ConversationOption
from resources.common import OutOfBand
from resources.common import ProsePackage
from java.util import Vector
import sys
def startConversation(core, actor, npc):
player = actor.getPlayerObject()
if player is None:
return
quest = player.getQuest('smuggle_generic_1')
if quest is None or quest.isCompleted():
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
elif quest.isTaskActive(4) and quest.isTaskCompleted(7):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_5')
core.questService.completeTask(actor, quest, 4)
else:
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_9')
return
def endConversation(core, actor, npc):
core.conversationService.sendStopConversation(actor, npc, 'conversation/fence', 's_10')
return
@@ -1,7 +1,7 @@
def itemNames():
return ['aeromagnifier','comlink',control_box','droid_motor_red']
return ['aeromagnifier','comlink','control_box','droid_motor_red']
def itemChances():
@@ -1,7 +1,7 @@
def itemNames():
return ['armor_repair_device','chassis_blueprints','dented_metal_case','medical_console',medical_device','motor','software_module','speederdrive']
return ['armor_repair_device','chassis_blueprints','dented_metal_case','medical_console','medical_device','motor','software_module','speederdrive']
def itemChances():
+1 -1
View File
@@ -3,7 +3,7 @@ def itemNames():
items=['jedi_holocron_1_5','jedi_holocron_2_5','jedi_holocron_3_5','jedi_holocron_4_5','jedi_holocron_5_5']
items=items+['jedi_holocron_1_5_wp','jedi_holocron_2_5_wp','jedi_holocron_3_5_wp','jedi_holocron_4_5_wp','jedi_holocron_5_5_wp']
return names
return items
def itemChances():
+1 -1
View File
@@ -1,7 +1,7 @@
def itemNames():
templates=['antenna','brain','eye','gland','heart','stomach'] leg, Nerve Complex, organ missing
templates=['antenna','brain','eye','gland','heart','stomach']# leg, Nerve Complex, organ missing
return templates
@@ -1,7 +1,7 @@
def itemNames():
return ['armor_repair_device','dented_metal_case',medical_console','worklight']
return ['armor_repair_device','dented_metal_case','medical_console','worklight']
def itemChances():
@@ -1,8 +1,6 @@
def itemNames():
return ['chassis_blueprints','circuit_board','medical_console','motor','software_module','used_vidscreen']
def itemChances():
return [15,10,5,30,30,10]
@@ -11,11 +11,11 @@ from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCustomName('Barak')
mobileTemplate.setCreatureName('smuggler_broker_barak')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE)
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_broker_barak.iff')
@@ -0,0 +1,34 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from resources.datatables import FactionStatus
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('smuggler_fence_diala')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_fence_diala.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('diala', mobileTemplate)
return
@@ -0,0 +1,34 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from resources.datatables import FactionStatus
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('smuggler_fence_jalen')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_fence_jalen.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('jalen', mobileTemplate)
return
@@ -0,0 +1,34 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from resources.datatables import FactionStatus
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('smuggler_fence_kaleb')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_fence_kaleb.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('kaleb', mobileTemplate)
return
@@ -0,0 +1,34 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from resources.datatables import FactionStatus
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('smuggler_fence_kara')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_fence_kara.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('kara', mobileTemplate)
return
@@ -0,0 +1,33 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('smuggler_fence_sarlin')
mobileTemplate.setLevel(1)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setSocialGroup("township")
mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE)
templates = Vector()
templates.add('object/mobile/shared_smuggler_fence_sarlin.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('sarlin', mobileTemplate)
return
@@ -0,0 +1,39 @@
import sys
from services.spawn import MobileTemplate
from services.spawn import WeaponTemplate
from resources.datatables import WeaponType
from resources.datatables import Difficulty
from resources.datatables import Options
from java.util import Vector
def addTemplate(core):
mobileTemplate = MobileTemplate()
mobileTemplate.setCreatureName('jabba_assassin')
mobileTemplate.setLevel(15)
mobileTemplate.setDifficulty(Difficulty.NORMAL)
mobileTemplate.setMinSpawnDistance(4)
mobileTemplate.setMaxSpawnDistance(8)
mobileTemplate.setDeathblow(True)
mobileTemplate.setScale(1)
mobileTemplate.setSocialGroup("jabba")
mobileTemplate.setAssistRange(0)
mobileTemplate.setStalker(False)
templates = Vector()
templates.add('object/mobile/shared_dressed_tatooine_jabba_assassin.iff')
mobileTemplate.setTemplates(templates)
weaponTemplates = Vector()
weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy')
weaponTemplates.add(weapontemplate)
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
attacks = Vector()
mobileTemplate.setDefaultAttack('rangedShotpistol')
mobileTemplate.setAttacks(attacks)
core.spawnService.addMobileTemplate('smuggler_patrol_bh_1', mobileTemplate)
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
return
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/brokerbarak')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_broker_barak')
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/diala')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_fence_diala')
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/jalen')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_fence_jalen')
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/kaleb')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_fence_kaleb')
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/kara')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_fence_kara')
return
@@ -1,4 +1,10 @@
import sys
from resources.datatables import Options
def setup(core, object):
object.setAttachment('radial_filename', 'object/conversation');
object.setAttachment('conversationFile','quests/tatooine/sarlin')
object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE)
object.setStfFilename('mob/creature_names')
object.setStfName('smuggler_fence_sarlin')
return
@@ -0,0 +1,11 @@
import sys
def setup(core, object):
object.setStfFilename('static_item_n')
object.setStfName('item_smuggler_contraband_crate_01_01')
#object.setStfName('item_bracelet_l_set_bh_dps_01_01')
object.setDetailFilename('smuggle_crate_d')
object.setDetailName('item_smuggler_contraband_crate_01_01')
object.setIntAttribute('required_combat_level', 10)
object.setStringAttribute('class_required', 'Smuggler')
return
@@ -13,6 +13,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3')
object.setAttachment('setBonus', 'set_bonus_bh_dps')
return
@@ -12,6 +12,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3')
object.setAttachment('setBonus', 'set_bonus_commando_dps')
return
@@ -13,6 +13,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3')
object.setAttachment('setBonus', 'set_bonus_bh_dps')
return
@@ -13,6 +13,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3')
object.setAttachment('setBonus', 'set_bonus_bh_dps')
return
@@ -15,6 +15,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3')
object.setAttachment('setBonus', 'set_bonus_bh_dps')
return
@@ -15,6 +15,6 @@ def setup(core, object):
object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1)
object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1')
object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2')
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3)
object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3')
object.setAttachment('setBonus', 'set_bonus_bh_dps')
return
@@ -0,0 +1,9 @@
def setup(core):
return
def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeTask(actor, quest, 8)
return
@@ -0,0 +1,9 @@
def setup(core):
return
def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeTask(actor, quest, 10)
return
@@ -5,6 +5,5 @@ def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeActiveTask(actor, quest)
core.questService.completeActiveTask(actor, quest)
return
@@ -5,6 +5,5 @@ def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeActiveTask(actor, quest)
core.questService.completeActiveTask(actor, quest)
return
@@ -5,6 +5,5 @@ def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeActiveTask(actor, quest)
core.questService.completeActiveTask(actor, quest)
return
@@ -5,6 +5,5 @@ def wait(core, actor):
return
def activate(core, actor, quest):
core.questService.completeActiveTask(actor, quest)
core.questService.completeActiveTask(actor, quest)
return
+1 -1
View File
@@ -44,7 +44,7 @@ def addPlanetSpawns(core, planet):
gilBurtin = stcSvc.spawnObject('gilburtin', 'tatooine', hotel.getCellByCellNumber(5), float(20.3), float(1.6), float(12.8), float(0), float(0), float(0.99), float(0))
# Outside
barak = stcSvc.spawnObject('brokerbarak', 'tatooine', long(0), float(-1049), float(5.0), float(-3537), float(0.97), float(0.23))
barak = stcSvc.spawnObject('brokerbarak', 'tatooine', long(0), float(-1049), float(10), float(-3537), float(0.97), float(0.23))
barrezz = stcSvc.spawnObject('barezz', 'tatooine', long(0), float(-1146.8), float(98.0), float(-3892.1), float(0.75), float(0.65))
@@ -27,4 +27,6 @@ def addPlanetSpawns(core, planet):
# Jano Bix
jano = stcSvc.spawnObject('jano', 'tatooine', long(0), float(3186), float(5), float(-4781), float(-0.38), float(0.92))
# Kaleb
kaleb = stcSvc.spawnObject('kaleb', 'tatooine', long(0), float(3216), float(5), float(-4610), float(0.25), float(1))
return
@@ -20,6 +20,8 @@ def addPlanetSpawns(core, planet):
ankwee.setCustomName2('An\'kwee')
ankwee.setOptionsBitmask(256)
sarlin = stcSvc.spawnObject('sarlin', 'tatooine', long(0), float(1537), float(7), float(3052), float(0.6), float(0.8))
#Junkdealer
stcSvc.spawnObject('junkdealer', 'tatooine', long(0), float(1271), float(7.7), float(2919), float(0), float(0))
stcSvc.spawnObject('junkdealer', 'tatooine', long(0), float(1271), float(7.7), float(2960), float(1), float(0))
@@ -24,6 +24,7 @@ def addPlanetSpawns(core, planet):
#dalaSocuna.setCustomName2('Commander Da\'la Socuna')
#dalaSocuna.setOptionsBitmask(256)
diala = stcSvc.spawnObject('diala', 'tatooine', long(0), float(-3105), float(5), float(2314), float(0.48), float(0.88))
#Watto's Shop ****TODO: Get Proper cells for Watto's Shop once Buildout structures are spawning as intended again.
watto = stcSvc.spawnObject('object/mobile/shared_watto.iff', 'tatooine', building.getCellByCellNumber(2), float(4.7), float(-0.5), float(2.4), float(-0.71), float(0), float(0.70), float(0))
@@ -15,6 +15,7 @@ def addPlanetSpawns(core, planet):
# TODO Check all NPCs for personalized scripting, change format.
kara = stcSvc.spawnObject('kara', 'tatooine', long(0), float(3839), float(16.13), float(2335), float(-0.1), float(0.98))
#Junkdealer
stcSvc.spawnObject('junkdealer', 'tatooine', long(0), float(3902), float(33), float(2362), float(0), float(0))
+2 -2
View File
@@ -14,8 +14,8 @@ def addPlanetSpawns(core, planet):
objSvc = core.objectService
# TODO Check all NPCs for personalized scripting, change format.
# Smuggler Fence Jalen
jalen = stcSvc.spawnObject('jalen', 'tatooine', long(0), float(-5185), float(75), float(-6458), float(0.7), float(0.7))
#Junkdealer
stcSvc.spawnObject('junkdealer', 'tatooine', long(0), float(-5240.87), float(75), float(-641.015), float(0.879), float(0.476))
stcSvc.spawnObject('junkdealer', 'tatooine', long(0), float(-5132.33), float(75), float(-6584.92), float(0.637), float(0.771))
+33 -10
View File
@@ -76,7 +76,11 @@ public class Quest extends Delta implements Serializable {
public void setOwnerId(long ownerId) {
this.ownerId = ownerId;
}
public boolean isTaskActive(int taskId) {
return activeStepBitmask.get(taskId);
}
public int getActiveTask() {
return activeStep;
}
@@ -85,16 +89,18 @@ public class Quest extends Delta implements Serializable {
this.activeStep = activeStep;
}
public boolean isTaskCompleted(int taskId) {
return completedStepBitmask.get(taskId);
}
public boolean isCompleted() {
return isCompleted;
}
public void setCompleted(boolean isCompleted) {
if (isCompleted) {
//activeStepBitmask.set(activeStep, false);
completedStepBitmask.set(activeStep);
}
this.isCompleted = isCompleted;
public void setCompleted() {
activeStepBitmask.clear();
completedStepBitmask.set(0, 16, true);
this.isCompleted = true;
}
public boolean hasRecievedAward() {
@@ -131,13 +137,31 @@ public class Quest extends Delta implements Serializable {
activeStep++;
activeStepBitmask.set(activeStep, true);
//System.out.println("Active step was "+ (activeStep - 1) + " and is now " + activeStep );
}
public void complete() {
completedStepBitmask.set(activeStep);
}
public void completeQuestStep(int step) {
completedStepBitmask.set(step);
activeStepBitmask.set(step, false);
}
public void setQuestStep(int step) {
activeStep = step;
addActiveStep(step);
}
public void addActiveStep(int step) {
activeStepBitmask.set(step, true);
}
public void reset() {
activeStep = 0;
activeStepBitmask.clear();
completedStepBitmask.clear();
}
public ScheduledFuture<?> getTimer() {
@@ -224,5 +248,4 @@ public class Quest extends Delta implements Serializable {
//StringUtilities.printBytes(buffer.array());
return buffer.array();
}
}
+216 -98
View File
@@ -36,6 +36,7 @@ import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -81,7 +82,8 @@ public class QuestService implements INetworkDispatch {
private Map<String, QuestList> questRewardMap = new ConcurrentHashMap<String, QuestList>();
private List<String> forceAcceptQuests = new ArrayList<String>();
private Map<Integer, String> questCrcMap = new ConcurrentHashMap<Integer, String>();
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public QuestService(NGECore core) {
this.core = core;
@@ -119,59 +121,152 @@ public class QuestService implements INetworkDispatch {
}
public void activateNextTask(CreatureObject quester, String questName) {
if (quester.getPlayerObject().getQuestJournal().containsKey(CRC.StringtoCRC("quest/" + questName)) && !quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).isCompleted()) {
activateNextTask(quester, quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)));
}
}
public void activateNextTask(CreatureObject quester, Quest quest) {
activateTask(quester, quest, quest.getActiveTask());
}
public void activateTask(CreatureObject quester, String questName, int taskId) {
if (quester.getPlayerObject().getQuestJournal().containsKey(CRC.StringtoCRC("quest/" + questName)) && !quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).isCompleted()) {
activateTask(quester, quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)), taskId);
}
}
public void activateTask(CreatureObject quester, Quest quest, int taskId) {
if (quester == null || quester.getClient() == null || quester.getClient().getSession() == null)
return;
if (quest.isCompleted())
return;
QuestData qData = getQuestData(quest.getName());
if (qData == null)
return;
PlayerObject player = quester.getPlayerObject();
if (player == null)
return;
QuestTask task = qData.getTasks().get(taskId);
if (task.getMinStartDelay() > 0 || task.getMaxStartDelay() > 0) {
if (task.getScheduledTask() == null) {
int min = task.getMinStartDelay();
int max = task.getMaxStartDelay();
if ((max - min) < 0)
return;
Random random = new Random();
int delay = random.nextInt(max - min) + min;
ScheduledFuture<?> scheduledTask = scheduler.schedule(new Runnable() {
@Override
public void run() {
try {
activateTask(quester, quest, taskId);
} catch (Exception e) {
e.printStackTrace();
}
}
}, (long) delay, TimeUnit.SECONDS);
task.setScheduledTask(scheduledTask);
return;
}
task.setScheduledTask(null);
}
int activeStep = quest.getActiveTask();
if (task.getChanceToSkip() > 0) {
if (new Random().nextInt(100) < task.getChanceToSkip()) {
completeTask(quester, quest, taskId);
return;
}
}
QuestTask task = qData.getTasks().get(activeStep);
quest.setQuestStep(taskId);
player.getContainer().getClient().getSession().write(player.getBaseline(8).createDelta(7));
String buffName = task.getBuffName();
if (buffName != null && buffName != "")
core.buffService.addBuffToCreature(quester, buffName, quester);
if (task.dismountsPlayer()) {
if (core.mountService.isMounted(quester)) {
core.mountService.dismount(quester, (CreatureObject) quester.getContainer());
}
}
if (task.createsWaypoint()) {
Point3D location = new Point3D(task.getLocationX(), task.getLocationY(), task.getLocationZ());
WaypointObject wpGoTo = createWaypoint(task.getWaypointName(), location, task.getPlanet());
player.getWaypoints().put(wpGoTo.getObjectID(), wpGoTo);
quest.setWaypointId(wpGoTo.getObjectID());
}
if (task.getTimerAmount() > 0) {
// fail task at end of timer
}
// TODO
// set Travel Block: bool TRAVEL_BLOCK, bool TRAVEL_BLOCK_ALLOW_LAUNCH
// set Mount Block: int MOUNT_BLOCK_DURATION
// quest.task.ground.type
switch (task.getType()) {
// quest.task.ground.go_to_location
case "go_to_location":
// Waypoint created below now
case "spawn":
case "encounter":
Random random = new Random();
int count = task.getCount();
if (count == 0) {
int minCount = task.getMinCount();
int maxCount = task.getMaxCount();
if (maxCount - minCount < 0) {
System.err.println("MaxCount was less than MinCount for Quest Task: "+task.getName());
return;
}
count = random.nextInt(maxCount - minCount) + minCount;
}
int minDistance = task.getMinDistance();
int maxDistance = task.getMaxDistance();
String creatureType = task.getCreatureType();
int distance;
float angle, dx, dy;
for (int i = 0; i < count; i++) {
distance = random.nextInt(maxDistance - minDistance) + minDistance;
angle = random.nextFloat() * 2 * (float) Math.PI;
dx = (float) Math.cos(angle) * distance;
dy = (float) Math.sin(angle) * distance;
Point3D pos = quester.getWorldPosition();
core.spawnService.spawnCreature(creatureType, quester.getPlanet().getName(), 0, pos.x + dx, pos.y, pos.z + dy, 1, 0, 1, 0, 1);
}
break;
// quest.task.ground.comm_player
case "go_to_location":
return;
case "comm_player":
CommPlayerMessage message = new CommPlayerMessage(quester.getObjectID(), OutOfBand.ProsePackage(task.getCommMessageText()), task.getNpcAppearanceTemplate());
quester.getClient().getSession().write(message.serialize());
break;
// quest.task.ground.retrieve_item
case "give_item":
//String itemName = task.getItemToGive();
try {
// ?
SWGObject item = core.objectService.createObject("object/tangible/smuggler/contraband/shared_contraband_general.iff", quester.getPlanet());
quester.getSlottedObject("inventory").add(item);
} catch (Exception e) {
e.printStackTrace();
}
return;
case "retrieve_item":
if (quest.getCounterMax() != task.getNumRequired()) {
quest.setCounterMax(task.getNumRequired());
quest.setCounterValue(0);
}
player.getQuestRetrieveItemTemplates().put(task.getServerTemplate(), new QuestItem(quest.getName(), activeStep));
player.getQuestRetrieveItemTemplates().put(task.getServerTemplate(), new QuestItem(quest.getName(), taskId));
ObjControllerMessage itemCount = new ObjControllerMessage(11, new QuestTaskCounterMessage(quester.getObjectID(), quest, "@quest/groundquests:retrieve_item_counter"));
quester.getClient().getSession().write(itemCount.serialize());
// Waypoint created below now
break;
return;
// quest.task.ground.timer
case "timer":
// TODO: Fix timer not showing
//System.out.println("Max time: " + task.getMaxTime() + " Min time: " + task.getMinTime());
@@ -181,28 +276,23 @@ public class QuestService implements INetworkDispatch {
Console.println("Timer is: " + time.get());
if (time.get() == 0) {
//quest.incrementQuestStep();
completeActiveTask((CreatureObject) core.objectService.getObject(quester.getObjectID()), quest.getName());
completeTask((CreatureObject) core.objectService.getObject(quester.getObjectID()), quest.getName(), taskId);
} else {
ObjControllerMessage timer = new ObjControllerMessage(11, new QuestTaskTimerMessage(quester.getObjectID(), quest.getCrcName(), "@quest/groundquests:timer_timertext", time.getAndDecrement()));
quester.getClient().getSession().write(timer.serialize());
}
}, 1, 1, TimeUnit.SECONDS);
quest.setTimer(taskTimer);
break;
return;
// quest.task.ground.wait_for_signal
case "wait_for_signal":
core.scriptService.callScript("scripts/quests/events/signals/", task.getSignalName(), "wait", core, quester);
break;
// quest.task.ground.show_message_box
return;
case "show_message_box":
SUIWindow msgBox = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, task.getMsgBoxTitle(), task.getMsgBoxPrompt(), quester, null, 0);
if (task.getMsgBoxSound() != null && !task.getMsgBoxSound().equals(""))
quester.playMusic(task.getMsgBoxSound());
core.suiService.openSUIWindow(msgBox);
break;
@@ -211,59 +301,51 @@ public class QuestService implements INetworkDispatch {
player.getWaypoints().remove(quest.getWaypointId());
core.objectService.destroyObject(quest.getWaypointId());
}
if (quest.getTimer() != null)
quest.getTimer().cancel(true);
completeQuest(player, quest);
return;
break;
case "reward":
// TODO: System message? - Also check possibility of "Item" column being used for reward as well
TangibleObject reward = (TangibleObject) core.objectService.createObject(getQuestRewardTemplate(task.getLootName()), core.terrainService.getPlanetByName(task.getPlanet()));
if (reward == null)
return;
quester.getInventory().add(reward);
break;
case "nothing":
break;
default:
//System.out.println("Don't know what to do for quest task: " + type);
break;
}
if (task.createsWaypoint()) {
Point3D location = new Point3D(task.getLocationX(), task.getLocationY(), task.getLocationZ());
WaypointObject wpGoTo = createWaypoint(task.getWaypointName(), location, task.getPlanet());
player.getWaypoints().put(wpGoTo.getObjectID(), wpGoTo);
quest.setWaypointId(wpGoTo.getObjectID());
}
if (!task.isVisible()) {
completeActiveTask(quester, quest);
return;
}
completeTask(quester, quest, taskId);
}
public void completeActiveTask(CreatureObject quester, String questName) {
public void completeActiveTask(CreatureObject quester, String questName) {
if (quester.getPlayerObject().getQuestJournal().containsKey(CRC.StringtoCRC("quest/" + questName)) && !quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).isCompleted()) {
completeActiveTask(quester, quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)));
completeTask(quester, quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)), quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).getActiveTask());
}
}
public void completeActiveTask(CreatureObject quester, Quest quest) {
completeTask(quester, quest, quest.getActiveTask());
}
public void completeTask(CreatureObject quester, String questName, int taskId) {
if (quester.getPlayerObject().getQuestJournal().containsKey(CRC.StringtoCRC("quest/" + questName)) && !quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).isCompleted()) {
completeTask(quester, quester.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)), taskId);
}
}
public void completeTask(CreatureObject quester, Quest quest, int taskId) {
PlayerObject player = quester.getPlayerObject();
if (player == null)
return;
QuestData qData = getQuestData(quest.getName());
int activeStep = quest.getActiveTask();
QuestTask task = qData.getTasks().get(activeStep);
QuestTask task = qData.getTasks().get(taskId);
if (quest.getWaypointId() != 0) {
player.getWaypoints().remove(quest.getWaypointId());
core.objectService.destroyObject(quest.getWaypointId());
@@ -278,33 +360,40 @@ public class QuestService implements INetworkDispatch {
quester.sendSystemMessage(new OutOfBand(prose), DisplayType.Quest);
}
if (activeStep + 1 >= qData.getTasks().size()) {
//QuestList listItem = questRewardMap.get(quest.getName());
quest.setCompleted(true);
// TODO: Unable to determine if this is calculated in "Complete Quest" window should pop up or just finish automatically, but it's the best for now
if (task.isVisible())
sendQuestCompleteWindow(quester, quest.getCrcName());
else
completeQuest(player, quest);
return;
}
if (task.getGrantQuestOnComplete() != null && !task.getGrantQuestOnComplete().equals("")) {
if(!task.isVisible())
immediatlyActivateQuest(quester, task.getGrantQuestOnComplete());
else
sendQuestAcceptWindow(quester, task.getGrantQuestOnComplete());
}
quest.incrementQuestStep();
quest.completeQuestStep(taskId);
player.getContainer().getClient().getSession().write(player.getBaseline(8).createDelta(7));
activateNextTask(quester, quest);
if (task.getGrantQuestOnComplete() != null && !task.getGrantQuestOnComplete().equals("")) {
if (task.isVisible())
sendQuestAcceptWindow(quester, task.getGrantQuestOnComplete());
else
immediatlyActivateQuest(quester, task.getGrantQuestOnComplete());
}
if (task.getType().equals("complete_quest") || task.getQuestControlOnTaskCompletion() == 1) {
quest.setCompleted();
quester.getClient().getSession().write(player.getBaseline(8).createDelta(7));
sendQuestCompleteWindow(quester, quest.getCrcName());
return;
}
String list = task.getTasksOnComplete();
if (list.length() == 0)
return;
ArrayList<Integer> tasks = new ArrayList<>();
for (String t : list.split(",")) {
taskId = Integer.parseInt(t);
if (qData.getTasks().get(taskId).getChanceToActivate() == 1) {
tasks.add(taskId);
} else {
activateTask(quester, quest, taskId);
}
}
if (tasks.size() > 0) {
Random random = new Random();
taskId = tasks.get(random.nextInt(tasks.size()));
activateTask(quester, quest, taskId);
}
}
public void immediatlyActivateQuest(CreatureObject quester, String questString) {
@@ -329,7 +418,8 @@ public class QuestService implements INetworkDispatch {
player.getQuestJournal().put(quest.getCrc(), quest);
player.setActiveQuest(quest.getName());
quest.reset();
player.getContainer().getClient().getSession().write(player.getBaseline(8).createDelta(7));
activateNextTask(quester, quest);
}
@@ -339,11 +429,13 @@ public class QuestService implements INetworkDispatch {
CreatureObject creo = (CreatureObject) player.getContainer();
if (!quest.isCompleted())
quest.setCompleted(true);
if (!quest.isCompleted()) {
quest.setCompleted();
creo.getClient().getSession().write(player.getBaseline(8).createDelta(7));
}
QuestList info = getQuestList(quest.getName());
QuestTask task = getQuestData(quest.getName()).getTasks().get(quest.getActiveTask());
//QuestTask task = getQuestData(quest.getName()).getTasks().get(quest.getActiveTask());
ArrayList<Long> recievedItems = new ArrayList<Long>();
TangibleObject inventory = (TangibleObject) creo.getSlottedObject("inventory");
@@ -356,11 +448,18 @@ public class QuestService implements INetworkDispatch {
PlayMusicMessage completeSound = new PlayMusicMessage("sound/ui_npe2_quest_completed.snd", creo.getObjectID(), 0, true);
creo.getClient().getSession().write(completeSound.serialize());
// TODO: Give other awards - exclusive loots, faction points
// TODO: Give other awards - exclusive loots, etc.
// Receiving quest awards (faction, item, exp, credits) - http://youtu.be/-L7Rz1WpmGM?t=14m50s
// Give quest items
// Faction Reward
if (info.getRewardFactionAmount() > 0) {
int rewardFactionAmount = info.getRewardFactionAmount();
int currentAmount = player.getFactionStanding(info.getRewardFactionType());
player.setFactionStanding(info.getRewardFactionType(), currentAmount + rewardFactionAmount);
}
if (info.getRewardLootName() != null && !info.getRewardLootName().equals("")) {
SWGObject rewardLoot = core.objectService.createObject(getQuestRewardTemplate(info.getRewardLootName()), creo.getPlanet());
inventory.add(rewardLoot);
@@ -397,7 +496,7 @@ public class QuestService implements INetworkDispatch {
}
// Give experience - TODO: Give specific type of experience.
if (info.getRewardExperienceAmount() != 0 && info.getTier() != -1 && !(info.getTier() > 6)) {
if (info.getRewardExperienceAmount() < 0 && info.getTier() != -1 && !(info.getTier() > 6)) {
int experienceAward = 0;
try {
DatatableVisitor experienceVisitor = ClientFileManager.loadFile("datatables/quest/quest_experience", DatatableVisitor.class);
@@ -410,16 +509,9 @@ public class QuestService implements INetworkDispatch {
} catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); }
if (experienceAward != 0)
core.playerService.giveExperience(creo, experienceAward);
} else {
} else if (info.getRewardExperienceAmount() > 0) {
core.playerService.giveExperience(creo, info.getRewardExperienceAmount());
}
if (task.getGrantQuestOnComplete() != null && !task.getGrantQuestOnComplete().equals("")) {
if (task.isVisible())
sendQuestAcceptWindow(creo, task.getGrantQuestOnComplete());
else
immediatlyActivateQuest(creo, task.getGrantQuestOnComplete());
}
// Update quest & client
quest.setRecievedAward(true);
@@ -477,6 +569,21 @@ public class QuestService implements INetworkDispatch {
}
public void handleActivateSignal(CreatureObject actor, TangibleObject npc, String questName, String signalName) {
if (actor.getPlayerObject().getQuestJournal().containsKey(CRC.StringtoCRC("quest/" + questName)) && !actor.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).isCompleted()) {
handleActivateSignal(actor, npc, actor.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)), actor.getPlayerObject().getQuestJournal().get(CRC.StringtoCRC("quest/" + questName)).getActiveTask());
}
}
public void handleActivateSignal(CreatureObject actor, TangibleObject npc, Quest quest, String signalName) {
for (QuestTask task : getQuestData(quest.getName()).getTasks()) {
if (task.getSignalName().equals(signalName)) {
handleActivateSignal(actor, npc, quest, task.getId());
return;
}
}
}
public void handleActivateSignal(CreatureObject actor, TangibleObject npc, Quest quest, int taskId) {
QuestTask task = getQuestData(quest.getName()).getTasks().get(taskId);
if (task == null)
@@ -615,6 +722,7 @@ public class QuestService implements INetworkDispatch {
if (visitor.getObjectByColumnNameAndIndex("TASK_NAME", r) != null) task.setName((String) visitor.getObjectByColumnNameAndIndex("TASK_NAME", r));
if (visitor.getObjectByColumnNameAndIndex("MUSIC_ON_COMPLETE", r) != null) task.setMusicOnComplete((String) visitor.getObjectByColumnNameAndIndex("MUSIC_ON_COMPLETE", r));
if (visitor.getObjectByColumnNameAndIndex("MUSIC_ON_FAILURE", r) != null) task.setMusicOnFail((String) visitor.getObjectByColumnNameAndIndex("MUSIC_ON_FAILURE", r));
if (visitor.getObjectByColumnNameAndIndex("CHANCE_TO_ACTIVATE", r) != null) task.setChanceToActivate((int) visitor.getObjectByColumnNameAndIndex("CHANCE_TO_ACTIVATE", r));
if (visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL_SHOW_SYSTEM_MESSAGE", r) != null) task.setGrantQuestOnFailShowSystemMessage((boolean) visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL_SHOW_SYSTEM_MESSAGE", r));
if (visitor.getObjectByColumnNameAndIndex("CREATE_WAYPOINT", r) != null) task.setCreatesWaypoint((boolean) visitor.getObjectByColumnNameAndIndex("CREATE_WAYPOINT", r));
if (visitor.getObjectByColumnNameAndIndex("PLANET_NAME", r) != null) task.setPlanet((String) visitor.getObjectByColumnNameAndIndex("PLANET_NAME", r));
@@ -628,8 +736,10 @@ public class QuestService implements INetworkDispatch {
if (visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_FAIL", r) != null) task.setSignalsOnFail((String) visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_FAIL", r));
if (visitor.getObjectByColumnNameAndIndex("COMM_MESSAGE_TEXT", r) != null) task.setCommMessageText((String) visitor.getObjectByColumnNameAndIndex("COMM_MESSAGE_TEXT", r));
if (visitor.getObjectByColumnNameAndIndex("NPC_APPEARANCE_SERVER_TEMPLATE", r) != null) task.setNpcAppearanceTemplate(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("NPC_APPEARANCE_SERVER_TEMPLATE", r)));
if (visitor.getObjectByColumnNameAndIndex("CREATURE_TYPE", r) != null) task.setCreatureType(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("CREATURE_TYPE", r)));
if (visitor.getObjectByColumnNameAndIndex("CREATURE_TYPE", r) != null) task.setCreatureType((String) visitor.getObjectByColumnNameAndIndex("CREATURE_TYPE", r));
if (visitor.getObjectByColumnNameAndIndex("COUNT", r) != null) task.setCount((int) visitor.getObjectByColumnNameAndIndex("COUNT", r));
if (visitor.getObjectByColumnNameAndIndex("MIN_COUNT", r) != null) task.setMinCount((int) visitor.getObjectByColumnNameAndIndex("MIN_COUNT", r));
if (visitor.getObjectByColumnNameAndIndex("MAX_COUNT", r) != null) task.setMaxCount((int) visitor.getObjectByColumnNameAndIndex("MAX_COUNT", r));
if (visitor.getObjectByColumnNameAndIndex("MIN_DISTANCE", r) != null) task.setMinDistance((int) visitor.getObjectByColumnNameAndIndex("MIN_DISTANCE", r));
if (visitor.getObjectByColumnNameAndIndex("MAX_DISTANCE", r) != null) task.setMaxDistance((int) visitor.getObjectByColumnNameAndIndex("MAX_DISTANCE", r));
if (visitor.getObjectByColumnNameAndIndex("RELATIVE_OFFSET_X", r) != null) task.setRelativeOffsetX(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("RELATIVE_OFFSET_X", r)));
@@ -650,7 +760,15 @@ public class QuestService implements INetworkDispatch {
if (visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_SIZE_HEIGHT", r) != null) task.setMsgBoxHeight(Integer.parseInt((String) visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_SIZE_HEIGHT", r)));
if (visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_SIZE_WIDTH", r) != null) task.setMsgBoxWidth(Integer.parseInt((String) visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_SIZE_WIDTH", r)));
if (visitor.getObjectByColumnNameAndIndex("LOOT_NAME", r) != null) task.setLootName((String) visitor.getObjectByColumnNameAndIndex("LOOT_NAME", r));
if (visitor.getObjectByColumnNameAndIndex("TIMER_AMOUNT", r) != null) task.setTimerAmount((int) visitor.getObjectByColumnNameAndIndex("TIMER_AMOUNT", r));
if (visitor.getObjectByColumnNameAndIndex("ITEM_TO_GIVE", r) != null) task.setItemToGive(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("ITEM_TO_GIVE", r)));
if (visitor.getObjectByColumnNameAndIndex("CHANCE_TO_SKIP", r) != null) task.setChanceToSkip((int) visitor.getObjectByColumnNameAndIndex("CHANCE_TO_SKIP", r));
if (visitor.getObjectByColumnNameAndIndex("MIN_START_DELAY", r) != null) task.setMinStartDelay((int) visitor.getObjectByColumnNameAndIndex("MIN_START_DELAY", r));
if (visitor.getObjectByColumnNameAndIndex("MAX_START_DELAY", r) != null) task.setMaxStartDelay((int) visitor.getObjectByColumnNameAndIndex("MAX_START_DELAY", r));
if (visitor.getObjectByColumnNameAndIndex("BUFF_NAME", r) != null) task.setBuffName((String) visitor.getObjectByColumnNameAndIndex("BUFF_NAME", r));
if (visitor.getObjectByColumnNameAndIndex("DISMOUNT_PLAYER", r) != null) task.setDismountPlayer((boolean) visitor.getObjectByColumnNameAndIndex("DISMOUNT_PLAYER", r));
if (visitor.getObjectByColumnNameAndIndex("QUEST_CONTROL_ON_TASK_COMPLETION", r) != null) task.setQuestControlOnTaskCompletion((int) visitor.getObjectByColumnNameAndIndex("QUEST_CONTROL_ON_TASK_COMPLETION", r));
// if (visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_LOCATION_X", r) != null) task.setMsgBoxWidth((String) visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_LOCATION_X", r));
// if (visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_LOCATION_Y", r) != null) task.setMsgBoxWidth((String) visitor.getObjectByColumnNameAndIndex("MESSAGE_BOX_LOCATION_Y", r));
+144 -5
View File
@@ -21,6 +21,8 @@
******************************************************************************/
package services.quest;
import java.util.concurrent.ScheduledFuture;
public class QuestTask {
private String type; // Tells the server what to do when they get the task
private String name;
@@ -32,6 +34,7 @@ public class QuestTask {
private String musicOnActivate;
private String musicOnComplete;
private String musicOnFail;
private String buffName;
private String target;
private String parameter; // TODO: What does this do?
private String grantQuestOnComplete;
@@ -48,9 +51,6 @@ public class QuestTask {
private String commMessageText;
private String npcAppearanceTemplate; // NPC Appearance Server Template
private String creatureType;
private int count;
private int minDistance;
private int maxDistance;
private String relativeOffsetX;
private String relativeOffsetY;
private String tasksOnComplete;
@@ -62,7 +62,11 @@ public class QuestTask {
private String msgBoxTitle;
private String msgBoxSound;
private String lootName;
private String itemToGive;
private boolean createItem;
private boolean destroyItem;
private boolean dismountPlayer;
private boolean visible;
private boolean grantQuestOnCompleteShowSystemMessage;
private boolean grantQuestOnFailShowSystemMessage;
@@ -80,7 +84,19 @@ public class QuestTask {
private int msgBoxWidth;
private int msgBoxHeight;
private int msgBoxLength;
private int minStartDelay;
private int maxStartDelay;
private int timerAmount;
private int chanceToActivate;
private int chanceToSkip;
private int numToGive;
private int count;
private int minCount;
private int maxCount;
private int minDistance;
private int maxDistance;
private int questControlOnTaskCompletion;
private long waitMarkerBuilding;
private float LocationX;
@@ -90,7 +106,9 @@ public class QuestTask {
private float waitMarkerY;
private float waitMarkerZ;
private float radius;
private transient ScheduledFuture<?> scheduledTask;
public QuestTask() {}
public QuestTask(String type, int id) {
@@ -166,6 +184,14 @@ public class QuestTask {
this.musicOnFail = musicOnFail;
}
public int getChanceToActivate() {
return chanceToActivate;
}
public void setChanceToActivate(int chanceToActivate) {
this.chanceToActivate = chanceToActivate;
}
public String getTarget() {
return target;
}
@@ -595,4 +621,117 @@ public class QuestTask {
public void setLootName(String lootName) {
this.lootName = lootName;
}
public int getTimerAmount() {
return timerAmount;
}
public void setTimerAmount(int timerAmount) {
this.timerAmount = timerAmount;
}
public String getBuffName() {
return buffName;
}
public void setBuffName(String buffName) {
this.buffName = buffName;
}
public int getChanceToSkip() {
return chanceToSkip;
}
public void setChanceToSkip(int chanceToSkip) {
this.chanceToSkip = chanceToSkip;
}
public int getMinCount() {
return minCount;
}
public void setMinCount(int minCount) {
this.minCount = minCount;
}
public int getMaxCount() {
return maxCount;
}
public void setMaxCount(int maxCount) {
this.maxCount = maxCount;
}
public String getItemToGive() {
return itemToGive;
}
public void setItemToGive(String itemToGive) {
this.itemToGive = itemToGive;
}
public int getMinStartDelay() {
return minStartDelay;
}
public void setMinStartDelay(int minStartDelay) {
this.minStartDelay = minStartDelay;
}
public int getMaxStartDelay() {
return maxStartDelay;
}
public void setMaxStartDelay(int maxStartDelay) {
this.maxStartDelay = maxStartDelay;
}
public boolean dismountsPlayer() {
return dismountPlayer;
}
public void setDismountPlayer(boolean dismountPlayer) {
this.dismountPlayer = dismountPlayer;
}
public ScheduledFuture<?> getScheduledTask() {
return scheduledTask;
}
public void setScheduledTask(ScheduledFuture<?> scheduledTask) {
this.scheduledTask = scheduledTask;
}
public int getNumToGive() {
return numToGive;
}
public void setNumToGive(int numToGive) {
this.numToGive = numToGive;
}
public boolean isCreateItem() {
return createItem;
}
public void setCreateItem(boolean createItem) {
this.createItem = createItem;
}
public boolean isDestroyItem() {
return destroyItem;
}
public void setDestroyItem(boolean destroyItem) {
this.destroyItem = destroyItem;
}
public int getQuestControlOnTaskCompletion() {
return questControlOnTaskCompletion;
}
public void setQuestControlOnTaskCompletion(int questControlOnTaskCompletion) {
this.questControlOnTaskCompletion = questControlOnTaskCompletion;
}
}