spellbook: Server-sided teleportation.
This commit is contained in:
parent
9a95da5bfb
commit
5c0ca00131
3 changed files with 37 additions and 1 deletions
|
@ -1409,6 +1409,7 @@ dclass ToontownMagicWordManager : DistributedObject {
|
|||
requestExecuteMagicWord(int8, int8, int16, uint32, string) airecv clsend;
|
||||
executeMagicWord(string, string, uint32[], blob, int8, int8, int16, uint32);
|
||||
generateResponse(string, string, blob, string, int8, int8, int16, uint32, string);
|
||||
teleportResponse(string loaderId, string whereId, string how, uint32 hoodId, uint32 zoneId, uint32 avId);
|
||||
};
|
||||
|
||||
struct weeklyCalendarHoliday {
|
||||
|
|
|
@ -259,3 +259,27 @@ class ToontownMagicWordManager(DistributedObject.DistributedObject):
|
|||
else:
|
||||
self.generateResponse(responseType="SuccessNoResp", magicWord=word, args=args, affectRange=affectRange,
|
||||
affectType=affectType, affectExtra=affectExtra, lastClickedAvId=lastClickedAvId)
|
||||
|
||||
def teleportResponse(self, loaderId, whereId, how, hoodId, zoneId, avId):
|
||||
# The AI tells the avatar to go somewhere. This is probably in
|
||||
# response to a magic word requesting transfer to a zone.
|
||||
|
||||
place = base.cr.playGame.getPlace()
|
||||
if loaderId == "":
|
||||
loaderId = ZoneUtil.getBranchLoaderName(zoneId)
|
||||
if whereId == "":
|
||||
whereId = ZoneUtil.getToonWhereName(zoneId)
|
||||
if how == "":
|
||||
how = "teleportIn"
|
||||
if hoodId == 0:
|
||||
hoodId = place.loader.hood.id
|
||||
if avId == 0:
|
||||
avId = -1
|
||||
place.fsm.forceTransition('teleportOut',
|
||||
[{"loader": loaderId,
|
||||
"where": whereId,
|
||||
"how": how,
|
||||
"hoodId": hoodId,
|
||||
"zoneId": zoneId,
|
||||
"shardId": None,
|
||||
"avId": avId}])
|
||||
|
|
|
@ -273,7 +273,15 @@ class ToontownMagicWordManagerAI(DistributedObjectAI.DistributedObjectAI):
|
|||
returnValue = command.executeWord()
|
||||
# If we have a return value, pass it over to the invoker
|
||||
if returnValue:
|
||||
self.generateResponse(avId=avId, responseType="Success", returnValue=returnValue)
|
||||
# If the word returns more than one values, assume that the word wants to teleport the target somewhere.
|
||||
if type(returnValue) is tuple:
|
||||
teleportingAvId = avId
|
||||
if len(returnValue) == 3:
|
||||
teleportingAvId = returnValue[1]
|
||||
self.sendTeleportResponse(teleportingAvId, *returnValue[-1])
|
||||
self.generateResponse(avId=avId, responseType="Success", returnValue=returnValue[0])
|
||||
else:
|
||||
self.generateResponse(avId=avId, responseType="Success", returnValue=returnValue)
|
||||
# Otherwise just throw a default response to them
|
||||
else:
|
||||
self.generateResponse(avId=avId, responseType="SuccessNoResp", magicWord=magicWord,
|
||||
|
@ -296,3 +304,6 @@ class ToontownMagicWordManagerAI(DistributedObjectAI.DistributedObjectAI):
|
|||
# Execute the Magic Word on the client, because it's a client-sided Magic Word
|
||||
self.sendUpdateToAvatarId(avId, "executeMagicWord", [word, commandName, targetIds, parsedArgList, affectRange,
|
||||
affectType, affectExtra, lastClickedAvId])
|
||||
|
||||
def sendTeleportResponse(self, avId, loaderId, whereId, how, hoodId, zoneId, targetAvId):
|
||||
self.sendUpdateToAvatarId(avId, "teleportResponse", [loaderId, whereId, how, hoodId, zoneId, targetAvId])
|
||||
|
|
Loading…
Reference in a new issue