Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Matt Parnell
2014-08-24 00:38:37 -05:00
22 changed files with 838 additions and 648 deletions
+78 -78
View File
@@ -1,95 +1,95 @@
goto
findobject
teleport
teleportto
invulnerable
kill
setspeed
planetwarp
harmfull
harmless
object
searchcorpse
giveitem
sethue
editbank
editbankaccount
editappearance
editstats
snoop
wipeitems
findplayer
findobject
findobjectbytemplate
findcreature
getgametime
getplayerid
getstationname
grantbadge
grantbadgearea
granttitle
revokebadge
revoketitle
gmrevive
getrank
setfaction
settef
setfactionstanding
setrank
killplayer
teleporttarget
planetwarptarget
freezeplayer
unfreezeplayer
squelch
unsquelch
adjustlotcount
credits
editappearance
kick
maxcombatability
maxstats
money
setfirstname
setlastname
setname
setplayerstate
uncityban
setbiographyadmin
activatequest
activateinstance
clearcompletedquest
completequest
listactivequests
listcompletedquests
grantskill
revokeskill
setexperience
listguildes
cityinfo
activatequest
addbannedplayer
adjustlotcount
broadcast
broadcastarea
broadcastplanet
broadcastgalaxy
addbannedplayer
emptymailtarget
getaccountinfo
removebannedplayer
broadcastplanet
cityinfo
clearcompletedquest
clearveteranreward
completequest
createcreature
createnpc
createmissionelement
createnpc
createspawningelement
createspawningelementwithdifficulty
createstaticitem
credits
editappearance
editappearance
editbank
editbankaccount
editstats
emptymailtarget
findcreature
findobject
findobject
findobjectbytemplate
findplayer
freezeplayer
getaccountinfo
getgametime
getplayerid
getrank
getspawndelays
getstationname
giveitem
gmrevive
goto
grantbadge
grantbadgearea
grantskill
granttitle
harmfull
harmless
hasveteranreward
invulnerable
kick
kill
killplayer
listactivequests
listcompletedquests
listguildes
maxcombatability
maxstats
money
object
planetwarp
planetwarptarget
removebannedplayer
revokebadge
revokeskill
revoketitle
searchcorpse
setbiographyadmin
setexperience
setfaction
setfactionstanding
setfirstname
sethue
setlastname
setmaximumspawntime
setminimumspawntime
setname
setplayerstate
setrank
setspeed
settef
setveteranreward
setveteranrewardtimecs
showspawnregion
snoop
squelch
startspawner
starttargetspawner
stopspawner
stoptargetspawner
clearveteranreward
hasveteranreward
setveteranrewardtimecs
setveteranreward
teleport
teleporttarget
teleportto
uncityban
unfreezeplayer
unsquelch
wipeitems
+88 -89
View File
@@ -1,103 +1,102 @@
gmforcecommand
goto
findobject
teleport
teleportto
invulnerable
kill
setspeed
planetwarp
harmfull
harmless
object
searchcorpse
giveitem
sethue
editbank
editbankaccount
editappearance
editstats
snoop
wipeitems
findplayer
findobject
findobjectbytemplate
findcreature
getgametime
getplayerid
getstationname
gmrevive
getrank
setfaction
settef
setfactionstanding
setrank
killplayer
teleporttarget
planetwarptarget
adjustlotcount
editappearance
kick
maxcombatability
maxstats
setfirstname
setlastname
setname
setplayerstate
activtequest
activateinstance
clearcompletedquest
completequest
activatequest
listactivequests
listcompletedquests
grantskill
revokeskill
setexperience
listguildes
cityinfo
createcreature
createnpc
createmissionelement
createspawningelement
createspawningelementwithdifficulty
createstaticitem
getspawndelays
setmaximumspawntime
setminimumspawntime
showspawnregion
startspawner
starttargetspawner
stopspawner
stoptargetspawner
clearveteranreward
hasveteranreward
setveteranrewardtimecs
setveteranreward
adjustlotcount
aiignore
cityinfo
clearcompletedquest
clearveteranreward
combat
craft
forcecommand
generatecrafteditem
getobjvars
gmcreateclassresource
gmcreatespecificresource
manufacture
showfactioninformation
qatool
startrestussstagetwo
completerestusstageone
spewcommandqueue
combatdatarecord
combatdataclear
combatdatarecord
combatdatareport
combatdatastop
combatmodecheck
completequest
completerestusstageone
craft
createcreature
createmissionelement
createnpc
createspawningelement
createspawningelementwithdifficulty
createstaticitem
csdumptarget
database
destroy
dumptargetinformation
dumpzoneinformation
editappearance
editappearance
editbank
editbankaccount
editstats
findcreature
findobject
findobject
findobjectbytemplate
findplayer
forcecommand
generatecrafteditem
getgametime
getobjvars
getplayerid
getrank
getspawndelays
getstationname
giveitem
gmcreateclassresource
gmcreatespecificresource
gmforcecommand
gmrevive
goto
grantskill
harmfull
harmless
hasveteranreward
initializecomponent
script
invulnerable
kick
kill
killplayer
lag
csdumptarget
listactivequests
listcompletedquests
listguildes
manufacture
maxcombatability
maxstats
object
planetwarp
planetwarptarget
qatool
revokeskill
script
searchcorpse
setexperience
setfaction
setfactionstanding
setfirstname
sethue
setlastname
setmaximumspawntime
setminimumspawntime
setname
setplayerstate
setrank
setspeed
settef
setveteranreward
setveteranrewardtimecs
showfactioninformation
showspawnregion
snoop
spewcommandqueue
startrestussstagetwo
startspawner
starttargetspawner
stopspawner
stoptargetspawner
teleport
teleporttarget
teleportto
wipeitems
+74 -74
View File
@@ -1,80 +1,25 @@
goto
findobject
teleport
teleportto
invulnerable
kill
setspeed
planetwarp
harmfull
harmless
object
searchcorpse
giveitem
sethue
findplayer
findobject
findobjectbytemplate
findcreature
getgametime
getplayerid
getstationname
grantbadge
grantbadgearea
granttitle
revokebadge
revoketitle
gmrevive
getrank
setfaction
settef
setfactionstanding
setrank
killplayer
teleporttarget
planetwarptarget
freezeplayer
unfreezeplayer
squelch
unsquelch
adjustlotcount
credits
editappearance
kick
maxcombatability
maxstats
money
setfirstname
setlastname
setname
setplayerstate
activatequest
activateinstance
clearcompletedquest
completequest
listactivequests
listcompletedquests
grantskill
revokeskill
setexperience
activatequest
adjustlotcount
broadcast
broadcastarea
broadcastplanet
broadcastgalaxy
broadcastplanet
clearcompletedquest
completequest
completerestusstageone
createcreature
createnpc
createmissionelement
createnpc
createspawningelement
createspawningelementwithdifficulty
createstaticitem
getspawndelays
setmaximumspawntime
setminimumspawntime
showspawnregion
startspawner
starttargetspawner
stopspawner
stoptargetspawner
credits
csstorytellerdestroyallobjects
csstorytellerdestroynpcs
csstorytellerdestroyparticles
csstorytellerdestroyprops
editappearance
eventbuff
eventbuffarea
eventbufftarget
@@ -88,11 +33,66 @@ eventteftarget
eventundomovetome
eventvaderchoke
eventweapon
setplayerappearance
findcreature
findobject
findobject
findobjectbytemplate
findplayer
freezeplayer
getgametime
getplayerid
getrank
getspawndelays
getstationname
giveitem
gmrevive
goto
grantbadge
grantbadgearea
grantskill
granttitle
harmfull
harmless
invulnerable
kick
kill
killplayer
listactivequests
listcompletedquests
maxcombatability
maxstats
money
object
planetwarp
planetwarptarget
revokebadge
revokeplayerappearance
csstorytellerdestroynpcs
csstorytellerdestroyprops
csstorytellerdestroyparticles
csstorytellerdestroyallobjects
revokeskill
revoketitle
searchcorpse
setexperience
setfaction
setfactionstanding
setfirstname
sethue
setlastname
setmaximumspawntime
setminimumspawntime
setname
setplayerappearance
setplayerstate
setrank
setspeed
settef
showspawnregion
squelch
startrestussstagetwo
completerestusstageone
startspawner
starttargetspawner
stopspawner
stoptargetspawner
teleport
teleporttarget
teleportto
unfreezeplayer
unsquelch
+130 -130
View File
@@ -1,126 +1,49 @@
gmforcecommand
goto
findobject
teleport
teleportto
invulnerable
kill
setspeed
planetwarp
harmfull
harmless
object
searchcorpse
giveitem
sethue
editbank
editbankaccount
editappearance
editstats
snoop
wipeitems
findplayer
findobject
findobjectbytemplate
findcreature
getgametime
getplayerid
getstationname
grantbadge
grantbadgearea
granttitle
revokebadge
revoketitle
gmrevive
getrank
setfaction
settef
setfactionstanding
setrank
killplayer
teleporttarget
planetwarptarget
freezeplayer
unfreezeplayer
squelch
unsquelch
adjustlotcount
credits
editappearance
kick
maxcombatability
maxstats
money
setfirstname
setlastname
setname
setplayerstate
uncityban
setbiographyadmin
activtequest
activateinstance
clearcompletedquest
completequest
listactivequests
listcompletedquests
grantskill
revokeskill
setexperience
listguildes
cityinfo
activatequest
activatequest
addallowedplayer
addbannedplayer
adjustlotcount
aiignore
broadcast
broadcastarea
broadcastplanet
broadcastgalaxy
addbannedplayer
emptymailtarget
getaccountinfo
removebannedplayer
createcreature
createnpc
createmissionelement
createspawningelement
createspawningelementwithdifficulty
createstaticitem
getspawndelays
setmaximumspawntime
setminimumspawntime
showspawnregion
startspawner
starttargetspawner
stopspawner
stoptargetspawner
broadcastplanet
cityinfo
clearcompletedquest
clearveteranreward
hasveteranreward
setveteranrewardtimecs
setveteranreward
aiignore
combat
craft
forcecommand
generatecrafteditem
getobjvars
gmcreateclassresource
gmcreatespecificresource
manufacture
showfactioninformation
qatool
startrestussstagetwo
completerestusstageone
spewcommandqueue
combatdatarecord
combatdataclear
combatdatarecord
combatdatareport
combatdatastop
combatmodecheck
completequest
completerestusstageone
completerestusstageone
craft
createcreature
createmissionelement
createnpc
createspawningelement
createspawningelementwithdifficulty
createstaticitem
credits
csdumptarget
csstorytellerdestroyallobjects
csstorytellerdestroynpcs
csstorytellerdestroyparticles
csstorytellerdestroyprops
database
destroy
dumptargetinformation
dumpzoneinformation
initializecomponent
script
lag
csdumptarget
editappearance
editappearance
editbank
editbankaccount
editstats
emptymailtarget
eventbuff
eventbuffarea
eventbufftarget
@@ -134,30 +57,107 @@ eventteftarget
eventundomovetome
eventvaderchoke
eventweapon
setplayerappearance
revokeplayerappearance
csstorytellerdestroynpcs
csstorytellerdestroyprops
csstorytellerdestroyparticles
csstorytellerdestroyallobjects
startrestussstagetwo
completerestusstageone
setgodmode
server
addallowedplayer
removeallowedplayer
setlogintitle
setloginmessage
setplanetlimit
resendloginmessagetoall
findcreature
findobject
findobject
findobjectbytemplate
findplayer
findwarden
forcecommand
freezeplayer
generatecrafteditem
getaccountinfo
getgametime
getobjvars
getplayerid
getrank
getspawndelays
getstationname
giveitem
gmcreateclassresource
gmcreatespecificresource
gmforcecommand
gmforcerank
gmfsvillage
gmjedistate
gmrevive
goto
grantbadge
grantbadgearea
grantpadawantrialseligibility
overridepadawantrialseligibility
resetjedi
setwardenloginmessage
findwarden
activatequest
grantskill
granttitle
grantwarden
harmfull
harmless
hasveteranreward
initializecomponent
invulnerable
kick
kill
killplayer
lag
listactivequests
listcompletedquests
listguildes
manufacture
maxcombatability
maxstats
money
object
overridepadawantrialseligibility
planetwarp
planetwarptarget
qatool
removeallowedplayer
removebannedplayer
resendloginmessagetoall
resetjedi
revokebadge
revokeplayerappearance
revokeskill
revoketitle
revokewarden
script
searchcorpse
server
setbiographyadmin
setexperience
setfaction
setfactionstanding
setfirstname
setgodmode
sethue
setlastname
setloginmessage
setlogintitle
setmaximumspawntime
setminimumspawntime
setname
setplanetlimit
setplayerappearance
setplayerstate
setrank
setspeed
settef
setveteranreward
setveteranrewardtimecs
setwardenloginmessage
showfactioninformation
showspawnregion
snoop
spewcommandqueue
squelch
startrestussstagetwo
startrestussstagetwo
startspawner
starttargetspawner
stopspawner
stoptargetspawner
teleport
teleporttarget
teleportto
uncityban
unfreezeplayer
unsquelch
wipeitems
+67 -67
View File
@@ -1,82 +1,82 @@
goto
findobject
teleport
teleportto
invulnerable
kill
setspeed
planetwarp
harmfull
harmless
object
searchcorpse
giveitem
sethue
findplayer
findobject
findobjectbytemplate
findcreature
getgametime
getplayerid
getstationname
gmrevive
getrank
setfaction
settef
setfactionstanding
setrank
killplayer
teleporttarget
planetwarptarget
setfirstname
setlastname
setname
setplayerstate
activatequest
activateinstance
clearcompletedquest
completequest
listactivequests
listcompletedquests
grantskill
revokeskill
setexperience
listguildes
activatequest
aiignore
cityinfo
clearcompletedquest
combat
combatdataclear
combatdatarecord
combatdatareport
combatdatastop
combatmodecheck
completequest
completerestusstageone
craft
createcreature
createnpc
createmissionelement
createnpc
createspawningelement
createspawningelementwithdifficulty
createstaticitem
csdumptarget
destroy
dumptargetinformation
dumpzoneinformation
findcreature
findobject
findobject
findobjectbytemplate
findplayer
forcecommand
generatecrafteditem
getgametime
getobjvars
getplayerid
getrank
getspawndelays
getstationname
giveitem
gmcreateclassresource
gmcreatespecificresource
gmrevive
goto
grantskill
harmfull
harmless
invulnerable
kill
killplayer
listactivequests
listcompletedquests
listguildes
manufacture
object
planetwarp
planetwarptarget
qatool
revokeskill
searchcorpse
setexperience
setfaction
setfactionstanding
setfirstname
sethue
setlastname
setmaximumspawntime
setminimumspawntime
setname
setplayerstate
setrank
setspeed
settef
showfactioninformation
showspawnregion
spewcommandqueue
startrestussstagetwo
startspawner
starttargetspawner
stopspawner
stoptargetspawner
aiignore
combat
craft
forcecommand
generatecrafteditem
getobjvars
gmcreateclassresource
gmcreatespecificresource
manufacture
showfactioninformation
qatool
startrestussstagetwo
completerestusstageone
spewcommandqueue
combatdatarecord
combatdataclear
combatdatareport
combatdatastop
combatmodecheck
dumptargetinformation
dumpzoneinformation
csdumptarget
destroy
teleport
teleporttarget
teleportto
+8 -8
View File
@@ -1,12 +1,12 @@
gmforcecommand
goto
findobject
teleport
teleportto
gmforcecommand
gmrevive
goto
harmfull
harmless
invulnerable
kill
gmrevive
setspeed
planetwarp
harmfull
harmless
setspeed
teleport
teleportto
+8 -1
View File
@@ -365,30 +365,37 @@ def buff(owner):
core.buffService.addBuffToCreature(owner, 'me_buff_health_2', owner)
buff = owner.getBuffByName('me_buff_health_2')
buff.setDuration(5400)
owner.updateBuff(buff)
core.buffService.addBuffToCreature(owner, 'me_buff_action_3', owner)
buff1 = owner.getBuffByName('me_buff_action_3')
buff1.setDuration(5400)
owner.updateBuff(buff1)
core.buffService.addBuffToCreature(owner, 'me_buff_agility_3', owner)
buff2 = owner.getBuffByName('me_buff_agility_3')
buff2.setDuration(5400)
owner.updateBuff(buff2)
core.buffService.addBuffToCreature(owner, 'me_buff_melee_gb_1', owner)
buff3 = owner.getBuffByName('me_buff_melee_gb_1')
buff3.setDuration(5400)
owner.updateBuff(buff3)
core.buffService.addBuffToCreature(owner, 'me_buff_ranged_gb_1', owner)
buff4 = owner.getBuffByName('me_buff_ranged_gb_1')
buff4.setDuration(5400)
owner.updateBuff(buff4)
core.buffService.addBuffToCreature(owner, 'me_buff_precision_3', owner)
buff5 = owner.getBuffByName('me_buff_precision_3')
buff5.setDuration(5400)
owner.updateBuff(buff5)
core.buffService.addBuffToCreature(owner, 'me_buff_strength_3', owner)
buff6 = owner.getBuffByName('me_buff_strength_3')
buff6.setDuration(5400)
owner.updateBuff(buff6)
screenOne(core, owner)
return
@@ -728,4 +735,4 @@ def bountyDroids(owner, inventory):
probe = core.objectService.createObject('object/tangible/mission/shared_mission_bounty_droid_probot.iff', owner.getPlanet())
probe.setUses(20)
inventory.add(probe)
return
return
+2 -2
View File
@@ -5,11 +5,11 @@ def setup():
def run(core, actor, target, commandString):
buffObj = actor.getBuffByCRC(int(commandString))
buffObj = actor.getBuffList().get(int(commandString))
if buffObj is None:
return
if buffObj.isRemovableByPlayer() and buffObj.isDebuff() is False:
core.buffService.removeBuffFromCreature(actor, buffObj)
return
return
+22
View File
@@ -0,0 +1,22 @@
def setup(core):
core.questService.addCollisionEvent('find_majolnir', 'task2', 3526, 5, -4619, 10, 'tatooine')
return
def task2(core, activator, collidable):
print ('called.')
if activator.getPlayerObject() is None:
return
player = activator.getPlayerObject()
if player.getQuest('find_majolnir') is None:
print ('not in quest journal')
return
quest = player.getQuest('find_majolnir')
if quest.isCompleted() or quest.getActiveStep() != 2:
return
core.questService.completeActiveTask(activator, quest)
return
@@ -1,4 +1,4 @@
import sys
def run():
import sys
def run():
return "object/tangible/deed/vehicle_deed/shared_landspeeder_xp38_deed.iff"
@@ -157,4 +157,31 @@ def addPlanetSpawns(core, planet):
aiSvc.setLoiter(r3m6, float(1), float(3))
aiSvc.setLoiter(eg1, float(1), float(3))
aiSvc.setLoiter(r3j7, float(1), float(3))
# Looped Patrol must end in same cell like the start point!!!
#building id: 1105845 Buildingid + cell !
trehla = stcSvc.spawnObject('trehla', 'tatooine', long(1105845 + 8), float(24.21), float(2.12), float(73.49), float(0.92), float(0), float(-0.38), float(0))
patrolpointsCells = Vector() # Vector Building reference Patrolpoint CellID
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(25.11), float(2.10), float(50.22)), 7)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(21.25), float(0.6), float(45.51)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-11.78), float(0.59), float(45.78)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-13.67), float(2.6), float(18.27)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-6.63), float(2.6), float(17.87)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-6.74), float(2.6), float(1.60)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-17.92), float(0.6), float(1.88)), 5)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-18.21), float(0.6), float(9.40)), 5)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-24.18), float(0.6), float(9.40)), 5)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(-24.50), float(0.6), float(-4.08)), 2)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(0.03), float(0.6), float(-4.36)), 1)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(25.03), float(0.6), float(-4.10)), 3)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(24.38), float(0.6), float(9.42)), 3)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(17.98), float(0.6), float(9.14)), 4)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(5.44), float(2.6), float(2.33)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(9.3), float(2.6), float(18.64)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(14.65), float(0.92), float(40.72)), 6)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(23.9), float(0.93), float(48.22)), 7)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(26.64), float(2.12), float(57.42)), 7)
aiSvc.addPatrolPointCell(patrolpointsCells, trehla.getGrandparent(), Point3D(float(27.64), float(2.12), float(70.07)), 8)
aiSvc.setPatrol(trehla, patrolpointsCells)
return
+4
View File
@@ -665,8 +665,12 @@ public class NGECore {
staticService.spawnStatics();
equipmentService.loadBonusSets();
playerCityService.loadCityRankCaps();
playerCityService.loadCities();
questService.loadEvents();
retroService.run();
browserService = new BrowserService(this);
-91
View File
@@ -1,91 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 <Project SWG>
*
* This File is part of NGECore2.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
******************************************************************************/
package resources.buffs;
import java.util.Map.Entry;
import org.apache.mina.core.buffer.IoBuffer;
import engine.resources.objects.Delta;
import resources.objects.SWGMap;
public class BuffList extends Delta {
private static final long serialVersionUID = 1L;
private SWGMap<Integer, Buff> list;
public BuffList(SWGMap<Integer, Buff> list) {
this.list = list;
}
public BuffList() {
}
public SWGMap<Integer, Buff> getList() {
synchronized(objectMutex) {
return list;
}
}
public byte[] getBytes() {
int size = 8 + ((list.size() > 0) ? 4 : 0);
for (Buff buff : list.values().toArray(new Buff[] { })) {
size += (25 + ((buff.getBuffName().equals("")) ? 0 : 4));
}
IoBuffer buffer = createBuffer(size);
buffer.putInt(list.size());
buffer.putInt(list.getUpdateCounter());
for (Entry<Integer, Buff> entry : list.entrySet()) {
int crc = entry.getKey();
Buff buff = entry.getValue();
buffer.put(getBoolean(!buff.getBuffName().equals("")));
if (!buff.getBuffName().equals("")) {
buffer.putInt(0);
}
buffer.putInt(crc);
if (buff.getDuration() > 0) {
buffer.putInt((int) (buff.getTotalPlayTime() + buff.getRemainingDuration()));
buffer.putInt(0);
buffer.putInt((int) buff.getDuration());
} else {
buffer.putInt(-1);
buffer.putInt(0);
if (buff.getBuffName().equals("")) {
buffer.putInt(0);
} else {
buffer.putInt(-1);
}
}
buffer.putLong(buff.getOwnerId());
}
if (list.size() > 0) {
buffer.putInt(1);
}
return buffer.array();
}
}
@@ -110,7 +110,7 @@ public class CreatureObject extends TangibleObject implements IPersistent {
}
public void initAfterDBLoad() {
super.init();
super.initAfterDBLoad();
System.out.println("Name: " + getCustomName());
System.out.println(" Cash Credits: " + getCashCredits());
System.out.println(" Bank Credits: " + getBankCredits());
@@ -182,8 +182,8 @@ public class CreatureObject extends TangibleObject implements IPersistent {
baseline.put("moodId", (byte) 0);
baseline.put("performanceCounter", 0);
baseline.put("performanceId", 0);
baseline.put("attributes", new SWGList<Integer>(this, 6, 21, false));
baseline.put("maxAttributes", new SWGList<Integer>(this, 6, 22, false));
baseline.put("attribs", new SWGList<Integer>(this, 6, 21, false));
baseline.put("maxAttribs", new SWGList<Integer>(this, 6, 22, false));
baseline.put("equipmentList", new SWGList<Equipment>(this, 6, 23, false));
baseline.put("appearance", "");
baseline.put("visible", true);
@@ -823,7 +823,7 @@ public class CreatureObject extends TangibleObject implements IPersistent {
@SuppressWarnings("unchecked")
public SWGList<Integer> getAttribs() {
return (SWGList<Integer>) getBaseline(6).get("attributes");
return (SWGList<Integer>) getBaseline(6).get("attribs");
}
public void resetAttribs() {
@@ -881,7 +881,7 @@ public class CreatureObject extends TangibleObject implements IPersistent {
@SuppressWarnings("unchecked")
public SWGList<Integer> getMaxAttribs() {
return (SWGList<Integer>) getBaseline(6).get("maxAttributes");
return (SWGList<Integer>) getBaseline(6).get("maxAttribs");
}
public int getMaxHealth() {
@@ -981,20 +981,10 @@ public class CreatureObject extends TangibleObject implements IPersistent {
}
public void addBuff(Buff buff) {
if (buff == null) {
System.err.println("CreatureObject:addBuff(): Attempting to add a null Buff object. Something is wrong in BuffService!");
}
synchronized(objectMutex) {
PlayerObject player = (PlayerObject) getSlottedObject("ghost");
buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000));
}
PlayerObject player = (PlayerObject) getSlottedObject("ghost");
buff.setTotalPlayTime((player == null) ? 0 : (int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000));
buff.setStartTime();
getBuffList().put(CRC.StringtoCRC(buff.getBuffName().toLowerCase()), buff);
synchronized(objectMutex) {
buff.setStartTime();
}
}
public void removeBuff(Buff buff) {
@@ -47,6 +47,7 @@ import resources.objects.waypoint.WaypointObject;
import resources.quest.Quest;
import services.quest.QuestItem;
import engine.clients.Client;
import engine.resources.common.CRC;
import engine.resources.common.StringUtilities;
import engine.resources.objects.Baseline;
import engine.resources.scene.Planet;
@@ -609,6 +610,10 @@ public class PlayerObject extends IntangibleObject implements Serializable {
getBaseline(8).set("activeQuest", questCRC);
}
public Quest getQuest(String questName) {
return getQuestJournal().get(CRC.StringtoCRC("quest/" + questName));
}
public String getProfessionWheelPosition() {
return (String) getBaseline(8).get("professionWheelPosition");
}
+19 -3
View File
@@ -23,10 +23,12 @@ package resources.quest;
import java.io.Serializable;
import java.util.BitSet;
import java.util.concurrent.ScheduledFuture;
import org.apache.mina.core.buffer.IoBuffer;
import engine.resources.common.CRC;
import engine.resources.common.StringUtilities;
import engine.resources.objects.Delta;
public class Quest extends Delta implements Serializable {
@@ -35,6 +37,7 @@ public class Quest extends Delta implements Serializable {
private long ownerId;
private int activeStep; // Quest starts at step 0
private BitSet activeStepBitmask = new BitSet(16);
private BitSet completedStepBitmask = new BitSet(16);
@@ -42,6 +45,7 @@ public class Quest extends Delta implements Serializable {
private boolean recievedAward = false;
private String name;
private ScheduledFuture<?> timer;
private long waypointId;
public Quest() {}
@@ -120,12 +124,23 @@ public class Quest extends Delta implements Serializable {
}
public void incrementQuestStep() {
activeStepBitmask.set(activeStep, false);
completedStepBitmask.set(activeStep);
this.activeStep++;
activeStepBitmask.set(activeStep);
activeStepBitmask.set(activeStep, false);
activeStep++;
activeStepBitmask.set(activeStep, true);
//System.out.println("Active step was "+ (activeStep - 1) + " and is now " + activeStep );
}
public ScheduledFuture<?> getTimer() {
return timer;
}
public void setTimer(ScheduledFuture<?> timer) {
this.timer = timer;
}
public byte[] getBytes() {
byte[] activeStepBytes = activeStepBitmask.toByteArray();
byte[] completedStepBytes = completedStepBitmask.toByteArray();
@@ -175,6 +190,7 @@ public class Quest extends Delta implements Serializable {
buffer.flip();
StringUtilities.printBytes(buffer.array());
return buffer.array();
}
+21
View File
@@ -1067,6 +1067,27 @@ public class SimulationService implements INetworkDispatch {
}
public Point3D convertModelSpaceToPoint(Point3D point, SWGObject object) {
Point3D position = object.getPosition();
WB_M44 translateMatrix = new WB_M44(1, 0, 0, position.x, 0, 1, 0, position.y, 0, 0, 1, position.z, 0, 0, 0, 1);
float radians = object.getRadians();
float sin = (float) Math.sin(radians);
float cos = (float) Math.cos(radians);
WB_M44 rotationMatrix = new WB_M44(cos, 0, sin, 0, 0, 1, 0, 0, -sin, 0, cos, 0, 0, 0, 0, 1); //non-inverse matrix
WB_M44 modelSpace = translateMatrix.mult(rotationMatrix);
float x = (float) (modelSpace.m11 * point.x + modelSpace.m12 * point.y + modelSpace.m13 * point.z + modelSpace.m14);
float y = (float) (modelSpace.m21 * point.x + modelSpace.m22 * point.y + modelSpace.m23 * point.z + modelSpace.m24);
float z = (float) (modelSpace.m31 * point.x + modelSpace.m32 * point.y + modelSpace.m33 * point.z + modelSpace.m34);
return new Point3D(x, y, z);
}
/*
* Moved this to ConnectionService which will disconnect them
* from the server if they don't send packets for 5 minutes or more
+11
View File
@@ -35,6 +35,8 @@ import resources.common.SpawnPoint;
import resources.datatables.Difficulty;
import resources.datatables.FactionStatus;
import resources.datatables.GcwType;
import resources.objects.building.BuildingObject;
import resources.objects.cell.CellObject;
import resources.objects.creature.CreatureObject;
import resources.objects.group.GroupObject;
import resources.objects.player.PlayerObject;
@@ -213,6 +215,15 @@ public class AIService {
actor.setCurrentState(new IdleState());
}
public void addPatrolPointCell(Vector<Point3D> patrolpoints, BuildingObject building, Point3D position, int cellID){
if (building==null)
return;
CellObject cellObj = building.getCellByCellNumber(cellID);
if (cellObj!=null)
position.setCell(cellObj);
patrolpoints.add(position);
}
public void setLoiter(CreatureObject creature, float minDist, float maxDist){
AIActor actor = (AIActor) creature.getAttachment("AI");
if (actor==null)
+99 -55
View File
@@ -76,6 +76,15 @@ public abstract class AIState {
NGECore core = NGECore.getInstance();
Point3D currentPosition = creature.getPosition();
Point3D targetPosition = null;
// Cell management
if (creature.getContainer()!=null && creature.getContainer() instanceof CellObject){
CellObject cellObj1 = (CellObject)creature.getContainer();
if (cellObj1!=null){
currentPosition.setCell(cellObj1);
}
}
float maxDistance = stopDistance;
boolean finished = false;
float dx, dz, newX = 0, newY = 0, newZ = 0;
@@ -85,6 +94,8 @@ public abstract class AIState {
//while(!finished && movementPoints.size() != 0) {
if ((!(actor.getCurrentState() instanceof FollowState)) && movementPoints.size() == 0 && patrolPoints.size() == 0) {
if (creature.getTemplate().contains("shared_dressed_tutorial_mentor.iff"))
System.out.println("findNewPosition targetPosition null ");
DevLog.debugoutai(actor, "Charon", "AI State findnewpos", "Breakout1");
return false;
}
@@ -107,16 +118,31 @@ public abstract class AIState {
if (actor.getCurrentState().getClass().equals(FollowState.class)){
targetPosition = actor.getFollowObject().getWorldPosition();
if (actor.getFollowObject().getContainer()!=null && actor.getFollowObject().getContainer() instanceof CellObject){
CellObject cellObj1 = (CellObject)actor.getFollowObject().getContainer();
if (cell!=null)
targetPosition.setCell(cellObj1);
}
}
Vector<Point3D> path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition);
if (targetPosition==null){
if (creature.getTemplate().contains("shared_dressed_tutorial_mentor.iff"))
System.out.println("findNewPosition targetPosition null ");
DevLog.debugoutai(actor, "Charon", "AI State findnewpos", "Breakout2");
return false;
}
float distanceToTarget = targetPosition.getWorldPosition().getDistance(creature.getWorldPosition());
if (targetPosition.getCell()!=null){
//Point3D targetWorldPosition = core.simulationService.convertModelSpaceToPoint(targetPosition, creature.getGrandparent());
Point3D targetWorldPosition = targetPosition.getWorldPosition();
distanceToTarget = targetWorldPosition.getDistance(creature.getWorldPosition());
}
if(distanceToTarget > stopDistance) {
maxDistance = Math.min(speed, distanceToTarget - stopDistance);
} else {
@@ -139,9 +165,7 @@ public abstract class AIState {
Point3D oldPosition = null;
float pathDistance = 0;
for(int i = 1; i < path.size() && !finished; i++) {
Point3D currentPathPosition = path.get(i);
@@ -153,7 +177,7 @@ public abstract class AIState {
pathDistance += oldWorldPos.getDistance(currentPathPosition.getWorldPosition());
if(pathDistance >= maxDistance || i == path.size() - 1 || currentPathPosition.getCell() != creature.getContainer()) {
finished = true;
if(movementPoints.size() != 0 && currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) {
@@ -177,6 +201,7 @@ public abstract class AIState {
//float distance = oldWorldPos.getDistance(currentPathPosition.getWorldPosition());
float distance = NGECore.getInstance().aiService.distanceSquared(oldWorldPos, currentPathPosition.getWorldPosition()); // Ok to use, as distance is not directly used later
float travelDistance = distance - (pathDistance - maxDistance);
// temp fix for melee npcs
travelDistance *= 1.3;
if(travelDistance <= 0) {
@@ -203,7 +228,7 @@ public abstract class AIState {
fullong = (int)(tempdz*100);
halfshort = ((int)(tempdx*100)) >> 1;
}
float deltaDist = (fullong + halfshort)/100;
float deltaDist = (fullong + halfshort)/100; // end of approximation
newX = (float) (oldPosition.x + (speed * (dx / deltaDist)));
newZ = (float) (oldPosition.z + (speed * (dz / deltaDist)));
@@ -226,6 +251,10 @@ public abstract class AIState {
}
} else {
if (creature.getTemplate().contains("shared_dressed_tutorial_mentor.iff"))
System.out.println("ELSE CASE");
newX = currentPathPosition.x;
newZ = currentPathPosition.z;
newY = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ);
@@ -742,8 +771,7 @@ public abstract class AIState {
if (creature.isInCombat()){
return;
}
TangibleObject target = actor.getFollowObject();
float speed = (float) creature.getWalkSpeed();
float maxDistance = 6;
@@ -763,82 +791,98 @@ public abstract class AIState {
// Manage Patrol points
maxDistance = 1;
if (actor.getPatrolPoints().size()==0)
if (actor.getPatrolPoints().size()==0){
return;
}
Point3D currentDestination = actor.getPatrolPoints().get(actor.getPatrolPointIndex());
//System.out.println("currentPosition.getDistance2D(currentDestination) " + currentPosition.getDistance2D(currentDestination));
if (NGECore.getInstance().aiService.distanceSquared2D(currentPosition, currentDestination)<4){
//if (currentPosition.getDistance2D(currentDestination)<4){
float relDistance = NGECore.getInstance().aiService.distanceSquared2D(currentPosition, currentDestination);
if (currentDestination.getCell()!=null){
//Point3D curdestWS = core.simulationService.convertModelSpaceToPoint(currentDestination, creature.getGrandparent());
Point3D curdestWS = currentDestination.getWorldPosition();
relDistance = NGECore.getInstance().aiService.distanceSquared2D(currentPosition, curdestWS);
}
if (relDistance<4){
if (actor.getPatrolPointIndex()<actor.getPatrolPoints().size()-1){
actor.setPatrolPointIndex(actor.getPatrolPointIndex()+1);
} else {
if (actor.isPatrolLoop())
if (actor.isPatrolLoop()) {
actor.setPatrolPointIndex(0);
}
else {
String isInvader = (String) creature.getAttachment("IsInvader");
if (isInvader==null)
return;
// If invader check for in weapon range general
if (core.invasionService.getDefensiveGeneral()!=null){
if (core.invasionService.getInvasionPhase()==3 && core.invasionService.getDefensiveGeneral().getPosture()!=13 && core.invasionService.getDefensiveGeneral().getPosture()!=14 && core.invasionService.getDistanceToDefensiveGeneral(creature)<2500){
actor.addDefender(core.invasionService.getDefensiveGeneral());
return;
}
}
// Check if there are more than 5 invaders at same spot
if (NGECore.getInstance().simulationService.getAllNearSameFactionNPCs(7, creature).size()>=4 && NGECore.getInstance().invasionService.getInvasionPhase()!=3){
actor.setAIactive(false); // switch off auto-target-recognition to counter lag
actor.setCurrentState(new IdleState());
//System.out.println("AI switched off!");
return;
}
//actor.setCurrentState(new IdleState());
// Wait state() Since this state does not require move,recover and all that its simple task
if (isInvader!=null){
//NGECore.getInstance().aiService.waitForEvent(actor, NGECore.getInstance().invasionService, "isDefendingGeneralAlive", false, WithdrawalState.class);
return; // Last Patrol point reached and no loop
// If invader check for in weapon range general
if (core.invasionService.getDefensiveGeneral()!=null){
if (core.invasionService.getInvasionPhase()==3 && core.invasionService.getDefensiveGeneral().getPosture()!=13 && core.invasionService.getDefensiveGeneral().getPosture()!=14 && core.invasionService.getDistanceToDefensiveGeneral(creature)<2500){
actor.addDefender(core.invasionService.getDefensiveGeneral());
return;
}
}
// Check if there are more than 5 invaders at same spot
if (NGECore.getInstance().simulationService.getAllNearSameFactionNPCs(7, creature).size()>=4 && NGECore.getInstance().invasionService.getInvasionPhase()!=3){
actor.setAIactive(false); // switch off auto-target-recognition to counter lag
actor.setCurrentState(new IdleState());
//System.out.println("AI switched off!");
return;
}
//actor.setCurrentState(new IdleState());
// Wait state() Since this state does not require move,recover and all that its simple task
//NGECore.getInstance().aiService.waitForEvent(actor, NGECore.getInstance().invasionService, "isDefendingGeneralAlive", false, WithdrawalState.class);
return; // Last Patrol point reached and no loop
}
}
}
}
} else {}
Point3D newPosition = new Point3D();
boolean foundNewPos = findNewPosition(actor, speed, maxDistance, newPosition);
if(!foundNewPos || (newPosition.x == 0 && newPosition.z == 0))
return;
//Point3D newWorldPos = newPosition.getWorldPosition();
Point3D newWorldPos = newPosition;
if (newPosition.getCell()==null)
newWorldPos = newPosition.getWorldPosition();
currentPosition = creature.getPosition();
Point3D newWorldPos = newPosition.getWorldPosition();
float direction = (float) Math.atan2(newWorldPos.x - currentPosition.x, newWorldPos.z - currentPosition.z);
float direction = (float) Math.atan2(newWorldPos.x - currentPosition.x, newWorldPos.z - currentPosition.z); // +0.973F
if(direction < 0)
direction = (float) (2 * Math.PI + direction);
direction = (float) (2 * Math.PI + direction); // +0.973F
Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0);
if (quaternion.y < 0.0f && quaternion.w > 0.0f) {
quaternion.y *= -1;
quaternion.w *= -1;
}
// if (newPosition.getCell()==null)
// System.out.println("newPosition.getCell() is NULL");
try{
core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell());
} catch (NullPointerException e) {
// Just to identify what exactly is null here
// if (creature==null)
// System.out.print("creature==null" );
// if (newPosition==null)
// System.out.print("newPosition==null" );
// if (quaternion==null)
// System.out.print("quaternion==null" );
// if (newPosition.getCell()==null)
// System.out.print("newPosition.getCell()==null" );
//
// System.out.print("creature.getMovementCounter() " + creature.getMovementCounter());
// if (creature==null)
// System.out.print("creature==null" );
// if (newPosition==null)
// System.out.print("newPosition==null" );
// if (quaternion==null)
// System.out.print("quaternion==null" );
// if (newPosition.getCell()==null)
// System.out.print("newPosition.getCell()==null" );
//
}
}
+8 -10
View File
@@ -1238,21 +1238,19 @@ public class CombatService implements INetworkDispatch {
if(target.hasBuff("incapWeaken")) {
if (!attacker.isPlayer()){
AIActor aiActor = (AIActor)attacker.getAttachment("AI");
if (aiActor.getMobileTemplate().isDeathblow())
deathblowPlayer(attacker, target);
deathblowPlayer(attacker, target);
} else
{
deathblowPlayer(attacker, target);
}
return;
}
if (!attacker.isPlayer()){
AIActor aiActor = (AIActor)attacker.getAttachment("AI");
if (aiActor.getMobileTemplate().isDeathblow()){
deathblowPlayer(attacker, target);
return;
} else {
if (!attacker.isPlayer()){
AIActor aiActor = (AIActor)attacker.getAttachment("AI");
if (aiActor.getMobileTemplate().isDeathblow()){
deathblowPlayer(attacker, target);
return;
}
}
}
+129 -19
View File
@@ -22,9 +22,22 @@
package services.quest;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
@@ -36,20 +49,24 @@ import protocol.swg.objectControllerObjects.ForceActivateQuest;
import protocol.swg.objectControllerObjects.QuestTaskCounterMessage;
import protocol.swg.objectControllerObjects.QuestTaskTimerMessage;
import protocol.swg.objectControllerObjects.ShowLootBox;
import resources.common.Console;
import resources.common.ObjControllerOpcodes;
import resources.common.OutOfBand;
import resources.common.ProsePackage;
import resources.common.collidables.CollidableCircle;
import resources.datatables.DisplayType;
import resources.objects.SWGMap;
import resources.objects.creature.CreatureObject;
import resources.objects.player.PlayerObject;
import resources.objects.tangible.TangibleObject;
import resources.objects.waypoint.WaypointObject;
import resources.quest.Quest;
import main.NGECore;
import engine.clientdata.ClientFileManager;
import engine.clientdata.visitors.DatatableVisitor;
import engine.resources.common.CRC;
import engine.resources.objects.SWGObject;
import engine.resources.scene.Point3D;
import engine.resources.service.INetworkDispatch;
import engine.resources.service.INetworkRemoteEvent;
@@ -58,7 +75,7 @@ public class QuestService implements INetworkDispatch {
private NGECore core;
private Map<String, QuestData> questMap = new ConcurrentHashMap<String, QuestData>();
private Map<String, QuestList> questRewardMap = new ConcurrentHashMap<String, QuestList>();
public QuestService(NGECore core) {
this.core = core;
}
@@ -75,9 +92,6 @@ public class QuestService implements INetworkDispatch {
});
}
@Override
public void shutdown() { }
public boolean doesPlayerHaveQuest(CreatureObject creo, String questName) {
PlayerObject ghost = creo.getPlayerObject();
@@ -142,9 +156,6 @@ public class QuestService implements INetworkDispatch {
if (player == null)
return;
if (quest.getWaypointId() != 0)
core.objectService.destroyObject(quest.getWaypointId());
int activeStep = quest.getActiveStep();
QuestTask task = qData.getTasks().get(activeStep);
@@ -154,6 +165,16 @@ public class QuestService implements INetworkDispatch {
switch (type) {
// quest.task.ground.go_to_location
case "go_to_location":
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());
break;
// quest.task.ground.comm_player
case "comm_player":
@@ -169,19 +190,70 @@ public class QuestService implements INetworkDispatch {
// TODO: add item count
ObjControllerMessage itemCount = new ObjControllerMessage(11, new QuestTaskCounterMessage(quester.getObjectID(), quest.getCrcName(), "@quest/groundquests:retrieve_item_counter"));
quester.getClient().getSession().write(itemCount.serialize());
WaypointObject wpRetrieve = createWaypoint(task.getWaypointName(), new Point3D(task.getLocationX(), task.getLocationY(), task.getLocationZ()), task.getPlanet());
player.getWaypoints().put(wpRetrieve.getObjectID(), wpRetrieve);
quest.setWaypointId(wpRetrieve.getObjectID());
break;
// quest.task.ground.timer
case "timer":
ObjControllerMessage timer = new ObjControllerMessage(11, new QuestTaskTimerMessage(quester.getObjectID(), quest.getCrcName(), "@quest/groundquests:timer_timertext", 20));
quester.getClient().getSession().write(timer.serialize());
System.out.println("Sent timer.");
AtomicInteger time = new AtomicInteger(new Random(task.getMaxTime()).nextInt((task.getMaxTime() - task.getMinTime()) + task.getMinTime()));
ScheduledFuture<?> taskTimer = Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
Console.println("Timer is: " + time.get());
if (time.get() == 0) {
//quest.incrementQuestStep();
completeActiveTask((CreatureObject) core.objectService.getObject(quester.getObjectID()), quest.getName());
} 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;
// quest.task.ground.show_message_box
case "show_message_box":
break;
default:
//System.out.println("Don't know what to do for quest task: " + type);
break;
}
if (!task.isVisible()) {
completeActiveTask(quester, quest);
return;
}
}
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)));
}
}
public void completeActiveTask(CreatureObject quester, Quest quest) {
PlayerObject player = quester.getPlayerObject();
if (player == null)
return;
QuestData qData = getQuestData(quest.getName());
int activeStep = quest.getActiveStep();
QuestTask task = qData.getTasks().get(activeStep);
//if (quest.getWaypointId() != 0)
//core.objectService.destroyObject(quest.getWaypointId());
if (quest.getTimer() != null)
quest.getTimer().cancel(true);
if (activeStep + 1 >= qData.getTasks().size()) {
QuestList listItem = questRewardMap.get(quest.getName());
@@ -199,14 +271,12 @@ public class QuestService implements INetworkDispatch {
if (task.getGrantQuestOnComplete() != null && !task.getGrantQuestOnComplete().equals(""))
activateQuest(quester, task.getGrantQuestOnComplete());
quest.incrementQuestStep(); // After handling the quest type, we can now increment the step
if (!task.isVisible()) {
player.getContainer().getClient().getSession().write(player.getBaseline(8).createDelta(7));
activateNextTask(quester, quest);
return;
}
quest.incrementQuestStep();
player.getContainer().getClient().getSession().write(player.getBaseline(8).createDelta(7));
activateNextTask(quester, quest);
}
@@ -265,7 +335,7 @@ public class QuestService implements INetworkDispatch {
// Give quest items
if (info.getRewardLootName() != null && !info.getRewardLootName().equals("")) {
SWGObject rewardLoot = core.objectService.createObject(core.scriptService.getMethod("scripts/quest_rewards/", info.getRewardLootName(), "run").__call__().asString(), creo.getPlanet());
SWGObject rewardLoot = core.objectService.createObject(core.scriptService.getMethod("scripts/quests/rewards/", info.getRewardLootName(), "run").__call__().asString(), creo.getPlanet());
inventory.add(rewardLoot);
recievedItems.add(rewardLoot.getObjectID());
}
@@ -361,12 +431,27 @@ public class QuestService implements INetworkDispatch {
return;
QuestItem item = player.getQuestRetrieveItemTemplates().get(target.getTemplate());
activateNextTask(quester, item.getQuestName());
completeActiveTask(quester, item.getQuestName());
player.getQuestRetrieveItemTemplates().remove(target.getTemplate(), item);
}
public WaypointObject createWaypoint(String name, Point3D location, String planet) {
WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", core.terrainService.getPlanetByName(planet));
if (waypoint == null)
return null;
waypoint.setActive(true);
waypoint.setColor(WaypointObject.BLUE);
waypoint.setName(name);
waypoint.setPlanetCrc(CRC.StringtoCRC(planet));
waypoint.setStringAttribute("", ""); //This simply allows the attributes to display (nothing else has to be done)
waypoint.setPosition(location);
return waypoint;
}
public QuestData getQuestData(String questName) {
if (questMap.containsKey(questName))
return questMap.get(questName);
@@ -391,6 +476,12 @@ public class QuestService implements INetworkDispatch {
}
}
public void addCollisionEvent(String questName, String method, float x, float y, float z, float radius, String planet) {
CollidableCircle collision = new CollidableCircle(new Point3D(x,y,z), radius, core.terrainService.getPlanetByName(planet));
collision.setCallback(core.scriptService.getMethod("scripts/quests/events/", questName, method));
core.simulationService.addCollidable(collision, x, z);
}
public boolean adminActivateQuest(CreatureObject creo, String questName) {
PlayerObject ghost = creo.getPlayerObject();
@@ -472,6 +563,8 @@ public class QuestService implements INetworkDispatch {
if (visitor.getObjectByColumnNameAndIndex("ITEM_NAME", r) != null) task.setItemName((String) visitor.getObjectByColumnNameAndIndex("ITEM_NAME", r));
if (visitor.getObjectByColumnNameAndIndex("DROP_PERCENT", r) != null) task.setDropPercent((int) visitor.getObjectByColumnNameAndIndex("DROP_PERCENT", r));
if (visitor.getObjectByColumnNameAndIndex("RETRIEVE_MENU_TEXT", r) != null) task.setRetrieveMenuText((String) visitor.getObjectByColumnNameAndIndex("RETRIEVE_MENU_TEXT", r));
if (visitor.getObjectByColumnNameAndIndex("MIN_TIME", r) != null) task.setMinTime((int) visitor.getObjectByColumnNameAndIndex("MIN_TIME", r));
if (visitor.getObjectByColumnNameAndIndex("MAX_TIME", r) != null) task.setMaxTime((int) visitor.getObjectByColumnNameAndIndex("MAX_TIME", r));
//if (visitor.getObjectByColumnNameAndIndex("", r))
data.getTasks().add(task);
@@ -519,6 +612,19 @@ public class QuestService implements INetworkDispatch {
return qList;
}
public void loadEvents() {
FileVisitor<Path> fv = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
core.scriptService.callScript("scripts/quests/events/", file.getFileName().toString().replace(".py", ""), "setup", core);
return FileVisitResult.CONTINUE;
}
};
try { Files.walkFileTree(Paths.get("scripts/quests/events/"), fv); }
catch (IOException e) { e.printStackTrace(); }
}
// useful for custom quest scripts, and for the some of the datatables that are all screwed up
/*private QuestData parseXmlQuestData(Quest quest) {
try {
@@ -554,4 +660,8 @@ public class QuestService implements INetworkDispatch {
return template.replace(file, "shared_" + file);
}
@Override
public void shutdown() { }
}
+27
View File
@@ -65,6 +65,8 @@ public class QuestTask {
private int timeToComplete;
private int numRequired;
private int dropPercent;
private int minTime;
private int maxTime;
private long waitMarkerBuilding;
@@ -74,6 +76,7 @@ public class QuestTask {
private float waitMarkerX;
private float waitMarkerY;
private float waitMarkerZ;
private float radius;
public QuestTask() {}
@@ -451,4 +454,28 @@ public class QuestTask {
public void setRetrieveMenuText(String retrieveMenuText) {
this.retrieveMenuText = retrieveMenuText;
}
public int getMinTime() {
return minTime;
}
public void setMinTime(int minTime) {
this.minTime = minTime;
}
public int getMaxTime() {
return maxTime;
}
public void setMaxTime(int maxTime) {
this.maxTime = maxTime;
}
public float getRadius() {
return radius;
}
public void setRadius(float radius) {
this.radius = radius;
}
}