Merge branch 'master' of gitlab.com:ToontownUnited/src

This commit is contained in:
Zach 2015-04-23 21:08:12 -05:00
commit 475e4f37f7
97 changed files with 296 additions and 3868 deletions

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -20,18 +20,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -22,18 +22,10 @@ uberdogs:
id: 4501 id: 4501
anonymous: false anonymous: false
- class: PlayerFriendsManager
id: 4687
anonymous: false
- class: TTUFriendsManager - class: TTUFriendsManager
id: 4666 id: 4666
anonymous: false anonymous: false
- class: TTCodeRedemptionMgr
id: 4695
anonymous: false
- class: GlobalPartyManager - class: GlobalPartyManager
id: 4477 id: 4477
anonymous: false anonymous: false

View file

@ -9,10 +9,6 @@ from otp.ai import MagicWordManager/AI
from otp.avatar import DistributedAvatar/AI/UD from otp.avatar import DistributedAvatar/AI/UD
from otp.avatar import DistributedPlayer/AI from otp.avatar import DistributedPlayer/AI
from otp.friends import FriendManager/AI from otp.friends import FriendManager/AI
from otp.friends import PlayerFriendsManager/UD
from otp.friends import GuildManager/AI/UD
from otp.friends import FriendInfo
from otp.friends import AvatarFriendInfo
from otp.distributed import DistributedDistrict/AI/UD from otp.distributed import DistributedDistrict/AI/UD
from otp.distributed import DistributedDirectory/AI from otp.distributed import DistributedDirectory/AI
from otp.chat import ChatAgent/UD from otp.chat import ChatAgent/UD
@ -179,11 +175,6 @@ dclass TalkPath_group {
string(0-400) chat, TalkModification [], uint8 flags) clsend airecv; string(0-400) chat, TalkModification [], uint8 flags) clsend airecv;
}; };
dclass TalkPath_account {
setTalkAccount(DoId toAcc, DoId fromAcc, string(0-256) avName,
string(0-400) msg, TalkModification [], uint8 flags) airecv clsend;
};
dclass AvatarHandle : TalkPath_whisper { dclass AvatarHandle : TalkPath_whisper {
}; };
@ -253,38 +244,6 @@ dclass FriendManager : DistributedObject {
submitSecretResponse(int8, int32); submitSecretResponse(int8, int32);
}; };
struct FriendInfo {
string avatarName;
uint32 avatarId;
string playerName;
uint8 onlineYesNo;
uint8 openChatEnabledYesNo;
uint8 openChatFriendshipYesNo;
uint8 wlChatEnabledYesNo;
string location;
string sublocation;
uint32 timestamp;
};
struct AvatarFriendInfo {
string avatarName;
string playerName;
uint32 playerId;
uint8 onlineYesNo;
uint8 openChatEnabledYesNo;
uint8 openChatFriendshipYesNo;
uint8 wlChatEnabledYesNo;
};
struct MemberInfo {
uint32 avatarId;
string avatarName;
uint8 avatarRank;
uint8 avatarOnline;
uint32 bandManagerId;
uint32 bandId;
};
struct leaderBoardRecordResponces { struct leaderBoardRecordResponces {
char found; char found;
uint32 id; uint32 id;
@ -313,85 +272,6 @@ dclass LeaderBoard : LeaderBoardReceiver {
getTopTenRespondTo(string, uint32); getTopTenRespondTo(string, uint32);
}; };
dclass GuildManager : DistributedObject, LeaderBoardReceiver, TalkPath_group {
online();
guildRejectInvite(uint32, uint32);
invitationFrom(uint32, string, uint32, string);
requestInvite(uint32) airecv clsend;
memberList() airecv clsend;
createGuild() airecv clsend;
acceptInvite() airecv clsend;
declineInvite() airecv clsend;
setWantName(string(0-256)) airecv clsend;
removeMember(uint32) airecv clsend;
changeRank(uint32, uint8) airecv clsend;
changeRankAvocate(uint32) airecv clsend;
statusRequest() airecv clsend;
requestLeaderboardTopTen() airecv clsend;
guildStatusUpdate(uint32, string(0-256), uint8);
guildNameReject(uint32);
guildNameChange(string, uint8);
receiveMember(MemberInfo);
receiveMembersDone();
guildAcceptInvite(uint32);
guildDeclineInvite(uint32);
updateRep(uint32, uint32);
leaderboardTopTen(leaderBoardRecord []);
recvAvatarOnline(uint32, string, uint32, uint32);
recvAvatarOffline(uint32, string);
sendChat(string(0-256), uint8, uint32) airecv clsend;
sendWLChat(string(0-256), uint8, uint32) airecv clsend;
sendSC(uint16) airecv clsend;
sendSCQuest(uint16, uint16, uint16) airecv clsend;
recvChat(uint32, string, uint8, uint32);
recvWLChat(uint32, string, uint8, uint32);
recvSC(uint32, uint16);
recvSCQuest(uint32, uint16, uint16, uint16);
sendTokenRequest() airecv clsend;
recvTokenGenerated(string);
recvTokenInviteValue(string, int8);
sendTokenForJoinRequest(string(0-256), string(0-256)) airecv clsend;
recvTokenRedeemMessage(string);
recvTokenRedeemedByPlayerMessage(string);
sendTokenRValue(string(0-256), int8) airecv clsend;
sendPermToken() airecv clsend;
sendNonPermTokenCount() airecv clsend;
recvPermToken(string);
recvNonPermTokenCount(uint8);
sendClearTokens(uint8) airecv clsend;
sendAvatarBandId(uint32, uint32, uint32);
recvMemberAdded(MemberInfo, uint32, string);
notifyGuildKicksMaxed();
recvMemberRemoved(uint32, uint32, string, string);
recvMemberUpdateName(uint32, string);
recvMemberUpdateRank(uint32, uint32, string, string, uint8, bool);
recvMemberUpdateBandId(uint32, uint32, uint32);
avatarOnline(uint32, uint16);
avatarOffline(uint32);
reflectTeleportQuery(uint32, uint32, uint32, uint32, uint32) clsend airecv;
teleportQuery(uint32, uint32, uint32, uint32, uint32);
reflectTeleportResponse(uint32, int8, uint32, uint32, uint32) clsend airecv;
teleportResponse(uint32, int8, uint32, uint32, uint32);
requestGuildMatesList(uint32, uint32, uint32);
updateAvatarName(uint32, string);
avatarDeleted(uint32);
};
dclass PlayerFriendsManager : DistributedObject, TalkPath_account {
requestInvite(uint32, uint32, uint8) airecv clsend;
invitationFrom(uint32, string);
retractInvite(uint32);
invitationResponse(uint32, uint16, uint32);
requestDecline(uint32, uint32) airecv clsend;
requestDeclineWithReason(uint32, uint32, uint32) airecv clsend;
requestRemove(uint32, uint32) airecv clsend;
secretResponse(string);
rejectSecret(string);
rejectUseSecret(string);
updatePlayerFriend(uint32, FriendInfo, uint8);
removePlayerFriend(uint32);
};
dclass CallbackObject { dclass CallbackObject {
callback(uint32, bool, uint8); callback(uint32, bool, uint8);
}; };
@ -477,7 +357,6 @@ from toontown.coghq import DistributedSellbotHQDoor/AI
from toontown.toon import DistributedNPCToonBase/AI from toontown.toon import DistributedNPCToonBase/AI
from toontown.toon import DistributedNPCToon/AI from toontown.toon import DistributedNPCToon/AI
from toontown.toon import DistributedSmartNPC/AI from toontown.toon import DistributedSmartNPC/AI
from toontown.toon import DistributedSmartNPC/AI
from toontown.toon import DistributedNPCSpecialQuestGiver/AI from toontown.toon import DistributedNPCSpecialQuestGiver/AI
from toontown.toon import DistributedNPCFlippyInToonHall/AI from toontown.toon import DistributedNPCFlippyInToonHall/AI
from toontown.toon import DistributedNPCScientist/AI from toontown.toon import DistributedNPCScientist/AI
@ -630,7 +509,6 @@ from toontown.parties import DistributedPartyJukeboxActivity/AI
from toontown.parties import DistributedPartyJukebox40Activity/AI from toontown.parties import DistributedPartyJukebox40Activity/AI
from toontown.parties import DistributedPartyValentineJukeboxActivity/AI from toontown.parties import DistributedPartyValentineJukeboxActivity/AI
from toontown.parties import DistributedPartyValentineJukebox40Activity/AI from toontown.parties import DistributedPartyValentineJukebox40Activity/AI
from toontown.friends import TTPlayerFriendsManager/UD
from toontown.friends import TTUFriendsManager/UD from toontown.friends import TTUFriendsManager/UD
from toontown.safezone import DistributedGolfKart/AI from toontown.safezone import DistributedGolfKart/AI
from toontown.safezone import DistributedPicnicBasket/AI from toontown.safezone import DistributedPicnicBasket/AI
@ -1794,7 +1672,7 @@ dclass NewsManager : DistributedObject {
}; };
dclass PurchaseManager : DistributedObject { dclass PurchaseManager : DistributedObject {
setPlayerIds(uint32, uint32, uint32, uint32) required broadcast ram; setAvIds(uint32, uint32, uint32, uint32) required broadcast ram;
setNewbieIds(uint32[]) required broadcast ram; setNewbieIds(uint32[]) required broadcast ram;
setMinigamePoints(uint8, uint8, uint8, uint8) required broadcast ram; setMinigamePoints(uint8, uint8, uint8, uint8) required broadcast ram;
setPlayerMoney(uint16, uint16, uint16, uint16) required broadcast ram; setPlayerMoney(uint16, uint16, uint16, uint16) required broadcast ram;
@ -1864,7 +1742,7 @@ dclass DistributedLargeBlobSender : DistributedObject {
dclass DistributedLevel : DistributedObject { dclass DistributedLevel : DistributedObject {
setLevelZoneId(uint32) required broadcast ram; setLevelZoneId(uint32) required broadcast ram;
setPlayerIds(uint32[]) required broadcast ram; setAvIds(uint32[]) required broadcast ram;
setEntranceId(uint8) required broadcast ram; setEntranceId(uint8) required broadcast ram;
setZoneIds(uint32[]) broadcast ram; setZoneIds(uint32[]) broadcast ram;
setStartTimestamp(int32) broadcast ram; setStartTimestamp(int32) broadcast ram;
@ -3080,9 +2958,6 @@ dclass DistributedVineGame : DistributedMinigame {
setVineSections(uint8[]) required broadcast ram; setVineSections(uint8[]) required broadcast ram;
}; };
dclass TTPlayerFriendsManager : PlayerFriendsManager {
};
dclass DistributedGolfKart : DistributedObject { dclass DistributedGolfKart : DistributedObject {
setState(string, int16) broadcast ram; setState(string, int16) broadcast ram;
fillSlot0(uint32) broadcast ram; fillSlot0(uint32) broadcast ram;

View file

@ -24,6 +24,7 @@ want-parties #t
want-cogdominiums #t want-cogdominiums #t
want-lawbot-cogdo #t want-lawbot-cogdo #t
want-achievements #f want-achievements #f
want-anim-props #f
# Chat: # Chat:
want-whitelist #f want-whitelist #f

View file

@ -11,6 +11,6 @@ def executeHttpRequest(url, agent, **extras):
except: except:
return None return None
print executeHttpRequest('register', 'Site', ip='69.69.69.69', username='dev', password='user', email='dev@dev.net', accesslevel=0) print executeHttpRequest('register', 'Site', ip='69.69.69.63', username='Swag', password='user', email='swag@79.net', accesslevel=0)
print executeHttpRequest('email', 'Site', email='dev@dev.net') print executeHttpRequest('email', 'Site', email='swag@79.net')
print executeHttpRequest('login', 'Player', username='dev', password='user') print executeHttpRequest('login', 'Site', username='Swag', password='user')

View file

@ -83,8 +83,6 @@ class AIBase:
self.waitShardDelete = self.config.GetBool('wait-shard-delete', 1) self.waitShardDelete = self.config.GetBool('wait-shard-delete', 1)
self.blinkTrolley = self.config.GetBool('blink-trolley', 0) self.blinkTrolley = self.config.GetBool('blink-trolley', 0)
self.fakeDistrictPopulations = self.config.GetBool('fake-district-populations', 0) self.fakeDistrictPopulations = self.config.GetBool('fake-district-populations', 0)
self.wantSwitchboard = self.config.GetBool('want-switchboard', 0)
self.wantSwitchboardHacks = self.config.GetBool('want-switchboard-hacks', 0)
self.GEMdemoWhisperRecipientDoid = self.config.GetBool('gem-demo-whisper-recipient-doid', 0) self.GEMdemoWhisperRecipientDoid = self.config.GetBool('gem-demo-whisper-recipient-doid', 0)
self.sqlAvailable = self.config.GetBool('sql-available', 1) self.sqlAvailable = self.config.GetBool('sql-available', 1)
self.backups = BackupManager.BackupManager( self.backups = BackupManager.BackupManager(

View file

@ -1,8 +0,0 @@
PIRATES_CARDGAME = 1
PIRATES_CREW = 2
PIRATES_GUILD = 3
PIRATES_FRIENDS = 4
PIRATES_BAND = 5
PIRATES_PVP_RESPAWN = 6
PIRATES_TREASUREMAP = 7
PIRATES_SHIPPVP = 8

View file

@ -1,10 +1,7 @@
from otp.distributed.OtpDoGlobals import * from otp.distributed.OtpDoGlobals import *
from direct.showbase.PythonUtil import invertDictLossless from direct.showbase.PythonUtil import invertDictLossless
OTP_SERVER_ROOT_DO_ID = 4007
CHANNEL_CLIENT_BROADCAST = 4014 CHANNEL_CLIENT_BROADCAST = 4014
BAD_CHANNEL_ID = 0 BAD_CHANNEL_ID = 0
BAD_ZONE_ID = 0
BAD_DO_ID = 0
CONTROL_MESSAGE = 4001 CONTROL_MESSAGE = 4001
CONTROL_SET_CHANNEL = 2001 CONTROL_SET_CHANNEL = 2001
CONTROL_REMOVE_CHANNEL = 2002 CONTROL_REMOVE_CHANNEL = 2002

View file

@ -169,19 +169,6 @@ class Avatar(Actor, ShadowCaster):
elif base.cr.getFriendFlags(self.doId) & OTPGlobals.FriendChat: elif base.cr.getFriendFlags(self.doId) & OTPGlobals.FriendChat:
self.understandable = 1 self.understandable = 1
self.setPlayerType(NametagGlobals.CCFreeChat) self.setPlayerType(NametagGlobals.CCFreeChat)
elif base.cr.playerFriendsManager.findPlayerIdFromAvId(self.doId) is not None:
playerInfo = base.cr.playerFriendsManager.findPlayerInfoFromAvId(self.doId)
if playerInfo.openChatFriendshipYesNo:
self.understandable = 1
nametagColor = NametagGlobals.NametagColors[NametagGlobals.CCFreeChat]
self.nametag.setNametagColor(nametagColor)
chatColor = NametagGlobals.ChatColors[NametagGlobals.CCFreeChat]
self.nametag.setChatColor(chatColor)
self.nametag.updateAll()
elif playerInfo.isUnderstandable():
self.understandable = 1
else:
self.understandable = 0
elif hasattr(base, 'localAvatar') and self.whitelistChatFlags & base.localAvatar.whitelistChatFlags: elif hasattr(base, 'localAvatar') and self.whitelistChatFlags & base.localAvatar.whitelistChatFlags:
self.understandable = 1 self.understandable = 1
else: else:

View file

@ -21,7 +21,7 @@ class AvatarPanel(DirectObject.DirectObject):
self.avName = avatar.getName() self.avName = avatar.getName()
else: else:
self.avatar = None self.avatar = None
self.avName = 'Player' self.avName = 'Avatar'
if hasattr(avatar, 'uniqueName'): if hasattr(avatar, 'uniqueName'):
self.avId = avatar.doId self.avId = avatar.doId
self.avDisableName = avatar.uniqueName('disable') self.avDisableName = avatar.uniqueName('disable')

View file

@ -17,12 +17,6 @@ from otp.speedchat import SCDecoders
from toontown.chat.ChatGlobals import * from toontown.chat.ChatGlobals import *
from toontown.chat.WhisperPopup import WhisperPopup from toontown.chat.WhisperPopup import WhisperPopup
if base.config.GetBool('want-chatfilter-hacks', 0):
from otp.switchboard import badwordpy
import os
badwordpy.init(os.environ.get('OTP') + '\\src\\switchboard\\', '')
class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBase, TelemetryLimited): class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBase, TelemetryLimited):
TeleportFailureTimeout = 60.0 TeleportFailureTimeout = 60.0
chatGarbler = ChatGarbler.ChatGarbler() chatGarbler = ChatGarbler.ChatGarbler()
@ -139,10 +133,7 @@ class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBa
def displayWhisper(self, fromId, chatString, whisperType): def displayWhisper(self, fromId, chatString, whisperType):
print 'Whisper type %s from %s: %s' % (whisperType, fromId, chatString) print 'Whisper type %s from %s: %s' % (whisperType, fromId, chatString)
def displayWhisperPlayer(self, playerId, chatString, whisperType): def whisperSCTo(self, msgIndex, sendToId):
print 'WhisperPlayer type %s from %s: %s' % (whisperType, playerId, chatString)
def whisperSCTo(self, msgIndex, sendToId, toPlayer):
messenger.send('wakeup') messenger.send('wakeup')
base.cr.ttuFriendsManager.d_whisperSCTo(sendToId, msgIndex) base.cr.ttuFriendsManager.d_whisperSCTo(sendToId, msgIndex)
@ -156,7 +147,7 @@ class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBa
base.talkAssistant.receiveAvatarWhisperSpeedChat(TalkAssistant.SPEEDCHAT_NORMAL, msgIndex, fromId) base.talkAssistant.receiveAvatarWhisperSpeedChat(TalkAssistant.SPEEDCHAT_NORMAL, msgIndex, fromId)
return return
def whisperSCCustomTo(self, msgIndex, sendToId, toPlayer): def whisperSCCustomTo(self, msgIndex, sendToId):
messenger.send('wakeup') messenger.send('wakeup')
base.cr.ttuFriendsManager.d_whisperSCCustomTo(sendToId, msgIndex) base.cr.ttuFriendsManager.d_whisperSCCustomTo(sendToId, msgIndex)
@ -178,7 +169,7 @@ class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBa
base.talkAssistant.receiveAvatarWhisperSpeedChat(TalkAssistant.SPEEDCHAT_CUSTOM, msgIndex, fromId) base.talkAssistant.receiveAvatarWhisperSpeedChat(TalkAssistant.SPEEDCHAT_CUSTOM, msgIndex, fromId)
return return
def whisperSCEmoteTo(self, emoteId, sendToId, toPlayer): def whisperSCEmoteTo(self, emoteId, sendToId):
messenger.send('wakeup') messenger.send('wakeup')
base.cr.ttuFriendsManager.d_whisperSCEmoteTo(sendToId, emoteId) base.cr.ttuFriendsManager.d_whisperSCEmoteTo(sendToId, emoteId)
@ -314,34 +305,22 @@ class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase.PlayerBa
base.cr.ttuFriendsManager.d_teleportQuery(sendToId) base.cr.ttuFriendsManager.d_teleportQuery(sendToId)
def teleportQuery(self, requesterId): def teleportQuery(self, requesterId):
teleportNotify.debug('receieved teleportQuery(%s)' % requesterId) avatar = base.cr.identifyFriend(requesterId)
avatar = base.cr.playerFriendsManager.identifyFriend(requesterId)
if avatar != None: if avatar is None:
teleportNotify.debug('avatar is not None') self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId)
if base.localAvatar.isIgnored(requesterId): elif base.localAvatar.isIgnored(requesterId):
self.d_teleportResponse(self.doId, 2, 0, 0, 0, sendToId=requesterId) self.d_teleportResponse(self.doId, 2, 0, 0, 0, sendToId=requesterId)
return elif hasattr(base, 'distributedParty') and ((base.distributedParty.partyInfo.isPrivate and requesterId not in base.distributedParty.inviteeIds) or base.distributedParty.isPartyEnding):
if hasattr(base, 'distributedParty'): self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId)
if base.distributedParty.partyInfo.isPrivate: elif self.__teleportAvailable and not self.ghostMode:
if requesterId not in base.distributedParty.inviteeIds: self.setSystemMessage(requesterId, OTPLocalizer.WhisperComingToVisit % avatar.getName())
teleportNotify.debug('avatar not in inviteeIds') messenger.send('teleportQuery', [avatar, self])
self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId) else:
return
if base.distributedParty.isPartyEnding:
teleportNotify.debug('party is ending')
self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId)
return
if self.__teleportAvailable and not self.ghostMode and base.config.GetBool('can-be-teleported-to', 1):
teleportNotify.debug('teleport initiation successful')
self.setSystemMessage(requesterId, OTPLocalizer.WhisperComingToVisit % avatar.getName())
messenger.send('teleportQuery', [avatar, self])
return
teleportNotify.debug('teleport initiation failed')
if self.failedTeleportMessageOk(requesterId): if self.failedTeleportMessageOk(requesterId):
self.setSystemMessage(requesterId, OTPLocalizer.WhisperFailedVisit % avatar.getName()) self.setSystemMessage(requesterId, OTPLocalizer.WhisperFailedVisit % avatar.getName())
teleportNotify.debug('sending try-again-later message')
self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId) self.d_teleportResponse(self.doId, 0, 0, 0, 0, sendToId=requesterId)
return
def failedTeleportMessageOk(self, fromId): def failedTeleportMessageOk(self, fromId):
now = globalClock.getFrameTime() now = globalClock.getFrameTime()

View file

@ -70,8 +70,6 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis
self.accept('friendOnline', self.__friendOnline) self.accept('friendOnline', self.__friendOnline)
self.accept('friendOffline', self.__friendOffline) self.accept('friendOffline', self.__friendOffline)
self.accept('clickedWhisper', self.clickedWhisper) self.accept('clickedWhisper', self.clickedWhisper)
self.accept('playerOnline', self.__playerOnline)
self.accept('playerOffline', self.__playerOffline)
self.sleepCallback = None self.sleepCallback = None
self.accept('wakeup', self.wakeUp) self.accept('wakeup', self.wakeUp)
self.jumpLandAnimFixTask = None self.jumpLandAnimFixTask = None
@ -917,22 +915,6 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis
whisper.manage(base.marginManager) whisper.manage(base.marginManager)
base.playSfx(sfx) base.playSfx(sfx)
def displayWhisperPlayer(self, fromId, chatString, whisperType):
sender = None
playerInfo = None
sfx = self.soundWhisper
playerInfo = base.cr.playerFriendsManager.playerId2Info.get(fromId, None)
if playerInfo == None:
return
senderName = playerInfo.playerName
if whisperType == WTNormal or whisperType == WTQuickTalker:
chatString = senderName + ': ' + chatString
whisper = WhisperPopup(chatString, OTPGlobals.getInterfaceFont(), whisperType)
if sender != None:
whisper.setClickable(senderName, fromId)
whisper.manage(base.marginManager)
base.playSfx(sfx)
def setAnimMultiplier(self, value): def setAnimMultiplier(self, value):
self.animMultiplier = value self.animMultiplier = value
@ -1128,7 +1110,6 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis
def startChat(self): def startChat(self):
self.chatMgr.start() self.chatMgr.start()
self.accept(OTPGlobals.WhisperIncomingEvent, self.handlePlayerFriendWhisper)
self.accept(OTPGlobals.ThinkPosHotkey, self.thinkPos) self.accept(OTPGlobals.ThinkPosHotkey, self.thinkPos)
self.accept(OTPGlobals.PrintCamPosHotkey, self.printCamPos) self.accept(OTPGlobals.PrintCamPosHotkey, self.printCamPos)
if self.__enableMarkerPlacement: if self.__enableMarkerPlacement:
@ -1190,36 +1171,16 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis
self.setSystemMessage(0, OTPLocalizer.WhisperFriendLoggedOut % friend.getName()) self.setSystemMessage(0, OTPLocalizer.WhisperFriendLoggedOut % friend.getName())
return return
def __playerOnline(self, playerId): def clickedWhisper(self, doId):
playerInfo = base.cr.playerFriendsManager.playerId2Info[playerId] friend = base.cr.identifyFriend(doId)
if playerInfo:
self.setSystemMessage(playerId, OTPLocalizer.WhisperPlayerOnline % (playerInfo.playerName, playerInfo.location)) if friend != None:
messenger.send('clickedNametag', [friend])
def __playerOffline(self, playerId): self.chatMgr.whisperTo(friend.getName(), doId)
playerInfo = base.cr.playerFriendsManager.playerId2Info[playerId]
if playerInfo:
self.setSystemMessage(playerId, OTPLocalizer.WhisperPlayerOffline % playerInfo.playerName)
def clickedWhisper(self, doId, isPlayer = None):
if not isPlayer:
friend = base.cr.identifyFriend(doId)
if friend != None:
messenger.send('clickedNametag', [friend])
self.chatMgr.whisperTo(friend.getName(), doId)
else:
friend = base.cr.playerFriendsManager.getFriendInfo(doId)
if friend:
messenger.send('clickedNametagPlayer', [None, doId])
self.chatMgr.whisperTo(friend.getName(), None, doId)
return
def d_setParent(self, parentToken): def d_setParent(self, parentToken):
DistributedSmoothNode.DistributedSmoothNode.d_setParent(self, parentToken) DistributedSmoothNode.DistributedSmoothNode.d_setParent(self, parentToken)
def handlePlayerFriendWhisper(self, playerId, charMessage):
print 'handlePlayerFriendWhisper'
self.displayWhisperPlayer(playerId, charMessage, WTNormal)
def canChat(self): def canChat(self):
return 0 return 0

View file

@ -1,31 +1,20 @@
import string import string
NORMAL_CHAT = 1 NORMAL_CHAT = 1
WHISPER_CHAT = 2 WHISPER_CHAT = 2
GUILD_CHAT = 3
CREW_CHAT = 4
SHIPPVP_CHAT = 5
ERROR_NONE = None ERROR_NONE = None
ERROR_NO_OPEN_CHAT = 1 ERROR_NO_OPEN_CHAT = 1
ERROR_NOT_FRIENDS = 2 ERROR_NOT_FRIENDS = 2
ERROR_NO_RECEIVER = 3 ERROR_NO_RECEIVER = 3
ERROR_NO_GUILD_CHAT = 4
ERROR_NO_CREW_CHAT = 5
ERROR_NO_SHIPPVP_CHAT = 6
TYPEDCHAT = 0 TYPEDCHAT = 0
SPEEDCHAT_NORMAL = 1 SPEEDCHAT_NORMAL = 1
SPEEDCHAT_EMOTE = 2 SPEEDCHAT_EMOTE = 2
SPEEDCHAT_CUSTOM = 3 SPEEDCHAT_CUSTOM = 3
SYSTEMCHAT = 4 SYSTEMCHAT = 4
GAMECHAT = 5 GAMECHAT = 5
GUILDCHAT = 6 PARTYCHAT = 6
PARTYCHAT = 7 SPEEDCHAT_QUEST = 7
SPEEDCHAT_QUEST = 8 FRIEND_UPDATE = 8
FRIEND_UPDATE = 9 AVATAR_UNAVAILABLE = 9
CREW_UPDATE = 10
GUILD_UPDATE = 11
AVATAR_UNAVAILABLE = 12
SHIPPVPCHAT = 13
GMCHAT = 14
ChatEvent = 'ChatEvent' ChatEvent = 'ChatEvent'
NormalChatEvent = 'NormalChatEvent' NormalChatEvent = 'NormalChatEvent'
SCChatEvent = 'SCChatEvent' SCChatEvent = 'SCChatEvent'

View file

@ -15,7 +15,6 @@ class ChatInputNormal(DirectObject.DirectObject):
self.whisperPos = Vec3(0.0, 0, 0.71) self.whisperPos = Vec3(0.0, 0, 0.71)
self.whisperAvatarName = None self.whisperAvatarName = None
self.whisperAvatarId = None self.whisperAvatarId = None
self.toPlayer = 0
wantHistory = 0 wantHistory = 0
if __dev__: if __dev__:
wantHistory = 1 wantHistory = 1
@ -39,11 +38,10 @@ class ChatInputNormal(DirectObject.DirectObject):
del self.whisperLabel del self.whisperLabel
del self.chatMgr del self.chatMgr
def activateByData(self, whisperAvatarId = None, toPlayer = 0): def activateByData(self, whisperAvatarId = None):
self.toPlayer = toPlayer
self.whisperAvatarId = whisperAvatarId self.whisperAvatarId = whisperAvatarId
if self.whisperAvatarId: if self.whisperAvatarId:
self.whisperAvatarName = base.talkAssistant.findName(self.whisperAvatarId, self.toPlayer) self.whisperAvatarName = base.talkAssistant.findAvatarName(self.whisperAvatarId)
self.chatFrame.setPos(self.whisperPos) self.chatFrame.setPos(self.whisperPos)
self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperAvatarName self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperAvatarName
self.whisperLabel.show() self.whisperLabel.show()
@ -76,12 +74,7 @@ class ChatInputNormal(DirectObject.DirectObject):
self.deactivate() self.deactivate()
self.chatMgr.fsm.request('mainMenu') self.chatMgr.fsm.request('mainMenu')
if text: if text:
if self.toPlayer: if self.whisperAvatarId:
if self.whisperAvatarId:
self.whisperAvatarName = None
self.whisperAvatarId = None
self.toPlayer = 0
elif self.whisperAvatarId:
self.chatMgr.sendWhisperString(text, self.whisperAvatarId) self.chatMgr.sendWhisperString(text, self.whisperAvatarId)
self.whisperAvatarName = None self.whisperAvatarName = None
self.whisperAvatarId = None self.whisperAvatarId = None
@ -89,7 +82,6 @@ class ChatInputNormal(DirectObject.DirectObject):
base.talkAssistant.sendOpenTalk(text) base.talkAssistant.sendOpenTalk(text)
if self.wantHistory: if self.wantHistory:
self.addToHistory(text) self.addToHistory(text)
return
def chatOverflow(self, overflowText): def chatOverflow(self, overflowText):
self.sendChat(self.chatEntry.get()) self.sendChat(self.chatEntry.get())

View file

@ -12,7 +12,6 @@ class ChatInputTyped(DirectObject.DirectObject):
def __init__(self, mainEntry = 0): def __init__(self, mainEntry = 0):
self.whisperName = None self.whisperName = None
self.whisperId = None self.whisperId = None
self.toPlayer = 0
self.mainEntry = mainEntry self.mainEntry = mainEntry
wantHistory = 0 wantHistory = 0
if __dev__: if __dev__:
@ -37,12 +36,11 @@ class ChatInputTyped(DirectObject.DirectObject):
del self.whisperLabel del self.whisperLabel
del self.chatMgr del self.chatMgr
def show(self, whisperId = None, toPlayer = 0): def show(self, whisperId = None):
self.toPlayer = toPlayer
self.whisperId = whisperId self.whisperId = whisperId
self.whisperName = None self.whisperName = None
if self.whisperId: if self.whisperId:
self.whisperName = base.talkAssistant.findName(whisperId, toPlayer) self.whisperName = base.talkAssistant.findAvatarName(whisperId)
if hasattr(self, 'whisperPos'): if hasattr(self, 'whisperPos'):
self.chatFrame.setPos(self.whisperPos) self.chatFrame.setPos(self.whisperPos)
self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperName self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperName
@ -82,14 +80,9 @@ class ChatInputTyped(DirectObject.DirectObject):
self.cancelButton.show() self.cancelButton.show()
self.typedChatButton.hide() self.typedChatButton.hide()
self.typedChatBar.hide() self.typedChatBar.hide()
if self.whisperId: if self.whisperId and not base.talkAssistant.checkWhisperTypedChatAvatar(self.whisperId):
if self.toPlayer: messenger.send('Chat-Failed avatar typed chat test')
if not base.talkAssistant.checkWhisperTypedChatPlayer(self.whisperId): self.deactivate()
messenger.send('Chat-Failed player typed chat test')
self.deactivate()
elif not base.talkAssistant.checkWhisperTypedChatAvatar(self.whisperId):
messenger.send('Chat-Failed avatar typed chat test')
self.deactivate()
def deactivate(self): def deactivate(self):
self.chatEntry.set('') self.chatEntry.set('')
@ -103,10 +96,7 @@ class ChatInputTyped(DirectObject.DirectObject):
def sendChat(self, text): def sendChat(self, text):
self.deactivate() self.deactivate()
if text: if text:
if self.toPlayer: if self.whisperId:
if self.whisperId:
pass
elif self.whisperId:
pass pass
else: else:
base.talkAssistant.sendOpenTalk(text) base.talkAssistant.sendOpenTalk(text)

View file

@ -91,11 +91,6 @@ class ChatInputWhiteListFrame(FSM.FSM, DirectFrame):
messenger.send('Chat-Failed open typed chat test') messenger.send('Chat-Failed open typed chat test')
self.notify.warning('Chat-Failed open typed chat test') self.notify.warning('Chat-Failed open typed chat test')
return None return None
elif request == 'PlayerWhisper':
if not base.talkAssistant.checkWhisperTypedChatPlayer(self.whisperId):
messenger.send('Chat-Failed player typed chat test')
self.notify.warning('Chat-Failed player typed chat test')
return None
elif request == 'AvatarWhisper': elif request == 'AvatarWhisper':
if not base.talkAssistant.checkWhisperTypedChatAvatar(self.whisperId): if not base.talkAssistant.checkWhisperTypedChatAvatar(self.whisperId):
messenger.send('Chat-Failed avatar typed chat test') messenger.send('Chat-Failed avatar typed chat test')
@ -117,29 +112,6 @@ class ChatInputWhiteListFrame(FSM.FSM, DirectFrame):
def exitAllChat(self): def exitAllChat(self):
pass pass
def enterGuildChat(self):
self['focus'] = 1
self.show()
def exitGuildChat(self):
pass
def enterCrewChat(self):
self['focus'] = 1
self.show()
def exitCrewChat(self):
pass
def enterPlayerWhisper(self):
self.tempText = self.chatEntry.get()
self.activate()
def exitPlayerWhisper(self):
self.chatEntry.set(self.tempText)
self.whisperId = None
return
def enterAvatarWhisper(self): def enterAvatarWhisper(self):
self.tempText = self.chatEntry.get() self.tempText = self.chatEntry.get()
self.activate() self.activate()
@ -149,18 +121,14 @@ class ChatInputWhiteListFrame(FSM.FSM, DirectFrame):
self.whisperId = None self.whisperId = None
return return
def activateByData(self, receiverId = None, toPlayer = 0): def activateByData(self, receiverId = None):
self.receiverId = receiverId self.receiverId = receiverId
self.toPlayer = toPlayer
result = None result = None
if not self.receiverId: if not self.receiverId:
result = self.requestMode('AllChat') result = self.requestMode('AllChat')
elif self.receiverId and not self.toPlayer: elif self.receiverId:
self.whisperId = receiverId self.whisperId = receiverId
result = self.requestMode('AvatarWhisper') result = self.requestMode('AvatarWhisper')
elif self.receiverId and self.toPlayer:
self.whisperId = receiverId
result = self.requestMode('PlayerWhisper')
return result return result
def activate(self): def activate(self):
@ -217,26 +185,16 @@ class ChatInputWhiteListFrame(FSM.FSM, DirectFrame):
self.sendChatByMode(text) self.sendChatByMode(text)
def sendChatByData(self, text): def sendChatByData(self, text):
if not self.receiverId: if self.receiverId:
base.talkAssistant.sendOpenTalk(text)
elif self.receiverId and not self.toPlayer:
base.talkAssistant.sendWhisperTalk(text, self.receiverId) base.talkAssistant.sendWhisperTalk(text, self.receiverId)
elif self.receiverId and self.toPlayer: else:
base.talkAssistant.sendAccountTalk(text, self.receiverId) base.talkAssistant.sendOpenTalk(text)
def sendChatByMode(self, text): def sendChatByMode(self, text):
state = self.getCurrentOrNextState() state = self.getCurrentOrNextState()
messenger.send('sentRegularChat') messenger.send('sentRegularChat')
if state == 'PlayerWhisper': if state == 'AvatarWhisper':
base.talkAssistant.sendPlayerWhisperWLChat(text, self.whisperId)
elif state == 'AvatarWhisper':
base.talkAssistant.sendAvatarWhisperWLChat(text, self.whisperId) base.talkAssistant.sendAvatarWhisperWLChat(text, self.whisperId)
elif state == 'GuildChat':
base.talkAssistant.sendAvatarGuildWLChat(text)
elif state == 'CrewChat':
base.talkAssistant.sendAvatarCrewWLChat(text)
elif len(text) > 0 and text[0] == '~':
base.talkAssistant.sendOpenTalk(text)
else: else:
base.talkAssistant.sendOpenTalk(text) base.talkAssistant.sendOpenTalk(text)

View file

@ -51,15 +51,12 @@ class ChatManager(DirectObject.DirectObject):
State.State('normalChat', self.enterNormalChat, self.exitNormalChat), State.State('normalChat', self.enterNormalChat, self.exitNormalChat),
State.State('whisper', self.enterWhisper, self.exitWhisper), State.State('whisper', self.enterWhisper, self.exitWhisper),
State.State('whisperChat', self.enterWhisperChat, self.exitWhisperChat), State.State('whisperChat', self.enterWhisperChat, self.exitWhisperChat),
State.State('whisperChatPlayer', self.enterWhisperChatPlayer, self.exitWhisperChatPlayer),
State.State('whisperSpeedChat', self.enterWhisperSpeedChat, self.exitWhisperSpeedChat), State.State('whisperSpeedChat', self.enterWhisperSpeedChat, self.exitWhisperSpeedChat),
State.State('whisperSpeedChatPlayer', self.enterWhisperSpeedChatPlayer, self.exitWhisperSpeedChatPlayer),
State.State('noSecretChatAtAll', self.enterNoSecretChatAtAll, self.exitNoSecretChatAtAll), State.State('noSecretChatAtAll', self.enterNoSecretChatAtAll, self.exitNoSecretChatAtAll),
State.State('noSecretChatAtAllAndNoWhitelist', self.enterNoSecretChatAtAllAndNoWhitelist, self.exitNoSecretChatAtAllAndNoWhitelist), State.State('noSecretChatAtAllAndNoWhitelist', self.enterNoSecretChatAtAllAndNoWhitelist, self.exitNoSecretChatAtAllAndNoWhitelist),
State.State('otherDialog', self.enterOtherDialog, self.exitOtherDialog), State.State('otherDialog', self.enterOtherDialog, self.exitOtherDialog),
State.State('whiteListOpenChat', self.enterWhiteListOpenChat, self.exitWhiteListOpenChat), State.State('whiteListOpenChat', self.enterWhiteListOpenChat, self.exitWhiteListOpenChat),
State.State('whiteListAvatarChat', self.enterWhiteListAvatarChat, self.exitWhiteListAvatarChat), State.State('whiteListAvatarChat', self.enterWhiteListAvatarChat, self.exitWhiteListAvatarChat)], 'off', 'off')
State.State('whiteListPlayerChat', self.enterWhiteListPlayerChat, self.exitWhiteListPlayerChat)], 'off', 'off')
self.fsm.enterInitialState() self.fsm.enterInitialState()
return return
@ -109,10 +106,6 @@ class ChatManager(DirectObject.DirectObject):
def sendChatString(self, message): def sendChatString(self, message):
chatFlags = CFSpeech | CFTimeout chatFlags = CFSpeech | CFTimeout
if base.cr.wantSwitchboardHacks:
from otp.switchboard import badwordpy
badwordpy.init('', '')
message = badwordpy.scrub(message)
if isThought(message): if isThought(message):
message = removeThoughtPrefix(message) message = removeThoughtPrefix(message)
chatFlags = CFThought chatFlags = CFThought
@ -125,29 +118,20 @@ class ChatManager(DirectObject.DirectObject):
def sendSCChatMessage(self, msgIndex): def sendSCChatMessage(self, msgIndex):
base.talkAssistant.sendOpenSpeedChat(1, msgIndex) base.talkAssistant.sendOpenSpeedChat(1, msgIndex)
def sendSCWhisperMessage(self, msgIndex, whisperAvatarId, toPlayer): def sendSCWhisperMessage(self, msgIndex, whisperAvatarId):
if toPlayer: base.talkAssistant.sendAvatarWhisperSpeedChat(1, msgIndex, whisperAvatarId)
base.talkAssistant.sendPlayerWhisperSpeedChat(1, msgIndex, whisperAvatarId)
else:
base.talkAssistant.sendAvatarWhisperSpeedChat(1, msgIndex, whisperAvatarId)
def sendSCCustomChatMessage(self, msgIndex): def sendSCCustomChatMessage(self, msgIndex):
base.talkAssistant.sendOpenSpeedChat(3, msgIndex) base.talkAssistant.sendOpenSpeedChat(3, msgIndex)
def sendSCCustomWhisperMessage(self, msgIndex, whisperAvatarId, toPlayer): def sendSCCustomWhisperMessage(self, msgIndex, whisperAvatarId):
if toPlayer: base.talkAssistant.sendAvatarWhisperSpeedChat(3, msgIndex, whisperAvatarId)
base.talkAssistant.sendPlayerWhisperSpeedChat(3, msgIndex, whisperAvatarId)
else:
base.talkAssistant.sendAvatarWhisperSpeedChat(3, msgIndex, whisperAvatarId)
def sendSCEmoteChatMessage(self, emoteId): def sendSCEmoteChatMessage(self, emoteId):
base.talkAssistant.sendOpenSpeedChat(2, emoteId) base.talkAssistant.sendOpenSpeedChat(2, emoteId)
def sendSCEmoteWhisperMessage(self, emoteId, whisperAvatarId, toPlayer): def sendSCEmoteWhisperMessage(self, emoteId, whisperAvatarId):
if toPlayer: base.talkAssistant.sendAvatarWhisperSpeedChat(2, emoteId, whisperAvatarId)
base.talkAssistant.sendPlayerWhisperSpeedChat(2, emoteId, whisperAvatarId)
else:
base.talkAssistant.sendAvatarWhisperSpeedChat(2, emoteId, whisperAvatarId)
def enterOff(self): def enterOff(self):
self.scButton.hide() self.scButton.hide()
@ -177,8 +161,8 @@ class ChatManager(DirectObject.DirectObject):
if self.wantBackgroundFocus: if self.wantBackgroundFocus:
self.chatInputNormal.chatEntry['backgroundFocus'] = 0 self.chatInputNormal.chatEntry['backgroundFocus'] = 0
def whisperTo(self, avatarName, avatarId, playerId = None): def whisperTo(self, avatarName, avatarId):
self.fsm.request('whisper', [avatarName, avatarId, playerId]) self.fsm.request('whisper', [avatarName, avatarId])
def noWhisper(self): def noWhisper(self):
self.fsm.request('mainMenu') self.fsm.request('mainMenu')
@ -198,54 +182,28 @@ class ChatManager(DirectObject.DirectObject):
def enterWhiteListAvatarChat(self, receiverId): def enterWhiteListAvatarChat(self, receiverId):
if self.wantBackgroundFocus: if self.wantBackgroundFocus:
self.chatInputNormal.chatEntry['backgroundFocus'] = 0 self.chatInputNormal.chatEntry['backgroundFocus'] = 0
base.localAvatar.chatMgr.chatInputWhiteList.activateByData(receiverId, 0) base.localAvatar.chatMgr.chatInputWhiteList.activateByData(receiverId)
def exitWhiteListAvatarChat(self): def exitWhiteListAvatarChat(self):
pass pass
def enterWhiteListPlayerChat(self, receiverId): def enterWhisper(self, avatarName, avatarId):
if self.wantBackgroundFocus: self.whisperScButton['extraArgs'] = [avatarName, avatarId]
self.chatInputNormal.chatEntry['backgroundFocus'] = 0 self.whisperButton['extraArgs'] = [avatarName, avatarId]
base.localAvatar.chatMgr.chatInputWhiteList.activateByData(receiverId, 1)
def exitWhiteListPlayerChat(self):
pass
def enterWhisper(self, avatarName, avatarId, playerId = None):
self.whisperScButton['extraArgs'] = [avatarName, avatarId, playerId]
self.whisperButton['extraArgs'] = [avatarName, avatarId, playerId]
playerName = None
chatToToon = 1
online = 0 online = 0
if avatarId in self.cr.doId2do: if avatarId in self.cr.doId2do:
online = 1 online = 1
elif self.cr.isFriend(avatarId): elif self.cr.isFriend(avatarId):
online = self.cr.isFriendOnline(avatarId) online = self.cr.isFriendOnline(avatarId)
hasManager = hasattr(base.cr, 'playerFriendsManager')
if hasManager:
if base.cr.playerFriendsManager.askAvatarOnline(avatarId):
online = 1
avatarUnderstandable = 0 avatarUnderstandable = 0
playerUnderstandable = 0
av = None av = None
if avatarId: if avatarId:
av = self.cr.identifyAvatar(avatarId) av = self.cr.identifyAvatar(avatarId)
if av != None: if av != None:
avatarUnderstandable = av.isUnderstandable() avatarUnderstandable = av.isUnderstandable()
if playerId: chatName = avatarName
if playerId in base.cr.playerFriendsManager.playerId2Info:
playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
playerName = playerInfo.playerName
online = 1
playerUnderstandable = playerInfo.understandableYesNo
if playerUnderstandable or not avatarId:
chatToToon = 0
if chatToToon:
chatName = avatarName
else:
chatName = playerName
normalButtonObscured, scButtonObscured = self.isObscured() normalButtonObscured, scButtonObscured = self.isObscured()
if (avatarUnderstandable or playerUnderstandable) and online and not normalButtonObscured: if avatarUnderstandable and online and not normalButtonObscured:
self.whisperButton['state'] = 'normal' self.whisperButton['state'] = 'normal'
self.enablewhisperButton() self.enablewhisperButton()
else: else:
@ -261,16 +219,10 @@ class ChatManager(DirectObject.DirectObject):
self.changeFrameText(OTPLocalizer.ChatManagerWhisperOffline % chatName) self.changeFrameText(OTPLocalizer.ChatManagerWhisperOffline % chatName)
self.whisperFrame.show() self.whisperFrame.show()
self.refreshWhisperFrame() self.refreshWhisperFrame()
if avatarUnderstandable or playerUnderstandable: if avatarUnderstandable and online:
if playerId and not chatToToon: if self.wantBackgroundFocus:
if self.wantBackgroundFocus: self.chatInputNormal.chatEntry['backgroundFocus'] = 1
self.chatInputNormal.chatEntry['backgroundFocus'] = 1 self.acceptOnce('enterNormalChat', self.fsm.request, ['whisperChat', [avatarName, avatarId]])
self.acceptOnce('enterNormalChat', self.fsm.request, ['whisperChatPlayer', [avatarName, playerId]])
elif online and chatToToon:
if self.wantBackgroundFocus:
self.chatInputNormal.chatEntry['backgroundFocus'] = 1
self.acceptOnce('enterNormalChat', self.fsm.request, ['whisperChat', [avatarName, avatarId]])
return
def disablewhisperButton(self): def disablewhisperButton(self):
pass pass
@ -299,16 +251,6 @@ class ChatManager(DirectObject.DirectObject):
self.whisperFrame.hide() self.whisperFrame.hide()
self.chatInputSpeedChat.hide() self.chatInputSpeedChat.hide()
def enterWhisperSpeedChatPlayer(self, playerId):
self.whisperFrame.show()
if self.wantBackgroundFocus:
self.chatInputNormal.chatEntry['backgroundFocus'] = 0
self.chatInputSpeedChat.show(playerId, 1)
def exitWhisperSpeedChatPlayer(self):
self.whisperFrame.hide()
self.chatInputSpeedChat.hide()
def enterWhisperChat(self, avatarName, avatarId): def enterWhisperChat(self, avatarName, avatarId):
result = self.chatInputNormal.activateByData(avatarId) result = self.chatInputNormal.activateByData(avatarId)
return result return result
@ -316,16 +258,6 @@ class ChatManager(DirectObject.DirectObject):
def exitWhisperChat(self): def exitWhisperChat(self):
self.chatInputNormal.deactivate() self.chatInputNormal.deactivate()
def enterWhisperChatPlayer(self, avatarName, playerId):
playerInfo = base.cr.playerFriendsManager.getFriendInfo(playerId)
if playerInfo:
avatarName = playerInfo.playerName
result = self.chatInputNormal.activateByData(playerId, 1)
return result
def exitWhisperChatPlayer(self):
self.chatInputNormal.deactivate()
def enterSpeedChat(self): def enterSpeedChat(self):
messenger.send('enterSpeedChat') messenger.send('enterSpeedChat')
if not self.__scObscured: if not self.__scObscured:

View file

@ -30,7 +30,6 @@ class TalkAssistant(DirectObject.DirectObject):
self.floodThreshold = 10.0 self.floodThreshold = 10.0
self.useWhiteListFilter = base.config.GetBool('white-list-filter-openchat', 0) self.useWhiteListFilter = base.config.GetBool('white-list-filter-openchat', 0)
self.lastWhisperDoId = None self.lastWhisperDoId = None
self.lastWhisperPlayerId = None
self.lastWhisper = None self.lastWhisper = None
self.SCDecoder = SCDecoders self.SCDecoder = SCDecoders
self.whiteList = TTWhiteList() self.whiteList = TTWhiteList()
@ -40,12 +39,10 @@ class TalkAssistant(DirectObject.DirectObject):
self.historyComplete = [] self.historyComplete = []
self.historyOpen = [] self.historyOpen = []
self.historyUpdates = [] self.historyUpdates = []
self.historyGuild = []
self.historyByDoId = {} self.historyByDoId = {}
self.historyByDISLId = {} self.historyByDISLId = {}
self.floodDataByDoId = {} self.floodDataByDoId = {}
self.spamDictByDoId = {} self.spamDictByDoId = {}
self.labelGuild = OTPLocalizer.TalkGuild
self.handleDict = {} self.handleDict = {}
self.messageCount = 0 self.messageCount = 0
self.shownWhiteListWarning = 0 self.shownWhiteListWarning = 0
@ -131,9 +128,6 @@ class TalkAssistant(DirectObject.DirectObject):
return 0 return 0
def addToHistoryDISLId(self, message, dISLId, scrubbed = 0): def addToHistoryDISLId(self, message, dISLId, scrubbed = 0):
if message.getTalkType() == TALK_ACCOUNT:
self.lastWhisperPlayerId = dISLId
self.lastWhisper = self.lastWhisperPlayerId
if dISLId not in self.historyByDISLId: if dISLId not in self.historyByDISLId:
self.historyByDISLId[dISLId] = [] self.historyByDISLId[dISLId] = []
self.historyByDISLId[dISLId].append(message) self.historyByDISLId[dISLId].append(message)
@ -151,25 +145,10 @@ class TalkAssistant(DirectObject.DirectObject):
def stampTime(self): def stampTime(self):
return globalClock.getRealTime() - self.zeroTimeGame return globalClock.getRealTime() - self.zeroTimeGame
def findName(self, id, isPlayer = 0):
if isPlayer:
return self.findPlayerName(id)
else:
return self.findAvatarName(id)
def findAvatarName(self, id): def findAvatarName(self, id):
info = base.cr.identifyAvatar(id) info = base.cr.identifyAvatar(id)
if info:
return info.getName() return info.getName() if info else ''
else:
return ''
def findPlayerName(self, id):
info = base.cr.playerFriendsManager.getFriendInfo(id)
if info:
return info.playerName
else:
return ''
def whiteListFilterMessage(self, text): def whiteListFilterMessage(self, text):
if not self.useWhiteListFilter: if not self.useWhiteListFilter:
@ -217,21 +196,6 @@ class TalkAssistant(DirectObject.DirectObject):
else: else:
return message return message
def fillWithTestText(self):
hold = self.floodThreshold
self.floodThreshold = 1000.0
self.receiveOpenTalk(1001, 'Bob the Ghost', None, None, 'Hello from the machine')
self.receiveOpenTalk(1001, 'Bob the Ghost', None, None, 'More text for ya!')
self.receiveOpenTalk(1001, 'Bob the Ghost', None, None, 'Hope this makes life easier')
self.receiveOpenTalk(1002, 'Doug the Spirit', None, None, 'Now we need some longer text that will spill over onto two lines')
self.receiveOpenTalk(1002, 'Doug the Spirit', None, None, 'Maybe I will tell you')
self.receiveOpenTalk(1001, 'Bob the Ghost', None, None, 'If you are seeing this text it is because you are cool')
self.receiveOpenTalk(1002, 'Doug the Spirit', None, None, "That's right, there is no need to call tech support")
self.receiveOpenTalk(localAvatar.doId, localAvatar.getName, None, None, "Okay I won't call tech support, because I am cool")
self.receiveGMTalk(1003, 'God of Text', None, None, 'Good because I have seen it already')
self.floodThreshold = hold
return
def printHistoryComplete(self): def printHistoryComplete(self):
print 'HISTORY COMPLETE' print 'HISTORY COMPLETE'
for message in self.historyComplete: for message in self.historyComplete:
@ -266,10 +230,6 @@ class TalkAssistant(DirectObject.DirectObject):
if remoteAvatarOrHandleOrInfo and hasattr(remoteAvatarOrHandleOrInfo, 'isUnderstandable'): if remoteAvatarOrHandleOrInfo and hasattr(remoteAvatarOrHandleOrInfo, 'isUnderstandable'):
if remoteAvatarOrHandleOrInfo.isUnderstandable(): if remoteAvatarOrHandleOrInfo.isUnderstandable():
return True return True
info = base.cr.playerFriendsManager.findPlayerInfoFromAvId(avatarId)
if info:
if info.understandableYesNo:
return True
if base.cr.getFriendFlags(avatarId) & OTPGlobals.FriendChat: if base.cr.getFriendFlags(avatarId) & OTPGlobals.FriendChat:
return True return True
return False return False
@ -277,46 +237,17 @@ class TalkAssistant(DirectObject.DirectObject):
def checkWhisperSpeedChatAvatar(self, avatarId): def checkWhisperSpeedChatAvatar(self, avatarId):
return True return True
def checkWhisperTypedChatPlayer(self, playerId):
info = base.cr.playerFriendsManager.getFriendInfo(playerId)
if info:
if info.understandableYesNo:
return True
return False
def checkWhisperSpeedChatPlayer(self, playerId):
if base.cr.playerFriendsManager.isPlayerFriend(playerId):
return True
return False
def checkOpenSpeedChat(self): def checkOpenSpeedChat(self):
return True return True
def checkWhisperSpeedChatAvatar(self, avatarId): def checkWhisperSpeedChatAvatar(self, avatarId):
return True return True
def checkWhisperSpeedChatPlayer(self, playerId):
if base.cr.playerFriendsManager.isPlayerFriend(playerId):
return True
return False
def checkGuildTypedChat(self):
if localAvatar.guildId:
return True
return False
def checkGuildSpeedChat(self):
if localAvatar.guildId:
return True
return False
def receiveOpenTalk(self, senderAvId, avatarName, accountId, accountName, message, scrubbed = 0): def receiveOpenTalk(self, senderAvId, avatarName, accountId, accountName, message, scrubbed = 0):
error = None error = None
if not avatarName and senderAvId: if not avatarName and senderAvId:
localAvatar.sendUpdate('logSuspiciousEvent', ['receiveOpenTalk: invalid avatar name (%s)' % senderAvId]) localAvatar.sendUpdate('logSuspiciousEvent', ['receiveOpenTalk: invalid avatar name (%s)' % senderAvId])
avatarName = self.findAvatarName(senderAvId) avatarName = self.findAvatarName(senderAvId)
if not accountName and accountId:
accountName = self.findPlayerName(accountId)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, senderAvId, avatarName, accountId, accountName, None, None, None, None, TALK_OPEN, None) newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, senderAvId, avatarName, accountId, accountName, None, None, None, None, TALK_OPEN, None)
if senderAvId != localAvatar.doId: if senderAvId != localAvatar.doId:
self.addHandle(senderAvId, newMessage) self.addHandle(senderAvId, newMessage)
@ -343,8 +274,6 @@ class TalkAssistant(DirectObject.DirectObject):
error = None error = None
if not avatarName and avatarId: if not avatarName and avatarId:
avatarName = self.findAvatarName(avatarId) avatarName = self.findAvatarName(avatarId)
if not accountName and accountId:
accountName = self.findPlayerName(accountId)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, toId, toName, None, None, TALK_WHISPER, None) newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, toId, toName, None, None, TALK_WHISPER, None)
if avatarId == localAvatar.doId: if avatarId == localAvatar.doId:
self.addHandle(toId, newMessage) self.addHandle(toId, newMessage)
@ -358,65 +287,10 @@ class TalkAssistant(DirectObject.DirectObject):
messenger.send('NewOpenMessage', [newMessage]) messenger.send('NewOpenMessage', [newMessage])
return error return error
def receiveAccountTalk(self, avatarId, avatarName, accountId, accountName, toId, toName, message, scrubbed = 0):
if not accountName and base.cr.playerFriendsManager.playerId2Info.get(accountId):
accountName = base.cr.playerFriendsManager.playerId2Info.get(accountId).playerName
error = None
if not avatarName and avatarId:
avatarName = self.findAvatarName(avatarId)
if not accountName and accountId:
accountName = self.findPlayerName(accountId)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, None, None, toId, toName, TALK_ACCOUNT, None)
self.historyComplete.append(newMessage)
if avatarId:
self.addToHistoryDoId(newMessage, avatarId, scrubbed)
if accountId:
self.addToHistoryDISLId(newMessage, accountId, scrubbed)
messenger.send('NewOpenMessage', [newMessage])
return error
def receiveGuildTalk(self, senderAvId, fromAC, avatarName, message, scrubbed = 0):
error = None
if not self.isThought(message):
accountName = self.findName(fromAC, 1)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, senderAvId, avatarName, fromAC, accountName, None, None, None, None, TALK_GUILD, None)
reject = self.addToHistoryDoId(newMessage, senderAvId)
if reject == 1:
newMessage.setBody(OTPLocalizer.AntiSpamInChat)
if reject != 2:
isSpam = self.spamDictByDoId.get(senderAvId) and reject
if not isSpam:
self.historyComplete.append(newMessage)
self.historyGuild.append(newMessage)
messenger.send('NewOpenMessage', [newMessage])
if newMessage.getBody() == OTPLocalizer.AntiSpamInChat:
self.spamDictByDoId[senderAvId] = 1
else:
self.spamDictByDoId[senderAvId] = 0
return error
def receiveGMTalk(self, avatarId, avatarName, accountId, accountName, message, scrubbed = 0):
error = None
if not avatarName and avatarId:
avatarName = self.findAvatarName(avatarId)
if not accountName and accountId:
accountName = self.findPlayerName(accountId)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, None, None, None, None, TALK_GM, None)
self.historyComplete.append(newMessage)
self.historyOpen.append(newMessage)
if avatarId:
self.addToHistoryDoId(newMessage, avatarId)
if accountId:
self.addToHistoryDISLId(newMessage, accountId)
messenger.send('NewOpenMessage', [newMessage])
return error
def receiveThought(self, avatarId, avatarName, accountId, accountName, message, scrubbed = 0): def receiveThought(self, avatarId, avatarName, accountId, accountName, message, scrubbed = 0):
error = None error = None
if not avatarName and avatarId: if not avatarName and avatarId:
avatarName = self.findAvatarName(avatarId) avatarName = self.findAvatarName(avatarId)
if not accountName and accountId:
accountName = self.findPlayerName(accountId)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, None, None, None, None, AVATAR_THOUGHT, None) newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, avatarId, avatarName, accountId, accountName, None, None, None, None, AVATAR_THOUGHT, None)
if avatarId != localAvatar.doId: if avatarId != localAvatar.doId:
self.addHandle(avatarId, newMessage) self.addHandle(avatarId, newMessage)
@ -451,32 +325,6 @@ class TalkAssistant(DirectObject.DirectObject):
messenger.send('NewOpenMessage', [newMessage]) messenger.send('NewOpenMessage', [newMessage])
return error return error
def receiveDeveloperMessage(self, message):
error = None
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, None, None, None, None, localAvatar.doId, localAvatar.getName(), localAvatar.DISLid, localAvatar.DISLname, INFO_DEV, None)
self.historyComplete.append(newMessage)
self.historyUpdates.append(newMessage)
messenger.send('NewOpenMessage', [newMessage])
return error
def receiveGuildMessage(self, message, senderAvId, senderName):
error = None
if not self.isThought(message):
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, senderAvId, senderName, None, None, None, None, None, None, TALK_GUILD, None)
self.historyComplete.append(newMessage)
self.historyGuild.append(newMessage)
messenger.send('NewOpenMessage', [newMessage])
return error
def receiveGuildUpdateMessage(self, message, senderId, senderName, receiverId, receiverName, extraInfo = None):
error = None
if not self.isThought(message):
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, senderId, senderName, None, None, receiverId, receiverName, None, None, INFO_GUILD, extraInfo)
self.historyComplete.append(newMessage)
self.historyGuild.append(newMessage)
messenger.send('NewOpenMessage', [newMessage])
return error
def receiveFriendUpdate(self, friendId, friendName, isOnline): def receiveFriendUpdate(self, friendId, friendName, isOnline):
if isOnline: if isOnline:
onlineMessage = OTPLocalizer.FriendOnline onlineMessage = OTPLocalizer.FriendOnline
@ -500,24 +348,10 @@ class TalkAssistant(DirectObject.DirectObject):
messenger.send('NewOpenMessage', [newMessage]) messenger.send('NewOpenMessage', [newMessage])
return return
def receiveGuildUpdate(self, memberId, memberName, isOnline):
if base.cr.identifyFriend(memberId) is None:
if isOnline:
onlineMessage = OTPLocalizer.GuildMemberOnline
else:
onlineMessage = OTPLocalizer.GuildMemberOffline
newMessage = TalkMessage(self.countMessage(), self.stampTime(), onlineMessage, memberId, memberName, None, None, None, None, None, None, UPDATE_GUILD, None)
self.addHandle(memberId, newMessage)
self.historyComplete.append(newMessage)
self.historyUpdates.append(newMessage)
self.historyGuild.append(newMessage)
messenger.send('NewOpenMessage', [newMessage])
return
def receiveOpenSpeedChat(self, type, messageIndex, senderAvId, name = None): def receiveOpenSpeedChat(self, type, messageIndex, senderAvId, name = None):
error = None error = None
if not name and senderAvId: if not name and senderAvId:
name = self.findName(senderAvId, 0) name = self.findAvatarName(senderAvId)
if type == SPEEDCHAT_NORMAL: if type == SPEEDCHAT_NORMAL:
message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex) message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex)
elif type == SPEEDCHAT_EMOTE: elif type == SPEEDCHAT_EMOTE:
@ -536,7 +370,7 @@ class TalkAssistant(DirectObject.DirectObject):
def receiveAvatarWhisperSpeedChat(self, type, messageIndex, senderAvId, name = None): def receiveAvatarWhisperSpeedChat(self, type, messageIndex, senderAvId, name = None):
error = None error = None
if not name and senderAvId: if not name and senderAvId:
name = self.findName(senderAvId, 0) name = self.findAvatarName(senderAvId)
if type == SPEEDCHAT_NORMAL: if type == SPEEDCHAT_NORMAL:
message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex) message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex)
elif type == SPEEDCHAT_EMOTE: elif type == SPEEDCHAT_EMOTE:
@ -550,23 +384,6 @@ class TalkAssistant(DirectObject.DirectObject):
messenger.send('NewOpenMessage', [newMessage]) messenger.send('NewOpenMessage', [newMessage])
return error return error
def receivePlayerWhisperSpeedChat(self, type, messageIndex, senderAvId, name = None):
error = None
if not name and senderAvId:
name = self.findName(senderAvId, 1)
if type == SPEEDCHAT_NORMAL:
message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex)
elif type == SPEEDCHAT_EMOTE:
message = self.SCDecoder.decodeSCEmoteWhisperMsg(messageIndex, name)
elif type == SPEEDCHAT_CUSTOM:
message = self.SCDecoder.decodeSCCustomMsg(messageIndex)
newMessage = TalkMessage(self.countMessage(), self.stampTime(), message, None, None, senderAvId, name, localAvatar.doId, localAvatar.getName(), localAvatar.DISLid, localAvatar.DISLname, TALK_WHISPER, None)
self.historyComplete.append(newMessage)
self.historyOpen.append(newMessage)
self.addToHistoryDISLId(newMessage, senderAvId)
messenger.send('NewOpenMessage', [newMessage])
return error
def sendOpenTalk(self, message): def sendOpenTalk(self, message):
error = None error = None
doId = base.localAvatar.doId doId = base.localAvatar.doId
@ -577,7 +394,6 @@ class TalkAssistant(DirectObject.DirectObject):
tyler.sendUpdate('talkMessage', [doId, message]) tyler.sendUpdate('talkMessage', [doId, message])
if base.cr.wantMagicWords and len(message) > 0 and message[0] == '~': if base.cr.wantMagicWords and len(message) > 0 and message[0] == '~':
messenger.send('magicWord', [message]) messenger.send('magicWord', [message])
self.receiveDeveloperMessage(message)
else: else:
chatFlags = CFSpeech | CFTimeout chatFlags = CFSpeech | CFTimeout
if self.isThought(message): if self.isThought(message):
@ -604,25 +420,6 @@ class TalkAssistant(DirectObject.DirectObject):
base.cr.ttuFriendsManager.sendUpdate('sendTalkWhisper', [receiverAvId, message]) base.cr.ttuFriendsManager.sendUpdate('sendTalkWhisper', [receiverAvId, message])
def sendAccountTalk(self, message, receiverAccount):
error = None
base.cr.playerFriendsManager.sendUpdate('setTalkAccount', [receiverAccount,
0,
'',
message,
[],
0])
return error
def sendGuildTalk(self, message):
error = None
if self.checkGuildTypedChat():
base.cr.guildManager.sendTalk(message)
else:
print 'Guild chat error'
error = ERROR_NO_GUILD_CHAT
return error
def sendOpenSpeedChat(self, type, messageIndex): def sendOpenSpeedChat(self, type, messageIndex):
error = None error = None
if type == SPEEDCHAT_NORMAL: if type == SPEEDCHAT_NORMAL:
@ -642,13 +439,13 @@ class TalkAssistant(DirectObject.DirectObject):
def sendAvatarWhisperSpeedChat(self, type, messageIndex, receiverId): def sendAvatarWhisperSpeedChat(self, type, messageIndex, receiverId):
error = None error = None
if type == SPEEDCHAT_NORMAL: if type == SPEEDCHAT_NORMAL:
base.localAvatar.whisperSCTo(messageIndex, receiverId, 0) base.localAvatar.whisperSCTo(messageIndex, receiverId)
message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex) message = self.SCDecoder.decodeSCStaticTextMsg(messageIndex)
elif type == SPEEDCHAT_EMOTE: elif type == SPEEDCHAT_EMOTE:
base.localAvatar.whisperSCEmoteTo(messageIndex, receiverId, 0) base.localAvatar.whisperSCEmoteTo(messageIndex, receiverId)
message = self.SCDecoder.decodeSCEmoteWhisperMsg(messageIndex, localAvatar.getName()) message = self.SCDecoder.decodeSCEmoteWhisperMsg(messageIndex, localAvatar.getName())
elif type == SPEEDCHAT_CUSTOM: elif type == SPEEDCHAT_CUSTOM:
base.localAvatar.whisperSCCustomTo(messageIndex, receiverId, 0) base.localAvatar.whisperSCCustomTo(messageIndex, receiverId)
message = self.SCDecoder.decodeSCCustomMsg(messageIndex) message = self.SCDecoder.decodeSCCustomMsg(messageIndex)
if self.logWhispers: if self.logWhispers:
avatarName = None avatarName = None
@ -660,25 +457,4 @@ class TalkAssistant(DirectObject.DirectObject):
self.historyComplete.append(newMessage) self.historyComplete.append(newMessage)
self.addToHistoryDoId(newMessage, localAvatar.doId) self.addToHistoryDoId(newMessage, localAvatar.doId)
messenger.send('NewOpenMessage', [newMessage]) messenger.send('NewOpenMessage', [newMessage])
return error return error
def sendPlayerWhisperSpeedChat(self, type, messageIndex, receiverId):
# TODO: Remove Player system
return None
def sendGuildSpeedChat(self, type, msgIndex):
error = None
if self.checkGuildSpeedChat():
base.cr.guildManager.sendSC(msgIndex)
else:
print 'Guild Speedchat error'
error = ERROR_NO_GUILD_CHAT
return error
def getWhisperReplyId(self):
if self.lastWhisper:
toPlayer = 0
if self.lastWhisper == self.lastWhisperPlayerId:
toPlayer = 1
return (self.lastWhisper, toPlayer)
return (0, 0)

View file

@ -1,19 +1,13 @@
TALK_NONE = 0 TALK_NONE = 0
TALK_OPEN = 1 TALK_OPEN = 1
TALK_WHISPER = 2 TALK_WHISPER = 2
TALK_ACCOUNT = 13 TALK_PARTY = 3
TALK_GM = 14 TALK_PVP = 4
AVATAR_THOUGHT = 16 UPDATE_FRIEND = 5
TALK_GUILD = 3 UPDATE_PARTY = 6
TALK_PARTY = 4 UPDATE_PVP = 7
TALK_PVP = 5 INFO_SYSTEM = 8
UPDATE_GUILD = 6 INFO_GAME = 9
UPDATE_FRIEND = 7 INFO_AVATAR_UNAVAILABLE = 10
UPDATE_PARTY = 8 INFO_OPEN = 11
UPDATE_PVP = 9 AVATAR_THOUGHT = 12
INFO_SYSTEM = 10
INFO_GAME = 11
INFO_AVATAR_UNAVAILABLE = 12
INFO_OPEN = 15
INFO_DEV = 17
INFO_GUILD = 18

View file

@ -2,14 +2,14 @@
from pandac.PandaModules import * from pandac.PandaModules import *
hashVal = 2712424547L hashVal = 3070829445L
from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot
from toontown.golf import DistributedPhysicsWorld, DistributedGolfHole, DistributedGolfCourse from toontown.golf import DistributedPhysicsWorld, DistributedGolfHole, DistributedGolfCourse
from toontown.building import DistributedAnimatedProp, DistributedTrophyMgr, DistributedBuilding, DistributedBuildingQueryMgr, DistributedToonInterior, DistributedToonHallInterior, DistributedSuitInterior, DistributedHQInterior, DistributedGagshopInterior, DistributedPetshopInterior, DistributedKartShopInterior, DistributedLibraryInterior, DistributedDoor, DistributedKnockKnockDoor, DistributedElevator, DistributedElevatorFSM, DistributedElevatorExt, DistributedElevatorInt, DistributedElevatorFloor, DistributedBossElevator, DistributedVPElevator, DistributedCFOElevator, DistributedCJElevator, DistributedBBElevator, DistributedBoardingParty, DistributedTutorialInterior, DistributedClubElevator from toontown.building import DistributedAnimatedProp, DistributedTrophyMgr, DistributedBuilding, DistributedBuildingQueryMgr, DistributedToonInterior, DistributedToonHallInterior, DistributedSuitInterior, DistributedHQInterior, DistributedGagshopInterior, DistributedPetshopInterior, DistributedKartShopInterior, DistributedLibraryInterior, DistributedDoor, DistributedKnockKnockDoor, DistributedElevator, DistributedElevatorFSM, DistributedElevatorExt, DistributedElevatorInt, DistributedElevatorFloor, DistributedBossElevator, DistributedVPElevator, DistributedCFOElevator, DistributedCJElevator, DistributedBBElevator, DistributedBoardingParty, DistributedTutorialInterior, DistributedClubElevator
from toontown.uberdog.DistributedPartyManager import DistributedPartyManager from toontown.uberdog.DistributedPartyManager import DistributedPartyManager
from otp.friends import FriendManager, PlayerFriendsManager, GuildManager, FriendInfo, AvatarFriendInfo from otp.friends import FriendManager
from otp.level import DistributedLevel, DistributedEntity, DistributedInteractiveEntity from otp.level import DistributedLevel, DistributedEntity, DistributedInteractiveEntity
from toontown.shtiker import DeleteManager, PurchaseManager, NewbiePurchaseManager from toontown.shtiker import DeleteManager, PurchaseManager, NewbiePurchaseManager
from toontown.groups import GroupManager from toontown.groups import GroupManager
@ -31,11 +31,11 @@ from toontown.rpc.AwardManager import AwardManager
from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity
from toontown.friends.TrueFriendsMgr import TrueFriendsMgr from toontown.friends.TrueFriendsMgr import TrueFriendsMgr
from toontown.coghq.InGameEditorDCImports import * from toontown.coghq.InGameEditorDCImports import *
from toontown.friends import TTPlayerFriendsManager, TTUFriendsManager from toontown.friends import TTUFriendsManager
from toontown.cogdominium import DistributedCogdoInterior, DistributedCogdoBattleBldg, DistributedCogdoElevatorExt, DistributedCogdoElevatorInt, DistributedCogdoBarrel, DistCogdoGame, DistCogdoLevelGame, DistCogdoBoardroomGame, DistCogdoCraneGame, DistCogdoMazeGame, DistCogdoFlyingGame, DistCogdoCrane, DistCogdoCraneMoneyBag, DistCogdoCraneCog from toontown.cogdominium import DistributedCogdoInterior, DistributedCogdoBattleBldg, DistributedCogdoElevatorExt, DistributedCogdoElevatorInt, DistributedCogdoBarrel, DistCogdoGame, DistCogdoLevelGame, DistCogdoBoardroomGame, DistCogdoCraneGame, DistCogdoMazeGame, DistCogdoFlyingGame, DistCogdoCrane, DistCogdoCraneMoneyBag, DistCogdoCraneCog
from otp.distributed import Account, DistributedDistrict, DistributedDirectory from otp.distributed import Account, DistributedDistrict, DistributedDirectory
from toontown.estate import DistributedCannon, DistributedTarget, EstateManager, DistributedEstate, DistributedHouse, DistributedHouseInterior, DistributedGarden, DistributedHouseDoor, DistributedMailbox, DistributedFurnitureManager, DistributedFurnitureItem, DistributedBank, DistributedCloset, DistributedTrunk, DistributedPhone, DistributedFireworksCannon, DistributedLawnDecor, DistributedGardenPlot, DistributedGardenBox, DistributedFlower, DistributedGagTree, DistributedStatuary, DistributedToonStatuary, DistributedChangingStatuary, DistributedAnimatedStatuary, DistributedPlantBase, DistributedLawnDecor from toontown.estate import DistributedCannon, DistributedTarget, EstateManager, DistributedEstate, DistributedHouse, DistributedHouseInterior, DistributedGarden, DistributedHouseDoor, DistributedMailbox, DistributedFurnitureManager, DistributedFurnitureItem, DistributedBank, DistributedCloset, DistributedTrunk, DistributedPhone, DistributedFireworksCannon, DistributedLawnDecor, DistributedGardenPlot, DistributedGardenBox, DistributedFlower, DistributedGagTree, DistributedStatuary, DistributedToonStatuary, DistributedChangingStatuary, DistributedAnimatedStatuary, DistributedPlantBase, DistributedLawnDecor
from toontown.toon import DistributedToon, DistributedNPCToonBase, DistributedNPCToon, DistributedSmartNPC, DistributedSmartNPC, DistributedNPCSpecialQuestGiver, DistributedNPCFlippyInToonHall, DistributedNPCScientist, DistributedNPCClerk, DistributedNPCTailor, DistributedNPCBlocker, DistributedNPCFisherman, DistributedNPCPartyPerson, DistributedNPCPetclerk, DistributedNPCKartClerk, DistributedNPCGlove from toontown.toon import DistributedToon, DistributedNPCToonBase, DistributedNPCToon, DistributedSmartNPC, DistributedNPCSpecialQuestGiver, DistributedNPCFlippyInToonHall, DistributedNPCScientist, DistributedNPCClerk, DistributedNPCTailor, DistributedNPCBlocker, DistributedNPCFisherman, DistributedNPCPartyPerson, DistributedNPCPetclerk, DistributedNPCKartClerk, DistributedNPCGlove
from toontown.tutorial import DistributedBattleTutorial, TutorialManager from toontown.tutorial import DistributedBattleTutorial, TutorialManager
from toontown.pets import DistributedPetProxy from toontown.pets import DistributedPetProxy
from toontown.coderedemption.TTCodeRedemptionMgr import TTCodeRedemptionMgr from toontown.coderedemption.TTCodeRedemptionMgr import TTCodeRedemptionMgr

View file

@ -254,8 +254,6 @@ class OTPClientRepository(ClientRepositoryBase):
self.playGame = playGame(self.gameFSM, self.gameDoneEvent) self.playGame = playGame(self.gameFSM, self.gameDoneEvent)
self.shardListHandle = None self.shardListHandle = None
self.uberZoneInterest = None self.uberZoneInterest = None
self.wantSwitchboard = config.GetBool('want-switchboard', 0)
self.wantSwitchboardHacks = base.config.GetBool('want-switchboard-hacks', 0)
self.__pendingGenerates = {} self.__pendingGenerates = {}
self.__pendingMessages = {} self.__pendingMessages = {}
@ -1540,9 +1538,6 @@ class OTPClientRepository(ClientRepositoryBase):
def identifyFriend(self, doId): def identifyFriend(self, doId):
pass pass
def identifyPlayer(self, playerId):
pass
def identifyAvatar(self, doId): def identifyAvatar(self, doId):
info = self.doId2do.get(doId) info = self.doId2do.get(doId)
if info: if info:

View file

@ -1,91 +1,14 @@
from direct.distributed.MsgTypes import * from direct.distributed.MsgTypes import *
OTP_DO_ID_SERVER_ROOT = 4007
OTP_DO_ID_FRIEND_MANAGER = 4501 OTP_DO_ID_FRIEND_MANAGER = 4501
OTP_DO_ID_LEADERBOARD_MANAGER = 4502
OTP_DO_ID_SERVER = 4600
OTP_DO_ID_UBER_DOG = 4601
OTP_CHANNEL_AI_AND_UD_BROADCAST = 4602
OTP_CHANNEL_UD_BROADCAST = 4603
OTP_CHANNEL_AI_BROADCAST = 4604
OTP_NET_MSGR_CHANNEL_ID_ALL_AI = 4605
OTP_NET_MSGR_CHANNEL_ID_UBER_DOG = 4606
OTP_NET_MSGR_CHANNEL_ID_AI_ONLY = 4607
OTP_DO_ID_COMMON = 4615
OTP_DO_ID_GATEWAY = 4616
OTP_DO_ID_PIRATES = 4617
OTP_DO_ID_TOONTOWN = 4618 OTP_DO_ID_TOONTOWN = 4618
OTP_DO_ID_FAIRIES = 4619
OTP_DO_ID_CARS = 4620
OTP_DO_ID_AVATARS = 4630
OTP_DO_ID_FRIENDS = 4640
OTP_DO_ID_GUILDS = 4650
OTP_DO_ID_ESCROW = 4660
OTP_DO_ID_CLIENT_SERVICES_MANAGER = 4665 OTP_DO_ID_CLIENT_SERVICES_MANAGER = 4665
OTP_DO_ID_TTU_FRIENDS_MANAGER = 4666 OTP_DO_ID_TTU_FRIENDS_MANAGER = 4666
OPT_DO_ID_GROUP_MANAGER = 4667 OPT_DO_ID_GROUP_MANAGER = 4667
OTP_DO_ID_GLOBAL_PARTY_MANAGER = 4477 OTP_DO_ID_GLOBAL_PARTY_MANAGER = 4477
OTP_DO_ID_PIRATES_AVATAR_MANAGER = 4674
OTP_DO_ID_PIRATES_CREW_MANAGER = 4675
OTP_DO_ID_PIRATES_INVENTORY_MANAGER = 4677
OTP_DO_ID_PIRATES_SHIP_MANAGER = 4678
OTP_DO_ID_PIRATES_TRAVEL_AGENT = 4679
OTP_DO_ID_PIRATES_FRIENDS_MANAGER = 4680
OTP_DO_ID_CHAT_MANAGER = 4681 OTP_DO_ID_CHAT_MANAGER = 4681
OTP_DO_ID_TOONTOWN_AVATAR_MANAGER = 4682
OTP_DO_ID_TOONTOWN_TEMP_STORE_MANAGER = 4684
OTP_DO_ID_SWITCHBOARD_MANAGER = 4685
OTP_DO_ID_PLAYER_FRIENDS_MANAGER = 4687
OTP_DO_ID_CARS_AVATAR_MANAGER = 4689
OTP_DO_ID_TOONTOWN_MAIL_MANAGER = 4690
OTP_DO_ID_TOONTOWN_PARTY_MANAGER = 4691
OTP_DO_ID_TOONTOWN_RAT_MANAGER = 4692
OTP_DO_ID_STATUS_DATABASE = 4693
OTP_DO_ID_TOONTOWN_AWARD_MANAGER = 4694
OTP_DO_ID_TOONTOWN_CODE_REDEMPTION_MANAGER = 4695
OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE = 4697
OTP_DO_ID_AI_TRADE_AVATAR = 4698
OTP_DO_ID_TOONTOWN_WHITELIST_MANAGER = 4699
OTP_DO_ID_PIRATES_MATCH_MAKER = 4700
OTP_DO_ID_PIRATES_GUILD_MANAGER = 4701
OTP_DO_ID_PIRATES_AWARD_MAKER = 4702
OTP_DO_ID_PIRATES_CODE_REDEMPTION = 4703
OTP_DO_ID_PIRATES_SETTINGS_MANAGER = 4704
OTP_DO_ID_PIRATES_HOLIDAY_MANAGER = 4705
OTP_DO_ID_PIRATES_CREW_MATCH_MANAGER = 4706
OTP_DO_ID_PIRATES_AVATAR_ACCESSORIES_MANAGER = 4710
OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER = 4713
OTP_DO_ID_TOONTOWN_SECURITY_MANAGER = 4714
OTP_DO_ID_SNAPSHOT_DISPATCHER = 4800
OTP_DO_ID_SNAPSHOT_RENDERER = 4801
OTP_DO_ID_SNAPSHOT_RENDERER_01 = 4801
OTP_DO_ID_SNAPSHOT_RENDERER_02 = 4802
OTP_DO_ID_SNAPSHOT_RENDERER_03 = 4803
OTP_DO_ID_SNAPSHOT_RENDERER_04 = 4804
OTP_DO_ID_SNAPSHOT_RENDERER_05 = 4805
OTP_DO_ID_SNAPSHOT_RENDERER_06 = 4806
OTP_DO_ID_SNAPSHOT_RENDERER_07 = 4807
OTP_DO_ID_SNAPSHOT_RENDERER_08 = 4808
OTP_DO_ID_SNAPSHOT_RENDERER_09 = 4809
OTP_DO_ID_SNAPSHOT_RENDERER_10 = 4810
OTP_DO_ID_SNAPSHOT_RENDERER_11 = 4811
OTP_DO_ID_SNAPSHOT_RENDERER_12 = 4812
OTP_DO_ID_SNAPSHOT_RENDERER_13 = 4813
OTP_DO_ID_SNAPSHOT_RENDERER_14 = 4814
OTP_DO_ID_SNAPSHOT_RENDERER_15 = 4815
OTP_DO_ID_SNAPSHOT_RENDERER_16 = 4816
OTP_DO_ID_SNAPSHOT_RENDERER_17 = 4817
OTP_DO_ID_SNAPSHOT_RENDERER_18 = 4818
OTP_DO_ID_SNAPSHOT_RENDERER_19 = 4819
OTP_DO_ID_SNAPSHOT_RENDERER_20 = 4820
OTP_DO_ID_PIRATES_INVENTORY_MANAGER_BASE = 5001
OTP_ZONE_ID_INVALID = 0
OTP_ZONE_ID_OLD_QUIET_ZONE = 1
OTP_ZONE_ID_MANAGEMENT = 2 OTP_ZONE_ID_MANAGEMENT = 2
OTP_ZONE_ID_DISTRICTS = 3 OTP_ZONE_ID_DISTRICTS = 3
OTP_ZONE_ID_DISTRICTS_STATS = 4 OTP_ZONE_ID_DISTRICTS_STATS = 4
OTP_ZONE_ID_ELEMENTS = 5
OTP_NET_MESSENGER_CHANNEL = (OTP_DO_ID_UBER_DOG << 32) + OTP_ZONE_ID_MANAGEMENT
OTP_MOD_CHANNEL = 6200 OTP_MOD_CHANNEL = 6200
OTP_ADMIN_CHANNEL = 6400 OTP_ADMIN_CHANNEL = 6400
OTP_SYSADMIN_CHANNEL = 6500 OTP_SYSADMIN_CHANNEL = 6500

View file

@ -1,41 +0,0 @@
from otp.avatar.AvatarHandle import AvatarHandle
class AvatarFriendInfo(AvatarHandle):
def __init__(self, avatarName = '', playerName = '', playerId = 0, onlineYesNo = 0, openChatEnabledYesNo = 0, openChatFriendshipYesNo = 0, wlChatEnabledYesNo = 0):
self.avatarName = avatarName
self.playerName = playerName
self.playerId = playerId
self.onlineYesNo = onlineYesNo
self.openChatEnabledYesNo = openChatEnabledYesNo
self.openChatFriendshipYesNo = openChatFriendshipYesNo
self.wlChatEnabledYesNo = wlChatEnabledYesNo
self.understandableYesNo = self.isUnderstandable()
def calcUnderstandableYesNo(self):
self.understandableYesNo = self.isUnderstandable()
def getName(self):
if self.avatarName:
return self.avatarName
elif self.playerName:
return self.playerName
else:
return ''
def isUnderstandable(self):
result = False
try:
if self.openChatFriendshipYesNo:
result = True
elif self.openChatEnabledYesNo and base.cr.openChatEnabled:
result = True
elif self.wlChatEnabledYesNo and settings['speedchatPlus']:
result = True
except:
pass
return result
def isOnline(self):
return self.onlineYesNo

View file

@ -1,46 +0,0 @@
from otp.avatar.AvatarHandle import AvatarHandle
class FriendInfo(AvatarHandle):
def __init__(self, avatarName = '', playerName = '', onlineYesNo = 0, openChatEnabledYesNo = 0, openChatFriendshipYesNo = 0, wlChatEnabledYesNo = 0, location = '', sublocation = '', timestamp = 0, avatarId = 0, friendPrivs = 0, tokenPrivs = 0):
self.avatarName = avatarName
self.playerName = playerName
self.onlineYesNo = onlineYesNo
self.openChatEnabledYesNo = openChatEnabledYesNo
self.openChatFriendshipYesNo = openChatFriendshipYesNo
self.wlChatEnabledYesNo = wlChatEnabledYesNo
self.location = location
self.sublocation = sublocation
self.timestamp = timestamp
self.avatarId = avatarId
self.friendPrivs = friendPrivs
self.tokenPrivs = tokenPrivs
self.understandableYesNo = self.isUnderstandable()
def calcUnderstandableYesNo(self):
self.understandableYesNo = self.isUnderstandable()
def getName(self):
if self.avatarName:
return self.avatarName
elif self.playerName:
return self.playerName
else:
return ''
def isUnderstandable(self):
result = False
try:
if self.openChatFriendshipYesNo:
result = True
elif self.openChatEnabledYesNo and base.cr.openChatEnabled:
result = True
elif self.wlChatEnabledYesNo and settings['speedchatPlus']:
result = True
except:
pass
return result
def isOnline(self):
return self.onlineYesNo

View file

@ -11,24 +11,13 @@ class FriendManager(DistributedObject.DistributedObject):
DistributedObject.DistributedObject.__init__(self, cr) DistributedObject.DistributedObject.__init__(self, cr)
self.__available = 0 self.__available = 0
self.otherToon = 0 self.otherToon = 0
self.gameSpecificFunction = None
return
def setAvailable(self, available): def setAvailable(self, available):
self.__available = available self.__available = available
if self.__available and self.gameSpecificFunction:
self.gameSpecificFunction()
def getAvailable(self): def getAvailable(self):
return self.__available return self.__available
def setGameSpecificFunction(self, function):
self.gameSpecificFunction = function
def executeGameSpecificFunction(self):
if self.__available and self.gameSpecificFunction:
self.gameSpecificFunction()
def generate(self): def generate(self):
if base.cr.friendManager != None: if base.cr.friendManager != None:
base.cr.friendManager.delete() base.cr.friendManager.delete()
@ -42,7 +31,6 @@ class FriendManager(DistributedObject.DistributedObject):
return return
def delete(self): def delete(self):
self.gameSpecificFunction = None
base.cr.friendManager = None base.cr.friendManager = None
DistributedObject.DistributedObject.delete(self) DistributedObject.DistributedObject.delete(self)
return return

View file

@ -1,6 +0,0 @@
INVITATION_RESP_OK = 0
INVITATION_RESP_DECLINE = 1
INVITATION_RESP_RETRACT = 2
INVITATION_RESP_CANCEL = 3
INVITATION_RESP_ALREADY_FRIENDS = 4
INVITATION_RESP_NEW_FRIENDS = 5

View file

@ -1,407 +0,0 @@
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
from direct.directnotify.DirectNotifyGlobal import directNotify
from otp.distributed import OtpDoGlobals
from otp.otpbase import OTPLocalizer
from otp.otpbase import OTPGlobals
from otp.avatar.AvatarHandle import AvatarHandle
from otp.ai import AIInterestHandles
GUILDRANK_VETERAN = 4
GUILDRANK_GM = 3
GUILDRANK_OFFICER = 2
GUILDRANK_MEMBER = 1
import Queue
class GuildMemberInfo(AvatarHandle):
def __init__(self, name, isOnline, rank, bandId):
self.name = name
self.rank = rank
self.bandId = bandId
self.onlineYesNo = isOnline
def getName(self):
return self.name
def getRank(self):
return self.rank
def getBandId(self):
return self.bandId
def isOnline(self):
return self.onlineYesNo
def isUnderstandable(self):
return True
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def sendTeleportQuery(self, sendToId, localBandMgrId, localBandId, localGuildId, localShardId):
base.cr.guildManager.d_reflectTeleportQuery(sendToId, localBandMgrId, localBandId, localGuildId, localShardId)
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def sendTeleportResponse(self, available, shardId, instanceDoId, areaDoId, sendToId = None):
base.cr.guildManager.d_reflectTeleportResponse(available, shardId, instanceDoId, areaDoId, sendToId)
class GuildManager(DistributedObjectGlobal):
notify = directNotify.newCategory('GuildManager')
def __init__(self, cr):
DistributedObjectGlobal.__init__(self, cr)
self.id2Name = {}
self.id2BandId = {}
self.id2Rank = {}
self.id2Online = {}
self.pendingMsgs = []
self.whiteListEnabled = base.config.GetBool('whitelist-chat-enabled', 1)
self.emailNotification = 0
self.emailNotificationAddress = None
self.receivingNewList = False
self.spamGateOpen = True
return
def _allowMemberList(self, task):
self.spamGateOpen = True
return task.done
def memberList(self):
if self.spamGateOpen:
self.sendUpdate('memberList', [])
self.spamGateOpen = False
taskMgr.doMethodLater(60.0, self._allowMemberList, 'allowMemberList')
def createGuild(self):
messenger.send('declineGuildInvitation')
self.sendUpdate('createGuild', [])
def setWantName(self, newName):
self.sendUpdate('setWantName', [newName])
def removeMember(self, avatarId):
self.sendUpdate('removeMember', [avatarId])
def changeRank(self, avatarId, rank):
self.sendUpdate('changeRank', [avatarId, rank])
def changeRankAvocate(self, avatarId):
self.sendUpdate('changeRankAvocate', [avatarId])
def statusRequest(self):
self.sendUpdate('statusRequest', [])
def requestLeaderboardTopTen(self):
self.sendUpdate('requestLeaderboardTopTen', [])
def sendRequestInvite(self, avatarId):
self.sendUpdate('requestInvite', [avatarId])
def sendAcceptInvite(self):
self.sendUpdate('acceptInvite', [])
def sendDeclineInvite(self):
self.sendUpdate('declineInvite', [])
def sendTalk(self, msgText, chatFlags = 0):
self.sendUpdate('setTalkGroup', [0,
0,
'',
msgText,
[],
0])
def setTalkGroup(self, fromAv, fromAC, avatarName, chat, mods, flags):
if hasattr(base, 'localAvatar'):
message, scrubbed = localAvatar.scrubTalk(chat, mods)
base.talkAssistant.receiveGuildTalk(fromAv, fromAC, avatarName, message, scrubbed)
def sendSC(self, msgIndex):
self.sendUpdate('sendSC', [msgIndex])
def sendSCQuest(self, questInt, msgType, taskNum):
self.sendUpdate('sendSCQuest', [questInt, msgType, taskNum])
def sendTokenRequest(self):
self.sendUpdate('sendTokenRequest', [])
def sendTokenForJoinRequest(self, token):
name = base.localAvatar.getName()
self.sendUpdate('sendTokenForJoinRequest', [token, name])
def isInGuild(self, avId):
return avId in self.id2Name
def getRank(self, avId):
return self.id2Rank.get(avId)
def getBandId(self, avId):
return self.id2BandId.get(avId)
def getMemberInfo(self, avId):
if self.isInGuild(avId):
return GuildMemberInfo(self.id2Name[avId], self.id2Online[avId], self.id2Rank[avId], self.id2BandId[avId])
return None
def getOptionsFor(self, avId):
if self.isInGuild(avId):
myRank = self.id2Rank.get(localAvatar.doId, localAvatar.getGuildRank())
hisRank = self.id2Rank[avId]
canpromote = False
candemote = False
cankick = False
if myRank == GUILDRANK_GM:
canpromote = True
candemote = True
cankick = True
if myRank > GUILDRANK_MEMBER and myRank != GUILDRANK_VETERAN and (hisRank <= GUILDRANK_MEMBER or hisRank == GUILDRANK_VETERAN):
cankick = True
return (canpromote, candemote, cankick)
else:
return None
return None
def updateTokenRValue(self, tokenString, rValue):
rValue = int(rValue)
self.sendUpdate('sendTokenRValue', [tokenString, rValue])
if rValue == -1:
base.localAvatar.guiMgr.guildPage.receivePermTokenValue(tokenString)
def requestPermToken(self):
self.sendUpdate('sendPermToken', [])
def requestNonPermTokenCount(self):
self.sendUpdate('sendNonPermTokenCount', [])
def requestClearTokens(self, type):
self.sendUpdate('sendClearTokens', [type])
def receiveMember(self, member):
if not self.receivingNewList:
self.receivingNewList = True
self.newList = []
self.newList.append(member)
def clearMembers(self):
self.newList = []
self.receiveMembersDone()
def receiveMembersDone(self):
self.receivingNewList = False
memberlist = self.newList
self.newList = []
self.id2Name = {}
self.id2Rank = {}
self.id2BandId = {}
for guy in memberlist:
id = guy[0]
name = guy[1]
rank = guy[2]
isOnline = guy[3]
self.id2Name[id] = name
self.id2Rank[id] = rank
self.id2Online[id] = isOnline
self.id2BandId[id] = tuple(guy[4:6])
for id, msg in self.pendingMsgs:
if not base.localAvatar.isIgnored(id):
base.talkAssistant.receiveGuildMessage(msg, id, self.id2Name.get(id, 'Unknown'))
if localAvatar.getGuildId():
self.accept(self.cr.StopVisibilityEvent, self.handleLogout)
else:
self.ignore(self.cr.StopVisibilityEvent)
if hasattr(base, 'localAvatar'):
base.localAvatar.guiMgr.guildPage.receiveMembers(memberlist)
messenger.send('guildMemberUpdated', sentArgs=[localAvatar.doId])
def guildStatusUpdate(self, guildId, guildName, guildRank):
if hasattr(base, 'localAvatar'):
base.localAvatar.guildStatusUpdate(guildId, guildName, guildRank)
self.memberList()
def guildNameReject(self, guildId):
if hasattr(base, 'localAvatar'):
base.localAvatar.guildNameReject(guildId)
def guildNameChange(self, guildName, changeStatus):
if hasattr(base, 'localAvatar'):
base.localAvatar.guildNameChange(guildName, changeStatus)
def guildNameUpdate(self, avatarId, guildName):
print 'DEBUG - guildNameUpdate for ', avatarId, ' to ', guildName
def invitationFrom(self, avatarId, avatarName, guildId, guildName):
print 'GM invitationFrom %s(%d)' % (avatarName, avatarId)
if hasattr(base, 'localAvatar'):
base.localAvatar.guiMgr.handleGuildInvitation(avatarId, avatarName, guildId, guildName)
def retractInvite(self, avatarId):
print 'GM retraction'
def guildAcceptInvite(self, avatarId):
print 'sending accept event'
messenger.send(OTPGlobals.GuildAcceptInviteEvent, [avatarId])
def leaderboardTopTen(self, stuff):
base.localAvatar.guiMgr.handleTopTen(stuff)
def guildRejectInvite(self, avatarId, reason):
messenger.send(OTPGlobals.GuildRejectInviteEvent, [avatarId, reason])
def rejectInvite(self, avatarId, reason):
pass
def recvSC(self, senderId, msgIndex):
senderName = self.id2Name.get(senderId, None)
if senderName:
if not base.localAvatar.isIgnored(senderId):
displayMess = '%s %s %s' % (senderName, OTPLocalizer.GuildPrefix, OTPLocalizer.SpeedChatStaticText[msgIndex])
message = OTPLocalizer.SpeedChatStaticText[msgIndex]
base.talkAssistant.receiveGuildMessage(message, senderId, senderName)
else:
self.pendingMsgs.append([senderId, OTPLocalizer.SpeedChatStaticText[msgIndex]])
self.memberList()
return
def recvSCQuest(self, senderId, questInt, msgType, taskNum):
senderName = self.id2Name.get(senderId, None)
message = base.talkAssistant.SCDecoder.decodeSCQuestMsgInt(questInt, msgType, taskNum)
if senderName:
if not base.localAvatar.isIgnored(senderId):
displayMess = '%s %s %s' % (senderName, OTPLocalizer.GuildPrefix, message)
base.talkAssistant.receiveGuildMessage(message, senderId, senderName)
else:
self.pendingMsgs.append([senderId, message])
self.memberList()
return
def recvAvatarOnline(self, avatarId, avatarName, bandManagerId, bandId):
self.id2Online[avatarId] = True
if hasattr(base, 'localAvatar') and avatarId != base.localAvatar.doId:
if not base.localAvatar.isIgnored(avatarId):
base.talkAssistant.receiveGuildUpdate(avatarId, avatarName, True)
else:
return
messenger.send('guildMemberOnlineStatus', [avatarId, 1])
def recvAvatarOffline(self, avatarId, avatarName):
self.id2BandId[avatarId] = (0, 0)
self.id2Online[avatarId] = False
if hasattr(base, 'localAvatar') and avatarId != base.localAvatar.doId:
if not base.localAvatar.isIgnored(avatarId):
base.talkAssistant.receiveGuildUpdate(avatarId, avatarName, False)
messenger.send('guildMemberOnlineStatus', [avatarId, 0])
def recvMemberAdded(self, memberInfo, inviterId, inviterName):
avatarId, avatarName, rank, isOnline, bandManagerId, bandId = memberInfo
self.id2Name[avatarId] = avatarName
self.id2Rank[avatarId] = rank
self.id2BandId[avatarId] = (bandManagerId, bandId)
self.id2Online[avatarId] = isOnline
if hasattr(base, 'localAvatar'):
base.localAvatar.guiMgr.guildPage.addMember(memberInfo)
messenger.send('guildMemberUpdated', sentArgs=[avatarId])
def recvMemberRemoved(self, avatarId, senderId, avatarName, senderName):
if avatarId == localAvatar.doId:
self.clearMembers()
else:
self.id2Name.pop(avatarId, None)
self.id2Rank.pop(avatarId, None)
self.id2BandId.pop(avatarId, None)
self.id2Online.pop(avatarId, None)
if hasattr(base, 'localAvatar'):
base.localAvatar.guiMgr.guildPage.removeMember(avatarId)
messenger.send('guildMemberUpdated', sentArgs=[avatarId])
return
def recvMemberUpdateRank(self, avatarId, senderId, avatarName, senderName, rank, promote):
self.id2Rank[avatarId] = rank
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
base.localAvatar.guiMgr.guildPage.updateGuildMemberRank(avatarId, rank)
messenger.send('guildMemberUpdated', sentArgs=[avatarId])
def recvMemberUpdateBandId(self, avatarId, bandManagerId, bandId):
self.id2BandId[avatarId] = (bandManagerId, bandId)
messenger.send('guildMemberUpdated', sentArgs=[avatarId])
def recvTokenInviteValue(self, tokenValue, preExistPerm):
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
base.localAvatar.guiMgr.guildPage.displayInviteGuild(tokenValue, preExistPerm)
def recvTokenRedeemMessage(self, guildName):
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
if guildName == '***ERROR - GUILD CODE INVALID***':
base.localAvatar.guiMgr.guildPage.displayRedeemErrorMessage(OTPLocalizer.GuildRedeemErrorInvalidToken)
elif guildName == '***ERROR - GUILD FULL***':
base.localAvatar.guiMgr.guildPage.displayRedeemErrorMessage(OTPLocalizer.GuildRedeemErrorGuildFull)
else:
base.localAvatar.guiMgr.guildPage.displayRedeemConfirmMessage(guildName)
def recvTokenRedeemedByPlayerMessage(self, redeemerName):
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
base.localAvatar.guiMgr.guildPage.notifyTokenGeneratorOfRedeem(redeemerName)
def recvPermToken(self, token):
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
if token == '0':
base.localAvatar.guiMgr.guildPage.receivePermTokenValue(None)
else:
base.localAvatar.guiMgr.guildPage.receivePermTokenValue(token)
return
def requestEmailNotificationPref(self):
self.sendUpdate('sendRequestEmailNotificationPref', [])
def respondEmailNotificationPref(self, notify, emailAddress):
self.emailNotification = notify
if emailAddress == 'None':
self.emailNotificationAddress = None
else:
self.emailNotificationAddress = emailAddress
return
def getEmailNotificationPref(self):
return [self.emailNotification, self.emailNotificationAddress]
def requestEmailNotificationPrefUpdate(self, notify, emailAddress):
self.sendUpdate('sendEmailNotificationPrefUpdate', [notify, emailAddress])
self.emailNotification = notify
if emailAddress == 'None':
self.emailNotificationAddress = None
else:
self.emailNotificationAddress = emailAddress
return
def recvNonPermTokenCount(self, tCount):
if hasattr(base, 'localAvatar') and base.localAvatar.guiMgr:
base.localAvatar.guiMgr.guildPage.receiveNonPermTokenCount(tCount)
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def d_reflectTeleportQuery(self, sendToId, localBandMgrId, localBandId, localGuildId, localShardId):
self.sendUpdate('reflectTeleportQuery', [sendToId,
localBandMgrId,
localBandId,
localGuildId,
localShardId])
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def teleportQuery(self, requesterId, requesterBandMgrId, requesterBandId, requesterGuildId, requesterShardId):
if self.cr.teleportMgr:
self.cr.teleportMgr.handleAvatarTeleportQuery(requesterId, requesterBandMgrId, requesterBandId, requesterGuildId, requesterShardId)
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def d_reflectTeleportResponse(self, available, shardId, instanceDoId, areaDoId, sendToId):
self.sendUpdate('reflectTeleportResponse', [sendToId,
available,
shardId,
instanceDoId,
areaDoId])
@report(types=['deltaStamp', 'args'], dConfigParam='teleport')
def teleportResponse(self, responderId, available, shardId, instanceDoId, areaDoId):
if self.cr.teleportMgr:
self.cr.teleportMgr.handleAvatarTeleportResponse(responderId, available, shardId, instanceDoId, areaDoId)
@report(types=['args'], dConfigParam='guildmgr')
def handleLogout(self, *args, **kw):
self.cr.removeAIInterest(AIInterestHandles.PIRATES_GUILD)

View file

@ -1,189 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectAI import DistributedObjectAI
class GuildManagerAI(DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory("GuildManagerAI")
def online(self):
pass
def guildRejectInvite(self, todo0, todo1):
pass
def invitationFrom(self, todo0, todo1, todo2, todo3):
pass
def requestInvite(self, todo0):
pass
def memberList(self):
pass
def createGuild(self):
pass
def acceptInvite(self):
pass
def declineInvite(self):
pass
def setWantName(self, todo0):
pass
def removeMember(self, todo0):
pass
def changeRank(self, todo0, todo1):
pass
def changeRankAvocate(self, todo0):
pass
def statusRequest(self):
pass
def requestLeaderboardTopTen(self):
pass
def guildStatusUpdate(self, todo0, todo1, todo2):
pass
def guildNameReject(self, todo0):
pass
def guildNameChange(self, todo0, todo1):
pass
def receiveMember(self, todo0):
pass
def receiveMembersDone(self):
pass
def guildAcceptInvite(self, todo0):
pass
def guildDeclineInvite(self, todo0):
pass
def updateRep(self, todo0, todo1):
pass
def leaderboardTopTen(self, todo0):
pass
def recvAvatarOnline(self, todo0, todo1, todo2, todo3):
pass
def recvAvatarOffline(self, todo0, todo1):
pass
def sendChat(self, todo0, todo1, todo2):
pass
def sendWLChat(self, todo0, todo1, todo2):
pass
def sendSC(self, todo0):
pass
def sendSCQuest(self, todo0, todo1, todo2):
pass
def recvChat(self, todo0, todo1, todo2, todo3):
pass
def recvWLChat(self, todo0, todo1, todo2, todo3):
pass
def recvSC(self, todo0, todo1):
pass
def recvSCQuest(self, todo0, todo1, todo2, todo3):
pass
def sendTokenRequest(self):
pass
def recvTokenGenerated(self, todo0):
pass
def recvTokenInviteValue(self, todo0, todo1):
pass
def sendTokenForJoinRequest(self, todo0, todo1):
pass
def recvTokenRedeemMessage(self, todo0):
pass
def recvTokenRedeemedByPlayerMessage(self, todo0):
pass
def sendTokenRValue(self, todo0, todo1):
pass
def sendPermToken(self):
pass
def sendNonPermTokenCount(self):
pass
def recvPermToken(self, todo0):
pass
def recvNonPermTokenCount(self, todo0):
pass
def sendClearTokens(self, todo0):
pass
def sendAvatarBandId(self, todo0, todo1, todo2):
pass
def recvMemberAdded(self, todo0, todo1, todo2):
pass
def notifyGuildKicksMaxed(self):
pass
def recvMemberRemoved(self, todo0, todo1, todo2, todo3):
pass
def recvMemberUpdateName(self, todo0, todo1):
pass
def recvMemberUpdateRank(self, todo0, todo1, todo2, todo3, todo4, todo5):
pass
def recvMemberUpdateBandId(self, todo0, todo1, todo2):
pass
def avatarOnline(self, todo0, todo1):
pass
def avatarOffline(self, todo0):
pass
def reflectTeleportQuery(self, todo0, todo1, todo2, todo3, todo4):
pass
def teleportQuery(self, todo0, todo1, todo2, todo3, todo4):
pass
def reflectTeleportResponse(self, todo0, todo1, todo2, todo3, todo4):
pass
def teleportResponse(self, todo0, todo1, todo2, todo3, todo4):
pass
def requestGuildMatesList(self, todo0, todo1, todo2):
pass
def updateAvatarName(self, todo0, todo1):
pass
def avatarDeleted(self, todo0):
pass

View file

@ -1,189 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectUD import DistributedObjectUD
class GuildManagerUD(DistributedObjectUD):
notify = DirectNotifyGlobal.directNotify.newCategory("GuildManagerUD")
def online(self):
pass
def guildRejectInvite(self, todo0, todo1):
pass
def invitationFrom(self, todo0, todo1, todo2, todo3):
pass
def requestInvite(self, todo0):
pass
def memberList(self):
pass
def createGuild(self):
pass
def acceptInvite(self):
pass
def declineInvite(self):
pass
def setWantName(self, todo0):
pass
def removeMember(self, todo0):
pass
def changeRank(self, todo0, todo1):
pass
def changeRankAvocate(self, todo0):
pass
def statusRequest(self):
pass
def requestLeaderboardTopTen(self):
pass
def guildStatusUpdate(self, todo0, todo1, todo2):
pass
def guildNameReject(self, todo0):
pass
def guildNameChange(self, todo0, todo1):
pass
def receiveMember(self, todo0):
pass
def receiveMembersDone(self):
pass
def guildAcceptInvite(self, todo0):
pass
def guildDeclineInvite(self, todo0):
pass
def updateRep(self, todo0, todo1):
pass
def leaderboardTopTen(self, todo0):
pass
def recvAvatarOnline(self, todo0, todo1, todo2, todo3):
pass
def recvAvatarOffline(self, todo0, todo1):
pass
def sendChat(self, todo0, todo1, todo2):
pass
def sendWLChat(self, todo0, todo1, todo2):
pass
def sendSC(self, todo0):
pass
def sendSCQuest(self, todo0, todo1, todo2):
pass
def recvChat(self, todo0, todo1, todo2, todo3):
pass
def recvWLChat(self, todo0, todo1, todo2, todo3):
pass
def recvSC(self, todo0, todo1):
pass
def recvSCQuest(self, todo0, todo1, todo2, todo3):
pass
def sendTokenRequest(self):
pass
def recvTokenGenerated(self, todo0):
pass
def recvTokenInviteValue(self, todo0, todo1):
pass
def sendTokenForJoinRequest(self, todo0, todo1):
pass
def recvTokenRedeemMessage(self, todo0):
pass
def recvTokenRedeemedByPlayerMessage(self, todo0):
pass
def sendTokenRValue(self, todo0, todo1):
pass
def sendPermToken(self):
pass
def sendNonPermTokenCount(self):
pass
def recvPermToken(self, todo0):
pass
def recvNonPermTokenCount(self, todo0):
pass
def sendClearTokens(self, todo0):
pass
def sendAvatarBandId(self, todo0, todo1, todo2):
pass
def recvMemberAdded(self, todo0, todo1, todo2):
pass
def notifyGuildKicksMaxed(self):
pass
def recvMemberRemoved(self, todo0, todo1, todo2, todo3):
pass
def recvMemberUpdateName(self, todo0, todo1):
pass
def recvMemberUpdateRank(self, todo0, todo1, todo2, todo3, todo4, todo5):
pass
def recvMemberUpdateBandId(self, todo0, todo1, todo2):
pass
def avatarOnline(self, todo0, todo1):
pass
def avatarOffline(self, todo0):
pass
def reflectTeleportQuery(self, todo0, todo1, todo2, todo3, todo4):
pass
def teleportQuery(self, todo0, todo1, todo2, todo3, todo4):
pass
def reflectTeleportResponse(self, todo0, todo1, todo2, todo3, todo4):
pass
def teleportResponse(self, todo0, todo1, todo2, todo3, todo4):
pass
def requestGuildMatesList(self, todo0, todo1, todo2):
pass
def updateAvatarName(self, todo0, todo1):
pass
def avatarDeleted(self, todo0):
pass

View file

@ -1,254 +0,0 @@
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
from direct.directnotify.DirectNotifyGlobal import directNotify
from otp.otpbase import OTPGlobals
from otp.avatar.Avatar import teleportNotify
from otp.friends import FriendResponseCodes
class PlayerFriendsManager(DistributedObjectGlobal):
notify = directNotify.newCategory('PlayerFriendsManager')
def __init__(self, cr):
DistributedObjectGlobal.__init__(self, cr)
self.playerFriendsList = set()
self.playerId2Info = {}
self.playerAvId2avInfo = {}
self.accept('gotExtraFriendHandles', self.__handleFriendHandles)
def delete(self):
self.ignoreAll()
def sendRequestInvite(self, playerId):
print 'PFM sendRequestInvite id:%s' % playerId
self.sendUpdate('requestInvite', [0, playerId, True])
def sendRequestDecline(self, playerId):
self.sendUpdate('requestDecline', [0, playerId])
def sendRequestRemove(self, playerId):
self.sendUpdate('requestRemove', [0, playerId])
def sendRequestUnlimitedSecret(self):
self.sendUpdate('requestUnlimitedSecret', [0])
def sendRequestUseUnlimitedSecret(self, secret):
pass
def sendSCWhisper(self, recipientId, msgId):
self.sendUpdate('whisperSCTo', [0, recipientId, msgId])
def sendSCCustomWhisper(self, recipientId, msgId):
self.sendUpdate('whisperSCCustomTo', [0, recipientId, msgId])
def sendSCEmoteWhisper(self, recipientId, msgId):
self.sendUpdate('whisperSCEmoteTo', [0, recipientId, msgId])
def setTalkAccount(self, toAc, fromAc, fromName, message, mods, flags):
localAvatar.displayTalkAccount(fromAc, fromName, message, mods)
toName = None
friendInfo = self.getFriendInfo(toAc)
if friendInfo:
toName = friendInfo.playerName
elif toAc == localAvatar.DISLid:
toName = localAvatar.getName()
base.talkAssistant.receiveAccountTalk(None, None, fromAc, fromName, toAc, toName, message)
return
def invitationFrom(self, playerId, avatarName):
messenger.send(OTPGlobals.PlayerFriendInvitationEvent, [playerId, avatarName])
def retractInvite(self, playerId):
messenger.send(OTPGlobals.PlayerFriendRetractInviteEvent, [playerId])
def rejectInvite(self, playerId, reason):
messenger.send(OTPGlobals.PlayerFriendRejectInviteEvent, [playerId, reason])
def rejectRemove(self, playerId, reason):
messenger.send(OTPGlobals.PlayerFriendRejectRemoveEvent, [playerId, reason])
def secretResponse(self, secret):
print 'secretResponse %s' % secret
messenger.send(OTPGlobals.PlayerFriendNewSecretEvent, [secret])
def rejectSecret(self, reason):
print 'rejectSecret %s' % reason
messenger.send(OTPGlobals.PlayerFriendRejectNewSecretEvent, [reason])
def rejectUseSecret(self, reason):
print 'rejectUseSecret %s' % reason
messenger.send(OTPGlobals.PlayerFriendRejectUseSecretEvent, [reason])
def invitationResponse(self, playerId, respCode, context):
if respCode == FriendResponseCodes.INVITATION_RESP_DECLINE:
messenger.send(OTPGlobals.PlayerFriendRejectInviteEvent, [playerId, respCode])
elif respCode == FriendResponseCodes.INVITATION_RESP_NEW_FRIENDS:
pass
def updatePlayerFriend(self, id, info, isNewFriend):
self.notify.warning('updatePlayerFriend: %s, %s, %s' % (id, info, isNewFriend))
info.calcUnderstandableYesNo()
if info.playerName[0:5] == 'Guest':
info.playerName = 'Guest ' + info.playerName[5:]
if id not in self.playerFriendsList:
self.playerFriendsList.add(id)
self.playerId2Info[id] = info
messenger.send(OTPGlobals.PlayerFriendAddEvent, [id, info, isNewFriend])
elif id in self.playerId2Info:
if not self.playerId2Info[id].onlineYesNo and info.onlineYesNo:
self.playerId2Info[id] = info
messenger.send('playerOnline', [id])
base.talkAssistant.receiveFriendAccountUpdate(id, info.playerName, info.onlineYesNo)
elif self.playerId2Info[id].onlineYesNo and not info.onlineYesNo:
self.playerId2Info[id] = info
messenger.send('playerOffline', [id])
base.talkAssistant.receiveFriendAccountUpdate(id, info.playerName, info.onlineYesNo)
if not self.askAvatarKnownHere(info.avatarId):
self.requestAvatarInfo(info.avatarId)
self.playerId2Info[id] = info
av = base.cr.doId2do.get(info.avatarId, None)
if av is not None:
av.considerUnderstandable()
messenger.send(OTPGlobals.PlayerFriendUpdateEvent, [id, info])
return
def removePlayerFriend(self, id):
if id not in self.playerFriendsList:
return
self.playerFriendsList.remove(id)
info = self.playerId2Info.pop(id, None)
if info is not None:
av = base.cr.doId2do.get(info.avatarId, None)
if av is not None:
av.considerUnderstandable()
messenger.send(OTPGlobals.PlayerFriendRemoveEvent, [id])
return
def whisperSCFrom(self, playerId, msg):
base.talkAssistant.receivePlayerWhisperSpeedChat(msg, playerId)
def isFriend(self, pId):
return self.isPlayerFriend(pId)
def isPlayerFriend(self, pId):
if not pId:
return 0
return pId in self.playerFriendsList
def isAvatarOwnerPlayerFriend(self, avId):
pId = self.findPlayerIdFromAvId(avId)
if pId and self.isPlayerFriend(pId):
return True
else:
return False
def getFriendInfo(self, pId):
return self.playerId2Info.get(pId)
def findPlayerIdFromAvId(self, avId):
for playerId in self.playerId2Info:
if self.playerId2Info[playerId].avatarId == avId:
if self.playerId2Info[playerId].onlineYesNo:
return playerId
return None
def findAvIdFromPlayerId(self, pId):
pInfo = self.playerId2Info.get(pId)
if pInfo:
return pInfo.avatarId
else:
return None
return None
def findPlayerInfoFromAvId(self, avId):
playerId = self.findPlayerIdFromAvId(avId)
if playerId:
return self.getFriendInfo(playerId)
else:
return None
return None
def askAvatarOnline(self, avId):
returnValue = 0
if avId in self.cr.doId2do:
returnValue = 1
if avId in self.playerAvId2avInfo:
playerId = self.findPlayerIdFromAvId(avId)
if playerId in self.playerId2Info:
playerInfo = self.playerId2Info[playerId]
if playerInfo.onlineYesNo:
returnValue = 1
return returnValue
def countTrueFriends(self):
count = 0
for id in self.playerId2Info:
if self.playerId2Info[id].openChatFriendshipYesNo:
count += 1
return count
def askTransientFriend(self, avId):
if (avId in self.playerAvId2avInfo) and (not base.cr.isAvatarFriend(avId)):
return 1
else:
return 0
def askAvatarKnown(self, avId):
if self.askAvatarKnownElseWhere(avId) or self.askAvatarKnownHere(avId):
return 1
else:
return 0
def askAvatarKnownElseWhere(self, avId):
if hasattr(base, 'cr'):
if base.cr.askAvatarKnown(avId):
return 1
return 0
def askAvatarKnownHere(self, avId):
if avId in self.playerAvId2avInfo:
return 1
else:
return 0
def requestAvatarInfo(self, avId):
if hasattr(base, 'cr'):
base.cr.queueRequestAvatarInfo(avId)
def __handleFriendHandles(self, handleList):
for handle in handleList:
self.playerAvId2avInfo[handle.getDoId()] = handle
messenger.send('friendsListChanged')
def getAvHandleFromId(self, avId):
if avId in self.playerAvId2avInfo:
return self.playerAvId2avInfo[avId]
def identifyFriend(self, avId):
handle = None
teleportNotify.debug('identifyFriend(%s)' % avId)
handle = base.cr.identifyFriend(avId)
if not handle:
teleportNotify.debug('getAvHandleFromId(%s)' % avId)
handle = self.getAvHandleFromId(avId)
return handle
def getAllOnlinePlayerAvatars(self):
returnList = []
for avatarId in self.playerAvId2avInfo:
playerId = self.findPlayerIdFromAvId(avatarId)
if playerId:
if self.playerId2Info[playerId].onlineYesNo:
returnList.append(avatarId)
return returnList
def identifyAvatar(self, doId):
if doId in base.cr.doId2do:
return base.cr.doId2do[doId]
else:
return self.identifyFriend(doId)
def friendsListFull(self):
return len(self.playerFriendsList) >= OTPGlobals.MaxPlayerFriends

View file

@ -1,42 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectUD import DistributedObjectUD
class PlayerFriendsManagerUD(DistributedObjectUD):
notify = DirectNotifyGlobal.directNotify.newCategory("PlayerFriendsManagerUD")
def requestInvite(self, todo0, todo1, todo2):
pass
def invitationFrom(self, todo0, todo1):
pass
def retractInvite(self, todo0):
pass
def invitationResponse(self, todo0, todo1, todo2):
pass
def requestDecline(self, todo0, todo1):
pass
def requestDeclineWithReason(self, todo0, todo1, todo2):
pass
def requestRemove(self, todo0, todo1):
pass
def secretResponse(self, todo0):
pass
def rejectSecret(self, todo0):
pass
def rejectUseSecret(self, todo0):
pass
def updatePlayerFriend(self, todo0, todo1, todo2):
pass
def removePlayerFriend(self, todo0):
pass

View file

@ -51,7 +51,7 @@ class DistributedLevel(DistributedObject.DistributedObject, Level.Level):
def setLevelZoneId(self, zoneId): def setLevelZoneId(self, zoneId):
self.levelZone = zoneId self.levelZone = zoneId
def setPlayerIds(self, avIdList): def setAvIds(self, avIdList):
self.avIdList = avIdList self.avIdList = avIdList
def setEntranceId(self, entranceId): def setEntranceId(self, entranceId):

View file

@ -41,7 +41,7 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI, Level.Level):
def getLevelZoneId(self): def getLevelZoneId(self):
return self.zoneId return self.zoneId
def getPlayerIds(self): def getAvIds(self):
return self.avIdList return self.avIdList
def getEntranceId(self): def getEntranceId(self):

View file

@ -21,8 +21,6 @@ AICollMovePriority = 8
# But since we told people that we are allowing "unlimited" friends, we instead can give them a # But since we told people that we are allowing "unlimited" friends, we instead can give them a
# high amount. # high amount.
MaxFriends = 200 MaxFriends = 200
MaxPlayerFriends = 300
MaxBackCatalog = 48 MaxBackCatalog = 48
FriendChat = 1 FriendChat = 1
CommonChat = 1 CommonChat = 1
@ -306,33 +304,19 @@ PeriodOnlyAfterLetter = 'You can use a period in your name, but only after a let
ApostropheOnlyAfterLetter = 'You can use an apostrophe in your name, but only after a letter.' ApostropheOnlyAfterLetter = 'You can use an apostrophe in your name, but only after a letter.'
NoNumbersInTheMiddle = 'Numeric digits may not appear in the middle of a word.' NoNumbersInTheMiddle = 'Numeric digits may not appear in the middle of a word.'
ThreeWordsOrLess = 'Your name must be three words or fewer.' ThreeWordsOrLess = 'Your name must be three words or fewer.'
GuildUpdateMembersEvent = 'guildUpdateMembersEvent'
GuildInvitationEvent = 'guildInvitationEvent'
GuildAcceptInviteEvent = 'guildAcceptInviteEvent'
GuildRejectInviteEvent = 'guildRejectInviteEvent'
AvatarFriendAddEvent = 'avatarFriendAddEvent' AvatarFriendAddEvent = 'avatarFriendAddEvent'
AvatarNewFriendAddEvent = 'avatarNewFriendAddEvent' AvatarNewFriendAddEvent = 'avatarNewFriendAddEvent'
AvatarFriendUpdateEvent = 'avatarFriendUpdateEvent' AvatarFriendUpdateEvent = 'avatarFriendUpdateEvent'
AvatarFriendRemoveEvent = 'avatarFriendRemoveEvent' AvatarFriendRemoveEvent = 'avatarFriendRemoveEvent'
PlayerFriendAddEvent = 'playerFriendAddEvent'
PlayerFriendUpdateEvent = 'playerFriendUpdateEvent'
PlayerFriendRemoveEvent = 'playerFriendRemoveEvent'
AvatarFriendConsideringEvent = 'avatarFriendConsideringEvent' AvatarFriendConsideringEvent = 'avatarFriendConsideringEvent'
AvatarFriendInvitationEvent = 'avatarFriendInvitationEvent' AvatarFriendInvitationEvent = 'avatarFriendInvitationEvent'
AvatarFriendRejectInviteEvent = 'avatarFriendRejectInviteEvent' AvatarFriendRejectInviteEvent = 'avatarFriendRejectInviteEvent'
AvatarFriendRetractInviteEvent = 'avatarFriendRetractInviteEvent' AvatarFriendRetractInviteEvent = 'avatarFriendRetractInviteEvent'
AvatarFriendRejectRemoveEvent = 'avatarFriendRejectRemoveEvent' AvatarFriendRejectRemoveEvent = 'avatarFriendRejectRemoveEvent'
PlayerFriendInvitationEvent = 'playerFriendInvitationEvent'
PlayerFriendRejectInviteEvent = 'playerFriendRejectInviteEvent'
PlayerFriendRetractInviteEvent = 'playerFriendRetractInviteEvent'
PlayerFriendRejectRemoveEvent = 'playerFriendRejectRemoveEvent'
PlayerFriendNewSecretEvent = 'playerFriendNewSecretEvent'
PlayerFriendRejectNewSecretEvent = 'playerFriendRejectNewSecretEvent'
PlayerFriendRejectUseSecretEvent = 'playerFriendRejectUseSecretEvent'
WhisperIncomingEvent = 'whisperIncomingEvent' WhisperIncomingEvent = 'whisperIncomingEvent'
ChatFeedback_PassedBlacklist = 32 ChatFeedback_PassedBlacklist = 32
ChatFeedback_Whitelist = 64 ChatFeedback_Whitelist = 64
ChatFeedback_OpenChat = 128 ChatFeedback_OpenChat = 128
AvatarPendingCreate = -1 AvatarPendingCreate = -1
AvatarSlotUnavailable = -2 AvatarSlotUnavailable = -2
AvatarSlotAvailable = -3 AvatarSlotAvailable = -3

View file

@ -32,9 +32,6 @@ WhisperGiveupVisit = "%s couldn't find you because you're moving around!"
TeleportGreeting = 'Hi, %s.' TeleportGreeting = 'Hi, %s.'
WhisperFriendComingOnline = '%s is coming online!' WhisperFriendComingOnline = '%s is coming online!'
WhisperFriendLoggedOut = '%s has logged out.' WhisperFriendLoggedOut = '%s has logged out.'
WhisperPlayerOnline = '%s logged into %s'
WhisperPlayerOffline = '%s is offline.'
WhisperUnavailable = 'That player is no longer available for whispers.'
DialogSpecial = 'ooo' DialogSpecial = 'ooo'
DialogExclamation = '!' DialogExclamation = '!'
DialogQuestion = '?' DialogQuestion = '?'
@ -214,66 +211,11 @@ SCMenuSellbotInvasion = 'SELLBOT INVASION'
SCMenuFieldOffice = 'FIELD OFFICES' SCMenuFieldOffice = 'FIELD OFFICES'
SCMenuIdesOfMarch = 'GREEN' SCMenuIdesOfMarch = 'GREEN'
ScMenuBugs = 'Bugs' ScMenuBugs = 'Bugs'
GuildMemberTitle = 'Member Options'
GuildMemberPromote = 'Make Officer'
GuildMemberPromoteInvite = 'Make Veteran'
GuildMemberDemoteInvite = 'Demote to Veteran'
GuildMemberGM = 'Make Guildmaster'
GuildMemberGMConfirm = 'Confirm'
GuildMemberDemote = 'Demote to Member'
GuildMemberKick = 'Remove Member'
GuildMemberCancel = lCancel
GuildMemberOnline = 'has come online.'
GuildMemberOffline = 'has gone offline.'
GuildPrefix = '(G):'
GuildNewMember = 'New Guild Member'
GuildMemberUnknown = 'Unknown'
GuildMemberGMMessage = 'Warning! Would you like to give up leadership of your guild and make %s your guild master?\n\nYou will become an officer'
GuildInviteeOK = lOK
GuildInviteeNo = lNo
GuildInviteeInvitation = '%s is inviting you to join %s.'
GuildRedeemErrorInvalidToken = 'Sorry, that code is invalid. Please try again.'
GuildRedeemErrorGuildFull = 'Sorry, this guild has too many members already.'
FriendInviteeTooManyFriends = '%s would like to be your friend, but you already have too many friends on your list!' FriendInviteeTooManyFriends = '%s would like to be your friend, but you already have too many friends on your list!'
FriendInviteeInvitation = '%s would like to be your friend.' FriendInviteeInvitation = '%s would like to be your friend.'
FriendInviteeInvitationPlayer = "%s's player would like to be your friend."
FriendNotifictation = '%s is now your friend.' FriendNotifictation = '%s is now your friend.'
FriendInviteeOK = lOK FriendInviteeOK = lOK
FriendInviteeNo = lNo FriendInviteeNo = lNo
GuildInviterWentAway = '%s is no longer present.'
GuildInviterAlready = '%s is already in a guild.'
GuildInviterBusy = '%s is busy right now.'
GuildInviterNotYet = 'Invite %s to join your guild?'
GuildInviterCheckAvailability = 'Inviting %s to join your guild.'
GuildInviterOK = lOK
GuildInviterNo = lNo
GuildInviterCancel = lCancel
GuildInviterYes = lYes
GuildInviterTooFull = 'Guild has reached maximum size.'
GuildInviterNo = lNo
GuildInviterClickToon = 'Click on the pirate you would like to invite.'
GuildInviterTooMany = 'This is a bug'
GuildInviterNotAvailable = '%s is busy right now; try again later.'
GuildInviterGuildSaidNo = '%s has declined your guild invitation.'
GuildInviterAlreadyInvited = '%s has already been invited.'
GuildInviterEndGuildship = 'Remove %s from the guild?'
GuildInviterFriendsNoMore = '%s has left the guild.'
GuildInviterSelf = 'You are already in the guild!'
GuildInviterIgnored = '%s is ignoring you.'
GuildInviterAsking = 'Asking %s to join the guild.'
GuildInviterGuildSaidYes = '%s has joined the guild!'
GuildInviterFriendKickedOut = '%s has kicked out %s from the Guild.'
GuildInviterFriendKickedOutP = '%s have kicked out %s from the Guild.'
GuildInviterFriendInvited = '%s has invited %s to the Guild.'
GuildInviterFriendInvitedP = '%s have invited %s to the Guild.'
GuildInviterFriendPromoted = '%s has promoted %s to the rank of %s.'
GuildInviterFriendPromotedP = '%s have promoted %s to the rank of %s.'
GuildInviterFriendDemoted = '%s has demoted %s to the rank of %s.'
GuildInviterFriendDemotedP = '%s have demoted %s to the rank of %s.'
GuildInviterFriendPromotedGM = '%s has named %s as the new %s'
GuildInviterFriendPromotedGMP = '%s have named %s as the new %s'
GuildInviterFriendDemotedGM = '%s has been named by %s as the new GuildMaster who became the rank of %s'
GuildInviterFriendDemotedGMP = '%s have been named by %s as the new GuildMaster who beaome the rank of %s'
FriendOnline = 'has come online.' FriendOnline = 'has come online.'
FriendOffline = 'has gone offline.' FriendOffline = 'has gone offline.'
FriendInviterOK = lOK FriendInviterOK = lOK
@ -285,7 +227,6 @@ FriendInviterNo = lNo
FriendInviterClickToon = 'Click on the toon you would like to make friends with.' FriendInviterClickToon = 'Click on the toon you would like to make friends with.'
FriendInviterTooMany = 'You have too many friends on your list to add another one now. You will have to remove some friends if you want to make friends with %s.' FriendInviterTooMany = 'You have too many friends on your list to add another one now. You will have to remove some friends if you want to make friends with %s.'
FriendInviterToonTooMany = 'You have too many toon friends on your list to add another one now. You will have to remove some toon friends if you want to make friends with %s.' FriendInviterToonTooMany = 'You have too many toon friends on your list to add another one now. You will have to remove some toon friends if you want to make friends with %s.'
FriendInviterPlayerTooMany = 'You have too many player friends on your list to add another one now. You will have to remove some player friends if you want to make friends with %s.'
FriendInviterNotYet = 'Would you like to make friends with %s?' FriendInviterNotYet = 'Would you like to make friends with %s?'
FriendInviterCheckAvailability = 'Seeing if %s is available.' FriendInviterCheckAvailability = 'Seeing if %s is available.'
FriendInviterNotAvailable = '%s is busy right now; try again later.' FriendInviterNotAvailable = '%s is busy right now; try again later.'
@ -304,15 +245,11 @@ FriendInviterSelf = "You are already 'friends' with yourself!"
FriendInviterIgnored = '%s is ignoring you.' FriendInviterIgnored = '%s is ignoring you.'
FriendInviterAsking = 'Asking %s to be your friend.' FriendInviterAsking = 'Asking %s to be your friend.'
FriendInviterFriendSaidYes = 'You are now friends with %s!' FriendInviterFriendSaidYes = 'You are now friends with %s!'
FriendInviterPlayerFriendSaidYes = "You are now friends with %s's player, %s!"
FriendInviterFriendSaidNo = '%s said no, thank you.' FriendInviterFriendSaidNo = '%s said no, thank you.'
FriendInviterFriendSaidNoNewFriends = "%s isn't looking for new friends right now." FriendInviterFriendSaidNoNewFriends = "%s isn't looking for new friends right now."
FriendInviterOtherTooMany = '%s has too many friends already!' FriendInviterOtherTooMany = '%s has too many friends already!'
FriendInviterMaybe = '%s was unable to answer.' FriendInviterMaybe = '%s was unable to answer.'
FriendInviterDown = 'Cannot make friends now.' FriendInviterDown = 'Cannot make friends now.'
TalkGuild = 'G'
TalkParty = 'P'
TalkPVP = 'PVP'
AntiSpamInChat = '***Spamming***' AntiSpamInChat = '***Spamming***'
IgnoreConfirmOK = lOK IgnoreConfirmOK = lOK
IgnoreConfirmCancel = lCancel IgnoreConfirmCancel = lCancel
@ -411,7 +348,7 @@ SuitBrushOffs = {'f': ["I'm late for a meeting."],
"You're in no position to meet with me.", "You're in no position to meet with me.",
'Talk to my assistant.', 'Talk to my assistant.',
"I'll pretend I don't see you Toon.", "I'll pretend I don't see you Toon.",
"There's a restraining order coming your way"]} "There's a restraining order coming your way."]}
SuitFaceoffTaunts = {'b': ['Do you have a donation for me?', SuitFaceoffTaunts = {'b': ['Do you have a donation for me?',
"I'm going to make you a sore loser.", "I'm going to make you a sore loser.",
"I'm going to leave you high and dry.", "I'm going to leave you high and dry.",
@ -1819,279 +1756,12 @@ SpeedChatStaticTextToontown = {100: 'Hi!',
30450: "It's easy to be green!", 30450: "It's easy to be green!",
30451: 'Visit Green Bean Jeans and you can be green too!', 30451: 'Visit Green Bean Jeans and you can be green too!',
30452: "It's on Oak Street in Daisy Gardens."} 30452: "It's on Oak Street in Daisy Gardens."}
SpeedChatStaticTextPirates = {50001: 'Aye',
50002: 'Nay',
50003: 'Yes',
50004: 'No',
50005: 'Ok',
50100: 'Gangway!',
50101: 'Blimey!',
50102: 'Well blow me down!',
50103: 'Walk the plank!',
50104: 'Dead men tell no tales....',
50105: 'Shiver me timbers!',
50106: "Salty as a Kraken's kiss.",
50107: 'Treasure be the measure of our pleasure!',
50108: "I don't fear death - I attune it.",
50700: 'Ahoy!',
50701: 'Ahoy, mate!',
50702: 'Yo-Ho-Ho',
50703: 'Avast!',
50704: 'Hey Bucko.',
50800: 'Until next time.',
50801: 'May fair winds find ye.',
50802: 'Godspeed.',
50900: 'How are ye, mate?',
50901: '',
51000: "It's like the sky is raining gold doubloons!",
51001: 'May a stiff wind be at our backs, the sun on our faces and our cannons fire true!',
51100: 'I be sailing some rough waters today.',
51200: 'Me apologies, mate.',
51201: 'Sorry.',
51202: 'Sorry, I was busy before.',
51203: 'Sorry, I already have plans.',
51204: "Sorry, I don't need to do that.",
51300: 'Attack the weakest one!',
51301: 'Attack the strongest one!',
51302: 'Attack me target!',
51303: 'I be needing help!',
51304: "I can't do any damage!",
51305: 'I think we be in trouble.',
51306: 'Surround the most powerful one.',
51307: 'We should retreat.',
51308: 'Run for it!',
51400: 'Fire a Broadside!',
51401: 'Port Side! (left)',
51402: 'Starboard Side! (right)',
51403: 'Incoming!',
51404: 'Come about!',
51405: 'Broadside! Take Cover!',
51406: 'To the Cannons!',
51407: 'Open fire!',
51408: 'Hold yer fire!',
51409: 'Aim for the masts!',
51410: 'Aim for the hull!',
51411: 'Prepare to board!',
51412: "She's coming about.",
51413: 'Ramming speed!',
51414: "We've got her on the run.",
51415: 'We be taking on water!',
51416: "We can't take anymore!",
51417: "I don't have a shot!",
51418: "Let's find port for repair.",
51419: 'Man overboard!',
51420: 'Enemy spotted.',
51421: 'Handsomely now, mates!',
50400: "Let's set sail.",
50401: "Let's get out of here.",
51500: "Let's sail to Port Royal.",
51501: "Let's sail to Tortuga.",
51502: "Let's sail to Padres Del Fuego.",
51503: "Let's sail to Devil's Anvil.",
51504: "Let's sail to Kingshead.",
51505: "Let's sail to Isla Perdida.",
51506: "Let's sail to Cuba.",
51507: "Let's sail to Tormenta.",
51508: "Let's sail to Outcast Isle.",
51509: "Let's sail to Driftwood.",
51510: "Let's sail to Cutthroat.",
51511: "Let's sail to Rumrunner's Isle.",
51512: "Let's sail to Isla Cangrejos.",
51600: "Let's head into town.",
51601: "Let's go to the docks.",
51602: "Let's head to the tavern.",
51800: "Let's go to Fort Charles.",
51801: "Let's go to the Governor's Mansion.",
52500: 'Where be I, mate?',
51700: 'Yer already there.',
51701: "I don't know.",
51702: 'Yer on the wrong island.',
51703: "That's in town.",
51704: 'Look just outside of town.',
51705: 'Ye will have to search through the jungle.',
51706: 'Deeper inland.',
51707: 'Oh, that be by the coast.',
50200: 'Bilge rat!',
50201: 'Scurvy dog!',
50202: 'See ye in Davy Jones locker!',
50203: 'Scoundrel!',
50204: 'Landlubber!',
50205: 'Addle-minded fool!',
50206: 'You need a sharp sword and sharper wits.',
50207: 'Ye be one doubloon short of a full hull mate!',
50208: "Watch yer tongue or I'll pickle it with sea salt!",
50209: 'Touch me loot and you get the boot!',
50210: 'The horizon be as empty as yer head.',
50211: "You're a canvas shy of a full sail, aren't ye mate?",
50300: 'Fine shooting mate!',
50301: 'A well placed blow!',
50302: 'Nice shot!',
50303: 'Well met!',
50304: 'We showed them!',
50305: 'Yer not so bad yerself!',
50306: 'A fine plunder haul!',
52400: 'May luck be my lady.',
52401: 'I think these cards be marked!',
52402: 'Blimey cheater!',
51900: "That's a terrible flop!",
51901: 'Trying to buy the hand, are ye?',
51902: 'Ye be bluffing.',
51903: "I don't think ye had it.",
51904: 'Saved by the river.',
52600: 'Hit me.',
52601: 'Can I get another dealer?',
53101: 'I caught a fish!',
53102: 'I saw a Legendary Fish!',
53103: 'What did you catch?',
53104: 'This will make a whale of a tale!',
53105: 'That was a beauty!',
53106: 'Arr, the sea is treacherous today.',
53107: 'What a bountiful haul of fish!',
53110: 'Do you have the Legendary Lure?',
53111: 'Have you ever caught a Legendary Fish?',
53112: 'Can you sail on a fishing boat?',
53113: 'Where is the Fishing Master?',
53114: 'Have you completed your fish collection?',
53120: 'Fire at my target!',
53121: 'Fire at the ship closest to the shore!',
53122: "There's a ship getting away!",
53123: 'Fire at the big ships!',
53124: 'Fire at the small ships!',
53125: 'More are coming!',
53126: "We're not going to last much longer!",
53127: 'Shoot the barrels!',
53128: "We've got new ammo!",
53129: 'Sturdy defense, mates!',
53141: 'Look at the potion I made!',
53142: 'Have you completed your potion collection?',
53143: 'Where is the Gypsy?',
53144: 'What potion is that?',
53145: 'This potion was easy enough.',
53146: "This potion was hard brewin', I tell ye!",
53160: 'We need someone to bilge pump!',
53161: 'We need someone to scrub!',
53162: 'We need someone to saw!',
53163: 'We need someone to brace!',
53164: 'We need someone to hammer!',
53165: 'We need someone to patch!',
53166: "I'll do it!",
53167: "Keep it up, this ship won't repair itself!",
53168: 'Great job repairing the ship!',
52100: 'Want to group up?',
52101: 'Join me crew?',
52200: 'Fight some skeletons?',
52201: 'Fight some crabs?',
52300: "How 'bout a game of Mayhem?",
52301: 'Join me Mayhem game.',
52302: 'Want to start a Mayhem game?',
52303: 'Want to start a team battle game?',
52304: 'Join me team battle game.',
52350: 'Join my Cannon Defense.',
52351: 'Want to start a Cannon Defense?',
52352: 'Can you lend me a hand with Repair?',
52353: 'We need to Repair the ship now!',
52354: 'Care to catch some fish?',
52355: 'Want to go fishing with me?',
52356: "Join me crew for some fishin'?",
52357: 'Time to brew some potions!',
52358: 'You should try your hand at brewing potions.',
52000: '',
52000: '',
52700: '',
53000: '',
52800: '',
52900: '',
50500: '',
50600: '',
60100: 'Hi!',
60101: 'Hello!',
60102: 'Hey!',
60103: 'Yo!',
60104: 'Hi everybody!',
60105: 'How are you doing?',
60106: "What's Up?",
60200: 'Bye!',
60201: 'Later!',
60202: 'See ya!',
60203: "I'll be right back.",
60204: 'I need to go.',
60300: ':-)',
60301: 'Cool!',
60302: 'Yeah!',
60303: 'Ha ha!',
60304: 'Sweet!',
60305: 'Yeah!',
60306: 'That rocks!',
60307: 'Funky!',
60308: 'Awesome!',
60309: 'Wow!',
60400: ':-(',
60401: 'Doh!',
60402: 'Aw man!',
60403: 'Ouch!',
60404: 'Bummer!',
60500: 'Where are you?',
60501: "Let's go to the Gateway Store.",
60502: "Let's go to the Disco Hall.",
60503: "Let's go to Toontown.",
60504: "Let's go to Pirates of the Carribean.",
60505: 'Flip coin',
60506: 'Dance',
60507: 'Chant 1',
60508: 'Chant 2',
60509: 'Dance a jig',
60510: 'Sleep',
60511: 'Flex',
60512: 'Play Lute',
60513: 'Play Flute',
60514: 'Frustrated',
60515: 'Searching',
60516: 'Yawn',
60517: 'Kneel',
60518: 'Sweep',
60519: 'Primp',
60520: 'Yawn',
60521: 'Dance',
60522: 'No',
60523: 'Yes',
60524: 'Laugh',
60525: 'Clap',
60526: 'Smile',
60527: 'Anger',
60528: 'Fear',
60529: 'Sad',
60530: 'Celebrate',
60668: 'Celebrate',
60669: 'Sleep',
60602: 'Angry',
60614: 'Clap',
60622: 'Scared',
60640: 'Laugh',
60652: 'Sad',
60657: 'Smile',
60664: 'Wave',
60665: 'Wink',
60666: 'Yawn',
60669: 'Sleep',
60670: 'Dance',
60676: 'Flirt',
60677: 'Zombie dance',
60678: 'Noisemaker',
60671: "Hello, I'm a Pirate, and I'm here to steal your heart.",
60672: "I just found the treasure I've been searching for.",
60673: "If you were a booger, I'd pick you first.",
60674: 'Come to Tortuga often?',
60675: 'Do you have a map? I just keep getting lost in your eyes.',
65000: 'Yes',
65001: 'No',
60909: 'Check Hand'}
SpeedChatStaticText = SpeedChatStaticTextCommon SpeedChatStaticText = SpeedChatStaticTextCommon
Emotes_Root = 'EMOTES' Emotes_Root = 'EMOTES'
Emotes_Dances = 'Dances' Emotes_Dances = 'Dances'
Emotes_General = 'General' Emotes_General = 'General'
Emotes_Music = 'Music' Emotes_Music = 'Music'
Emotes_Expressions = 'Emotions' Emotes_Expressions = 'Emotions'
Emote_ShipDenied = 'Cannot emote while sailing.'
Emote_MoveDenied = 'Cannot emote while moving.' Emote_MoveDenied = 'Cannot emote while moving.'
Emote_CombatDenied = 'Cannot emote while in combat.' Emote_CombatDenied = 'Cannot emote while in combat.'
Emote_CannonDenied = 'Cannot emote while using a cannon.' Emote_CannonDenied = 'Cannot emote while using a cannon.'
@ -2629,48 +2299,6 @@ SCMenuCustomCogIndices = {'bf': (20005, 20014),
'rb': (20320, 20329), 'rb': (20320, 20329),
'sc': (20330, 20331), 'sc': (20330, 20331),
'sd': (20341, 20350)} 'sd': (20341, 20350)}
PSCMenuExpressions = 'EXPRESSIONS'
PSCMenuGreetings = 'GREETINGS'
PSCMenuGoodbyes = 'GOODBYES'
PSCMenuFriendly = 'FRIENDLY'
PSCMenuHappy = 'HAPPY'
PSCMenuSad = 'SAD'
PSCMenuSorry = 'SORRY'
PSCMenuCombat = 'COMBAT'
PSCMenuSeaCombat = 'SEA COMBAT'
PSCMenuPlaces = 'PLACES'
PSCMenuLetsSail = "LET'S SAIL..."
PSCMenuLetsHeadTo = "LET'S HEAD TO..."
PSCMenuHeadToPortRoyal = 'PORT ROYAL'
PSCMenuWhereIs = 'WHERE IS ..?'
PSCMenuWhereIsPortRoyal = 'PORT ROYAL'
PSCMenuWhereIsTortuga = 'TORTUGA'
PSCMenuWhereIsPadresDelFuego = 'PADRES DEL FUEGO'
PSCMenuWhereIsLasPulgas = 'LAS PULGAS'
PSCMenuWhereIsLosPadres = 'LOS PADRES'
PSCMenuDirections = 'DIRECTIONS'
PSCMenuInsults = 'INSULTS'
PSCMenuCompliments = 'COMPLIMENTS'
PSCMenuCardGames = 'CARD GAMES'
PSCMenuPoker = 'POKER'
PSCMenuBlackjack = 'BLACKJACK'
PSCMenuMinigames = 'MINIGAMES'
PSCMenuFishing = 'FISHING'
PSCMenuCannonDefense = 'CANNON DEFENSE'
PSCMenuPotions = 'POTION BREWING'
PSCMenuRepair = 'REPAIR'
PSCMenuInvitations = 'INVITATIONS'
PSCMenuVersusPlayer = 'VERSUS'
PSCMenuHunting = 'HUNTING'
PSCMenuQuests = 'QUESTS'
PSCMenuGM = 'GM'
PSCMenuShips = 'SHIPS'
PSCMenuAdventures = 'ADVENTURE'
GWSCMenuHello = 'GREETINGS'
GWSCMenuBye = 'GOODBYES'
GWSCMenuHappy = 'HAPPY'
GWSCMenuSad = 'SAD'
GWSCMenuPlaces = 'PLACES'
RandomButton = 'Randomize' RandomButton = 'Randomize'
TypeANameButton = 'Type Name' TypeANameButton = 'Type Name'
PickANameButton = 'Pick-A-Name' PickANameButton = 'Pick-A-Name'
@ -2712,7 +2340,6 @@ AvatarDetailPanelCancel = lCancel
AvatarDetailPanelClose = lClose AvatarDetailPanelClose = lClose
AvatarDetailPanelLookup = 'Looking up details for %s.' AvatarDetailPanelLookup = 'Looking up details for %s.'
AvatarDetailPanelFailedLookup = 'Unable to get details for %s.' AvatarDetailPanelFailedLookup = 'Unable to get details for %s.'
AvatarDetailPanelPlayer = 'Player: %(player)s\nWorld: %(world)s\nLocation: %(location)s'
AvatarDetailPanelOnline = 'District: %(district)s\nLocation: %(location)s' AvatarDetailPanelOnline = 'District: %(district)s\nLocation: %(location)s'
AvatarDetailPanelOffline = 'District: offline\nLocation: offline' AvatarDetailPanelOffline = 'District: offline\nLocation: offline'
AvatarPanelFriends = 'Friends' AvatarPanelFriends = 'Friends'

View file

@ -1,15 +0,0 @@
from SCTerminal import SCTerminal
from otp.speedchat import SpeedChatGMHandler
SCGMTextMsgEvent = 'SCGMTextMsg'
class SCGMTextTerminal(SCTerminal):
def __init__(self, textId):
SCTerminal.__init__(self)
gmHandler = SpeedChatGMHandler.SpeedChatGMHandler()
self.textId = textId
self.text = gmHandler.getPhrase(textId)
def handleSelect(self):
SCTerminal.handleSelect(self)
messenger.send(self.getEventName(SCGMTextMsgEvent), [self.textId])

View file

@ -94,7 +94,7 @@ class SCMenu(SCObject, NodePath):
self.appendFromStructure(structure) self.appendFromStructure(structure)
def appendFromStructure(self, structure): def appendFromStructure(self, structure):
from SpeedChatTypes import SCMenuHolder, SCStaticTextTerminal, SCGMTextTerminal from SpeedChatTypes import SCMenuHolder, SCStaticTextTerminal
from otp.otpbase import OTPLocalizer from otp.otpbase import OTPLocalizer
def addChildren(menu, childList): def addChildren(menu, childList):
@ -123,9 +123,6 @@ class SCMenu(SCObject, NodePath):
holder = SCMenuHolder(holderTitle, menu=subMenu) holder = SCMenuHolder(holderTitle, menu=subMenu)
menu.append(holder) menu.append(holder)
addChildren(subMenu, subMenuChildren) addChildren(subMenu, subMenuChildren)
elif type(child) == type('') and child[:2] == 'gm':
terminal = SCGMTextTerminal(child)
menu.append(terminal)
else: else:
raise 'error parsing speedchat structure. invalid child: %s' % child raise 'error parsing speedchat structure. invalid child: %s' % child

View file

@ -1,47 +0,0 @@
from pandac.PandaModules import *
from direct.showbase import DirectObject
from otp.otpbase import OTPLocalizer
class SpeedChatGMHandler(DirectObject.DirectObject):
scStructure = None
scList = {}
def __init__(self):
if SpeedChatGMHandler.scStructure is None:
self.generateSCStructure()
return
def generateSCStructure(self):
SpeedChatGMHandler.scStructure = [OTPLocalizer.PSCMenuGM]
phraseCount = 0
numGMCategories = base.config.GetInt('num-gm-categories', 0)
for i in xrange(0, numGMCategories):
categoryName = base.config.GetString('gm-category-%d' % i, '')
if categoryName == '':
continue
categoryStructure = [categoryName]
numCategoryPhrases = base.config.GetInt('gm-category-%d-phrases' % i, 0)
for j in xrange(0, numCategoryPhrases):
phrase = base.config.GetString('gm-category-%d-phrase-%d' % (i, j), '')
if phrase != '':
idx = 'gm%d' % phraseCount
SpeedChatGMHandler.scList[idx] = phrase
categoryStructure.append(idx)
phraseCount += 1
SpeedChatGMHandler.scStructure.append(categoryStructure)
numGMPhrases = base.config.GetInt('num-gm-phrases', 0)
for i in xrange(0, numGMPhrases):
phrase = base.config.GetString('gm-phrase-%d' % i, '')
if phrase != '':
idx = 'gm%d' % phraseCount
SpeedChatGMHandler.scList[idx] = phrase
SpeedChatGMHandler.scStructure.append(idx)
phraseCount += 1
def getStructure(self):
return SpeedChatGMHandler.scStructure
def getPhrase(self, id):
return SpeedChatGMHandler.scList[id]

View file

@ -1,6 +1,5 @@
from SCTerminal import SCTerminalSelectedEvent from SCTerminal import SCTerminalSelectedEvent
from SCTerminal import SCTerminalLinkedEmoteEvent from SCTerminal import SCTerminalLinkedEmoteEvent
from SCStaticTextTerminal import SCStaticTextMsgEvent from SCStaticTextTerminal import SCStaticTextMsgEvent
from SCGMTextTerminal import SCGMTextMsgEvent
from SCCustomTerminal import SCCustomMsgEvent from SCCustomTerminal import SCCustomMsgEvent
from SCEmoteTerminal import SCEmoteMsgEvent, SCEmoteNoAccessEvent from SCEmoteTerminal import SCEmoteMsgEvent, SCEmoteNoAccessEvent

View file

@ -6,7 +6,6 @@ from SCTerminal import SCTerminal
from SCCustomMenu import SCCustomMenu from SCCustomMenu import SCCustomMenu
from SCEmoteMenu import SCEmoteMenu from SCEmoteMenu import SCEmoteMenu
from SCStaticTextTerminal import SCStaticTextTerminal from SCStaticTextTerminal import SCStaticTextTerminal
from SCGMTextTerminal import SCGMTextTerminal
from SCCustomTerminal import SCCustomTerminal from SCCustomTerminal import SCCustomTerminal
from SCEmoteTerminal import SCEmoteTerminal from SCEmoteTerminal import SCEmoteTerminal
from SCColorScheme import SCColorScheme from SCColorScheme import SCColorScheme

View file

@ -1,78 +0,0 @@
class RejectCode:
TIMEOUT = 65535
NO_GUILD = 10000
MAY_NOT_JOIN_GUILD = 10001
MAY_NOT_INVITE_GUILD = 10002
NO_MEMBERSHIP = 10003
GUILD_FULL = 10004
LEAVE_CURRENT_GUILD_FIRST = 10005
ALREADY_IN_GUILD = 10006
JOIN_OWN_GUILD = 10007
NOT_IN_A_GUILD = 10008
OTHER_AVATAR_NO_MEMBERSHIP = 10009
OTHER_AVATAR_NO_GUILD = 10010
OTHER_AVATAR_NO_GUILD_FOUND = 10011
ALREADY_HAS_GUILD = 10012
MAY_NOT_CREATE_GUILD = 10013
BUSY = 10014
NO_CREW = 20000
MAY_NOT_JOIN_CREW = 20001
JOIN_OWN_CREW = 20002
NOT_IN_A_CREW = 20003
MAY_NOT_INVITE_CREW = 20004
ALREADY_IN_CREW = 20005
ALREADY_INVITED_TO_CREW = 20006
NOT_CAPTAIN_OF_CREW = 20007
NO_SELF_CREW_INVITE = 20008
CREW_INVITATION_DECLINED = 20009
ALREADY_LOCKED = 20010
NOT_LOCKED = 20011
NOT_YOUR_LOCK = 20012
YOUR_CREW_IS_LOCKED = 20013
OTHER_CREW_IS_LOCKED = 20014
NOT_IN_YOUR_CREW = 20015
NO_TRADE = 30000
NOT_YOUR_TRADE = 30001
TRADE_NOT_ACTIVE = 30002
AVATAR_NOT_HERE = 30003
MAY_NOT_TRADE = 30004
NO_SELF_TRADE = 30005
OTHER_AVATAR_NOT_HERE = 30006
OTHER_AVATAR_MAY_NOT_TRADE = 30007
NO_INVENTORY = 40000
CONTENT_TYPE_NOT_ALLOWED = 40001
HAS_NONE_OF_THAT_TYPE = 40002
NO_MORE_SLOTS = 40003
SLOT_TYPE_NOT_FOUND = 40004
OVERFLOW = 40005
UNDERFLOW = 40006
MULTIPLE_OF_SAME_ITEM = 40007
MAY_NOT_DESTROY = 40008
NO_REMOVE = 40009
NOT_YOUR_DO_ID = 40010
NO_AVATAR = 50000
NOT_YOUR_AVATAR = 50001
BAD_DELETE_PASSWORD = 50002
MAY_NOT_LIST_AVATARS = 50003
MAY_NOT_CREATE_AVATAR = 50004
MAY_NOT_REMOVE_AVATAR = 50005
SLOT_OUT_OF_RANGE = 50006
SLOT_TAKEN = 50007
INVALID_ACCOUNT = 50008
AVATAR_ONLINE = 50009
MAX_AVATAR_LIMIT = 50010
NO_LOCK_ON_SLOT = 50011
NO_FRIENDS_LIST = 60000
FRIENDS_LIST_NOT_HANDY = 60001
INVITEE_NOT_ONLINE = 60002
ALREADY_INVITED = 60003
ALREADY_YOUR_FRIEND = 60004
FRIENDS_LIST_FULL = 60005
OTHER_FRIENDS_LIST_FULL = 60006
ALREADY_NOT_YOUR_FRIEND = 60007
INVITATION_DECLINED = 60008
NOT_YOUR_FRIENDS_LIST = 60009
ALREADY_FRIENDS_WITH_SELF = 60010
MAY_NOT_OPEN_INVITE = 60011

View file

@ -319,16 +319,19 @@ class DistributedBattleBase(DistributedNode.DistributedNode, BattleBase):
pass pass
def getInteractiveProp(self): def getInteractiveProp(self):
if self.interactiveProp: if config.GetBool('want-anim-props', True):
return self.interactiveProp if self.interactiveProp:
elif base.cr.playGame.hood:
loader = base.cr.playGame.hood.loader
if hasattr(loader, 'getInteractiveProp'):
self.interactiveProp = base.cr.playGame.hood.loader.getInteractiveProp(self.zoneId)
return self.interactiveProp return self.interactiveProp
return None elif base.cr.playGame.hood:
loader = base.cr.playGame.hood.loader
if hasattr(loader, 'getInteractiveProp'):
self.interactiveProp = base.cr.playGame.hood.loader.getInteractiveProp(self.zoneId)
return self.interactiveProp
return None
else:
return None
def getInteractivePropTrackBonus(self): def getInteractivePropTrackBonus(self):
prop = self.getInteractiveProp() prop = self.getInteractiveProp()

View file

@ -163,7 +163,7 @@ class DistributedBuilding(DistributedObject.DistributedObject):
anyOthers = 1 anyOthers = 1
if anyOthers: if anyOthers:
self.waitingMessage = DirectLabel(text=TTLocalizer.BuildingWaitingForVictors, text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.35), scale=0.1) self.waitingMessage = DirectLabel(text=TTLocalizer.WaitingForOtherToons, text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.35), scale=0.1)
elif victorCount == 0: elif victorCount == 0:
pass pass
else: else:
@ -201,7 +201,7 @@ class DistributedBuilding(DistributedObject.DistributedObject):
anyOthers = 1 anyOthers = 1
if anyOthers: if anyOthers:
self.waitingMessage = DirectLabel(text=TTLocalizer.BuildingWaitingForVictors, text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.35), scale=0.1) self.waitingMessage = DirectLabel(text=TTLocalizer.WaitingForOtherToons, text_fg=VBase4(1, 1, 1, 1), text_align=TextNode.ACenter, relief=None, pos=(0, 0, 0.35), scale=0.1)
elif victorCount == 0: elif victorCount == 0:
pass pass
else: else:

View file

@ -83,7 +83,6 @@ CatalogItemType2multipleAllowed = {INVALID_ITEM: False,
ANIMATED_FURNITURE_ITEM: True, ANIMATED_FURNITURE_ITEM: True,
ACCESSORY_ITEM: False, ACCESSORY_ITEM: False,
HOUSE_ITEM: False} HOUSE_ITEM: False}
SingleCodeRedemption = (BEAN_ITEM,)
CatalogItemTypeMask = 31 CatalogItemTypeMask = 31
CatalogItemSaleFlag = 128 CatalogItemSaleFlag = 128
CatalogItemGiftTag = 64 CatalogItemGiftTag = 64

View file

@ -347,13 +347,6 @@ class MailboxScreen(DirectObject.DirectObject):
self.currentItem = None self.currentItem = None
return return
def checkFamily(self, doId):
for familyMember in base.cr.avList:
if familyMember.id == doId:
return familyMember
return None
def __showCurrentItem(self): def __showCurrentItem(self):
self.__clearCurrentItem() self.__clearCurrentItem()
if len(self.items) < 1: if len(self.items) < 1:
@ -519,20 +512,5 @@ class MailboxScreen(DirectObject.DirectObject):
def getSenderName(self, avId): def getSenderName(self, avId):
sender = base.cr.identifyFriend(avId) sender = base.cr.identifyFriend(avId)
nameOfSender = ''
if sender: return sender.getName() if sender else TTLocalizer.MailboxGiftTagAnonymous
nameOfSender = sender.getName()
else:
sender = self.checkFamily(avId)
if sender:
nameOfSender = sender.name
elif hasattr(base.cr, 'playerFriendsManager'):
sender = base.cr.playerFriendsManager.getAvHandleFromId(avId)
if sender:
nameOfSender = sender.getName()
if not sender:
nameOfSender = TTLocalizer.MailboxGiftTagAnonymous
if hasattr(base.cr, 'playerFriendsManager'):
base.cr.playerFriendsManager.requestAvatarInfo(avId)
self.accept('friendsListChanged', self.__showCurrentItem)
return nameOfSender

View file

@ -338,7 +338,6 @@ class TTChatInputSpeedChat(DirectObject.DirectObject):
self.chatMgr = chatMgr self.chatMgr = chatMgr
self.firstTime = 0 self.firstTime = 0
self.whisperAvatarId = None self.whisperAvatarId = None
self.toPlayer = 0
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui') buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
okButtonImage = (buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')) okButtonImage = (buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr'))
self.emoteNoAccessPanel = DirectFrame(parent=hidden, relief=None, state='normal', text=OTPLocalizer.SCEmoteNoAccessMsg, frameSize=(-1, 1, -1, 1), geom=DGG.getDefaultDialogGeom(), geom_color=OTPGlobals.GlobalDialogColor, geom_scale=(0.92, 1, 0.6), geom_pos=(0, 0, -.08), text_scale=0.08) self.emoteNoAccessPanel = DirectFrame(parent=hidden, relief=None, state='normal', text=OTPLocalizer.SCEmoteNoAccessMsg, frameSize=(-1, 1, -1, 1), geom=DGG.getDefaultDialogGeom(), geom_color=OTPGlobals.GlobalDialogColor, geom_scale=(0.92, 1, 0.6), geom_pos=(0, 0, -.08), text_scale=0.08)
@ -402,9 +401,8 @@ class TTChatInputSpeedChat(DirectObject.DirectObject):
del self.fsm del self.fsm
del self.chatMgr del self.chatMgr
def show(self, whisperAvatarId = None, toPlayer = 0): def show(self, whisperAvatarId = None):
self.whisperAvatarId = whisperAvatarId self.whisperAvatarId = whisperAvatarId
self.toPlayer = toPlayer
self.fsm.request('active') self.fsm.request('active')
def hide(self): def hide(self):
@ -469,33 +467,25 @@ class TTChatInputSpeedChat(DirectObject.DirectObject):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
self.chatMgr.sendSCChatMessage(textId) self.chatMgr.sendSCChatMessage(textId)
else: else:
self.chatMgr.sendSCWhisperMessage(textId, self.whisperAvatarId, self.toPlayer) self.chatMgr.sendSCWhisperMessage(textId, self.whisperAvatarId)
self.toPlayer = 0
return
def handleSingingMsg(self, textId): def handleSingingMsg(self, textId):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
self.chatMgr.sendSCSingingChatMessage(textId) self.chatMgr.sendSCSingingChatMessage(textId)
else: else:
self.chatMgr.sendSCSingingWhisperMessage(textId) self.chatMgr.sendSCSingingWhisperMessage(textId)
self.toPlayer = 0
return
def handleCustomMsg(self, textId): def handleCustomMsg(self, textId):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
self.chatMgr.sendSCCustomChatMessage(textId) self.chatMgr.sendSCCustomChatMessage(textId)
else: else:
self.chatMgr.sendSCCustomWhisperMessage(textId, self.whisperAvatarId, self.toPlayer) self.chatMgr.sendSCCustomWhisperMessage(textId, self.whisperAvatarId)
self.toPlayer = 0
return
def handleEmoteMsg(self, emoteId): def handleEmoteMsg(self, emoteId):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
self.chatMgr.sendSCEmoteChatMessage(emoteId) self.chatMgr.sendSCEmoteChatMessage(emoteId)
else: else:
self.chatMgr.sendSCEmoteWhisperMessage(emoteId, self.whisperAvatarId, self.toPlayer) self.chatMgr.sendSCEmoteWhisperMessage(emoteId, self.whisperAvatarId)
self.toPlayer = 0
return
def handleEmoteNoAccess(self): def handleEmoteNoAccess(self):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
@ -512,9 +502,7 @@ class TTChatInputSpeedChat(DirectObject.DirectObject):
if self.whisperAvatarId is None: if self.whisperAvatarId is None:
self.chatMgr.sendSCToontaskChatMessage(taskId, toNpcId, toonProgress, msgIndex) self.chatMgr.sendSCToontaskChatMessage(taskId, toNpcId, toonProgress, msgIndex)
else: else:
self.chatMgr.sendSCToontaskWhisperMessage(taskId, toNpcId, toonProgress, msgIndex, self.whisperAvatarId, self.toPlayer) self.chatMgr.sendSCToontaskWhisperMessage(taskId, toNpcId, toonProgress, msgIndex, self.whisperAvatarId)
self.toPlayer = 0
return
def handleResistanceMsg(self, textId): def handleResistanceMsg(self, textId):
self.chatMgr.sendSCResistanceChatMessage(textId) self.chatMgr.sendSCResistanceChatMessage(textId)

View file

@ -112,13 +112,10 @@ class TTChatInputWhiteList(ChatInputWhiteListFrame):
for friendId, flags in base.localAvatar.friendsList: for friendId, flags in base.localAvatar.friendsList:
if flags & ToontownGlobals.FriendChat: if flags & ToontownGlobals.FriendChat:
self.sendWhisperByFriend(friendId, text) self.sendWhisperByFriend(friendId, text)
elif self.receiverId:
elif not self.receiverId:
base.talkAssistant.sendOpenTalk(text)
elif self.receiverId and not self.toPlayer:
base.talkAssistant.sendWhisperTalk(text, self.receiverId) base.talkAssistant.sendWhisperTalk(text, self.receiverId)
elif self.receiverId and self.toPlayer: else:
base.talkAssistant.sendAccountTalk(text, self.receiverId) base.talkAssistant.sendOpenTalk(text)
def sendWhisperByFriend(self, avatarId, text): def sendWhisperByFriend(self, avatarId, text):
online = 0 online = 0
@ -151,14 +148,6 @@ class TTChatInputWhiteList(ChatInputWhiteListFrame):
def exitAllChat(self): def exitAllChat(self):
ChatInputWhiteListFrame.exitAllChat(self) ChatInputWhiteListFrame.exitAllChat(self)
def enterPlayerWhisper(self):
ChatInputWhiteListFrame.enterPlayerWhisper(self)
self.labelWhisper()
def exitPlayerWhisper(self):
ChatInputWhiteListFrame.exitPlayerWhisper(self)
self.whisperLabel.hide()
def enterAvatarWhisper(self): def enterAvatarWhisper(self):
ChatInputWhiteListFrame.enterAvatarWhisper(self) ChatInputWhiteListFrame.enterAvatarWhisper(self)
self.labelWhisper() self.labelWhisper()
@ -169,7 +158,7 @@ class TTChatInputWhiteList(ChatInputWhiteListFrame):
def labelWhisper(self): def labelWhisper(self):
if self.receiverId: if self.receiverId:
self.whisperName = base.talkAssistant.findName(self.receiverId, self.toPlayer) self.whisperName = base.talkAssistant.findAvatarName(self.receiverId)
self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperName self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperName
self.whisperLabel.show() self.whisperLabel.show()
else: else:

View file

@ -19,7 +19,5 @@ class TTSCWhiteListTerminal(SCTerminal):
SCTerminal.handleSelect(self) SCTerminal.handleSelect(self)
if not self.parentClass.whisperAvatarId: if not self.parentClass.whisperAvatarId:
base.localAvatar.chatMgr.fsm.request('whiteListOpenChat') base.localAvatar.chatMgr.fsm.request('whiteListOpenChat')
elif self.parentClass.toPlayer:
base.localAvatar.chatMgr.fsm.request('whiteListPlayerChat', [self.parentClass.whisperAvatarId])
else: else:
base.localAvatar.chatMgr.fsm.request('whiteListAvatarChat', [self.parentClass.whisperAvatarId]) base.localAvatar.chatMgr.fsm.request('whiteListAvatarChat', [self.parentClass.whisperAvatarId])

View file

@ -24,10 +24,6 @@ class TTTalkAssistant(TalkAssistant):
def clearHistory(self): def clearHistory(self):
TalkAssistant.clearHistory(self) TalkAssistant.clearHistory(self)
def sendPlayerWhisperToonTaskSpeedChat(self, taskId, toNpcId, toonProgress, msgIndex, receiverId):
# TODO: Remove Player system.
return None
def sendToonTaskSpeedChat(self, taskId, toNpcId, toonProgress, msgIndex): def sendToonTaskSpeedChat(self, taskId, toNpcId, toonProgress, msgIndex):
error = None error = None
messenger.send(SCChatEvent) messenger.send(SCChatEvent)
@ -35,4 +31,4 @@ class TTTalkAssistant(TalkAssistant):
toNpcId, toNpcId,
toonProgress, toonProgress,
msgIndex]) msgIndex])
return error return error

View file

@ -84,15 +84,12 @@ class ToontownChatManager(ChatManager.ChatManager):
msgIndex]) msgIndex])
self.announceSCChat() self.announceSCChat()
def sendSCToontaskWhisperMessage(self, taskId, toNpcId, toonProgress, msgIndex, whisperAvatarId, toPlayer): def sendSCToontaskWhisperMessage(self, taskId, toNpcId, toonProgress, msgIndex, whisperAvatarId):
if toPlayer: messenger.send('whisperUpdateSCToontask', [taskId,
base.talkAssistant.sendPlayerWhisperToonTaskSpeedChat(taskId, toNpcId, toonProgress, msgIndex, whisperAvatarId) toNpcId,
else: toonProgress,
messenger.send('whisperUpdateSCToontask', [taskId, msgIndex,
toNpcId, whisperAvatarId])
toonProgress,
msgIndex,
whisperAvatarId])
def enterMainMenu(self): def enterMainMenu(self):
self.chatInputNormal.setPos(self.normalPos) self.chatInputNormal.setPos(self.normalPos)
@ -130,10 +127,8 @@ class ToontownChatManager(ChatManager.ChatManager):
else: else:
self.fsm.request('speedChat') self.fsm.request('speedChat')
def __whisperButtonPressed(self, avatarName, avatarId, playerId): def __whisperButtonPressed(self, avatarName, avatarId):
messenger.send('wakeup') messenger.send('wakeup')
if playerId:
playerInfo = base.cr.playerFriendsManager.getFriendInfo(playerId)
if avatarId: if avatarId:
self.enterWhisperChat(avatarName, avatarId) self.enterWhisperChat(avatarName, avatarId)
self.whisperFrame.hide() self.whisperFrame.hide()
@ -146,14 +141,6 @@ class ToontownChatManager(ChatManager.ChatManager):
self.fsm.request('mainMenu') self.fsm.request('mainMenu')
return return
def enterWhisperChatPlayer(self, avatarName, playerId):
result = ChatManager.ChatManager.enterWhisperChatPlayer(self, avatarName, playerId)
self.chatInputNormal.setPos(self.whisperPos)
if result == None:
self.notify.warning('something went wrong in enterWhisperChatPlayer, falling back to main menu')
self.fsm.request('mainMenu')
return
def enterWhisperChat(self, avatarName, avatarId): def enterWhisperChat(self, avatarName, avatarId):
result = ChatManager.ChatManager.enterWhisperChat(self, avatarName, avatarId) result = ChatManager.ChatManager.enterWhisperChat(self, avatarName, avatarId)
self.chatInputNormal.reparentTo(base.a2dTopCenter) self.chatInputNormal.reparentTo(base.a2dTopCenter)
@ -177,25 +164,13 @@ class ToontownChatManager(ChatManager.ChatManager):
def exitNoSecretChatAtAllAndNoWhitelist(self): def exitNoSecretChatAtAllAndNoWhitelist(self):
self.noSecretChatAtAllAndNoWhitelist.hide() self.noSecretChatAtAllAndNoWhitelist.hide()
def __whisperScButtonPressed(self, avatarName, avatarId, playerId): def __whisperScButtonPressed(self, avatarName, avatarId):
messenger.send('wakeup') messenger.send('wakeup')
hasManager = hasattr(base.cr, 'playerFriendsManager') if avatarId:
transientFriend = 0
if hasManager:
transientFriend = base.cr.playerFriendsManager.askTransientFriend(avatarId)
if transientFriend:
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId)
if avatarId and not transientFriend:
if self.fsm.getCurrentState().getName() == 'whisperSpeedChat': if self.fsm.getCurrentState().getName() == 'whisperSpeedChat':
self.fsm.request('whisper', [avatarName, avatarId, playerId]) self.fsm.request('whisper', [avatarName, avatarId])
else: else:
self.fsm.request('whisperSpeedChat', [avatarId]) self.fsm.request('whisperSpeedChat', [avatarId])
elif playerId:
if self.fsm.getCurrentState().getName() == 'whisperSpeedChatPlayer':
self.fsm.request('whisper', [avatarName, avatarId, playerId])
else:
self.fsm.request('whisperSpeedChatPlayer', [playerId])
# Do more work here for position of SCWhisperpos
def __whisperCancelPressed(self): def __whisperCancelPressed(self):
self.fsm.request('mainMenu') self.fsm.request('mainMenu')

View file

@ -113,7 +113,6 @@ class WhisperPopup(Clickable2d, MarginVisible):
self.senderName = '' self.senderName = ''
self.fromId = 0 self.fromId = 0
self.isPlayer = 0
self.contents.setScale(self.CONTENTS_SCALE) self.contents.setScale(self.CONTENTS_SCALE)
@ -234,11 +233,10 @@ class WhisperPopup(Clickable2d, MarginVisible):
self.destroy() self.destroy()
def setClickable(self, senderName, fromId, isPlayer=0): def setClickable(self, senderName, fromId):
self.senderName = senderName self.senderName = senderName
self.fromId = fromId self.fromId = fromId
self.isPlayer = isPlayer self.setClickEvent('clickedWhisper', extraArgs=[fromId])
self.setClickEvent('clickedWhisper', extraArgs=[fromId, isPlayer])
self.setActive(True) self.setActive(True)
def applyClickState(self, clickState): def applyClickState(self, clickState):

View file

@ -17136,8 +17136,6 @@ WHITELIST = [
'guil', 'guil',
'guila', 'guila',
'guild', 'guild',
'guild1',
'guild14',
'guilded', 'guilded',
'guilders', 'guilders',
'guildhall', 'guildhall',
@ -29957,7 +29955,6 @@ WHITELIST = [
'silences', 'silences',
'silencing', 'silencing',
'silent', 'silent',
'silentguild',
'silently', 'silently',
'silents', 'silents',
'silenus', 'silenus',

View file

@ -163,7 +163,7 @@ class CogdoFlyingLocalPlayer(CogdoFlyingPlayer):
self.deathInterval = Sequence(Func(self.resetVelocities), Parallel(Parallel(Func(self._deathSfx.play), LerpHprInterval(self.toon, 1.0, Vec3(720, 0, 0)), LerpFunctionInterval(self.toon.setScale, fromData=1.0, toData=0.1, duration=1.0), self.toon.posInterval(0.5, Vec3(0, 0, -25), other=self.toon)), Sequence(Wait(0.5), Func(base.transitions.irisOut))), Func(self.toon.stash), Wait(1.0), Func(self.toonSpawnFunc), name='%s.deathInterval' % self.__class__.__name__) self.deathInterval = Sequence(Func(self.resetVelocities), Parallel(Parallel(Func(self._deathSfx.play), LerpHprInterval(self.toon, 1.0, Vec3(720, 0, 0)), LerpFunctionInterval(self.toon.setScale, fromData=1.0, toData=0.1, duration=1.0), self.toon.posInterval(0.5, Vec3(0, 0, -25), other=self.toon)), Sequence(Wait(0.5), Func(base.transitions.irisOut))), Func(self.toon.stash), Wait(1.0), Func(self.toonSpawnFunc), name='%s.deathInterval' % self.__class__.__name__)
self.outOfTimeInterval = Sequence(Func(messenger.send, CogdoFlyingLocalPlayer.PlayWaitingMusicEventName), Func(self._loseSfx.play), Func(base.transitions.irisOut), Wait(1.0), Func(self.resetVelocities), Func(self._guiMgr.setMessage, '', transition=None), Func(self.toon.stash), Func(self.toonSpawnFunc), name='%s.outOfTimeInterval' % self.__class__.__name__) self.outOfTimeInterval = Sequence(Func(messenger.send, CogdoFlyingLocalPlayer.PlayWaitingMusicEventName), Func(self._loseSfx.play), Func(base.transitions.irisOut), Wait(1.0), Func(self.resetVelocities), Func(self._guiMgr.setMessage, '', transition=None), Func(self.toon.stash), Func(self.toonSpawnFunc), name='%s.outOfTimeInterval' % self.__class__.__name__)
self.spawnInterval = Sequence(Func(self.resetToonFunc), Func(self._cameraMgr.update, 0.0), Func(self._level.update), Func(self.toon.cnode.broadcastPosHprFull), Func(base.transitions.irisIn), Wait(0.5), Func(self.toon.setAnimState, 'TeleportIn'), Func(self.toon.unstash), Wait(1.5), Func(self.requestPostSpawnState), name='%s.spawnInterval' % self.__class__.__name__) self.spawnInterval = Sequence(Func(self.resetToonFunc), Func(self._cameraMgr.update, 0.0), Func(self._level.update), Func(self.toon.cnode.broadcastPosHprFull), Func(base.transitions.irisIn), Wait(0.5), Func(self.toon.setAnimState, 'TeleportIn'), Func(self.toon.unstash), Wait(1.5), Func(self.requestPostSpawnState), name='%s.spawnInterval' % self.__class__.__name__)
self.waitingForWinInterval = Sequence(Func(self._guiMgr.setMessage, TTLocalizer.CogdoFlyingGameWaiting % '.'), Wait(1.5), Func(self._guiMgr.setMessage, TTLocalizer.CogdoFlyingGameWaiting % '..'), Wait(1.5), Func(self._guiMgr.setMessage, TTLocalizer.CogdoFlyingGameWaiting % '...'), Wait(1.5), name='%s.waitingForWinInterval' % self.__class__.__name__) self.waitingForWinInterval = Sequence(Func(self._guiMgr.setMessage, TTLocalizer.WaitingForOtherToonsDots % '.'), Wait(1.5), Func(self._guiMgr.setMessage, TTLocalizer.WaitingForOtherToonsDots % '..'), Wait(1.5), Func(self._guiMgr.setMessage, TTLocalizer.WaitingForOtherToonsDots % '...'), Wait(1.5), name='%s.waitingForWinInterval' % self.__class__.__name__)
self.waitingForWinSeq = Sequence(Func(self.setWaitingForWinState), Wait(4.0), Func(self.removeAllMemos), Wait(2.0), Func(self.game.distGame.d_sendRequestAction, Globals.AI.GameActions.LandOnWinPlatform, 0), Func(self.playWaitingForWinInterval), name='%s.waitingForWinSeq' % self.__class__.__name__) self.waitingForWinSeq = Sequence(Func(self.setWaitingForWinState), Wait(4.0), Func(self.removeAllMemos), Wait(2.0), Func(self.game.distGame.d_sendRequestAction, Globals.AI.GameActions.LandOnWinPlatform, 0), Func(self.playWaitingForWinInterval), name='%s.waitingForWinSeq' % self.__class__.__name__)
self.winInterval = Sequence(Func(self._guiMgr.setMessage, ''), Wait(4.0), Func(self.game.distGame.d_sendRequestAction, Globals.AI.GameActions.WinStateFinished, 0), name='%s.winInterval' % self.__class__.__name__) self.winInterval = Sequence(Func(self._guiMgr.setMessage, ''), Wait(4.0), Func(self.game.distGame.d_sendRequestAction, Globals.AI.GameActions.WinStateFinished, 0), name='%s.winInterval' % self.__class__.__name__)
self.goSadSequence = Sequence(Wait(2.5), Func(base.transitions.irisOut, 1.5), name='%s.goSadSequence' % self.__class__.__name__) self.goSadSequence = Sequence(Wait(2.5), Func(base.transitions.irisOut, 1.5), name='%s.goSadSequence' % self.__class__.__name__)

View file

@ -465,9 +465,9 @@ class CogdoMazeGame(DirectObject):
self.gags.append(gag) self.gags.append(gag)
return return
def handleToonMeetsGag(self, playerId, gag): def handleToonMeetsGag(self, avId, gag):
self.removeGag(gag) self.removeGag(gag)
self.distGame.b_toonHitByGag(playerId) self.distGame.b_toonHitByGag(avId)
def toonHitByGag(self, toonId, hitToon, elapsedTime = 0.0): def toonHitByGag(self, toonId, hitToon, elapsedTime = 0.0):
if toonId not in self.toonId2Player.keys() or hitToon not in self.toonId2Player.keys(): if toonId not in self.toonId2Player.keys() or hitToon not in self.toonId2Player.keys():

View file

@ -247,7 +247,7 @@ class CogdoMazeLocalPlayer(CogdoMazePlayer):
self.exited = True self.exited = True
message = '' message = ''
if door.getPlayerCount() < len(self.game.players): if door.getPlayerCount() < len(self.game.players):
message = TTLocalizer.CogdoMazeGameWaitingForToons message = TTLocalizer.WaitingForOtherToons
if toonId == self.toon.doId: if toonId == self.toon.doId:
self._guiMgr.setMessage(message) self._guiMgr.setMessage(message)
self._winSfx.play() self._winSfx.play()

View file

@ -250,8 +250,8 @@ class DistributedGolfGreenGameAI(BattleBlockerAI.BattleBlockerAI, NodePath, Basi
roomId = self.getLevelDoId() roomId = self.getLevelDoId()
room = simbase.air.doId2do.get(roomId) room = simbase.air.doId2do.get(roomId)
if room: if room:
playerIds = self.everJoinedToons avIds = self.everJoinedToons
for avId in playerIds: for avId in avIds:
av = simbase.air.doId2do.get(avId) av = simbase.air.doId2do.get(avId)
if av: if av:
av.takeDamage(self.DamageOnFailure, quietly=0) av.takeDamage(self.DamageOnFailure, quietly=0)

View file

@ -67,8 +67,8 @@ class DistributedMazeAI(DistributedEntityAI.DistributedEntityAI):
roomId = self.getLevelDoId() roomId = self.getLevelDoId()
room = simbase.air.doId2do.get(roomId) room = simbase.air.doId2do.get(roomId)
if room: if room:
playerIds = room.presentAvIds avIds = room.presentAvIds
for avId in playerIds: for avId in avIds:
av = simbase.air.doId2do.get(avId) av = simbase.air.doId2do.get(avId)
if av and avId not in self.finishedList: if av and avId not in self.finishedList:
self.finishedList.append(avId) self.finishedList.append(avId)
@ -81,7 +81,7 @@ class DistributedMazeAI(DistributedEntityAI.DistributedEntityAI):
roomId = self.getLevelDoId() roomId = self.getLevelDoId()
room = simbase.air.doId2do.get(roomId) room = simbase.air.doId2do.get(roomId)
if room: if room:
playerIds = room.presentAvIds avIds = room.presentAvIds
if av and senderId in playerIds: if av and senderId in avIds:
av.takeDamage(self.DamageOnFailure, quietly=0) av.takeDamage(self.DamageOnFailure, quietly=0)
room.sendUpdate('forceOuch', [self.DamageOnFailure]) room.sendUpdate('forceOuch', [self.DamageOnFailure])

View file

@ -107,8 +107,8 @@ class DistributedMoleFieldAI(DistributedEntityAI.DistributedEntityAI, MoleFieldB
return return
senderId = self.air.getAvatarIdFromSender() senderId = self.air.getAvatarIdFromSender()
av = simbase.air.doId2do.get(senderId) av = simbase.air.doId2do.get(senderId)
playerIds = room.presentAvIds avIds = room.presentAvIds
if av and senderId in playerIds: if av and senderId in avIds:
av.takeDamage(self.DamageOnFailure, quietly=0) av.takeDamage(self.DamageOnFailure, quietly=0)
room.sendUpdate('forceOuch', [self.DamageOnFailure]) room.sendUpdate('forceOuch', [self.DamageOnFailure])

View file

@ -76,7 +76,6 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
self.toontownTimeManager = ToontownTimeManager.ToontownTimeManager() self.toontownTimeManager = ToontownTimeManager.ToontownTimeManager()
self.csm = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_CLIENT_SERVICES_MANAGER, 'ClientServicesManager') self.csm = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_CLIENT_SERVICES_MANAGER, 'ClientServicesManager')
self.playerFriendsManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_PLAYER_FRIENDS_MANAGER, 'TTPlayerFriendsManager')
self.ttuFriendsManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_TTU_FRIENDS_MANAGER, 'TTUFriendsManager') self.ttuFriendsManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_TTU_FRIENDS_MANAGER, 'TTUFriendsManager')
self.furnitureManager = None self.furnitureManager = None
@ -658,9 +657,6 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
elif self.cache.contains(doId): elif self.cache.contains(doId):
teleportNotify.debug('found friend %s in cache' % doId) teleportNotify.debug('found friend %s in cache' % doId)
avatar = self.cache.dict[doId] avatar = self.cache.dict[doId]
elif self.playerFriendsManager.getAvHandleFromId(doId):
teleportNotify.debug('found friend %s in playerFriendsManager' % doId)
avatar = base.cr.playerFriendsManager.getAvHandleFromId(doId)
else: else:
self.notify.warning("Don't know who friend %s is." % doId) self.notify.warning("Don't know who friend %s is." % doId)
return return
@ -681,9 +677,6 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
self.friendsMap[doId] = handle self.friendsMap[doId] = handle
return handle return handle
def identifyPlayer(self, pId):
return base.cr.playerFriendsManager.getFriendInfo(pId)
def identifyAvatar(self, doId): def identifyAvatar(self, doId):
if doId in self.doId2do: if doId in self.doId2do:
return self.doId2do[doId] return self.doId2do[doId]

View file

@ -54,9 +54,6 @@ class FriendInvitee(ToonHeadDialog.ToonHeadDialog):
if self.context != None: if self.context != None:
base.cr.friendManager.up_inviteeFriendResponse(2, self.context) base.cr.friendManager.up_inviteeFriendResponse(2, self.context)
self.context = None self.context = None
if base.friendMode == 1:
base.cr.friendManager.executeGameSpecificFunction()
return
def __handleButton(self, value): def __handleButton(self, value):
base.cr.friendManager.up_inviteeFriendResponse(value == DGG.DIALOG_OK, self.context) base.cr.friendManager.up_inviteeFriendResponse(value == DGG.DIALOG_OK, self.context)

View file

@ -13,7 +13,6 @@ from toontown.suit import Suit
from toontown.pets import Pet from toontown.pets import Pet
from otp.otpbase import OTPLocalizer from otp.otpbase import OTPLocalizer
from otp.otpbase import OTPGlobals from otp.otpbase import OTPGlobals
from otp.uberdog import RejectCode
globalFriendInviter = None globalFriendInviter = None
def showFriendInviter(avId, avName, avDisableName): def showFriendInviter(avId, avName, avDisableName):
@ -45,19 +44,12 @@ class FriendInviter(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('FriendInviter') notify = DirectNotifyGlobal.directNotify.newCategory('FriendInviter')
def __init__(self, avId, avName, avDisableName): def __init__(self, avId, avName, avDisableName):
self.wantPlayerFriends = base.config.GetBool('want-player-friends', 0)
DirectFrame.__init__(self, pos=(-1.033, 0.1, -0.35), parent=base.a2dTopRight, image_color=GlobalDialogColor, image_scale=(1.0, 1.0, 0.6), text='', text_wordwrap=TTLocalizer.FIdirectFrameWordwrap, text_scale=TTLocalizer.FIdirectFrame, text_pos=TTLocalizer.FIdirectFramePos) DirectFrame.__init__(self, pos=(-1.033, 0.1, -0.35), parent=base.a2dTopRight, image_color=GlobalDialogColor, image_scale=(1.0, 1.0, 0.6), text='', text_wordwrap=TTLocalizer.FIdirectFrameWordwrap, text_scale=TTLocalizer.FIdirectFrame, text_pos=TTLocalizer.FIdirectFramePos)
self['image'] = DGG.getDefaultDialogGeom() self['image'] = DGG.getDefaultDialogGeom()
self.avId = avId self.avId = avId
self.toonName = avName self.toonName = avName
avatar = base.cr.doId2do.get(self.avId) avatar = base.cr.doId2do.get(self.avId)
self.playerId = None
self.playerName = None
if avatar:
self.playerId = avatar.DISLid
self.playerName = avatar.DISLname + ' ' + str(avatar.DISLid)
self.avDisableName = avDisableName self.avDisableName = avDisableName
self.playerFriend = 0
self.fsm = ClassicFSM.ClassicFSM('FriendInviter', [State.State('off', self.enterOff, self.exitOff), self.fsm = ClassicFSM.ClassicFSM('FriendInviter', [State.State('off', self.enterOff, self.exitOff),
State.State('getNewFriend', self.enterGetNewFriend, self.exitGetNewFriend), State.State('getNewFriend', self.enterGetNewFriend, self.exitGetNewFriend),
State.State('begin', self.enterBegin, self.exitBegin), State.State('begin', self.enterBegin, self.exitBegin),
@ -98,13 +90,9 @@ class FriendInviter(DirectFrame):
self.bNo = DirectButton(self, image=(buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')), relief=None, text=OTPLocalizer.FriendInviterNo, text_scale=0.05, text_pos=(0.0, -0.1), pos=(0.15, 0.0, -0.1), command=self.__handleNo) self.bNo = DirectButton(self, image=(buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')), relief=None, text=OTPLocalizer.FriendInviterNo, text_scale=0.05, text_pos=(0.0, -0.1), pos=(0.15, 0.0, -0.1), command=self.__handleNo)
self.bNo.hide() self.bNo.hide()
self.bToon = DirectButton(self, image=(buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')), relief=None, text=TTLocalizer.FriendInviterToon, text_scale=0.05, text_pos=(0.0, -0.1), pos=(-0.35, 0.0, -0.05), command=self.__handleToon) self.bToon = DirectButton(self, image=(buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')), relief=None, text=TTLocalizer.FriendInviterToon, text_scale=0.05, text_pos=(0.0, -0.1), pos=(-0.35, 0.0, -0.05), command=self.__handleToon)
toonText = DirectLabel(parent=self, relief=None, pos=Vec3(0.35, 0, -0.2), text=TTLocalizer.FriendInviterToonFriendInfo, text_fg=(0, 0, 0, 1), text_pos=(0, 0), text_scale=0.045, text_align=TextNode.ACenter) toonText = DirectLabel(parent=self, relief=None, pos=Vec3(0.35, 0, -0.2), text='Hello niggers', text_fg=(0, 0, 0, 1), text_pos=(0, 0), text_scale=0.045, text_align=TextNode.ACenter)
toonText.reparentTo(self.bToon.stateNodePath[2]) toonText.reparentTo(self.bToon.stateNodePath[2])
self.bToon.hide() self.bToon.hide()
self.bPlayer = DirectButton(self, image=(buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr')), relief=None, text=TTLocalizer.FriendInviterPlayer, text_scale=0.05, text_pos=(0.0, -0.1), pos=(0.0, 0.0, -0.05), command=self.__handlePlayer)
playerText = DirectLabel(parent=self, relief=None, pos=Vec3(0, 0, -0.2), text=TTLocalizer.FriendInviterPlayerFriendInfo, text_fg=(0, 0, 0, 1), text_pos=(0, 0), text_scale=0.045, text_align=TextNode.ACenter)
playerText.reparentTo(self.bPlayer.stateNodePath[2])
self.bPlayer.hide()
buttons.removeNode() buttons.removeNode()
gui.removeNode() gui.removeNode()
self.fsm.enterInitialState() self.fsm.enterInitialState()
@ -120,14 +108,11 @@ class FriendInviter(DirectFrame):
self.destroy() self.destroy()
def getName(self): def getName(self):
if self.playerFriend: name = self.toonName
name = self.playerName
if name == None: if name == None:
name = TTLocalizer.FriendInviterThatPlayer name = TTLocalizer.FriendInviterThatToon
else:
name = self.toonName
if name == None:
name = TTLocalizer.FriendInviterThatToon
return name return name
def enterOff(self): def enterOff(self):
@ -148,9 +133,6 @@ class FriendInviter(DirectFrame):
def __handleClickedNametag(self, avatar): def __handleClickedNametag(self, avatar):
self.avId = avatar.doId self.avId = avatar.doId
self.toonName = avatar.getName() self.toonName = avatar.getName()
if hasattr(avatar, 'DISLid'):
self.playerId = avatar.DISLid
self.playerName = avatar.DISLname
self.avDisableName = avatar.uniqueName('disable') self.avDisableName = avatar.uniqueName('disable')
self.fsm.request('begin') self.fsm.request('begin')
@ -160,17 +142,12 @@ class FriendInviter(DirectFrame):
self.bCancel.setPos(0.35, 0.0, -0.05) self.bCancel.setPos(0.35, 0.0, -0.05)
self.bCancel.show() self.bCancel.show()
self.bToon.show() self.bToon.show()
if self.wantPlayerFriends: self.__handleToon()
self.bPlayer.show()
else:
self.__handleToon()
self.accept(self.avDisableName, self.__handleDisableAvatar) self.accept(self.avDisableName, self.__handleDisableAvatar)
def exitBegin(self): def exitBegin(self):
self.ignore(self.avDisableName) self.ignore(self.avDisableName)
self.bToon.hide() self.bToon.hide()
if self.wantPlayerFriends:
self.bPlayer.hide()
self.bCancel.setPos(0.0, 0.0, -0.1) self.bCancel.setPos(0.0, 0.0, -0.1)
self.bCancel.hide() self.bCancel.hide()
@ -179,16 +156,10 @@ class FriendInviter(DirectFrame):
self.accept(self.avDisableName, self.__handleDisableAvatar) self.accept(self.avDisableName, self.__handleDisableAvatar)
if self.avId == myId: if self.avId == myId:
self.fsm.request('self') self.fsm.request('self')
elif not self.playerFriend and base.cr.isFriend(self.avId): elif base.cr.isFriend(self.avId):
self.fsm.request('already')
elif self.playerFriend and base.cr.playerFriendsManager.isPlayerFriend(self.avId):
self.fsm.request('already') self.fsm.request('already')
else: else:
if not self.playerFriend: if len(base.localAvatar.friendsList) >= MaxFriends:
tooMany = len(base.localAvatar.friendsList) >= MaxFriends
elif self.playerFriend:
tooMany = base.cr.playerFriendsManager.friendsListFull()
if tooMany:
self.fsm.request('tooMany') self.fsm.request('tooMany')
else: else:
self.fsm.request('checkAvailability') self.fsm.request('checkAvailability')
@ -197,12 +168,8 @@ class FriendInviter(DirectFrame):
self.ignore(self.avDisableName) self.ignore(self.avDisableName)
def enterTooMany(self): def enterTooMany(self):
if self.playerFriend: text = OTPLocalizer.FriendInviterToonTooMany
text = OTPLocalizer.FriendInviterPlayerTooMany name = self.toonName
name = self.playerName
else:
text = OTPLocalizer.FriendInviterToonTooMany
name = self.toonName
self['text'] = text % name self['text'] = text % name
self.bCancel.show() self.bCancel.show()
self.bCancel.setPos(0.0, 0.0, -0.16) self.bCancel.setPos(0.0, 0.0, -0.16)
@ -212,10 +179,6 @@ class FriendInviter(DirectFrame):
def enterCheckAvailability(self): def enterCheckAvailability(self):
self.accept(self.avDisableName, self.__handleDisableAvatar) self.accept(self.avDisableName, self.__handleDisableAvatar)
if not self.playerFriend:
if self.avId not in base.cr.doId2do:
self.fsm.request('wentAway')
return
if self.avId not in base.cr.doId2do: if self.avId not in base.cr.doId2do:
self.fsm.request('wentAway') self.fsm.request('wentAway')
return return
@ -227,23 +190,14 @@ class FriendInviter(DirectFrame):
if isinstance(avatar, Pet.Pet): if isinstance(avatar, Pet.Pet):
self.fsm.request('askingPet') self.fsm.request('askingPet')
return return
if not self.playerFriend: if not base.cr.friendManager:
if not base.cr.friendManager: self.notify.warning('No FriendManager available.')
self.notify.warning('No FriendManager available.') self.fsm.request('down')
self.fsm.request('down') return
return base.cr.friendManager.up_friendQuery(self.avId)
if self.playerFriend: self['text'] = OTPLocalizer.FriendInviterCheckAvailability % self.toonName
self.notify.info('Inviter requesting player friend') self.accept('friendResponse', self.__friendResponse)
self['text'] = OTPLocalizer.FriendInviterAsking % self.playerName self.bCancel.show()
base.cr.playerFriendsManager.sendRequestInvite(self.playerId)
self.accept(OTPGlobals.PlayerFriendRejectInviteEvent, self.__playerFriendRejectResponse)
self.accept(OTPGlobals.PlayerFriendAddEvent, self.__playerFriendAcceptResponse)
self.bOk.show()
else:
base.cr.friendManager.up_friendQuery(self.avId)
self['text'] = OTPLocalizer.FriendInviterCheckAvailability % self.toonName
self.accept('friendResponse', self.__friendResponse)
self.bCancel.show()
self.accept('friendConsidering', self.__friendConsidering) self.accept('friendConsidering', self.__friendConsidering)
def exitCheckAvailability(self): def exitCheckAvailability(self):
@ -272,10 +226,9 @@ class FriendInviter(DirectFrame):
def enterWentAway(self): def enterWentAway(self):
self['text'] = OTPLocalizer.FriendInviterWentAway % self.getName() self['text'] = OTPLocalizer.FriendInviterWentAway % self.getName()
if not self.playerFriend: if self.context != None:
if self.context != None: base.cr.friendManager.up_cancelFriendQuery(self.context)
base.cr.friendManager.up_cancelFriendQuery(self.context) self.context = None
self.context = None
self.bOk.show() self.bOk.show()
return return
@ -283,12 +236,8 @@ class FriendInviter(DirectFrame):
self.bOk.hide() self.bOk.hide()
def enterAlready(self): def enterAlready(self):
if self.playerFriend: self['text'] = TTLocalizer.FriendInviterToonAlready % self.getName()
self['text'] = TTLocalizer.FriendInviterPlayerAlready % self.getName() self.bStop['text'] = TTLocalizer.FriendInviterStopBeingToonFriends
self.bStop['text'] = TTLocalizer.FriendInviterStopBeingPlayerFriends
else:
self['text'] = TTLocalizer.FriendInviterToonAlready % self.getName()
self.bStop['text'] = TTLocalizer.FriendInviterStopBeingToonFriends
self.context = None self.context = None
self.bStop.show() self.bStop.show()
self.bCancel.show() self.bCancel.show()
@ -325,14 +274,7 @@ class FriendInviter(DirectFrame):
self.bOk.hide() self.bOk.hide()
def enterEndFriendship(self): def enterEndFriendship(self):
if self.playerFriend: self['text'] = TTLocalizer.FriendInviterEndFriendshipToon % self.getName()
self['text'] = TTLocalizer.FriendInviterEndFriendshipPlayer % self.getName()
if base.cr.isFriend(self.avId):
self['text'] = self['text'] + TTLocalizer.FriendInviterRemainToon % self.toonName
else:
self['text'] = TTLocalizer.FriendInviterEndFriendshipToon % self.getName()
if base.cr.playerFriendsManager.isPlayerFriend(self.playerId):
self['text'] = self['text'] + TTLocalizer.FriendInviterRemainPlayer % self.playerName
self.context = None self.context = None
self.bYes.show() self.bYes.show()
self.bNo.show() self.bNo.show()
@ -343,12 +285,7 @@ class FriendInviter(DirectFrame):
self.bNo.hide() self.bNo.hide()
def enterFriendsNoMore(self): def enterFriendsNoMore(self):
if self.playerFriend: base.cr.removeFriend(self.avId)
self.notify.info('### send player remove')
base.cr.playerFriendsManager.sendRequestRemove(self.playerId)
else:
self.notify.info('### send avatar remove')
base.cr.removeFriend(self.avId)
self['text'] = OTPLocalizer.FriendInviterFriendsNoMore % self.getName() self['text'] = OTPLocalizer.FriendInviterFriendsNoMore % self.getName()
self.bOk.show() self.bOk.show()
if self.avId not in base.cr.doId2do: if self.avId not in base.cr.doId2do:
@ -432,10 +369,9 @@ class FriendInviter(DirectFrame):
self.bOk.hide() self.bOk.hide()
def enterCancel(self): def enterCancel(self):
if not self.playerFriend: if self.context != None:
if self.context != None: base.cr.friendManager.up_cancelFriendQuery(self.context)
base.cr.friendManager.up_cancelFriendQuery(self.context) self.context = None
self.context = None
self.fsm.request('off') self.fsm.request('off')
return return
@ -467,13 +403,6 @@ class FriendInviter(DirectFrame):
else: else:
unloadFriendInviter() unloadFriendInviter()
def __handlePlayer(self):
if self.fsm.getCurrentState().getName() == 'begin':
self.playerFriend = 1
self.fsm.request('check')
else:
unloadFriendInviter()
def __handleNo(self): def __handleNo(self):
unloadFriendInviter() unloadFriendInviter()
@ -516,18 +445,5 @@ class FriendInviter(DirectFrame):
self.notify.warning('Got unexpected response to friendResponse: %s' % yesNoMaybe) self.notify.warning('Got unexpected response to friendResponse: %s' % yesNoMaybe)
self.fsm.request('maybe') self.fsm.request('maybe')
def __playerFriendRejectResponse(self, avId, reason):
self.notify.debug('Got reject response to friendResponse: %s' % reason)
if reason == RejectCode.RejectCode.INVITATION_DECLINED:
self.fsm.request('no')
elif reason == RejectCode.RejectCode.FRIENDS_LIST_FULL:
self.fsm.request('otherTooMany')
else:
self.notify.warning('Got unexpected response to friendResponse: %s' % reason)
self.fsm.request('maybe')
def __playerFriendAcceptResponse(self):
self.fsm.request('yes')
def __handleDisableAvatar(self): def __handleDisableAvatar(self):
self.fsm.request('wentAway') self.fsm.request('wentAway')

View file

@ -8,11 +8,9 @@ from toontown.toon import ToonTeleportPanel
from toontown.friends import ToontownFriendSecret from toontown.friends import ToontownFriendSecret
from toontown.pets import PetAvatarPanel from toontown.pets import PetAvatarPanel
from toontown.toon import ToonAvatarPanel from toontown.toon import ToonAvatarPanel
from toontown.toon import PlayerInfoPanel
from toontown.suit import SuitAvatarPanel from toontown.suit import SuitAvatarPanel
from toontown.toon import ToonDNA from toontown.toon import ToonDNA
from toontown.toon import ToonAvatarDetailPanel from toontown.toon import ToonAvatarDetailPanel
from toontown.toon import PlayerDetailPanel
from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownGlobals
from toontown.toon import Toon from toontown.toon import Toon
import FriendHandle import FriendHandle
@ -30,11 +28,9 @@ class FriendsListManager:
return return
def load(self): def load(self):
#base.cr.friendManager.setGameSpecificFunction(self.processQueuedRequests)
self.accept(OTPGlobals.AvatarNewFriendAddEvent, self.__friendAdded) self.accept(OTPGlobals.AvatarNewFriendAddEvent, self.__friendAdded)
def unload(self): def unload(self):
#base.cr.friendManager.setGameSpecificFunction(None)
self.exitFLM() self.exitFLM()
if self.avatarPanel: if self.avatarPanel:
del self.avatarPanel del self.avatarPanel
@ -51,15 +47,12 @@ class FriendsListManager:
self._entered = True self._entered = True
self.accept('openFriendsList', self.__openFriendsList) self.accept('openFriendsList', self.__openFriendsList)
self.accept('clickedNametag', self.__handleClickedNametag) self.accept('clickedNametag', self.__handleClickedNametag)
self.accept('clickedNametagPlayer', self.__handleClickedNametagPlayer)
base.localAvatar.setFriendsListButtonActive(1) base.localAvatar.setFriendsListButtonActive(1)
NametagGlobals.setWantActiveNametags(True) NametagGlobals.setWantActiveNametags(True)
self.accept('gotoAvatar', self.__handleGotoAvatar) self.accept('gotoAvatar', self.__handleGotoAvatar)
self.accept('friendAvatar', self.__handleFriendAvatar) self.accept('friendAvatar', self.__handleFriendAvatar)
self.accept('avatarDetails', self.__handleAvatarDetails) self.accept('avatarDetails', self.__handleAvatarDetails)
self.accept('playerDetails', self.__handlePlayerDetails)
self.accept('friendInvitation', self.__handleFriendInvitation) self.accept('friendInvitation', self.__handleFriendInvitation)
self.accept(OTPGlobals.PlayerFriendInvitationEvent, self.__handlePlayerFriendInvitation)
if base.cr.friendManager: if base.cr.friendManager:
base.cr.friendManager.setAvailable(1) base.cr.friendManager.setAvailable(1)
@ -72,7 +65,6 @@ class FriendsListManager:
self._entered = False self._entered = False
self.ignore('openFriendsList') self.ignore('openFriendsList')
self.ignore('clickedNametag') self.ignore('clickedNametag')
self.ignore('clickedNametagPlayer')
base.localAvatar.setFriendsListButtonActive(0) base.localAvatar.setFriendsListButtonActive(0)
NametagGlobals.setWantActiveNametags(False) NametagGlobals.setWantActiveNametags(False)
if self.avatarPanel: if self.avatarPanel:
@ -81,7 +73,6 @@ class FriendsListManager:
self.ignore('gotoAvatar') self.ignore('gotoAvatar')
self.ignore('friendAvatar') self.ignore('friendAvatar')
self.ignore('avatarDetails') self.ignore('avatarDetails')
self.ignore('playerDetails')
FriendsListPanel.hideFriendsList() FriendsListPanel.hideFriendsList()
ToontownFriendSecret.hideFriendSecret() ToontownFriendSecret.hideFriendSecret()
if base.cr.friendManager: if base.cr.friendManager:
@ -95,7 +86,7 @@ class FriendsListManager:
def __openFriendsList(self): def __openFriendsList(self):
FriendsListPanel.showFriendsList() FriendsListPanel.showFriendsList()
def __handleClickedNametag(self, avatar, playerId = None): def __handleClickedNametag(self, avatar):
self.notify.debug('__handleClickedNametag. doId = %s' % avatar.doId) self.notify.debug('__handleClickedNametag. doId = %s' % avatar.doId)
if avatar.isPet(): if avatar.isPet():
self.avatarPanel = PetAvatarPanel.PetAvatarPanel(avatar) self.avatarPanel = PetAvatarPanel.PetAvatarPanel(avatar)
@ -106,29 +97,10 @@ class FriendsListManager:
if not self.avatarPanel.isHidden(): if not self.avatarPanel.isHidden():
if self.avatarPanel.getType() == 'toon': if self.avatarPanel.getType() == 'toon':
return return
self.avatarPanel = ToonAvatarPanel.ToonAvatarPanel(avatar, playerId) self.avatarPanel = ToonAvatarPanel.ToonAvatarPanel(avatar)
else: else:
self.avatarPanel = SuitAvatarPanel.SuitAvatarPanel(avatar) self.avatarPanel = SuitAvatarPanel.SuitAvatarPanel(avatar)
def __handleClickedNametagPlayer(self, avatar, playerId, showType = 1):
self.notify.debug('__handleClickedNametagPlayer PlayerId%s' % playerId)
if showType == 1:
if hasattr(self, 'avatarPanel'):
if self.avatarPanel:
if not hasattr(self.avatarPanel, 'getPlayerId') or self.avatarPanel.getPlayerId() == playerId:
if not self.avatarPanel.isHidden():
if self.avatarPanel.getType() == 'player':
return
self.avatarPanel = PlayerInfoPanel.PlayerInfoPanel(playerId)
elif isinstance(avatar, Toon.Toon) or isinstance(avatar, FriendHandle.FriendHandle):
if hasattr(self, 'avatarPanel'):
if self.avatarPanel:
if not hasattr(self.avatarPanel, 'getAvId') or self.avatarPanel.getAvId() == avatar.doId:
if not self.avatarPanel.isHidden():
if self.avatarPanel.getType() == 'toon':
return
self.avatarPanel = ToonAvatarPanel.ToonAvatarPanel(avatar, playerId)
def __handleGotoAvatar(self, avId, avName, avDisableName): def __handleGotoAvatar(self, avId, avName, avDisableName):
ToonTeleportPanel.showTeleportPanel(avId, avName, avDisableName) ToonTeleportPanel.showTeleportPanel(avId, avName, avDisableName)
@ -141,15 +113,6 @@ class FriendsListManager:
if not base.localAvatar.isIgnored(avId): if not base.localAvatar.isIgnored(avId):
FriendInvitee.FriendInvitee(avId, avName, dna, context) FriendInvitee.FriendInvitee(avId, avName, dna, context)
def __handlePlayerFriendInvitation(self, avId, avName, inviterDna = None, context = None):
self.notify.debug('incoming switchboard friend event')
self.friendsRequestQueue.append((avId,
avName,
inviterDna,
context))
#if base.cr.friendManager.getAvailable():
self.processQueuedRequests()
def processQueuedRequests(self): def processQueuedRequests(self):
if len(self.friendsRequestQueue): if len(self.friendsRequestQueue):
request = self.friendsRequestQueue.pop(0) request = self.friendsRequestQueue.pop(0)
@ -166,11 +129,8 @@ class FriendsListManager:
else: else:
self.notify.debug('no toon') self.notify.debug('no toon')
def __handleAvatarDetails(self, avId, avName, playerId = None): def __handleAvatarDetails(self, avId, avName):
ToonAvatarDetailPanel.showAvatarDetail(avId, avName, playerId) ToonAvatarDetailPanel.showAvatarDetail(avId, avName)
def __handlePlayerDetails(self, avId, avName, playerId = None):
PlayerDetailPanel.showPlayerDetail(avId, avName, playerId)
def preserveFriendsList(self): def preserveFriendsList(self):
self.notify.debug('Preserving Friends List') self.notify.debug('Preserving Friends List')

View file

@ -10,33 +10,14 @@ from otp.otpbase import OTPGlobals
FLPPets = 1 FLPPets = 1
FLPOnline = 2 FLPOnline = 2
FLPAll = 3 FLPAll = 3
FLPOnlinePlayers = 4
FLPPlayers = 5
FLPEnemies = 6
globalFriendsList = None globalFriendsList = None
def determineFriendName(friendTuple): def determineFriendName(friendTuple):
friendName = None if len(friendTuple) < 0:
if len(friendTuple) == 2: return None
avId, flags = friendTuple
playerId = None handle = base.cr.identifyFriend(friendTuple[0])
showType = 0 return handle.getName() if handle else None
elif len(friendTuple) == 3:
avId, flags, playerId = friendTuple
showType = 0
elif len(friendTuple) == 4:
avId, flags, playerId, showType = friendTuple
if showType == 1 and playerId:
playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
friendName = playerInfo.playerName
else:
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = base.cr.identifyFriend(avId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(avId)
if handle:
friendName = handle.getName()
return friendName
def compareFriends(f1, f2): def compareFriends(f1, f2):
@ -100,7 +81,7 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
def __init__(self): def __init__(self):
self.leftmostPanel = FLPPets self.leftmostPanel = FLPPets
self.rightmostPanel = FLPPlayers self.rightmostPanel = FLPAll
DirectFrame.__init__(self, relief=None) DirectFrame.__init__(self, relief=None)
self.listScrollIndex = [0, self.listScrollIndex = [0,
0, 0,
@ -181,54 +162,17 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
return None return None
def makeFriendButton(self, friendTuple, colorChoice = None, bold = 0): def makeFriendButton(self, friendTuple, colorChoice = None, bold = 0):
playerName = None avId, flags = friendTuple
toonName = None
if len(friendTuple) == 2:
avId, flags = friendTuple
playerId = None
showType = 0
elif len(friendTuple) == 3:
avId, flags, playerId = friendTuple
showType = 0
elif len(friendTuple) == 4:
avId, flags, playerId, showType = friendTuple
command = self.__choseFriend command = self.__choseFriend
playerName = None
if playerId:
playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId, None)
if playerInfo:
playerName = playerInfo.playerName
toonName = None
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = base.cr.identifyFriend(avId) handle = base.cr.identifyFriend(avId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(avId)
if handle: if handle:
toonName = handle.getName() toonName = handle.getName()
if showType == 1 and playerId:
if not playerName:
return
friendName = playerName
rolloverName = toonName
else: else:
if not toonName: base.cr.fillUpFriendsMap()
base.cr.fillUpFriendsMap() return
return
friendName = toonName
if playerName:
rolloverName = playerName
else:
rolloverName = 'Unknown'
if playerId:
command = self.__chosePlayerFriend
thing = playerId
else:
thing = avId
fg = ToontownGlobals.ColorNoChat fg = ToontownGlobals.ColorNoChat
if flags & ToontownGlobals.FriendChat: if flags & ToontownGlobals.FriendChat:
fg = ToontownGlobals.ColorAvatar fg = ToontownGlobals.ColorAvatar
if playerId:
fg = ToontownGlobals.ColorPlayer
if colorChoice: if colorChoice:
fg = colorChoice fg = colorChoice
fontChoice = ToontownGlobals.getToonFont() fontChoice = ToontownGlobals.getToonFont()
@ -241,10 +185,7 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
colorChoice[1] * colorS, colorChoice[1] * colorS,
colorChoice[2] * colorS, colorChoice[2] * colorS,
colorChoice[3]) colorChoice[3])
db = DirectButton(relief=None, text=friendName, text_scale=fontScale, text_align=TextNode.ALeft, text_fg=fg, text_shadow=bg, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, text_font=fontChoice, textMayChange=0, command=command, extraArgs=[thing, showType]) db = DirectButton(relief=None, text=toonName, text_scale=fontScale, text_align=TextNode.ALeft, text_fg=fg, text_shadow=bg, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, text_font=fontChoice, textMayChange=0, command=command, extraArgs=[avId])
if playerId:
accountName = DirectLabel(parent=db, pos=Vec3(-0.02, 0, 0), text=rolloverName, text_fg=(0, 0, 0, 1), text_bg=(1, 1, 1, 1), text_pos=(0, 0), text_scale=0.045, text_align=TextNode.ARight)
accountName.reparentTo(db.stateNodePath[2])
return db return db
def enter(self): def enter(self):
@ -262,12 +203,9 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
self.__updateArrows() self.__updateArrows()
self.show() self.show()
self.accept('friendOnline', self.__friendOnline) self.accept('friendOnline', self.__friendOnline)
self.accept('friendPlayers', self.__friendPlayers)
self.accept('friendOffline', self.__friendOffline) self.accept('friendOffline', self.__friendOffline)
self.accept('friendsListChanged', self.__friendsListChanged) self.accept('friendsListChanged', self.__friendsListChanged)
self.accept('friendsMapComplete', self.__friendsListChanged) self.accept('friendsMapComplete', self.__friendsListChanged)
self.accept(OTPGlobals.PlayerFriendAddEvent, self.__friendsListChanged)
self.accept(OTPGlobals.PlayerFriendUpdateEvent, self.__friendsListChanged)
return return
def exit(self): def exit(self):
@ -281,8 +219,6 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
self.ignore('friendOffline') self.ignore('friendOffline')
self.ignore('friendsListChanged') self.ignore('friendsListChanged')
self.ignore('friendsMapComplete') self.ignore('friendsMapComplete')
self.ignore(OTPGlobals.PlayerFriendAddEvent)
self.ignore(OTPGlobals.PlayerFriendUpdateEvent)
base.localAvatar.obscureFriendsListButton(-1) base.localAvatar.obscureFriendsListButton(-1)
messenger.send(self.doneEvent) messenger.send(self.doneEvent)
return None return None
@ -318,29 +254,11 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
messenger.send('friendAvatar', [None, None, None]) messenger.send('friendAvatar', [None, None, None])
return return
def __choseFriend(self, friendId, showType = 0): def __choseFriend(self, friendId):
messenger.send('wakeup') messenger.send('wakeup')
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = base.cr.identifyFriend(friendId) handle = base.cr.identifyFriend(friendId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(friendId)
if handle != None: if handle != None:
self.notify.info("Clicked on name in friend's list. doId = %s" % handle.doId)
messenger.send('clickedNametag', [handle]) messenger.send('clickedNametag', [handle])
return
def __chosePlayerFriend(self, friendId, showType = 1):
messenger.send('wakeup')
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = None
playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(friendId)
handle = base.cr.identifyFriend(playerFriendInfo.avatarId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(playerFriendInfo.avatarId)
if playerFriendInfo != None:
self.notify.info("Clicked on name in player friend's list. Id = %s" % friendId)
messenger.send('clickedNametagPlayer', [handle, friendId, showType])
return
def __updateScrollList(self): def __updateScrollList(self):
newFriends = [] newFriends = []
@ -350,179 +268,29 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
freeChatDouble = [] freeChatDouble = []
speedChatDouble = [] speedChatDouble = []
offlineFriends = [] offlineFriends = []
if self.panelType == FLPPlayers:
playerFriendList = base.cr.playerFriendsManager.playerFriendsList
for playerFriendId in playerFriendList:
if playerFriendId in base.cr.playerFriendsManager.playerId2Info:
playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerFriendId)
if playerFriendInfo.onlineYesNo:
if playerFriendInfo.understandableYesNo:
if playerFriendInfo.avatarId:
freeChatDouble.insert(0, (playerFriendInfo.avatarId,
0,
playerFriendId,
1))
else:
freeChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
elif playerFriendInfo.avatarId:
speedChatDouble.insert(0, (playerFriendInfo.avatarId,
0,
playerFriendId,
1))
else:
speedChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
elif playerFriendInfo.understandableYesNo:
freeChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
else:
speedChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
if self.panelType == FLPOnlinePlayers:
playerFriendList = base.cr.playerFriendsManager.playerFriendsList
for playerFriendId in playerFriendList:
if playerFriendId in base.cr.playerFriendsManager.playerId2Info:
playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerFriendId)
if playerFriendInfo.onlineYesNo:
if playerFriendInfo.understandableYesNo:
if playerFriendInfo.avatarId:
freeChatDouble.insert(0, (playerFriendInfo.avatarId,
0,
playerFriendId,
1))
else:
freeChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
elif playerFriendInfo.avatarId:
speedChatDouble.insert(0, (playerFriendInfo.avatarId,
0,
playerFriendId,
1))
else:
speedChatOneRef.insert(0, (0,
0,
playerFriendId,
1))
if self.panelType == FLPAll: if self.panelType == FLPAll:
if base.friendMode == 0: if True:
for friendPair in base.localAvatar.friendsList: for friendPair in base.localAvatar.friendsList:
playerId = 0 if base.cr.isFriendOnline(friendPair[0]):
if hasattr(base.cr, 'playerFriendsManager'): if friendPair[1] & ToontownGlobals.FriendChat:
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(friendPair[0])
if playerId:
if friendPair[1] & ToontownGlobals.FriendChat:
freeChatDouble.insert(0, (friendPair[0],
friendPair[1],
playerId,
0))
else:
speedChatDouble.insert(0, (friendPair[0],
friendPair[1],
playerId,
0))
elif base.cr.isFriendOnline(friendPair[0]):
if friendPair[1] & ToontownGlobals.FriendChat:
freeChatOneRef.insert(0, (friendPair[0],
friendPair[1],
0,
0))
else:
speedChatOneRef.insert(0, (friendPair[0],
friendPair[1],
0,
0))
elif friendPair[1] & ToontownGlobals.FriendChat:
freeChatOneRef.insert(0, (friendPair[0], freeChatOneRef.insert(0, (friendPair[0],
friendPair[1], friendPair[1]))
0,
0))
else: else:
speedChatOneRef.insert(0, (friendPair[0], speedChatOneRef.insert(0, (friendPair[0],
friendPair[1], friendPair[1]))
0, elif friendPair[1] & ToontownGlobals.FriendChat:
0)) freeChatOneRef.insert(0, (friendPair[0],
friendPair[1]))
else: else:
offlineFriends.append((friendPair[0], speedChatOneRef.insert(0, (friendPair[0],
friendPair[1], friendPair[1]))
playerId,
0))
if hasattr(base.cr, 'playerFriendsManager'):
for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars():
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId)
playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
if not base.cr.playerFriendsManager.askAvatarKnownElseWhere(avatarId):
if playerFriendInfo.understandableYesNo:
freeChatDouble.insert(0, (avatarId,
0,
playerId,
0))
else:
speedChatDouble.insert(0, (avatarId,
0,
playerId,
0))
if self.panelType == FLPOnline: if self.panelType == FLPOnline:
if base.friendMode == 0: if True:
for friendPair in base.localAvatar.friendsList: for friendPair in base.localAvatar.friendsList:
if hasattr(base.cr, 'playerFriendsManager') and base.cr.isFriendOnline(friendPair[0]): if base.cr.isFriendOnline(friendPair[0]):
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(friendPair[0])
if playerId:
if friendPair[1] & ToontownGlobals.FriendChat:
freeChatDouble.insert(0, (friendPair[0],
friendPair[1],
playerId,
0))
else:
speedChatDouble.insert(0, (friendPair[0],
friendPair[1],
playerId,
0))
elif friendPair[1] & ToontownGlobals.FriendChat:
freeChatOneRef.insert(0, (friendPair[0],
friendPair[1],
0,
0))
else:
speedChatOneRef.insert(0, (friendPair[0],
friendPair[1],
0,
0))
elif base.cr.isFriendOnline(friendPair[0]):
offlineFriends.append((friendPair[0], offlineFriends.append((friendPair[0],
friendPair[1], friendPair[1]))
0,
0))
if hasattr(base.cr, 'playerFriendsManager'):
for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars():
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId)
playerFriendInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
if not base.cr.playerFriendsManager.askAvatarKnownElseWhere(avatarId):
if playerFriendInfo.understandableYesNo:
freeChatDouble.insert(0, (avatarId,
0,
playerId,
0))
else:
speedChatDouble.insert(0, (avatarId,
0,
playerId,
0))
if self.panelType == FLPPets: if self.panelType == FLPPets:
for objId, obj in base.cr.doId2do.items(): for objId, obj in base.cr.doId2do.items():
@ -604,14 +372,8 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
self.title['text'] = TTLocalizer.FriendsListPanelOnlineFriends self.title['text'] = TTLocalizer.FriendsListPanelOnlineFriends
elif self.panelType == FLPAll: elif self.panelType == FLPAll:
self.title['text'] = TTLocalizer.FriendsListPanelAllFriends self.title['text'] = TTLocalizer.FriendsListPanelAllFriends
elif self.panelType == FLPPets:
self.title['text'] = TTLocalizer.FriendsListPanelPets
elif self.panelType == FLPPlayers:
self.title['text'] = TTLocalizer.FriendsListPanelPlayers
elif self.panelType == FLPOnlinePlayers:
self.title['text'] = TTLocalizer.FriendsListPanelOnlinePlayers
else: else:
self.title['text'] = TTLocalizer.FriendsListPanelIgnoredFriends self.title['text'] = TTLocalizer.FriendsListPanelPets
self.title.resetFrameSize() self.title.resetFrameSize()
def __updateArrows(self): def __updateArrows(self):
@ -632,10 +394,5 @@ class FriendsListPanel(DirectFrame, StateData.StateData):
if self.panelType == FLPOnline: if self.panelType == FLPOnline:
self.__updateScrollList() self.__updateScrollList()
def __friendPlayers(self, doId):
if self.panelType == FLPPlayers:
self.__updateScrollList()
def __friendsListChanged(self, arg1 = None, arg2 = None): def __friendsListChanged(self, arg1 = None, arg2 = None):
if self.panelType != FLPEnemies: self.__updateScrollList()
self.__updateScrollList()

View file

@ -1,12 +0,0 @@
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
from direct.directnotify.DirectNotifyGlobal import directNotify
from otp.otpbase import OTPGlobals
from otp.friends.PlayerFriendsManager import PlayerFriendsManager
class TTPlayerFriendsManager(PlayerFriendsManager):
def __init__(self, cr):
PlayerFriendsManager.__init__(self, cr)
def sendRequestInvite(self, playerId):
self.sendUpdate('requestInvite', [0, playerId, False])

View file

@ -1,6 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from otp.friends.PlayerFriendsManagerUD import PlayerFriendsManagerUD
class TTPlayerFriendsManagerUD(PlayerFriendsManagerUD):
notify = DirectNotifyGlobal.directNotify.newCategory("TTPlayerFriendsManagerUD")

View file

@ -40,7 +40,7 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
0, 0,
0] 0]
self.barrierPlayback = None self.barrierPlayback = None
self.trustedPlayerId = None self.trustedAvId = None
self.activeGolferIndex = None self.activeGolferIndex = None
self.activeGolferId = None self.activeGolferId = None
self.holeInfo = GolfGlobals.HoleInfo[self.holeId] self.holeInfo = GolfGlobals.HoleInfo[self.holeId]
@ -263,8 +263,8 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
dirX, dirX,
dirY] dirY]
self.commonHoldData = commonObjectData self.commonHoldData = commonObjectData
self.trustedPlayerId = self.choosePlayerToSimulate() self.trustedAvId = self.chooseAvatarToSimulate()
self.sendUpdateToAvatarId(self.trustedPlayerId, 'assignRecordSwing', [avId, self.sendUpdateToAvatarId(self.trustedAvId, 'assignRecordSwing', [avId,
cycleTime, cycleTime,
power, power,
x, x,
@ -275,19 +275,14 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
commonObjectData]) commonObjectData])
self.golfCourse.addAimTime(avId, curAimTime) self.golfCourse.addAimTime(avId, curAimTime)
def choosePlayerToSimulate(self): def chooseAvatarToSimulate(self):
stillPlaying = self.golfCourse.getStillPlayingAvIds() stillPlaying = self.golfCourse.getStillPlayingAvIds()
playerId = 0
if simbase.air.config.GetBool('golf-trust-driver-first', 0): return stillPlaying[0] if stillPlaying else 0
if stillPlaying:
playerId = stillPlaying[0]
else:
playerId = random.choice(stillPlaying)
return playerId
def ballMovie2AI(self, cycleTime, avId, movie, spinMovie, ballInFrame, ballTouchedHoleFrame, ballFirstTouchedHoleFrame, commonObjectData): def ballMovie2AI(self, cycleTime, avId, movie, spinMovie, ballInFrame, ballTouchedHoleFrame, ballFirstTouchedHoleFrame, commonObjectData):
sentFromId = self.air.getAvatarIdFromSender() sentFromId = self.air.getAvatarIdFromSender()
if sentFromId == self.trustedPlayerId: if sentFromId == self.trustedAvId:
lastFrameNum = len(movie) - 2 lastFrameNum = len(movie) - 2
if lastFrameNum < 0: if lastFrameNum < 0:
lastFrameNum = 0 lastFrameNum = 0
@ -309,11 +304,11 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
if self.state == 'WaitPlayback' or self.state == 'WaitTee': if self.state == 'WaitPlayback' or self.state == 'WaitTee':
self.notify.warning('ballMovie2AI requesting from %s to WaitPlayback' % self.state) self.notify.warning('ballMovie2AI requesting from %s to WaitPlayback' % self.state)
self.request('WaitPlayback') self.request('WaitPlayback')
elif self.trustedPlayerId == None: elif self.trustedAvId == None:
return return
else: else:
self.doAction() self.doAction()
self.trustedPlayerId = None self.trustedAvId = None
return return
def performReadyAction(self): def performReadyAction(self):
@ -344,7 +339,7 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
self.ballFirstTouchedHoleFrame, self.ballFirstTouchedHoleFrame,
self.commonHoldData]) self.commonHoldData])
self.ballPos[avId] = newPos self.ballPos[avId] = newPos
self.trustedPlayerId = None self.trustedAvId = None
return return
def postResult(self, cycleTime, avId, recording, aVRecording, ballInHoleFrame, ballTouchedHoleFrame, ballFirstTouchedHoleFrame): def postResult(self, cycleTime, avId, recording, aVRecording, ballInHoleFrame, ballTouchedHoleFrame, ballFirstTouchedHoleFrame):
@ -422,7 +417,7 @@ class DistributedGolfHoleAI(DistributedPhysicsWorldAI.DistributedPhysicsWorldAI,
if self.barrierPlayback: if self.barrierPlayback:
self.barrierPlayback.clear(avId) self.barrierPlayback.clear(avId)
else: else:
if avId == self.trustedPlayerId: if avId == self.trustedAvId:
self.doAction() self.doAction()
if avId == self.activeGolferId and not self.golfCourse.haveAllGolfersExited(): if avId == self.activeGolferId and not self.golfCourse.haveAllGolfersExited():
self.selectNextGolfer() self.selectNextGolfer()

View file

@ -118,13 +118,13 @@ class ToonHood(Hood):
self.doneStatus = doneStatus self.doneStatus = doneStatus
messenger.send(self.doneEvent) messenger.send(self.doneEvent)
def enterPurchase(self, pointsAwarded, playerMoney, playerIds, playerStates, remain, metagameRound = -1, votesArray = None): def enterPurchase(self, pointsAwarded, playerMoney, avIds, playerStates, remain, metagameRound = -1, votesArray = None):
messenger.send('enterSafeZone') messenger.send('enterSafeZone')
DistributedAvatar.DistributedAvatar.HpTextEnabled = 0 DistributedAvatar.DistributedAvatar.HpTextEnabled = 0
base.localAvatar.laffMeter.start() base.localAvatar.laffMeter.start()
self.purchaseDoneEvent = 'purchaseDone' self.purchaseDoneEvent = 'purchaseDone'
self.accept(self.purchaseDoneEvent, self.handlePurchaseDone) self.accept(self.purchaseDoneEvent, self.handlePurchaseDone)
self.purchase = Purchase.Purchase(base.localAvatar, pointsAwarded, playerMoney, playerIds, playerStates, remain, self.purchaseDoneEvent, metagameRound, votesArray) self.purchase = Purchase.Purchase(base.localAvatar, pointsAwarded, playerMoney, avIds, playerStates, remain, self.purchaseDoneEvent, metagameRound, votesArray)
self.purchase.load() self.purchase.load()
self.purchase.enter() self.purchase.enter()

View file

@ -47,9 +47,9 @@ class DistributedIceGame(DistributedMinigame.DistributedMinigame, DistributedIce
self.curMatch = 0 self.curMatch = 0
self.controlKeyWarningLabel = DirectLabel(text=TTLocalizer.IceGameControlKeyWarning, text_fg=VBase4(1, 0, 0, 1), relief=None, pos=(0.0, 0, 0), scale=0.15) self.controlKeyWarningLabel = DirectLabel(text=TTLocalizer.IceGameControlKeyWarning, text_fg=VBase4(1, 0, 0, 1), relief=None, pos=(0.0, 0, 0), scale=0.15)
self.controlKeyWarningLabel.hide() self.controlKeyWarningLabel.hide()
self.waitingMoveLabel = DirectLabel(text=TTLocalizer.IceGameWaitingForPlayersToFinishMove, text_fg=VBase4(1, 1, 1, 1), relief=None, pos=(-0.6, 0, -0.75), scale=0.075) self.waitingMoveLabel = DirectLabel(text=TTLocalizer.WaitingForOtherToons, text_fg=VBase4(1, 1, 1, 1), relief=None, pos=(-0.6, 0, -0.75), scale=0.075)
self.waitingMoveLabel.hide() self.waitingMoveLabel.hide()
self.waitingSyncLabel = DirectLabel(text=TTLocalizer.IceGameWaitingForAISync, text_fg=VBase4(1, 1, 1, 1), relief=None, pos=(-0.6, 0, -0.75), scale=0.075) self.waitingSyncLabel = DirectLabel(text=TTLocalizer.WaitingForOtherToons, text_fg=VBase4(1, 1, 1, 1), relief=None, pos=(-0.6, 0, -0.75), scale=0.075)
self.waitingSyncLabel.hide() self.waitingSyncLabel.hide()
self.infoLabel = DirectLabel(text='', text_fg=VBase4(0, 0, 0, 1), relief=None, pos=(0.0, 0, 0.7), scale=0.075) self.infoLabel = DirectLabel(text='', text_fg=VBase4(0, 0, 0, 1), relief=None, pos=(0.0, 0, 0.7), scale=0.075)
self.updateInfoLabel() self.updateInfoLabel()

View file

@ -33,7 +33,7 @@ class DistributedPatternGame(DistributedMinigame):
strWrong = TTLocalizer.PatternGameWrong strWrong = TTLocalizer.PatternGameWrong
strPerfect = TTLocalizer.PatternGamePerfect strPerfect = TTLocalizer.PatternGamePerfect
strBye = TTLocalizer.PatternGameBye strBye = TTLocalizer.PatternGameBye
strWaitingOtherPlayers = TTLocalizer.PatternGameWaitingOtherPlayers strWaitingOtherPlayers = TTLocalizer.WaitingForOtherToons
strPleaseWait = TTLocalizer.PatternGamePleaseWait strPleaseWait = TTLocalizer.PatternGamePleaseWait
strRound = TTLocalizer.PatternGameRound strRound = TTLocalizer.PatternGameRound
toonAnimNames = ['up', toonAnimNames = ['up',

View file

@ -543,13 +543,13 @@ class DistributedPhotoGame(DistributedMinigame, PhotoGameBase.PhotoGameBase):
self.notify.debug('Viewfinder to screen angles with math H:%s V:%s' % (hMDegree, vMDegree)) self.notify.debug('Viewfinder to screen angles with math H:%s V:%s' % (hMDegree, vMDegree))
return return
def newAIPhotoScore(self, playerId, assignmentIndex, score): def newAIPhotoScore(self, avId, assignmentIndex, score):
if len(self.assignments) > assignmentIndex: if len(self.assignments) > assignmentIndex:
assignment = self.assignments[assignmentIndex] assignment = self.assignments[assignmentIndex]
assignmentData = self.assignmentDataDict[assignment] assignmentData = self.assignmentDataDict[assignment]
if score > assignmentData[2]: if score > assignmentData[2]:
assignmentData[2] = score assignmentData[2] = score
assignmentData[3] = playerId assignmentData[3] = avId
self.updateAssignmentPanels() self.updateAssignmentPanels()
def determinePhotoContent(self, subject): def determinePhotoContent(self, subject):

View file

@ -238,7 +238,7 @@ class Purchase(PurchaseBase):
self.toon.inventory.hide() self.toon.inventory.hide()
taskMgr.remove('resetStatusText') taskMgr.remove('resetStatusText')
taskMgr.remove('showBrokeMsgTask') taskMgr.remove('showBrokeMsgTask')
self.statusLabel['text'] = TTLocalizer.GagShopWaitingOtherPlayers self.statusLabel['text'] = TTLocalizer.WaitingForOtherToons
messenger.send('purchasePlayAgain') messenger.send('purchasePlayAgain')
def handleDone(self, playAgain): def handleDone(self, playAgain):

View file

@ -469,7 +469,7 @@ class DistributedRace(DistributedObject.DistributedObject):
def enterWaiting(self): def enterWaiting(self):
self.waitingLabel = DirectLabel() self.waitingLabel = DirectLabel()
self.waitingLabel['text'] = TTLocalizer.BuildingWaitingForVictors self.waitingLabel['text'] = TTLocalizer.WaitingForOtherToons
self.waitingLabel.setScale(TTLocalizer.DRenterWaiting) self.waitingLabel.setScale(TTLocalizer.DRenterWaiting)
def exitWaiting(self): def exitWaiting(self):

View file

@ -2,10 +2,10 @@ import PurchaseManagerAI
class NewbiePurchaseManagerAI(PurchaseManagerAI.PurchaseManagerAI): class NewbiePurchaseManagerAI(PurchaseManagerAI.PurchaseManagerAI):
def __init__(self, air, newbieId, playerArray, mpArray, previousMinigameId, trolleyZone): def __init__(self, air, newbieId, avArray, mpArray, previousMinigameId, trolleyZone):
self.ownedNewbieId = newbieId self.ownedNewbieId = newbieId
newbieList = [] newbieList = []
PurchaseManagerAI.PurchaseManagerAI.__init__(self, air, playerArray, mpArray, previousMinigameId, trolleyZone, newbieList) PurchaseManagerAI.PurchaseManagerAI.__init__(self, air, avArray, mpArray, previousMinigameId, trolleyZone, newbieList)
def startCountdown(self): def startCountdown(self):
pass pass
@ -13,7 +13,7 @@ class NewbiePurchaseManagerAI(PurchaseManagerAI.PurchaseManagerAI):
def getOwnedNewbieId(self): def getOwnedNewbieId(self):
return self.ownedNewbieId return self.ownedNewbieId
def getInvolvedPlayerIds(self): def getInvolvedAvIds(self):
return [self.ownedNewbieId] return [self.ownedNewbieId]
def handlePlayerLeaving(self, avId): def handlePlayerLeaving(self, avId):

View file

@ -16,9 +16,9 @@ class PurchaseManager(DistributedObject.DistributedObject):
DistributedObject.DistributedObject.disable(self) DistributedObject.DistributedObject.disable(self)
self.ignoreAll() self.ignoreAll()
def setPlayerIds(self, *playerIds): def setAvIds(self, *avIds):
self.notify.debug('setPlayerIds: %s' % (playerIds,)) self.notify.debug('setAvIds: %s' % (avIds,))
self.playerIds = playerIds self.avIds = avIds
def setNewbieIds(self, newbieIds): def setNewbieIds(self, newbieIds):
self.notify.debug('setNewbieIds: %s' % (newbieIds,)) self.notify.debug('setNewbieIds: %s' % (newbieIds,))
@ -57,16 +57,16 @@ class PurchaseManager(DistributedObject.DistributedObject):
self.accept('boughtGag', self.__handleBoughtGag) self.accept('boughtGag', self.__handleBoughtGag)
base.cr.playGame.hood.fsm.request('purchase', [self.mpArray, base.cr.playGame.hood.fsm.request('purchase', [self.mpArray,
self.moneyArray, self.moneyArray,
self.playerIds, self.avIds,
self.playerStates, self.playerStates,
remain, remain,
self.metagameRound, self.metagameRound,
self.votesArray]) self.votesArray])
def calcHasLocalToon(self): def calcHasLocalToon(self):
retval = base.localAvatar.doId not in self.newbieIds and base.localAvatar.doId in self.playerIds retval = base.localAvatar.doId not in self.newbieIds and base.localAvatar.doId in self.avIds
if self.metagameRound > -1 and self.metagameRound < TravelGameGlobals.FinalMetagameRoundIndex: if self.metagameRound > -1 and self.metagameRound < TravelGameGlobals.FinalMetagameRoundIndex:
retval = base.localAvatar.doId in self.playerIds retval = base.localAvatar.doId in self.avIds
self.notify.debug('calcHasLocalToon returning %s' % retval) self.notify.debug('calcHasLocalToon returning %s' % retval)
return retval return retval

View file

@ -13,9 +13,9 @@ from toontown.minigame import MinigameGlobals
class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI): class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory('PurchaseManagerAI') notify = DirectNotifyGlobal.directNotify.newCategory('PurchaseManagerAI')
def __init__(self, air, playerArray, mpArray, previousMinigameId, trolleyZone, newbieIdList = [], votesArray = None, metagameRound = -1, desiredNextGame = None): def __init__(self, air, avArray, mpArray, previousMinigameId, trolleyZone, newbieIdList = [], votesArray = None, metagameRound = -1, desiredNextGame = None):
DistributedObjectAI.DistributedObjectAI.__init__(self, air) DistributedObjectAI.DistributedObjectAI.__init__(self, air)
self.playerIds = copy.deepcopy(playerArray) self.avIds = copy.deepcopy(avArray)
self.minigamePoints = copy.deepcopy(mpArray) self.minigamePoints = copy.deepcopy(mpArray)
self.previousMinigameId = previousMinigameId self.previousMinigameId = previousMinigameId
self.trolleyZone = trolleyZone self.trolleyZone = trolleyZone
@ -27,8 +27,8 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
self.votesArray = [] self.votesArray = []
self.metagameRound = metagameRound self.metagameRound = metagameRound
self.desiredNextGame = desiredNextGame self.desiredNextGame = desiredNextGame
for i in xrange(len(self.playerIds), 4): for i in xrange(len(self.avIds), 4):
self.playerIds.append(0) self.avIds.append(0)
for i in xrange(len(self.minigamePoints), 4): for i in xrange(len(self.minigamePoints), 4):
self.minigamePoints.append(0) self.minigamePoints.append(0)
@ -45,13 +45,13 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
0, 0,
0, 0,
0] 0]
for i in xrange(len(self.playerIds)): for i in xrange(len(self.avIds)):
avId = self.playerIds[i] avId = self.avIds[i]
if avId <= 3: if avId <= 3:
self.playerStates[i] = PURCHASE_NO_CLIENT_STATE self.playerStates[i] = PURCHASE_NO_CLIENT_STATE
self.playersReported[i] = PURCHASE_CANTREPORT_STATE self.playersReported[i] = PURCHASE_CANTREPORT_STATE
elif avId in self.air.doId2do: elif avId in self.air.doId2do:
if avId not in self.getInvolvedPlayerIds(): if avId not in self.getInvolvedAvIds():
self.playerStates[i] = PURCHASE_EXIT_STATE self.playerStates[i] = PURCHASE_EXIT_STATE
self.playersReported[i] = PURCHASE_REPORTED_STATE self.playersReported[i] = PURCHASE_REPORTED_STATE
else: else:
@ -61,7 +61,7 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
self.playerStates[i] = PURCHASE_DISCONNECTED_STATE self.playerStates[i] = PURCHASE_DISCONNECTED_STATE
self.playersReported[i] = PURCHASE_CANTREPORT_STATE self.playersReported[i] = PURCHASE_CANTREPORT_STATE
for avId in self.getInvolvedPlayerIds(): for avId in self.getInvolvedAvIds():
if avId > 3 and avId in self.air.doId2do: if avId > 3 and avId in self.air.doId2do:
self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId]) self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId])
av = self.air.doId2do[avId] av = self.air.doId2do[avId]
@ -77,7 +77,7 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
av.addMoney(self.minigamePoints[avIndex]) av.addMoney(self.minigamePoints[avIndex])
self.air.writeServerEvent('minigame', avId, '%s|%s|%s|%s' % (self.previousMinigameId, self.air.writeServerEvent('minigame', avId, '%s|%s|%s|%s' % (self.previousMinigameId,
self.trolleyZone, self.trolleyZone,
self.playerIds, self.avIds,
self.minigamePoints[avIndex])) self.minigamePoints[avIndex]))
if self.metagameRound == TravelGameGlobals.FinalMetagameRoundIndex: if self.metagameRound == TravelGameGlobals.FinalMetagameRoundIndex:
numPlayers = len(self.votesArray) numPlayers = len(self.votesArray)
@ -87,7 +87,7 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
av.addMoney(extraBeans) av.addMoney(extraBeans)
self.air.writeServerEvent('minigame_extraBeans', avId, '%s|%s|%s|%s' % (self.previousMinigameId, self.air.writeServerEvent('minigame_extraBeans', avId, '%s|%s|%s|%s' % (self.previousMinigameId,
self.trolleyZone, self.trolleyZone,
self.playerIds, self.avIds,
extraBeans)) extraBeans))
self.receivingInventory = 1 self.receivingInventory = 1
@ -99,9 +99,9 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
self.ignoreAll() self.ignoreAll()
DistributedObjectAI.DistributedObjectAI.delete(self) DistributedObjectAI.DistributedObjectAI.delete(self)
def getInvolvedPlayerIds(self): def getInvolvedAvIds(self):
avIds = [] avIds = []
for avId in self.playerIds: for avId in self.avIds:
if avId not in self.newbieIds: if avId not in self.newbieIds:
avIds.append(avId) avIds.append(avId)
elif self.metagameRound > -1 and self.metagameRound < TravelGameGlobals.FinalMetagameRoundIndex: elif self.metagameRound > -1 and self.metagameRound < TravelGameGlobals.FinalMetagameRoundIndex:
@ -112,8 +112,8 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
def getMinigamePoints(self): def getMinigamePoints(self):
return self.minigamePoints return self.minigamePoints
def getPlayerIds(self): def getavIds(self):
return self.playerIds return self.avIds
def getNewbieIds(self): def getNewbieIds(self):
return self.newbieIds return self.newbieIds
@ -259,7 +259,7 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
retval = [] retval = []
for playAgainIndex in xrange(len(playAgainList)): for playAgainIndex in xrange(len(playAgainList)):
avId = playAgainList[playAgainIndex] avId = playAgainList[playAgainIndex]
origIndex = self.playerIds.index(avId) origIndex = self.avIds.index(avId)
if self.votesArray and origIndex < len(self.votesArray): if self.votesArray and origIndex < len(self.votesArray):
retval.append(self.votesArray[origIndex]) retval.append(self.votesArray[origIndex])
else: else:
@ -296,8 +296,8 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
return None return None
def findAvIndex(self, avId): def findAvIndex(self, avId):
for i in xrange(len(self.playerIds)): for i in xrange(len(self.avIds)):
if avId == self.playerIds[i]: if avId == self.avIds[i]:
return i return i
return None return None
@ -314,7 +314,7 @@ class PurchaseManagerAI(DistributedObjectAI.DistributedObjectAI):
playAgainList = [] playAgainList = []
for i in xrange(len(self.playerStates)): for i in xrange(len(self.playerStates)):
if self.playerStates[i] == PURCHASE_PLAYAGAIN_STATE: if self.playerStates[i] == PURCHASE_PLAYAGAIN_STATE:
playAgainList.append(self.playerIds[i]) playAgainList.append(self.avIds[i])
return playAgainList return playAgainList

View file

@ -1038,10 +1038,7 @@ class DistributedBossCog(DistributedAvatar.DistributedAvatar, BossCog.BossCog):
return return
if not self.allowClickedNameTag: if not self.allowClickedNameTag:
return return
if self.cr: FriendsListManager.FriendsListManager._FriendsListManager__handleClickedNametag(avatar)
place = self.cr.playGame.getPlace()
if place and hasattr(place, 'fsm'):
FriendsListManager.FriendsListManager._FriendsListManager__handleClickedNametag(place, avatar)
def __handleFriendAvatar(self, avId, avName, avDisableName): def __handleFriendAvatar(self, avId, avName, avDisableName):
self.notify.debug('__handleFriendAvatar') self.notify.debug('__handleFriendAvatar')
@ -1054,7 +1051,7 @@ class DistributedBossCog(DistributedAvatar.DistributedAvatar, BossCog.BossCog):
if place and hasattr(place, 'fsm'): if place and hasattr(place, 'fsm'):
FriendsListManager.FriendsListManager._FriendsListManager__handleFriendAvatar(place, avId, avName, avDisableName) FriendsListManager.FriendsListManager._FriendsListManager__handleFriendAvatar(place, avId, avName, avDisableName)
def __handleAvatarDetails(self, avId, avName, playerId = None): def __handleAvatarDetails(self, avId, avName):
self.notify.debug('__handleAvatarDetails') self.notify.debug('__handleAvatarDetails')
if not (self.state == 'BattleThree' or self.state == 'BattleFour'): if not (self.state == 'BattleThree' or self.state == 'BattleFour'):
return return
@ -1063,7 +1060,7 @@ class DistributedBossCog(DistributedAvatar.DistributedAvatar, BossCog.BossCog):
if self.cr: if self.cr:
place = self.cr.playGame.getPlace() place = self.cr.playGame.getPlace()
if place and hasattr(place, 'fsm'): if place and hasattr(place, 'fsm'):
FriendsListManager.FriendsListManager._FriendsListManager__handleAvatarDetails(place, avId, avName, playerId) FriendsListManager.FriendsListManager._FriendsListManager__handleAvatarDetails(place, avId, avName)
def enterBattleFour(self): def enterBattleFour(self):
self.cleanupIntervals() self.cleanupIntervals()

View file

@ -381,7 +381,7 @@ class DistributedLawbotBoss(DistributedBossCog.DistributedBossCog, FSM.FSM):
def __showWaitingMessage(self, task): def __showWaitingMessage(self, task):
self.notify.debug('----- __showWaitingMessage') self.notify.debug('----- __showWaitingMessage')
self.__showOnscreenMessage(TTLocalizer.BuildingWaitingForVictors) self.__showOnscreenMessage(TTLocalizer.WaitingForOtherToons)
def loadEnvironment(self): def loadEnvironment(self):
self.notify.debug('----- loadEnvironment') self.notify.debug('----- loadEnvironment')

View file

@ -501,7 +501,7 @@ class DistributedSellbotBoss(DistributedBossCog.DistributedBossCog, FSM.FSM):
self.onscreenMessage = None self.onscreenMessage = None
def __showWaitingMessage(self, task): def __showWaitingMessage(self, task):
self.__showOnscreenMessage(TTLocalizer.BuildingWaitingForVictors) self.__showOnscreenMessage(TTLocalizer.WaitingForOtherToons)
def __placeCageShadow(self): def __placeCageShadow(self):
if self.cageShadow == None: if self.cageShadow == None:

View file

@ -135,7 +135,7 @@ class BoardingGroupInvitingPanel(BoardingGroupInviterPanelBase):
self.dialogName = 'BoardingGroupInvitingPanel' self.dialogName = 'BoardingGroupInvitingPanel'
self.inviterText = TTLocalizer.BoardingInvitingMessage % self.avatarName self.inviterText = TTLocalizer.BoardingInvitingMessage % self.avatarName
self.panelStyle = TTDialog.CancelOnly self.panelStyle = TTDialog.CancelOnly
self.buttonTextList = [OTPLocalizer.GuildInviterCancel] self.buttonTextList = [OTPLocalizer.lCancel]
def handleButton(self, value): def handleButton(self, value):
self.boardingParty.requestCancelInvite(self.avId) self.boardingParty.requestCancelInvite(self.avId)
@ -163,4 +163,4 @@ class BoardingGroupInvitationRejectedPanel(BoardingGroupInviterPanelBase):
self.dialogName = 'BoardingGroupInvitationRejectedPanel' self.dialogName = 'BoardingGroupInvitationRejectedPanel'
self.inviterText = TTLocalizer.BoardingInvitationRejected % self.avatarName self.inviterText = TTLocalizer.BoardingInvitationRejected % self.avatarName
self.panelStyle = TTDialog.Acknowledge self.panelStyle = TTDialog.Acknowledge
self.buttonTextList = [OTPLocalizer.GuildInviterOK] self.buttonTextList = [OTPLocalizer.lOK]

View file

@ -494,7 +494,7 @@ class DistributedToon(DistributedPlayer.DistributedPlayer, Toon.Toon, Distribute
base.talkAssistant.receiveOpenTalk(fromAV, avatarName, fromAC, None, newText) base.talkAssistant.receiveOpenTalk(fromAV, avatarName, fromAC, None, newText)
def isAvFriend(self, avId): def isAvFriend(self, avId):
return base.cr.isFriend(avId) or base.cr.playerFriendsManager.isAvatarOwnerPlayerFriend(avId) return base.cr.isFriend(avId)
def setTalkWhisper(self, fromAV, fromAC, avatarName, chat, mods, flags): def setTalkWhisper(self, fromAV, fromAC, avatarName, chat, mods, flags):
if not localAvatar.acceptingNonFriendWhispers: if not localAvatar.acceptingNonFriendWhispers:
@ -2407,9 +2407,9 @@ class DistributedToon(DistributedPlayer.DistributedPlayer, Toon.Toon, Distribute
if base.cr.isFriend(toonId): if base.cr.isFriend(toonId):
if base.cr.isFriendOnline(toonId): if base.cr.isFriendOnline(toonId):
if singleReply.status == InviteStatus.Accepted: if singleReply.status == InviteStatus.Accepted:
self.whisperSCTo(5302, toonId, 0) self.whisperSCTo(5302, toonId)
else: else:
self.whisperSCTo(5302, toonId, 0) self.whisperSCTo(5302, toonId)
def updateInvite(self, inviteKey, newStatus): def updateInvite(self, inviteKey, newStatus):
DistributedToon.partyNotify.debug('updateInvite( inviteKey=%d, newStatus=%s )' % (inviteKey, InviteStatus.getString(newStatus))) DistributedToon.partyNotify.debug('updateInvite( inviteKey=%d, newStatus=%s )' % (inviteKey, InviteStatus.getString(newStatus)))

View file

@ -471,29 +471,6 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar):
whisper.manage(base.marginManager) whisper.manage(base.marginManager)
base.playSfx(sfx) base.playSfx(sfx)
def displayTalkAccount(self, fromId, senderName, rawString, mods):
sender = None
playerInfo = None
sfx = self.soundWhisper
playerInfo = base.cr.playerFriendsManager.playerId2Info.get(fromId, None)
if playerInfo == None:
return
senderAvId = base.cr.playerFriendsManager.findAvIdFromPlayerId(fromId)
if not senderName and base.cr.playerFriendsManager.playerId2Info.get(fromId):
senderName = base.cr.playerFriendsManager.playerId2Info.get(fromId).playerName
senderAvatar = base.cr.identifyAvatar(senderAvId)
if sender:
chatString, scrubbed = senderAvatar.scrubTalk(rawString, mods)
else:
chatString, scrubbed = self.scrubTalk(rawString, mods)
chatString = senderName + ': ' + chatString
whisper = WhisperPopup(chatString, OTPGlobals.getInterfaceFont(), WTNormal)
if playerInfo != None:
whisper.setClickable(senderName, fromId, 1)
whisper.manage(base.marginManager)
base.playSfx(sfx)
return
def isLocal(self): def isLocal(self):
return 1 return 1
@ -892,9 +869,9 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar):
base.playSfx(sfx) base.playSfx(sfx)
return return
def clickedWhisper(self, doId, isPlayer = None): def clickedWhisper(self, doId):
if doId > 0: if doId > 0:
LocalAvatar.LocalAvatar.clickedWhisper(self, doId, isPlayer) LocalAvatar.LocalAvatar.clickedWhisper(self, doId)
else: else:
foundCanStart = False foundCanStart = False
for partyInfo in self.hostedParties: for partyInfo in self.hostedParties:

View file

@ -1,126 +0,0 @@
from pandac.PandaModules import *
from toontown.toonbase.ToontownGlobals import *
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.showbase import DirectObject
from direct.fsm import ClassicFSM, State
from direct.fsm import State
from direct.directnotify import DirectNotifyGlobal
import DistributedToon
from toontown.friends import FriendInviter
import ToonTeleportPanel
from toontown.toonbase import TTLocalizer
from toontown.hood import ZoneUtil
from toontown.toonbase.ToontownBattleGlobals import Tracks, Levels
globalAvatarDetail = None
def showPlayerDetail(avId, avName, playerId = None):
global globalAvatarDetail
if globalAvatarDetail != None:
globalAvatarDetail.cleanup()
globalAvatarDetail = None
globalAvatarDetail = PlayerDetailPanel(avId, avName, playerId)
return
def hidePlayerDetail():
global globalAvatarDetail
if globalAvatarDetail != None:
globalAvatarDetail.cleanup()
globalAvatarDetail = None
return
def unloadPlayerDetail():
global globalAvatarDetail
if globalAvatarDetail != None:
globalAvatarDetail.cleanup()
globalAvatarDetail = None
return
class PlayerDetailPanel(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('ToonAvatarDetailPanel')
def __init__(self, avId, avName, playerId = None, parent = aspect2dp, **kw):
self.playerId = playerId
self.isPlayer = 0
self.playerInfo = None
if playerId:
self.isPlayer = 1
if playerId in base.cr.playerFriendsManager.playerId2Info:
self.playerInfo = base.cr.playerFriendsManager.playerId2Info[playerId]
if not self.playerInfo.onlineYesNo:
avId = None
else:
avId = None
self.avId = avId
self.avName = avName
self.avatar = None
self.createdAvatar = None
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui')
detailPanel = gui.find('**/avatarInfoPanel')
textScale = 0.132
textWrap = 10.4
if self.playerId:
textScale = 0.1
textWrap = 18.0
optiondefs = (('pos', (0.525, 0.0, 0.525), None),
('scale', 0.5, None),
('relief', None, None),
('image', detailPanel, None),
('image_color', GlobalDialogColor, None),
('text', '', None),
('text_wordwrap', textWrap, None),
('text_scale', textScale, None),
('text_pos', (-0.125, 0.75), None))
self.defineoptions(kw, optiondefs)
DirectFrame.__init__(self, parent)
self.dataText = DirectLabel(self, text='', text_scale=0.085, text_align=TextNode.ALeft, text_wordwrap=15, relief=None, pos=(-0.85, 0.0, 0.725))
if self.avId:
self.avText = DirectLabel(self, text=TTLocalizer.PlayerToonName % {'toonname': self.avName}, text_scale=0.09, text_align=TextNode.ALeft, text_wordwrap=15, relief=None, pos=(-0.85, 0.0, 0.56))
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
self.gotoToonButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=1.15, text=TTLocalizer.PlayerShowToon, text_scale=0.08, text_pos=(0.0, -0.02), textMayChange=0, pos=(0.43, 0, 0.415), command=self.__showToon)
ToonTeleportPanel.hideTeleportPanel()
FriendInviter.hideFriendInviter()
self.bCancel = DirectButton(self, image=(buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')), relief=None, text=TTLocalizer.AvatarDetailPanelCancel, text_scale=0.05, text_pos=(0.12, -0.01), pos=(-0.865, 0.0, -0.765), scale=2.0, command=self.__handleCancel)
self.bCancel.show()
self.initialiseoptions(PlayerDetailPanel)
self.__showData()
buttons.removeNode()
gui.removeNode()
return
def cleanup(self):
if self.createdAvatar:
self.avatar.delete()
self.createdAvatar = None
self.destroy()
return
def __handleCancel(self):
unloadPlayerDetail()
def __showData(self):
if self.isPlayer and self.playerInfo:
if self.playerInfo.onlineYesNo:
someworld = self.playerInfo.location
else:
someworld = TTLocalizer.OfflineLocation
text = TTLocalizer.AvatarDetailPanelPlayer % {'player': self.playerInfo.playerName,
'world': someworld}
else:
text = TTLocalizer.AvatarDetailPanelOffline
self.dataText['text'] = text
def __showToon(self):
messenger.send('wakeup')
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = base.cr.identifyFriend(self.avId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(self.avId)
if handle != None:
self.notify.info("Clicked on name in friend's list. doId = %s" % handle.doId)
messenger.send('clickedNametagPlayer', [handle, self.playerId, 0])
return

View file

@ -1,393 +0,0 @@
from pandac.PandaModules import *
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.showbase import DirectObject
from toontown.friends import FriendHandle
from otp.avatar import Avatar
from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
from toontown.friends import ToontownFriendSecret
import ToonAvatarDetailPanel
import AvatarPanelBase
import PlayerDetailPanel
from otp.otpbase import OTPGlobals
GAME_LOGO_NAMES = {'Default': 'GameLogo_Toontown'}
GAME_LOGO_FILE = 'phase_3/models/misc/game_logo_card'
class PlayerInfoPanel(AvatarPanelBase.AvatarPanelBase):
notify = DirectNotifyGlobal.directNotify.newCategory('PlayerInfoPanel')
def __init__(self, playerId):
from toontown.friends import FriendsListPanel
AvatarPanelBase.AvatarPanelBase.__init__(self, None, FriendsListPanel=FriendsListPanel)
self.setup(playerId)
self.avId = 0
self.avName = None
return
def setup(self, playerId):
from toontown.friends import FriendsListPanel
self.playerId = playerId
self.playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
if not self.playerInfo:
return
avId = None
avatar = None
if playerId:
if self.playerInfo.onlineYesNo:
avId = self.playerInfo.avatarId
avatar = base.cr.playerFriendsManager.identifyFriend(avId)
self.notify.debug('Opening player panel, %s' % self.playerInfo)
self.avatar = avatar
self.noAv = 0
if not avatar:
self.noAv = 1
self.accountText = None
self.listName = ' '
world = self.playerInfo.location
if self.playerInfo.onlineYesNo == 0:
world = TTLocalizer.AvatarDetailPanelRealLife
self.accountText = self.playerInfo.playerName
if self.noAv:
avButtonState = DGG.DISABLED
else:
avButtonState = DGG.NORMAL
self.online = self.playerInfo.onlineYesNo
if self.online:
onlineButtonState = DGG.NORMAL
else:
onlineButtonState = DGG.DISABLED
base.localAvatar.obscureFriendsListButton(1)
gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui')
self.frame = DirectFrame(
image=gui.find('**/avatar_panel'),
relief=None,
pos=(1.1, 100, 0.525))
disabledImageColor = Vec4(1, 1, 1, 0.4)
text0Color = Vec4(1, 1, 1, 1)
text1Color = Vec4(0.5, 1, 0.5, 1)
text2Color = Vec4(1, 1, 0.5, 1)
text3Color = Vec4(0.6, 0.6, 0.6, 1)
if self.playerInfo:
logoImageName = GAME_LOGO_NAMES['Default']
if not self.playerInfo.onlineYesNo:
logoImageName = GAME_LOGO_NAMES['Default']
elif self.playerInfo.location in GAME_LOGO_NAMES:
logoImageName = GAME_LOGO_NAMES[self.playerInfo.location]
model = loader.loadModel(GAME_LOGO_FILE)
logoImage = model.find('**/' + logoImageName)
del model
self.outsideLogo = DirectLabel(
parent=self.frame,
relief=None,
image=logoImage,
pos=(0.0125, 0.0, 0.25),
image_color=(1.0, 1.0, 1.0, 1),
scale=(0.175, 1, 0.175))
font = ToontownGlobals.getInterfaceFont()
textScale = 0.047
textWrap = 7.5
textAlign = TextNode.ACenter
textPos = (0, 0)
self.nameLabel = DirectLabel(
parent=self.frame,
pos=(0.0125, 0, 0.385),
relief=None,
text=self.listName,
text_font=font,
text_fg=Vec4(0, 0, 0, 1),
text_pos=textPos,
text_scale=textScale,
text_wordwrap=textWrap,
text_align=textAlign,
text_shadow=(1, 1, 1, 1))
if self.accountText:
self.accountLabel = DirectLabel(
parent=self.frame,
pos=(0.0125, 0, 0.385),
text=self.accountText,
relief=None,
text_font=font,
text_fg=Vec4(0, 0, 0, 1),
text_pos=textPos,
text_scale=textScale,
text_wordwrap=textWrap,
text_align=textAlign,
text_shadow=(1, 1, 1, 1))
self.accountLabel.show()
self.closeButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/CloseBtn_UP'),
gui.find('**/CloseBtn_DN'),
gui.find('**/CloseBtn_Rllvr'),
gui.find('**/CloseBtn_UP')),
relief=None,
pos=(0.157644, 0, -0.379167),
command=self.__handleClose)
self.friendButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Frnds_Btn_UP'),
gui.find('**/Frnds_Btn_DN'),
gui.find('**/Frnds_Btn_RLVR'),
gui.find('**/Frnds_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
text=TTLocalizer.AvatarPanelFriends,
text_scale=0.06,
pos=(-0.103, 0, 0.133),
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_pos=(0.06, -0.02),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleFriend)
self.friendButton['state'] = DGG.DISABLED
self.goToButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Go2_Btn_UP'),
gui.find('**/Go2_Btn_DN'),
gui.find('**/Go2_Btn_RLVR'),
gui.find('**/Go2_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103, 0, 0.045),
text=TTLocalizer.AvatarPanelGoTo,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=0.06,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleGoto)
self.goToButton['state'] = DGG.DISABLED
self.whisperButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_ChtBtn_UP'),
gui.find('**/ChtBx_ChtBtn_DN'),
gui.find('**/ChtBx_ChtBtn_RLVR'),
gui.find('**/ChtBx_ChtBtn_UP')),
image3_color=disabledImageColor,
relief=None,
image_scale=0.9,
pos=(-0.103, 0, -0.0375),
text=TTLocalizer.AvatarPanelWhisper,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=TTLocalizer.PIPwisperButton,
text_pos=(0.06, -0.0125),
text_align=TextNode.ALeft,
state=onlineButtonState,
command=self.__handleWhisper)
self.secretsButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_ChtBtn_UP'),
gui.find('**/ChtBx_ChtBtn_DN'),
gui.find('**/ChtBx_ChtBtn_RLVR'),
gui.find('**/ChtBx_ChtBtn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103, 0, -0.13),
text=TTLocalizer.AvatarPanelSecrets,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=TTLocalizer.PIPsecretsButton,
text_pos=(0.055, -0.01),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleSecrets)
self.secretsButton['state'] = DGG.DISABLED
if not base.localAvatar.isTeleportAllowed():
self.goToButton['state'] = DGG.DISABLED
ignoreStr, ignoreCmd, ignoreSize = self.getIgnoreButtonInfo()
self.ignoreButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Ignore_Btn_UP'),
gui.find('**/Ignore_Btn_DN'),
gui.find('**/Ignore_Btn_RLVR'),
gui.find('**/Ignore_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103697, 0, -0.21),
text=ignoreStr,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=ignoreSize,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
state=avButtonState,
command=ignoreCmd)
self.reportButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/report_BtnUP'),
gui.find('**/report_BtnDN'),
gui.find('**/report_BtnRLVR'),
gui.find('**/report_BtnUP')),
image3_color=disabledImageColor,
image_scale=0.65,
relief=None,
pos=(-0.103, 0, -0.29738),
text=TTLocalizer.AvatarPanelReport,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=0.06,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
command=self.handleReport)
self.detailButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_BackBtn_UP'),
gui.find('**/ChtBx_BackBtn_DN'),
gui.find('**/ChtBx_BackBtn_Rllvr'),
gui.find('**/ChtBx_BackBtn_UP')),
relief=None,
text=('', TTLocalizer.PlayerPanelDetail,
TTLocalizer.PlayerPanelDetail, ''),
text_fg=text2Color,
text_shadow=(0, 0, 0, 1),
text_scale=TTLocalizer.PIPdetailButton,
text_pos=(0.085, 0.055),
text_align=TextNode.ACenter,
pos=(-0.133773, 0, -0.387132),
state=DGG.NORMAL,
command=self.__handleDetails)
gui.removeNode()
menuX = -0.05
menuScale = 0.064
self.frame.show()
messenger.send('avPanelDone')
self.accept('playerOnline', self.__handlePlayerChanged)
self.accept('playerOffline', self.__handlePlayerChanged)
self.accept(OTPGlobals.PlayerFriendUpdateEvent, self.__handlePlayerChanged)
self.accept(OTPGlobals.PlayerFriendRemoveEvent, self.__handlePlayerUnfriend)
return
def disableAll(self):
self.detailButton['state'] = DGG.DISABLED
self.ignoreButton['state'] = DGG.DISABLED
self.reportButton['state'] = DGG.DISABLED
self.goToButton['state'] = DGG.DISABLED
self.secretsButton['state'] = DGG.DISABLED
self.whisperButton['state'] = DGG.DISABLED
self.friendButton['state'] = DGG.DISABLED
self.closeButton['state'] = DGG.DISABLED
def cleanup(self):
self.unsetup()
self.ignore('playerOnline')
self.ignore('playerOffline')
self.ignore(OTPGlobals.PlayerFriendUpdateEvent)
self.ignore(OTPGlobals.PlayerFriendRemoveEvent)
AvatarPanelBase.AvatarPanelBase.cleanup(self)
def unsetup(self):
if not hasattr(self, 'frame') or self.frame == None:
return
PlayerDetailPanel.unloadPlayerDetail()
self.frame.destroy()
del self.frame
self.frame = None
base.localAvatar.obscureFriendsListButton(-1)
self.laffMeter = None
self.ignore('updateLaffMeter')
if hasattr(self.avatar, 'bFake') and self.avatar.bFake:
self.avatar.delete()
return
def __handleGoto(self):
if base.localAvatar.isTeleportAllowed():
base.localAvatar.chatMgr.noWhisper()
messenger.send('gotoAvatar', [self.avId, self.avName, self.avDisableName])
def __handleWhisper(self):
if self.noAv:
base.localAvatar.chatMgr.whisperTo(self.listName, 0, self.playerId)
else:
base.localAvatar.chatMgr.whisperTo(self.avName, self.avId, self.playerId)
def __handleSecrets(self):
base.localAvatar.chatMgr.noWhisper()
ToontownFriendSecret.showFriendSecret(ToontownFriendSecret.BothSecrets)
def __handleFriend(self):
base.localAvatar.chatMgr.noWhisper()
self.__getAvInfo()
messenger.send('friendAvatar', [self.avId, self.avName, self.avDisableName])
def __getAvInfo(self):
if self.playerId:
self.avId = self.playerInfo.avatarId
if self.avId:
avatar = base.cr.playerFriendsManager.identifyFriend(self.avId)
if avatar:
self.avName = avatar.getName()
if not self.avDisableName:
self.avDisableName = avatar.uniqueName('disable')
def __handleDetails(self):
base.localAvatar.chatMgr.noWhisper()
self.__getAvInfo()
messenger.send('playerDetails', [self.avId, self.avName, self.playerId])
def handleDisableAvatar(self):
pass
def __handlePlayerChanged(self, playerId, info = None):
if playerId == self.playerId:
self.unsetup()
self.setup(playerId)
def __handlePlayerUnfriend(self, playerId):
if playerId == self.playerId:
self.__handleClose()
def __handleClose(self):
self.cleanup()
AvatarPanelBase.currentAvatarPanel = None
if self.friendsListShown:
self.FriendsListPanel.showFriendsList()
return
def getAvId(self):
if hasattr(self, 'avatar'):
if self.avatar:
return self.avatar.doId
return None
def getPlayerId(self):
if hasattr(self, 'playerId'):
return self.playerId
return None
def isHidden(self):
if not hasattr(self, 'frame') or not self.frame:
return 1
return self.frame.isHidden()
def getType(self):
return 'player'

View file

@ -14,14 +14,12 @@ from toontown.hood import ZoneUtil
from toontown.toonbase.ToontownBattleGlobals import Tracks, Levels from toontown.toonbase.ToontownBattleGlobals import Tracks, Levels
globalAvatarDetail = None globalAvatarDetail = None
def showAvatarDetail(avId, avName, playerId = None): def showAvatarDetail(avId, avName):
global globalAvatarDetail global globalAvatarDetail
if globalAvatarDetail != None: if globalAvatarDetail != None:
globalAvatarDetail.cleanup() globalAvatarDetail.cleanup()
globalAvatarDetail = None globalAvatarDetail = None
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avId) globalAvatarDetail = ToonAvatarDetailPanel(avId, avName)
globalAvatarDetail = ToonAvatarDetailPanel(avId, avName, playerId)
return
def hideAvatarDetail(): def hideAvatarDetail():
@ -43,16 +41,12 @@ def unloadAvatarDetail():
class ToonAvatarDetailPanel(DirectFrame): class ToonAvatarDetailPanel(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('ToonAvatarDetailPanel') notify = DirectNotifyGlobal.directNotify.newCategory('ToonAvatarDetailPanel')
def __init__(self, avId, avName, playerId = None, parent = base.a2dTopRight, **kw): def __init__(self, avId, avName, parent = base.a2dTopRight, **kw):
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui') buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui') gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui')
detailPanel = gui.find('**/avatarInfoPanel') detailPanel = gui.find('**/avatarInfoPanel')
self.playerId = playerId
textScale = 0.095 textScale = 0.095
textWrap = 16.4 textWrap = 16.4
self.playerInfo = None
if self.playerId:
self.playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
optiondefs = (('pos', (-0.79, 0.0, -0.47), None), optiondefs = (('pos', (-0.79, 0.0, -0.47), None),
('scale', 0.5, None), ('scale', 0.5, None),
('relief', None, None), ('relief', None, None),
@ -166,35 +160,13 @@ class ToonAvatarDetailPanel(DirectFrame):
if online: if online:
shardName = base.cr.getShardName(av.defaultShard) shardName = base.cr.getShardName(av.defaultShard)
hoodName = base.cr.hoodMgr.getFullnameFromId(av.lastHood) hoodName = base.cr.hoodMgr.getFullnameFromId(av.lastHood)
if ZoneUtil.isWelcomeValley(av.lastHood): text = TTLocalizer.AvatarDetailPanelOnline % {'district': shardName, 'location': hoodName}
shardName = '%s (%s)' % (TTLocalizer.WelcomeValley[-1], shardName)
if self.playerInfo:
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
self.gotoAvatarButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=1.1, text=TTLocalizer.AvatarShowPlayer, text_scale=0.07, text_pos=(0.0, -0.02), textMayChange=0, pos=(0.44, 0, 0.41), command=self.__showAvatar)
text = TTLocalizer.AvatarDetailPanelOnlinePlayer % {'district': shardName,
'location': hoodName,
'player': self.playerInfo.playerName}
else:
text = TTLocalizer.AvatarDetailPanelOnline % {'district': shardName,
'location': hoodName}
else: else:
text = TTLocalizer.AvatarDetailPanelOffline text = TTLocalizer.AvatarDetailPanelOffline
self.dataText['text'] = text self.dataText['text'] = text
self.__updateTrackInfo() self.__updateTrackInfo()
self.__updateTrophyInfo() self.__updateTrophyInfo()
self.__updateLaffInfo() self.__updateLaffInfo()
return
def __showAvatar(self):
messenger.send('wakeup')
hasManager = hasattr(base.cr, 'playerFriendsManager')
handle = base.cr.identifyFriend(self.avId)
if not handle and hasManager:
handle = base.cr.playerFriendsManager.getAvHandleFromId(self.avId)
if handle != None:
self.notify.info("Clicked on name in friend's list. doId = %s" % handle.doId)
messenger.send('clickedNametagPlayer', [handle, self.playerId, 1])
return
def __updateLaffInfo(self): def __updateLaffInfo(self):
avatar = self.avatar avatar = self.avatar

View file

@ -19,7 +19,7 @@ from otp.otpbase import OTPGlobals
class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase): class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
notify = DirectNotifyGlobal.directNotify.newCategory('ToonAvatarPanel') notify = DirectNotifyGlobal.directNotify.newCategory('ToonAvatarPanel')
def __init__(self, avatar, playerId = None): def __init__(self, avatar):
from toontown.friends import FriendsListPanel from toontown.friends import FriendsListPanel
if base.cr.doId2do.get(avatar.getDoId()): if base.cr.doId2do.get(avatar.getDoId()):
@ -27,18 +27,6 @@ class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
AvatarPanelBase.AvatarPanelBase.__init__(self, avatar, FriendsListPanel=FriendsListPanel) AvatarPanelBase.AvatarPanelBase.__init__(self, avatar, FriendsListPanel=FriendsListPanel)
self.notify.debug('Opening toon panel, avId=%d' % self.avId) self.notify.debug('Opening toon panel, avId=%d' % self.avId)
self.playerId = playerId
if not self.playerId:
av = base.cr.doId2do.get(self.avId)
if av:
self.playerId = avatar.DISLid
else:
self.playerId = 0
self.playerInfo = None
if self.playerId:
self.playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
self.laffMeter = None self.laffMeter = None
wantsLaffMeter = hasattr(avatar, 'hp') wantsLaffMeter = hasattr(avatar, 'hp')
@ -128,12 +116,6 @@ class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
text_align=TextNode.ALeft, text_align=TextNode.ALeft,
command=self.__handleFriend) command=self.__handleFriend)
if base.cr.playerFriendsManager.askTransientFriend(self.avId) and self.avId not in base.cr.doId2do:
self.friendButton['state'] = DGG.DISABLED
if base.localAvatar.isIgnored(self.avId): if base.localAvatar.isIgnored(self.avId):
self.friendButton['state'] = DGG.DISABLED self.friendButton['state'] = DGG.DISABLED
@ -383,8 +365,7 @@ class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
messenger.send('clickedNametag', [avatar]) messenger.send('clickedNametag', [avatar])
def __handleWhisper(self): def __handleWhisper(self):
base.localAvatar.chatMgr.whisperTo(self.avName, self.avId, None) base.localAvatar.chatMgr.whisperTo(self.avName, self.avId)
return
def __handleSecrets(self): def __handleSecrets(self):
base.localAvatar.chatMgr.noWhisper() base.localAvatar.chatMgr.noWhisper()
@ -396,7 +377,7 @@ class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
def __handleDetails(self): def __handleDetails(self):
base.localAvatar.chatMgr.noWhisper() base.localAvatar.chatMgr.noWhisper()
messenger.send('avatarDetails', [self.avId, self.avName, self.playerId]) messenger.send('avatarDetails', [self.avId, self.avName])
def __handleDisableAvatar(self): def __handleDisableAvatar(self):
if not base.cr.isFriend(self.avId): if not base.cr.isFriend(self.avId):
@ -450,11 +431,6 @@ class ToonAvatarPanel(AvatarPanelBase.AvatarPanelBase):
return self.avatar.doId return self.avatar.doId
return None return None
def getPlayerId(self):
if hasattr(self, 'playerId'):
return self.playerId
return None
def isHidden(self): def isHidden(self):
if not hasattr(self, 'frame') or not self.frame: if not hasattr(self, 'frame') or not self.frame:
return 1 return 1

View file

@ -118,7 +118,6 @@ class ToonTeleportPanel(DirectFrame):
def enterBegin(self): def enterBegin(self):
myId = base.localAvatar.doId myId = base.localAvatar.doId
hasManager = hasattr(base.cr, 'playerFriendsManager')
if self.avId == myId: if self.avId == myId:
self.fsm.request('self') self.fsm.request('self')
elif self.avId in base.cr.doId2do: elif self.avId in base.cr.doId2do:
@ -128,16 +127,6 @@ class ToonTeleportPanel(DirectFrame):
self.fsm.request('checkAvailability') self.fsm.request('checkAvailability')
else: else:
self.fsm.request('notOnline') self.fsm.request('notOnline')
elif hasManager and base.cr.playerFriendsManager.getAvHandleFromId(self.avId):
id = base.cr.playerFriendsManager.findPlayerIdFromAvId(self.avId)
info = base.cr.playerFriendsManager.getFriendInfo(id)
if info:
if info.onlineYesNo:
self.fsm.request('checkAvailability')
else:
self.fsm.request('notOnline')
else:
self.fsm.request('wentAway')
else: else:
self.fsm.request('wentAway') self.fsm.request('wentAway')

View file

@ -1895,17 +1895,10 @@ AvatarDetailPanelCancel = lCancel
AvatarDetailPanelClose = lClose AvatarDetailPanelClose = lClose
AvatarDetailPanelLookup = 'Looking up details for %s.' AvatarDetailPanelLookup = 'Looking up details for %s.'
AvatarDetailPanelFailedLookup = 'Unable to get details for %s.' AvatarDetailPanelFailedLookup = 'Unable to get details for %s.'
AvatarDetailPanelPlayer = 'Player: %(player)s\nWorld: %(world)s'
AvatarDetailPanelPlayerShort = '%(player)s\nWorld: %(world)s\nLocation: %(location)s'
AvatarDetailPanelRealLife = 'Offline' AvatarDetailPanelRealLife = 'Offline'
AvatarDetailPanelOnline = 'District: %(district)s\nLocation: %(location)s' AvatarDetailPanelOnline = 'District: %(district)s\nLocation: %(location)s'
AvatarDetailPanelOnlinePlayer = 'District: %(district)s\nLocation: %(location)s\nPlayer: %(player)s'
AvatarDetailPanelOffline = 'District: offline\nLocation: offline' AvatarDetailPanelOffline = 'District: offline\nLocation: offline'
AvatarShowPlayer = 'Show Player'
OfflineLocation = 'Offline' OfflineLocation = 'Offline'
PlayerToonName = 'Toon: %(toonname)s'
PlayerShowToon = 'Show Toon'
PlayerPanelDetail = 'Player Details'
AvatarPanelFriends = 'Friends' AvatarPanelFriends = 'Friends'
AvatarPanelWhisper = 'Whisper' AvatarPanelWhisper = 'Whisper'
AvatarPanelSecrets = 'True Friends' AvatarPanelSecrets = 'True Friends'
@ -2035,8 +2028,6 @@ ToonHealJokes = [['What goes TICK-TICK-TICK-WOOF?', 'A watchdog! '],
['What do people do in clock factories?', 'They make faces all day.'], ['What do people do in clock factories?', 'They make faces all day.'],
['What do you call a blind dinosaur?', "An I-don't-think-he-saurus."], ['What do you call a blind dinosaur?', "An I-don't-think-he-saurus."],
['If you drop a white hat into the Red Sea, what does it become?', 'Wet.'], ['If you drop a white hat into the Red Sea, what does it become?', 'Wet.'],
['Why was Cinderella thrown off the basketball team?', 'She ran away from the ball.'],
['Why was Cinderella such a bad player?', 'She had a pumpkin for a coach.'],
["What two things can't you have for breakfast?", 'Lunch and dinner.'], ["What two things can't you have for breakfast?", 'Lunch and dinner.'],
['What do you give an elephant with big feet?', 'Big shoes.'], ['What do you give an elephant with big feet?', 'Big shoes.'],
['Where do baby ghosts go during the day?', 'Day-scare centers.'], ['Where do baby ghosts go during the day?', 'Day-scare centers.'],
@ -3046,7 +3037,8 @@ SuitAttackTaunts = {'Audit': ["I believe your books don't balance.",
"I'll shuffle your accounts around.", "I'll shuffle your accounts around.",
"You're about to suffer some losses.", "You're about to suffer some losses.",
'This is going to hurt your bottom line.']} 'This is going to hurt your bottom line.']}
BuildingWaitingForVictors = ('Waiting for other players...',) WaitingForOtherToons = 'Waiting for other toons...'
WaitingForOtherToonsDots = 'Waiting for other toons%s'
ElevatorHopOff = 'Hop off' ElevatorHopOff = 'Hop off'
ElevatorStayOff = "If you hop off, you'll need to wait\nfor the elevator to leave or empty." ElevatorStayOff = "If you hop off, you'll need to wait\nfor the elevator to leave or empty."
ElevatorLeaderOff = 'Only your leader can decide when to hop off.' ElevatorLeaderOff = 'Only your leader can decide when to hop off.'
@ -3075,9 +3067,9 @@ FADoorCodes_TALK_TO_HQ_TOM = 'Go get your reward from Toon Headquarters!'
FADoorCodes_SUIT_APPROACHING = None FADoorCodes_SUIT_APPROACHING = None
FADoorCodes_BUILDING_TAKEOVER = "Watch out! There's a Cog in there!" FADoorCodes_BUILDING_TAKEOVER = "Watch out! There's a Cog in there!"
FADoorCodes_SB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Sellbot Disguise first!\n\nBuild your Sellbot Disguise out of parts from the Factory." FADoorCodes_SB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Sellbot Disguise first!\n\nBuild your Sellbot Disguise out of parts from the Factory."
FADoorCodes_CB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Cashbot Disguise first!\n\nBuild your Cashbot Disguise out of parts from the Mints." FADoorCodes_CB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Cashbot Disguise first!\n\nBuild your Cashbot Disguise by doing ToonTasks in Donald's Dreamland."
FADoorCodes_LB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Lawbot Disguise first!\n\nBuild your Lawbot Disguise out of parts from the DA Offices." FADoorCodes_LB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Lawbot Disguise first!\n\nBuild your Lawbot Disguise by doing the ToonTasks after Donald's Dreamland."
FADoorCodes_BB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Bossbot Disguise first!\n\nBuild your Bossbot Disguise out of parts from the Cog Golf Courses." FADoorCodes_BB_DISGUISE_INCOMPLETE = "You'll get caught going in there as a Toon! You need to complete your Bossbot Disguise first!\n\nBuild your Bossbot Disguise by doing the ToonTasks after Donald's Dreamland."
KnockKnockJokes = [['Who', "Bad echo in here, isn't there?"], KnockKnockJokes = [['Who', "Bad echo in here, isn't there?"],
['Dozen', 'Dozen anybody want to let me in?'], ['Dozen', 'Dozen anybody want to let me in?'],
['Freddie', 'Freddie or not, here I come.'], ['Freddie', 'Freddie or not, here I come.'],
@ -3301,28 +3293,16 @@ FriendsListPanelNewFriend = 'New Friend'
FriendsListPanelSecrets = 'True Friend' FriendsListPanelSecrets = 'True Friend'
FriendsListPanelOnlineFriends = 'ONLINE TOON\nFRIENDS' FriendsListPanelOnlineFriends = 'ONLINE TOON\nFRIENDS'
FriendsListPanelAllFriends = 'ALL TOON\nFRIENDS' FriendsListPanelAllFriends = 'ALL TOON\nFRIENDS'
FriendsListPanelIgnoredFriends = 'IGNORED\nTOONS'
FriendsListPanelPets = 'NEARBY\nPETS' FriendsListPanelPets = 'NEARBY\nPETS'
FriendsListPanelPlayers = 'ALL PLAYER\nFRIENDS'
FriendsListPanelOnlinePlayers = 'ONLINE PLAYER\nFRIENDS'
FriendInviterClickToon = 'Click on the toon you would like to make friends with.\n\n(You have %s friends)' FriendInviterClickToon = 'Click on the toon you would like to make friends with.\n\n(You have %s friends)'
FriendInviterToon = 'Toon' FriendInviterToon = 'Toon'
FriendInviterThatToon = 'That toon' FriendInviterThatToon = 'That toon'
FriendInviterPlayer = 'Player'
FriendInviterThatPlayer = 'That player'
FriendInviterBegin = 'What type of friend would you like to make?' FriendInviterBegin = 'What type of friend would you like to make?'
FriendInviterToonFriendInfo = 'A friend only in Toontown' FriendInviterToonTooMany = 'You have too many toon friends to add another one now. You will have to remove some toon friends if you want to make friends with %s.'
FriendInviterPlayerFriendInfo = 'A friend across the Toontown United network'
FriendInviterToonTooMany = 'You have too many toon friends to add another one now. You will have to remove some toon friends if you want to make friends with %s. You could also try making player friends them.'
FriendInviterPlayerTooMany = 'You have too many player friends to add another one now. You will have to remove some player friends if you want to make friends with %s. You could also try making toon friends with them.'
FriendInviterToonAlready = '%s is already your toon friend.' FriendInviterToonAlready = '%s is already your toon friend.'
FriendInviterPlayerAlready = '%s is already your player friend.'
FriendInviterStopBeingToonFriends = 'Stop being toon friends' FriendInviterStopBeingToonFriends = 'Stop being toon friends'
FriendInviterStopBeingPlayerFriends = 'Stop being player friends'
FriendInviterEndFriendshipToon = 'Are you sure you want to stop being toon friends with %s?' FriendInviterEndFriendshipToon = 'Are you sure you want to stop being toon friends with %s?'
FriendInviterEndFriendshipPlayer = 'Are you sure you want to stop being player friends with %s?'
FriendInviterRemainToon = '\n(You will still be toon friends with %s)' FriendInviterRemainToon = '\n(You will still be toon friends with %s)'
FriendInviterRemainPlayer = '\n(You will still be player friends with %s)'
AvatarChoiceMakeAToon = 'Make A\nToon' AvatarChoiceMakeAToon = 'Make A\nToon'
AvatarChoicePlayThisToon = 'Play\nThis Toon' AvatarChoicePlayThisToon = 'Play\nThis Toon'
AvatarChoiceDelete = 'Delete' AvatarChoiceDelete = 'Delete'
@ -3720,7 +3700,7 @@ PartyGateRightSign = 'Public Parties Here!'
PartyGatePartyUnavailable = 'Sorry. That party is no longer available.' PartyGatePartyUnavailable = 'Sorry. That party is no longer available.'
PartyGatePartyFull = 'Sorry. That party is full.' PartyGatePartyFull = 'Sorry. That party is full.'
PartyGateInstructions = 'Click on a host, then click on "Go to Party"' PartyGateInstructions = 'Click on a host, then click on "Go to Party"'
PartyActivityWaitingForOtherPlayers = 'Waiting for other players to join the party game...' PartyActivityWaitingForOtherPlayers = 'Waiting for other toons to join the party game...'
PartyActivityPleaseWait = 'Please wait...' PartyActivityPleaseWait = 'Please wait...'
DefaultPartyActivityTitle = 'Party Game Title' DefaultPartyActivityTitle = 'Party Game Title'
DefaultPartyActivityInstructions = 'PartyGame Instructions' DefaultPartyActivityInstructions = 'PartyGame Instructions'
@ -3794,9 +3774,9 @@ PartyTrampolineBestHeight = 'Best Height So Far:\n%s\n%d ft'
PartyTrampolineNoHeightYet = 'How high\ncan you jump?' PartyTrampolineNoHeightYet = 'How high\ncan you jump?'
PartyTrampolineGetHeight = '%d ft' PartyTrampolineGetHeight = '%d ft'
PartyTeamActivityForMorePlural = 's' PartyTeamActivityForMorePlural = 's'
PartyTeamActivityForMore = 'Waiting for %d player%s\non each side...' PartyTeamActivityForMore = 'Waiting for %d toon%s\non each side...'
PartyTeamActivityForMoreWithBalance = 'Waiting for %d more player%s...' PartyTeamActivityForMoreWithBalance = 'Waiting for %d more toon%s...'
PartyTeamActivityWaitingForOtherPlayers = 'Waiting for other players...' PartyTeamActivityWaitingForOtherPlayers = 'Waiting for other toons...'
PartyTeamActivityWaitingToStart = 'Starting in...' PartyTeamActivityWaitingToStart = 'Starting in...'
PartyTeamActivityExitButton = 'Hop Off' PartyTeamActivityExitButton = 'Hop Off'
PartyTeamActivitySwitchTeamsButton = 'Switch\nTeams' PartyTeamActivitySwitchTeamsButton = 'Switch\nTeams'
@ -4085,7 +4065,7 @@ NPCForceAcknowledgeMessage3 = "Remember to ride the trolley.\n\n\n\n\n\n\n\nYou
NPCForceAcknowledgeMessage4 = 'Congratulations! You found and rode the trolley!\n\n\n\n\n\n\n\n\n\nNow report back to Toon Headquarters.' NPCForceAcknowledgeMessage4 = 'Congratulations! You found and rode the trolley!\n\n\n\n\n\n\n\n\n\nNow report back to Toon Headquarters.'
NPCForceAcknowledgeMessage5 = "Don't forget your ToonTask!\n\n\n\n\n\n\n\n\n\n\nYou can find Cogs to defeat on the other side of tunnels like this." NPCForceAcknowledgeMessage5 = "Don't forget your ToonTask!\n\n\n\n\n\n\n\n\n\n\nYou can find Cogs to defeat on the other side of tunnels like this."
NPCForceAcknowledgeMessage6 = 'Great job defeating those Cogs!\n\n\n\n\n\n\n\n\nHead back to Toon Headquarters as soon as possible.' NPCForceAcknowledgeMessage6 = 'Great job defeating those Cogs!\n\n\n\n\n\n\n\n\nHead back to Toon Headquarters as soon as possible.'
NPCForceAcknowledgeMessage7 = "Don't forget to make a friend!\n\n\n\n\n\n\nClick on another player and use the New Friend button." NPCForceAcknowledgeMessage7 = "Don't forget to make a friend!\n\n\n\n\n\n\nClick on another toon and use the New Friend button."
NPCForceAcknowledgeMessage8 = 'Great! You made a new friend!\n\n\n\n\n\n\n\n\nYou should go back at Toon Headquarters now.' NPCForceAcknowledgeMessage8 = 'Great! You made a new friend!\n\n\n\n\n\n\n\n\nYou should go back at Toon Headquarters now.'
NPCForceAcknowledgeMessage9 = 'Good job using the phone!\n\n\n\n\n\n\n\n\nReturn to Toon Headquarters to claim your reward.' NPCForceAcknowledgeMessage9 = 'Good job using the phone!\n\n\n\n\n\n\n\n\nReturn to Toon Headquarters to claim your reward.'
ToonSleepString = '. . . ZZZ . . .' ToonSleepString = '. . . ZZZ . . .'
@ -4281,7 +4261,7 @@ TownBattleToonSOS = 'SOS'
TownBattleToonFire = 'Fire' TownBattleToonFire = 'Fire'
TownBattleUndecided = '?' TownBattleUndecided = '?'
TownBattleHealthText = '%(hitPoints)s/%(maxHit)s' TownBattleHealthText = '%(hitPoints)s/%(maxHit)s'
TownBattleWaitTitle = 'Waiting for\nother players...' TownBattleWaitTitle = 'Waiting for\nother toons...'
TownSoloBattleWaitTitle = 'Please wait...' TownSoloBattleWaitTitle = 'Please wait...'
TownBattleWaitBack = 'BACK' TownBattleWaitBack = 'BACK'
TownBattleSOSPetSearchTitle = 'Searching for doodle\n%s...' TownBattleSOSPetSearchTitle = 'Searching for doodle\n%s...'
@ -4359,7 +4339,7 @@ MintBossConfrontedMsg = '%s is battling the Supervisor!'
StageBossConfrontedMsg = '%s is battling the District Attorney!' StageBossConfrontedMsg = '%s is battling the District Attorney!'
stageToonEnterElevator = '%s \nhas entered the elevator' stageToonEnterElevator = '%s \nhas entered the elevator'
ForcedLeaveStageAckMsg = 'The Law Clerk was defeated before you could reach him. You did not recover any Jury Notices.' ForcedLeaveStageAckMsg = 'The Law Clerk was defeated before you could reach him. You did not recover any Jury Notices.'
MinigameWaitingForOtherPlayers = 'Waiting for other players to join...' MinigameWaitingForOtherToons = 'Waiting for other toons to join...'
MinigamePleaseWait = 'Please wait...' MinigamePleaseWait = 'Please wait...'
DefaultMinigameTitle = 'Minigame Title' DefaultMinigameTitle = 'Minigame Title'
DefaultMinigameInstructions = 'Minigame Instructions' DefaultMinigameInstructions = 'Minigame Instructions'
@ -4390,7 +4370,6 @@ PatternGameRight = 'Good, %s!'
PatternGameWrong = 'Oops!' PatternGameWrong = 'Oops!'
PatternGamePerfect = 'That was perfect, %s!' PatternGamePerfect = 'That was perfect, %s!'
PatternGameBye = 'Thanks for playing!' PatternGameBye = 'Thanks for playing!'
PatternGameWaitingOtherPlayers = 'Waiting for other players...'
PatternGamePleaseWait = 'Please wait...' PatternGamePleaseWait = 'Please wait...'
PatternGameFaster = 'You were\nfaster!' PatternGameFaster = 'You were\nfaster!'
PatternGameFastest = 'You were\nthe fastest!' PatternGameFastest = 'You were\nthe fastest!'
@ -4402,7 +4381,7 @@ PatternGameRound = 'Round %s!'
PatternGameImprov = 'You did great! Now Improv!' PatternGameImprov = 'You did great! Now Improv!'
RaceGameTitle = 'Race Game' RaceGameTitle = 'Race Game'
RaceGameInstructions = 'Click a number. Choose wisely! You only advance if no one else picked the same number.' RaceGameInstructions = 'Click a number. Choose wisely! You only advance if no one else picked the same number.'
RaceGameWaitingChoices = 'Waiting for other players to choose...' RaceGameWaitingChoices = 'Waiting for other toons to choose...'
RaceGameCardText = '%(name)s draws: %(reward)s' RaceGameCardText = '%(name)s draws: %(reward)s'
RaceGameCardTextBeans = '%(name)s receives: %(reward)s' RaceGameCardTextBeans = '%(name)s receives: %(reward)s'
RaceGameCardTextHi1 = '%(name)s is one Fabulous Toon!' RaceGameCardTextHi1 = '%(name)s is one Fabulous Toon!'
@ -4420,7 +4399,7 @@ RaceGameJellybeans4 = '4 Jellybeans'
RaceGameJellybeans10 = '10 Jellybeans!' RaceGameJellybeans10 = '10 Jellybeans!'
RingGameTitle = 'Ring Game' RingGameTitle = 'Ring Game'
RingGameInstructionsSinglePlayer = 'Try to swim through as many of the %s rings as you can. Use the arrow keys to swim.' RingGameInstructionsSinglePlayer = 'Try to swim through as many of the %s rings as you can. Use the arrow keys to swim.'
RingGameInstructionsMultiPlayer = 'Try to swim through the %s rings. Other players will try for the other colored rings. Use the arrow keys to swim.' RingGameInstructionsMultiPlayer = 'Try to swim through the %s rings. Other toons will try for the other colored rings. Use the arrow keys to swim.'
RingGameMissed = 'MISSED' RingGameMissed = 'MISSED'
RingGameGroupPerfect = 'GROUP\nPERFECT!!' RingGameGroupPerfect = 'GROUP\nPERFECT!!'
RingGamePerfect = 'PERFECT!' RingGamePerfect = 'PERFECT!'
@ -4490,7 +4469,6 @@ GagShopInsufficientSkill = 'You do not have enough skill for that yet'
GagShopNotEnoughJellybeans = 'You do not have enough Jellybeans for that gag' GagShopNotEnoughJellybeans = 'You do not have enough Jellybeans for that gag'
GagShopYouPurchased = 'You purchased %s' GagShopYouPurchased = 'You purchased %s'
GagShopOutOfJellybeans = 'Sorry, you are all out of Jellybeans!' GagShopOutOfJellybeans = 'Sorry, you are all out of Jellybeans!'
GagShopWaitingOtherPlayers = 'Waiting for other players...'
GagShopPlayerDisconnected = '%s has disconnected' GagShopPlayerDisconnected = '%s has disconnected'
GagShopPlayerExited = '%s has exited' GagShopPlayerExited = '%s has exited'
GagShopPlayerPlayAgain = 'Play Again' GagShopPlayerPlayAgain = 'Play Again'
@ -4753,7 +4731,7 @@ QuestScript141_1 = 'Oh, yes, this book almost completes my collection.\x07Let me
QuestScript145_1 = 'I see you had no problem with the trolley!\x07Listen, the Cogs have stolen our blackboard eraser.\x07Go into the streets and fight Cogs until you recover the eraser.\x07To reach the streets go through one of the tunnels like this:' QuestScript145_1 = 'I see you had no problem with the trolley!\x07Listen, the Cogs have stolen our blackboard eraser.\x07Go into the streets and fight Cogs until you recover the eraser.\x07To reach the streets go through one of the tunnels like this:'
QuestScript145_2 = "When you find our eraser, bring it back here.\x07Don't forget, if you need gags, ride the trolley.\x07Also, if you need to recover Laff points, collect ice cream cones in the Playground." QuestScript145_2 = "When you find our eraser, bring it back here.\x07Don't forget, if you need gags, ride the trolley.\x07Also, if you need to recover Laff points, collect ice cream cones in the Playground."
QuestScript150_1 = 'Great work!\x07Toontown is more fun when you have friends!' QuestScript150_1 = 'Great work!\x07Toontown is more fun when you have friends!'
QuestScript150_2 = 'To make friends, find another player, and use the New Friend button.' QuestScript150_2 = 'To make friends, find another toon, and use the New Friend button.'
QuestScript150_3 = 'Once you have made a friend, come back here.' QuestScript150_3 = 'Once you have made a friend, come back here.'
QuestScript150_4 = 'Some tasks are too difficult to do alone!' QuestScript150_4 = 'Some tasks are too difficult to do alone!'
MissingKeySanityCheck = 'Ignore me' MissingKeySanityCheck = 'Ignore me'
@ -8309,7 +8287,7 @@ TravelGameVoteToGo = 'vote to go'
TravelGameUp = 'UP.' TravelGameUp = 'UP.'
TravelGameDown = 'DOWN.' TravelGameDown = 'DOWN.'
TravelGameVoteWithExclamation = 'Vote!' TravelGameVoteWithExclamation = 'Vote!'
TravelGameWaitingChoices = 'Waiting for other players to vote...' TravelGameWaitingChoices = 'Waiting for other toons to vote...'
TravelGameDirections = ['UP', 'DOWN'] TravelGameDirections = ['UP', 'DOWN']
TravelGameTotals = 'Totals ' TravelGameTotals = 'Totals '
TravelGameReasonVotes = 'The trolley is moving %(dir)s, winning by %(numVotes)d votes.' TravelGameReasonVotes = 'The trolley is moving %(dir)s, winning by %(numVotes)d votes.'
@ -8323,10 +8301,10 @@ TravelGamePlaying = 'Up next, the %(game)s trolley game.'
TravelGameGotBonus = '%(name)s got a bonus of %(numBeans)s Jellybeans!' TravelGameGotBonus = '%(name)s got a bonus of %(numBeans)s Jellybeans!'
TravelGameNoOneGotBonus = 'No one reached their secret goal. Everyone gets 1 Jellybean.' TravelGameNoOneGotBonus = 'No one reached their secret goal. Everyone gets 1 Jellybean.'
TravelGameConvertingVotesToBeans = 'Converting some votes to Jellybeans...' TravelGameConvertingVotesToBeans = 'Converting some votes to Jellybeans...'
TravelGameGoingBackToShop = "Only 1 player left. Going to Goofy's Gag Shop." TravelGameGoingBackToShop = "Only 1 toon left. Going to Goofy's Gag Shop."
PairingGameTitle = 'Toon Memory Game' PairingGameTitle = 'Toon Memory Game'
PairingGameInstructions = 'Press Delete to open a card. Match 2 cards to score a point. Make a match with the bonus glow and earn an extra point. Earn more points by keeping the flips low.' PairingGameInstructions = 'Press Delete to open a card. Match 2 cards to score a point. Make a match with the bonus glow and earn an extra point. Earn more points by keeping the flips low.'
PairingGameInstructionsMulti = 'Press Delete to open a card. Press Control to signal another player to open a card. Match 2 cards to score a point. Make a match with the bonus glow and earn an extra point. Earn more points by keeping the flips low.' PairingGameInstructionsMulti = 'Press Delete to open a card. Press Control to signal another toon to open a card. Match 2 cards to score a point. Make a match with the bonus glow and earn an extra point. Earn more points by keeping the flips low.'
PairingGamePerfect = 'PERFECT!!' PairingGamePerfect = 'PERFECT!!'
PairingGameFlips = 'Flips:' PairingGameFlips = 'Flips:'
PairingGamePoints = 'Points:' PairingGamePoints = 'Points:'
@ -8487,7 +8465,7 @@ MoreXpHolidayEnd = 'Exclusive Test Toon double gag experience time has ended. Th
JellybeanDayHolidayStart = "It's Jellybean Day! Get Double Jellybean rewards at Parties!" JellybeanDayHolidayStart = "It's Jellybean Day! Get Double Jellybean rewards at Parties!"
JellybeanDayHolidayEnd = "That's all for Jellybean Day. See you next year." JellybeanDayHolidayEnd = "That's all for Jellybean Day. See you next year."
PartyRewardDoubledJellybean = 'Double Jellybeans!' PartyRewardDoubledJellybean = 'Double Jellybeans!'
GrandPrixWeekendHolidayStart = "It's Grand Prix Weekend at Goofy Speedway! Players collect the most points in three consecutive races." GrandPrixWeekendHolidayStart = "It's Grand Prix Weekend at Goofy Speedway! Toons collect the most points in three consecutive races."
GrandPrixWeekendHolidayEnd = "That's all for Grand Prix Weekend. See you next year." GrandPrixWeekendHolidayEnd = "That's all for Grand Prix Weekend. See you next year."
KartRace_DoubleTickets = 'Double Tickets' KartRace_DoubleTickets = 'Double Tickets'
SellbotNerfHolidayStart = 'Operation: Storm Sellbot is happening now! Battle the VP today!' SellbotNerfHolidayStart = 'Operation: Storm Sellbot is happening now! Battle the VP today!'
@ -8649,8 +8627,6 @@ DaysToGo = 'Wait\n%s Days'
IceGameTitle = 'Ice Slide' IceGameTitle = 'Ice Slide'
IceGameInstructions = 'Get as close to the center by the end of the second round. Use arrow keys to change direction and force. Press Ctrl to launch your toon. Hit barrels for extra points and avoid the TNT!' IceGameInstructions = 'Get as close to the center by the end of the second round. Use arrow keys to change direction and force. Press Ctrl to launch your toon. Hit barrels for extra points and avoid the TNT!'
IceGameInstructionsNoTnt = 'Get as close to the center by the end of the second round. Use arrow keys to change direction and force. Press Ctrl to launch your toon. Hit barrels for extra points.' IceGameInstructionsNoTnt = 'Get as close to the center by the end of the second round. Use arrow keys to change direction and force. Press Ctrl to launch your toon. Hit barrels for extra points.'
IceGameWaitingForPlayersToFinishMove = 'Waiting for other players...'
IceGameWaitingForAISync = 'Waiting for other players...'
IceGameInfo = 'Match %(curMatch)d/%(numMatch)d, Round %(curRound)d/%(numRound)d' IceGameInfo = 'Match %(curMatch)d/%(numMatch)d, Round %(curRound)d/%(numRound)d'
IceGameControlKeyWarning = 'Remember to press the Ctrl key!' IceGameControlKeyWarning = 'Remember to press the Ctrl key!'
PicnicTableJoinButton = 'Join' PicnicTableJoinButton = 'Join'
@ -8685,10 +8661,10 @@ ChineseTutorialTitle2 = 'How to Play'
ChineseTutorialPrev = 'Previous Page' ChineseTutorialPrev = 'Previous Page'
ChineseTutorialNext = 'Next Page' ChineseTutorialNext = 'Next Page'
ChineseTutorialDone = 'Done' ChineseTutorialDone = 'Done'
ChinesePage1 = 'The goal of Chinese Checkers is to be the first player to move all of your marbles from the bottom triangle across the board and into the triangle at the top. The first player to do so wins!' ChinesePage1 = 'The goal of Chinese Checkers is to be the first toon to move all of your marbles from the bottom triangle across the board and into the triangle at the top. The first toon to do so wins!'
ChinesePage2 = 'Players take turns moving any marble of their own color. A marble can move into an adjacent hole or it can hop over other marbles. Hops must go over a marble and end in an empty hole. It is possible to chain hops together for longer moves!' ChinesePage2 = 'Toons take turns moving any marble of their own color. A marble can move into an adjacent hole or it can hop over other marbles. Hops must go over a marble and end in an empty hole. It is possible to chain hops together for longer moves!'
CheckersPage1 = 'The goal of Checkers is to leave the opponent without any possible moves. To do this you can either capture all of his peices or block them in such that he has no available moves.' CheckersPage1 = 'The goal of Checkers is to leave the opponent without any possible moves. To do this you can either capture all of his peices or block them in such that he has no available moves.'
CheckersPage2 = 'Players take turns moving any peice of their own color. A peice can move one square diagonal and forward. A peice can only move into a square that is not occupied by another peice. Kings follow the same rules but are allowed to move backwards.' CheckersPage2 = 'Toons take turns moving any peice of their own color. A peice can move one square diagonal and forward. A peice can only move into a square that is not occupied by another peice. Kings follow the same rules but are allowed to move backwards.'
CheckersPage3 = 'To capture an opponents peice your peice must jump over it diagonally into the vacant square beyond it. If you have any jump moves during a turn, you must do one of them. You can chain jump moves together as long as it is with the same peice.' CheckersPage3 = 'To capture an opponents peice your peice must jump over it diagonally into the vacant square beyond it. If you have any jump moves during a turn, you must do one of them. You can chain jump moves together as long as it is with the same peice.'
CheckersPage4 = 'A peice becomes a king when it reaches the last row on the board. A peice that has just become a king cannot continue jumping until the next turn. Additionally, kings are allowed to move all directions and are allowed to change directions while jumping.' CheckersPage4 = 'A peice becomes a king when it reaches the last row on the board. A peice that has just become a king cannot continue jumping until the next turn. Additionally, kings are allowed to move all directions and are allowed to change directions while jumping.'
CheckersGetUpButton = 'Get Up' CheckersGetUpButton = 'Get Up'
@ -8762,7 +8738,7 @@ HolidayNamesInCalendar = {1: ('Summer Fireworks', 'Celebrate Summer with a firew
9: ('Black Cat Day', 'Happy Halloween! Create a Toontastic Black Cat Toon - Today Only!'), 9: ('Black Cat Day', 'Happy Halloween! Create a Toontastic Black Cat Toon - Today Only!'),
13: ('Trick or Treat', 'Happy Halloween! Trick or treat throughout Toontown to get a nifty Halloween pumpkin head reward!'), 13: ('Trick or Treat', 'Happy Halloween! Trick or treat throughout Toontown to get a nifty Halloween pumpkin head reward!'),
14: ('Grand Prix', 'Grand Prix Monday at Goofy Speedway! To win, collect the most points in three consecutive races!'), 14: ('Grand Prix', 'Grand Prix Monday at Goofy Speedway! To win, collect the most points in three consecutive races!'),
16: ('Grand Prix Weekend', 'Players compete in circuit races at Goofy Speedway!'), 16: ('Grand Prix Weekend', 'Toons compete in circuit races at Goofy Speedway!'),
17: ('Trolley Tracks', 'Trolley Tracks Thursday! Board any Trolley with two or more Toons to play.'), 17: ('Trolley Tracks', 'Trolley Tracks Thursday! Board any Trolley with two or more Toons to play.'),
19: ('Silly Saturdays', 'Saturdays are silly with Fish Bingo and Grand Prix throughout the day!'), 19: ('Silly Saturdays', 'Saturdays are silly with Fish Bingo and Grand Prix throughout the day!'),
24: ('Ides of March', 'Beware the Ides of March! Stop the Backstabber Cogs from invading Toontown!'), 24: ('Ides of March', 'Beware the Ides of March! Stop the Backstabber Cogs from invading Toontown!'),
@ -8836,7 +8812,6 @@ CogdoMazeGameInstructions = 'The big Mover & Shaker COGs have the code to open t
CogdoMazeIntroMovieDialogue = (("This should give you Toons a shiver! We're powering our offices with your Jokes, and you're powerless to stop us!", "This will make you Toons quake! We've stolen your Jokes, and you cannot stop us!", "This may come as an aftershock, but we've stolen your Jokes, and there's nothing you can do about it!"), ("Don't get rattled, Toons! Fill your water balloons, splash the BIG COGs, and retrieve the PASS CODE that opens the exit! Good luck from the Toon Resistance!", 'Are you ready to rumble, Toons? Go to the water coolers and fill up balloons to throw at COGs. Hit the BIG COGs to get the pass code for the exit! Toon Resistance out!', 'Want some good vibrations? Fill your balloons at the water coolers, splash the BIG Movers & Shakers, complete the PASS CODE, and find the way out! Good luck, Toons!'), ("Hmph! I'm a Silver Sprocket Award winner, I don't need this!", "You're on shaky ground, Toons!", "Before you know it, you'll all be trembling!")) CogdoMazeIntroMovieDialogue = (("This should give you Toons a shiver! We're powering our offices with your Jokes, and you're powerless to stop us!", "This will make you Toons quake! We've stolen your Jokes, and you cannot stop us!", "This may come as an aftershock, but we've stolen your Jokes, and there's nothing you can do about it!"), ("Don't get rattled, Toons! Fill your water balloons, splash the BIG COGs, and retrieve the PASS CODE that opens the exit! Good luck from the Toon Resistance!", 'Are you ready to rumble, Toons? Go to the water coolers and fill up balloons to throw at COGs. Hit the BIG COGs to get the pass code for the exit! Toon Resistance out!', 'Want some good vibrations? Fill your balloons at the water coolers, splash the BIG Movers & Shakers, complete the PASS CODE, and find the way out! Good luck, Toons!'), ("Hmph! I'm a Silver Sprocket Award winner, I don't need this!", "You're on shaky ground, Toons!", "Before you know it, you'll all be trembling!"))
CogdoMazeGameDoorOpens = "The Pass Code opened the Exit!\nGet there before it's too late!" CogdoMazeGameDoorOpens = "The Pass Code opened the Exit!\nGet there before it's too late!"
CogdoMazeGameLocalToonFoundExit = "The exit will open when\nyou've busted all four BIG COGS!" CogdoMazeGameLocalToonFoundExit = "The exit will open when\nyou've busted all four BIG COGS!"
CogdoMazeGameWaitingForToons = 'Waiting for other Toons...'
CogdoMazeGameTimeOut = 'Oh no, time ran out! You lost your jokes.' CogdoMazeGameTimeOut = 'Oh no, time ran out! You lost your jokes.'
CogdoMazeGameTimeAlert = 'Hurry up! 60 seconds to go!' CogdoMazeGameTimeAlert = 'Hurry up! 60 seconds to go!'
CogdoMazeGameBossGuiTitle = 'Pass Code:' CogdoMazeGameBossGuiTitle = 'Pass Code:'
@ -8849,7 +8824,6 @@ CogdoMazeGameElevatorRewardLaff = 'Great job, Toons!\nYou get a Toon-Up from the
CogdoFlyingGameTitle = 'Legal Eagle Offices' CogdoFlyingGameTitle = 'Legal Eagle Offices'
CogdoFlyingGameInstructions = "Fly through the Legal Eagles' lair. Watch out for obstacles and COGs along the way, and don't forget to refuel your helicopter!" CogdoFlyingGameInstructions = "Fly through the Legal Eagles' lair. Watch out for obstacles and COGs along the way, and don't forget to refuel your helicopter!"
CogdoFlyingIntroMovieDialogue = (("You won't ruffle our feathers, Toons! We're destroying barrels of your Laff, and you cannot stop us!", "A flock of Toons! We're crushing barrels of your Laff in our %s, and there's nothing you can do about it!" % CogdoStomperName, "You can't egg us on, Toons! We're powering our offices with your Laff, and you're powerless to stop us!"), ('This is the Toon Resistance! A little bird told me you can use propellers to fly around, grab Barrel Destruction Memos, and keep Laff from being destroyed! Good luck, Toons!', 'Attention Toons! Wing it with a propeller and collect Barrel Destruction Memos to keep our Laff from being stomped! Toon Resistance out!', 'Toon Resistance here! Cause a flap by finding propellers, flying to the Barrel Destruction Memos, and keeping our Laff from being smashed! Have fun!'), ("Squawk! I'm a Silver Sprocket Award winner, I don't need this!", 'Do your best, Toons! You will find us to be quite talon-ted!', "We'll teach you to obey the pecking order, Toons!")) CogdoFlyingIntroMovieDialogue = (("You won't ruffle our feathers, Toons! We're destroying barrels of your Laff, and you cannot stop us!", "A flock of Toons! We're crushing barrels of your Laff in our %s, and there's nothing you can do about it!" % CogdoStomperName, "You can't egg us on, Toons! We're powering our offices with your Laff, and you're powerless to stop us!"), ('This is the Toon Resistance! A little bird told me you can use propellers to fly around, grab Barrel Destruction Memos, and keep Laff from being destroyed! Good luck, Toons!', 'Attention Toons! Wing it with a propeller and collect Barrel Destruction Memos to keep our Laff from being stomped! Toon Resistance out!', 'Toon Resistance here! Cause a flap by finding propellers, flying to the Barrel Destruction Memos, and keeping our Laff from being smashed! Have fun!'), ("Squawk! I'm a Silver Sprocket Award winner, I don't need this!", 'Do your best, Toons! You will find us to be quite talon-ted!', "We'll teach you to obey the pecking order, Toons!"))
CogdoFlyingGameWaiting = 'Waiting for other Toons%s'
CogdoFlyingGameFuelLabel = 'Fuel' CogdoFlyingGameFuelLabel = 'Fuel'
CogdoFlyingGameLegalEagleTargeting = 'A Legal Eagle has noticed you!' CogdoFlyingGameLegalEagleTargeting = 'A Legal Eagle has noticed you!'
CogdoFlyingGameLegalEagleAttacking = 'Incoming Eagle!' CogdoFlyingGameLegalEagleAttacking = 'Incoming Eagle!'

View file

@ -162,7 +162,6 @@ class ToonBase(OTPBase.OTPBase):
oldLoader.destroy() oldLoader.destroy()
self.accept('PandaPaused', self.disableAllAudio) self.accept('PandaPaused', self.disableAllAudio)
self.accept('PandaRestarted', self.enableAllAudio) self.accept('PandaRestarted', self.enableAllAudio)
self.friendMode = self.config.GetBool('switchboard-friends', 0)
self.wantPets = self.config.GetBool('want-pets', 1) self.wantPets = self.config.GetBool('want-pets', 1)
self.wantBingo = self.config.GetBool('want-fish-bingo', 1) self.wantBingo = self.config.GetBool('want-fish-bingo', 1)
self.wantKarts = self.config.GetBool('want-karts', 1) self.wantKarts = self.config.GetBool('want-karts', 1)

View file

@ -78,7 +78,7 @@ class TownBattleSOSPanel(DirectFrame, StateData.StateData):
def makeFriendButton(self, friendPair): def makeFriendButton(self, friendPair):
friendId, flags = friendPair friendId, flags = friendPair
handle = base.cr.playerFriendsManager.identifyFriend(friendId) handle = base.cr.identifyFriend(friendId)
if handle == None: if handle == None:
base.cr.fillUpFriendsMap() base.cr.fillUpFriendsMap()
return return
@ -169,11 +169,6 @@ class TownBattleSOSPanel(DirectFrame, StateData.StateData):
if self.factoryToonIdList is None or friendPair[0] in self.factoryToonIdList: if self.factoryToonIdList is None or friendPair[0] in self.factoryToonIdList:
newFriends.append(friendPair) newFriends.append(friendPair)
if hasattr(base.cr, 'playerFriendsManager'):
for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars():
if not base.cr.playerFriendsManager.askAvatarKnownElseWhere(avatarId):
newFriends.append((avatarId, 0))
for friendPair in self.friends.keys(): for friendPair in self.friends.keys():
if friendPair not in newFriends: if friendPair not in newFriends:
friendButton = self.friends[friendPair] friendButton = self.friends[friendPair]