general: loads to TTC!
This commit is contained in:
parent
4bf0dc3263
commit
4acc9fa914
29 changed files with 723 additions and 263 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -2,4 +2,7 @@
|
||||||
*.pyo
|
*.pyo
|
||||||
*.log
|
*.log
|
||||||
resources/
|
resources/
|
||||||
|
news/
|
||||||
|
sign/
|
||||||
|
whitelist/
|
||||||
*.so
|
*.so
|
||||||
|
|
|
@ -542,5 +542,6 @@ dclass AstronLoginManager : DistributedObject {
|
||||||
nameTypedResponse(uint32, uint8);
|
nameTypedResponse(uint32, uint8);
|
||||||
acknowledgeAvatarName(uint32) clsend;
|
acknowledgeAvatarName(uint32) clsend;
|
||||||
acknowledgeAvatarNameResponse();
|
acknowledgeAvatarNameResponse();
|
||||||
|
requestRemoveAvatar(uint32) clsend;
|
||||||
|
requestPlayAvatar(uint32) clsend;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
209
etc/toon.dc
209
etc/toon.dc
|
@ -442,72 +442,72 @@ typedef int16 pair16[2];
|
||||||
|
|
||||||
dclass DistributedToon : DistributedPlayer {
|
dclass DistributedToon : DistributedPlayer {
|
||||||
setDNAString(blob) required broadcast ownrecv db;
|
setDNAString(blob) required broadcast ownrecv db;
|
||||||
setGM(uint8) required broadcast ownrecv db;
|
setGM(uint8 = 0) required broadcast ownrecv db;
|
||||||
setMaxBankMoney(int16) required broadcast ownrecv db;
|
setMaxBankMoney(int16 = 12000) required broadcast ownrecv db;
|
||||||
setBankMoney(int16) required broadcast ownrecv db;
|
setBankMoney(int16 = 0) required broadcast ownrecv db;
|
||||||
setMaxMoney(int16) required broadcast ownrecv db;
|
setMaxMoney(int16 = 40) required broadcast ownrecv db;
|
||||||
setMoney(int16) required broadcast ownrecv db;
|
setMoney(int16 = 0) required broadcast ownrecv db;
|
||||||
setMaxHp(int16) required broadcast ownrecv db;
|
setMaxHp(int16 = 15) required broadcast ownrecv db;
|
||||||
setHp(int16) required broadcast ownrecv db;
|
setHp(int16 = 15) required broadcast ownrecv db;
|
||||||
toonUp(uint16) broadcast ownrecv;
|
toonUp(uint16) broadcast ownrecv;
|
||||||
takeDamage(uint16) broadcast ownrecv;
|
takeDamage(uint16) broadcast ownrecv;
|
||||||
setBattleId(uint32) required broadcast ram;
|
setBattleId(uint32) required broadcast ram;
|
||||||
setExperience(blob) required ownrecv db;
|
setExperience(blob = [0 * 14]) required ownrecv db;
|
||||||
setMaxCarry(uint8) required ownrecv db;
|
setMaxCarry(uint8 = 20) required ownrecv db;
|
||||||
setTrackAccess(uint16[]) required broadcast ownrecv db;
|
setTrackAccess(uint16[] = [0, 0, 0, 0, 1, 1, 0]) required broadcast ownrecv db;
|
||||||
setTrackProgress(int8, uint32) required ownrecv db;
|
setTrackProgress(int8 = -1, uint32 = 0) required ownrecv db;
|
||||||
setTrackBonusLevel(int8[]) required broadcast ownrecv db;
|
setTrackBonusLevel(int8[] = [-1 * 7]) required broadcast ownrecv db;
|
||||||
setInventory(blob) required ownrecv db;
|
setInventory(blob = [0 * 7, 0 * 7, 0 * 7, 0 * 7, 1, 0 * 6, 1, 0 * 6, 0 * 7]) required ownrecv db;
|
||||||
setMaxNPCFriends(uint16) required ownrecv db;
|
setMaxNPCFriends(uint16 = 16) required ownrecv db;
|
||||||
setNPCFriendsDict(FriendEntry[]) required ownrecv db;
|
setNPCFriendsDict(FriendEntry[]) required ownrecv db;
|
||||||
setDefaultShard(uint32) required ownrecv db;
|
setDefaultShard(uint32 = 0) required ownrecv db;
|
||||||
setDefaultZone(uint32) required ownrecv db;
|
setDefaultZone(uint32 = 0) required ownrecv db;
|
||||||
setShtickerBook(blob) required ownrecv db;
|
setShtickerBook(blob = []) required ownrecv db;
|
||||||
setZonesVisited(uint32[]) required ownrecv db;
|
setZonesVisited(uint32[] = [2000]) required ownrecv db;
|
||||||
setHoodsVisited(uint32[]) required ownrecv db;
|
setHoodsVisited(uint32[] = [2000]) required ownrecv db;
|
||||||
setInterface(blob) required ownrecv db;
|
setInterface(blob = []) required ownrecv db;
|
||||||
setLastHood(uint32) required ownrecv db;
|
setLastHood(uint32 = 0) required ownrecv db;
|
||||||
setTutorialAck(uint8) required ownrecv db;
|
setTutorialAck(uint8 = 0) required ownrecv db;
|
||||||
setMaxClothes(uint32) required ownrecv db;
|
setMaxClothes(uint32 = 10) required ownrecv db;
|
||||||
setClothesTopsList(uint8[]) required ownrecv db;
|
setClothesTopsList(uint8[] = []) required ownrecv db;
|
||||||
setClothesBottomsList(uint8[]) required ownrecv db;
|
setClothesBottomsList(uint8[] = []) required ownrecv db;
|
||||||
setMaxAccessories(uint32) required ownrecv db;
|
setMaxAccessories(uint32 = 0) required ownrecv db;
|
||||||
setHatList(uint8[]) required ownrecv db;
|
setHatList(uint8[] = []) required ownrecv db;
|
||||||
setGlassesList(uint8[]) required ownrecv db;
|
setGlassesList(uint8[] = []) required ownrecv db;
|
||||||
setBackpackList(uint8[]) required ownrecv db;
|
setBackpackList(uint8[] = []) required ownrecv db;
|
||||||
setShoesList(uint8[]) required ownrecv db;
|
setShoesList(uint8[] = []) required ownrecv db;
|
||||||
setHat(uint8, uint8, uint8) required broadcast db ownrecv;
|
setHat(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
|
||||||
setGlasses(uint8, uint8, uint8) required broadcast db ownrecv;
|
setGlasses(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
|
||||||
setBackpack(uint8, uint8, uint8) required broadcast db ownrecv;
|
setBackpack(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
|
||||||
setShoes(uint8, uint8, uint8) required broadcast db ownrecv;
|
setShoes(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
|
||||||
setGardenSpecials(gardenSpecial []) required ownrecv db airecv;
|
setGardenSpecials(gardenSpecial [] = []) required ownrecv db airecv;
|
||||||
setEarnedExperience(uint16[]) ownrecv;
|
setEarnedExperience(uint16[]) ownrecv;
|
||||||
setTunnelIn(int16, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
|
setTunnelIn(int16, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
|
||||||
setTunnelOut(int16, int16/10, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
|
setTunnelOut(int16, int16/10, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
|
||||||
setAnimState(char [0-1024], int16/1000, int16) broadcast ram ownsend airecv;
|
setAnimState(char [0-1024], int16/1000, int16) broadcast ram ownsend airecv;
|
||||||
setEmoteState(int16, int16/1000, int16) broadcast ram ownsend;
|
setEmoteState(int16, int16/1000, int16) broadcast ram ownsend;
|
||||||
setEmoteAccess(uint8[]) required ownrecv db;
|
setEmoteAccess(uint8[] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) required ownrecv db;
|
||||||
setCustomMessages(uint16[]) required ownrecv db;
|
setCustomMessages(uint16[] = []) required ownrecv db;
|
||||||
setSleepAutoReply(uint32) broadcast clsend ownrecv;
|
setSleepAutoReply(uint32) broadcast clsend ownrecv;
|
||||||
setResistanceMessages(pair16 []) required ownrecv db;
|
setResistanceMessages(pair16 [] = []) required ownrecv db;
|
||||||
setPetTrickPhrases(uint8[]) required ownrecv db;
|
setPetTrickPhrases(uint8[] = [0]) required ownrecv db;
|
||||||
setCatalogSchedule(uint16, uint32) required ownrecv db;
|
setCatalogSchedule(uint16 = 0, uint32 = 0) required ownrecv db;
|
||||||
setCatalog(blob, blob, blob) required ownrecv db;
|
setCatalog(blob = [], blob = [], blob = []) required ownrecv db;
|
||||||
setMailboxContents(blob) required ownrecv db;
|
setMailboxContents(blob = []) required ownrecv db;
|
||||||
setDeliverySchedule(blob) required ownrecv db airecv;
|
setDeliverySchedule(blob = []) required ownrecv db airecv;
|
||||||
setGiftSchedule(blob) required ownrecv db airecv;
|
setGiftSchedule(blob = []) required ownrecv db airecv;
|
||||||
setAwardMailboxContents(blob) required ownrecv db;
|
setAwardMailboxContents(blob = []) required ownrecv db;
|
||||||
setAwardSchedule(blob) required ownrecv db airecv;
|
setAwardSchedule(blob = []) required ownrecv db airecv;
|
||||||
setAwardNotify(uint8) required ownrecv db;
|
setAwardNotify(uint8 = 0) required ownrecv db;
|
||||||
setCatalogNotify(uint8, uint8) required ownrecv db;
|
setCatalogNotify(uint8 = 0, uint8 = 0) required ownrecv db;
|
||||||
playSplashEffect(int16/10, int16/10, int16/10) broadcast ownsend;
|
playSplashEffect(int16/10, int16/10, int16/10) broadcast ownsend;
|
||||||
setWhisperSCToontaskFrom(uint32, uint32, uint32, uint32, uint8) ownrecv clsend;
|
setWhisperSCToontaskFrom(uint32, uint32, uint32, uint32, uint8) ownrecv clsend;
|
||||||
setSCToontask(uint32, uint32, uint32, uint8) broadcast ownsend;
|
setSCToontask(uint32, uint32, uint32, uint8) broadcast ownsend;
|
||||||
reqSCResistance(uint16, uint32 []) ownsend airecv;
|
reqSCResistance(uint16, uint32 []) ownsend airecv;
|
||||||
setSCResistance(uint16, uint32 []) broadcast ownrecv;
|
setSCResistance(uint16, uint32 []) broadcast ownrecv;
|
||||||
setSpeedChatStyleIndex(uint8) required ownsend broadcast db;
|
setSpeedChatStyleIndex(uint8 = 1) required ownsend broadcast db;
|
||||||
setTrophyScore(uint16) broadcast ownrecv ram;
|
setTrophyScore(uint16) broadcast ownrecv ram;
|
||||||
setTeleportAccess(uint32[]) required ownrecv db;
|
setTeleportAccess(uint32[] = []) required ownrecv db;
|
||||||
checkTeleportAccess(uint16) airecv ownsend;
|
checkTeleportAccess(uint16) airecv ownsend;
|
||||||
battleSOS(uint32) ownrecv clsend;
|
battleSOS(uint32) ownrecv clsend;
|
||||||
teleportQuery(uint32) ownrecv clsend;
|
teleportQuery(uint32) ownrecv clsend;
|
||||||
|
@ -515,39 +515,39 @@ dclass DistributedToon : DistributedPlayer {
|
||||||
teleportResponseToAI(uint32, int8, uint32, uint32, uint32, uint32) ownsend airecv;
|
teleportResponseToAI(uint32, int8, uint32, uint32, uint32, uint32) ownsend airecv;
|
||||||
teleportGiveup(uint32) ownrecv clsend;
|
teleportGiveup(uint32) ownrecv clsend;
|
||||||
teleportGreeting(uint32) broadcast ownsend;
|
teleportGreeting(uint32) broadcast ownsend;
|
||||||
setCogStatus(uint32[]) required ownrecv db;
|
setCogStatus(uint32[] = [1 * 32]) required ownrecv db;
|
||||||
setCogCount(uint32[]) required ownrecv db;
|
setCogCount(uint32[] = [0 * 32]) required ownrecv db;
|
||||||
setCogRadar(uint8[]) required ownrecv db;
|
setCogRadar(uint8[] = [0 * 4]) required ownrecv db;
|
||||||
setBuildingRadar(uint8[]) required ownrecv db;
|
setBuildingRadar(uint8[] = [0 * 4]) required ownrecv db;
|
||||||
setCogLevels(uint8[]) required broadcast ownrecv db;
|
setCogLevels(uint8[] = [0 * 4]) required broadcast ownrecv db;
|
||||||
setCogTypes(uint8[]) required broadcast ownrecv db;
|
setCogTypes(uint8[] = [0 * 4]) required broadcast ownrecv db;
|
||||||
setCogParts(uint32[]) required broadcast ownrecv db;
|
setCogParts(uint32[] = [0 * 4]) required broadcast ownrecv db;
|
||||||
setCogMerits(uint16[]) required ownrecv db;
|
setCogMerits(uint16[] = [0 * 4]) required ownrecv db;
|
||||||
setCogIndex(int8) broadcast ram;
|
setCogIndex(int8) broadcast ram;
|
||||||
setDisguisePageFlag(int8) ownrecv;
|
setDisguisePageFlag(int8) ownrecv;
|
||||||
setSosPageFlag(int8) ownrecv;
|
setSosPageFlag(int8) ownrecv;
|
||||||
setHouseId(uint32) required ownrecv db;
|
setHouseId(uint32 = 0) required ownrecv db;
|
||||||
setQuests(uint32[]) required broadcast ownrecv db;
|
setQuests(uint32[] = []) required broadcast ownrecv db;
|
||||||
setQuestHistory(uint16[]) required ownrecv db;
|
setQuestHistory(uint16[] = []) required ownrecv db;
|
||||||
setRewardHistory(uint8, uint16[]) required ownrecv db;
|
setRewardHistory(uint8 = 0, uint16[] = []) required ownrecv db;
|
||||||
setQuestCarryLimit(uint8) required ownrecv db;
|
setQuestCarryLimit(uint8 = 1) required ownrecv db;
|
||||||
requestDeleteQuest(uint32[]) ownsend airecv;
|
requestDeleteQuest(uint32[]) ownsend airecv;
|
||||||
setCheesyEffect(int16, uint32, uint32) required broadcast ownrecv db;
|
setCheesyEffect(int16 = 0, uint32 = 0, uint32 = 0) required broadcast ownrecv db;
|
||||||
setGhostMode(uint8) broadcast ownrecv ram;
|
setGhostMode(uint8) broadcast ownrecv ram;
|
||||||
setPosIndex(uint8) required ownrecv db;
|
setPosIndex(uint8 = 0) required ownrecv db;
|
||||||
setFishCollection(uint8[], uint8[], uint16[]) required ownrecv db;
|
setFishCollection(uint8[] = [], uint8[] = [], uint16[] = []) required ownrecv db;
|
||||||
setMaxFishTank(uint8) required ownrecv db;
|
setMaxFishTank(uint8 = 20) required ownrecv db;
|
||||||
setFishTank(uint8[], uint8[], uint16[]) required ownrecv db;
|
setFishTank(uint8[] = [], uint8[] = [], uint16[] = []) required ownrecv db;
|
||||||
setFishingRod(uint8) required broadcast ownrecv db;
|
setFishingRod(uint8 = 0) required broadcast ownrecv db;
|
||||||
setFishingTrophies(uint8[]) required ownrecv db;
|
setFishingTrophies(uint8[] = []) required ownrecv db;
|
||||||
setFlowerCollection(uint8[], uint8[]) required ownrecv db;
|
setFlowerCollection(uint8[] = [], uint8[] = []) required ownrecv db;
|
||||||
setFlowerBasket(uint8[], uint8[]) required ownrecv db;
|
setFlowerBasket(uint8[] = [], uint8[] = []) required ownrecv db;
|
||||||
setMaxFlowerBasket(uint8) required ownrecv db;
|
setMaxFlowerBasket(uint8 = 20) required ownrecv db;
|
||||||
setGardenTrophies(uint8[]) required ownrecv db;
|
setGardenTrophies(uint8[] = []) required ownrecv db;
|
||||||
setShovel(uint8) required broadcast ownrecv db;
|
setShovel(uint8 = 0) required broadcast ownrecv db;
|
||||||
setShovelSkill(uint32) required ownrecv db;
|
setShovelSkill(uint32 = 0) required ownrecv db;
|
||||||
setWateringCan(uint8) required broadcast ownrecv db;
|
setWateringCan(uint8 = 0) required broadcast ownrecv db;
|
||||||
setWateringCanSkill(uint32) required ownrecv db;
|
setWateringCanSkill(uint32 = 0) required ownrecv db;
|
||||||
promoteShovel(uint8) ownrecv;
|
promoteShovel(uint8) ownrecv;
|
||||||
promoteWateringCan(uint8) ownrecv;
|
promoteWateringCan(uint8) ownrecv;
|
||||||
reactivateWater() ownrecv;
|
reactivateWater() ownrecv;
|
||||||
|
@ -558,51 +558,51 @@ dclass DistributedToon : DistributedPlayer {
|
||||||
setNumPies(uint16) broadcast ownrecv ram;
|
setNumPies(uint16) broadcast ownrecv ram;
|
||||||
catalogGenClothes(uint32) broadcast ownrecv;
|
catalogGenClothes(uint32) broadcast ownrecv;
|
||||||
catalogGenAccessories(uint32) broadcast ownrecv;
|
catalogGenAccessories(uint32) broadcast ownrecv;
|
||||||
setPetId(uint32) required broadcast ownrecv db;
|
setPetId(uint32 = 0) required broadcast ownrecv db;
|
||||||
setPetMovie(uint32, uint8) ownsend airecv;
|
setPetMovie(uint32, uint8) ownsend airecv;
|
||||||
setPetTutorialDone(uint8) required ownsend airecv db;
|
setPetTutorialDone(uint8 = 0) required ownsend airecv db;
|
||||||
setFishBingoTutorialDone(uint8) required ownsend airecv db;
|
setFishBingoTutorialDone(uint8 = 0) required ownsend airecv db;
|
||||||
setFishBingoMarkTutorialDone(uint8) required ownsend airecv db;
|
setFishBingoMarkTutorialDone(uint8 = 0) required ownsend airecv db;
|
||||||
setKartBodyType(int8) required broadcast ownrecv db;
|
setKartBodyType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartBodyColor(int8) required broadcast ownrecv db;
|
setKartBodyColor(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartAccessoryColor(int8) required broadcast ownrecv db;
|
setKartAccessoryColor(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartEngineBlockType(int8) required broadcast ownrecv db;
|
setKartEngineBlockType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartSpoilerType(int8) required broadcast ownrecv db;
|
setKartSpoilerType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartFrontWheelWellType(int8) required broadcast ownrecv db;
|
setKartFrontWheelWellType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartBackWheelWellType(int8) required broadcast ownrecv db;
|
setKartBackWheelWellType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartRimType(int8) required broadcast ownrecv db;
|
setKartRimType(int8 = -1) required broadcast ownrecv db;
|
||||||
setKartDecalType(int8) required broadcast ownrecv db;
|
setKartDecalType(int8 = -1) required broadcast ownrecv db;
|
||||||
updateKartDNAField(int8, int8) ownsend airecv;
|
updateKartDNAField(int8, int8) ownsend airecv;
|
||||||
addOwnedAccessory(int8) ownsend airecv;
|
addOwnedAccessory(int8) ownsend airecv;
|
||||||
removeOwnedAccessory(int8) ownsend airecv;
|
removeOwnedAccessory(int8) ownsend airecv;
|
||||||
setTickets(uint32) required broadcast ownrecv db;
|
setTickets(uint32 = 200) required broadcast ownrecv db;
|
||||||
setKartingHistory(uint8 [16]) required ownrecv db;
|
setKartingHistory(uint8 [16] = [0 * 16]) required ownrecv db;
|
||||||
setKartingTrophies(uint8 [33]) required ownrecv db;
|
setKartingTrophies(uint8 [33] = [0 * 33]) required ownrecv db;
|
||||||
setKartingPersonalBest(uint32/1000 [6]) required ownrecv db;
|
setKartingPersonalBest(uint32/1000 [6] = [0 * 6]) required ownrecv db;
|
||||||
setKartingPersonalBest2(uint32/1000 [12]) required ownrecv db;
|
setKartingPersonalBest2(uint32/1000 [12] = [0 * 12]) required ownrecv db;
|
||||||
setKartAccessoriesOwned(int8 [16]) required broadcast ownrecv db;
|
setKartAccessoriesOwned(int8 [16] = [-1 * 16]) required broadcast ownrecv db;
|
||||||
setCurrentKart(uint32) broadcast ownrecv ram;
|
setCurrentKart(uint32) broadcast ownrecv ram;
|
||||||
squish(uint8) ownsend airecv;
|
squish(uint8) ownsend airecv;
|
||||||
announceBingo() broadcast ownrecv;
|
announceBingo() broadcast ownrecv;
|
||||||
trickOrTreatTargetMet(uint32) ownrecv;
|
trickOrTreatTargetMet(uint32) ownrecv;
|
||||||
trickOrTreatMilestoneMet() ownrecv;
|
trickOrTreatMilestoneMet() ownrecv;
|
||||||
winterCarolingTargetMet(uint32) ownrecv;
|
winterCarolingTargetMet(uint32) ownrecv;
|
||||||
setCogSummonsEarned(uint8[]) required ownrecv db;
|
setCogSummonsEarned(uint8[] = [0 * 32]) required ownrecv db;
|
||||||
reqCogSummons(char [0-256], uint32) ownsend airecv;
|
reqCogSummons(char [0-256], uint32) ownsend airecv;
|
||||||
cogSummonsResponse(string, uint32, uint32) ownrecv;
|
cogSummonsResponse(string, uint32, uint32) ownrecv;
|
||||||
reqUseSpecial(int32) ownsend airecv;
|
reqUseSpecial(int32) ownsend airecv;
|
||||||
useSpecialResponse(string) ownrecv;
|
useSpecialResponse(string) ownrecv;
|
||||||
setGardenStarted(uint8) required ownrecv db;
|
setGardenStarted(uint8 = 0) required ownrecv db;
|
||||||
sendToGolfCourse(uint32) ownrecv;
|
sendToGolfCourse(uint32) ownrecv;
|
||||||
setGolfHistory(uint16 [18]) required ownrecv db;
|
setGolfHistory(uint16 [18] = [0 * 18]) required ownrecv db;
|
||||||
setPackedGolfHoleBest(uint8 [18]) required ownrecv db;
|
setPackedGolfHoleBest(uint8 [18] = [0 * 18]) required ownrecv db;
|
||||||
setGolfCourseBest(uint8 [3]) required ownrecv db;
|
setGolfCourseBest(uint8 [3] = [0 * 3]) required ownrecv db;
|
||||||
setUnlimitedSwing(uint8) broadcast ownrecv ram;
|
setUnlimitedSwing(uint8) broadcast ownrecv ram;
|
||||||
logSuspiciousEvent(char [0-1024]) ownsend airecv;
|
logSuspiciousEvent(char [0-1024]) ownsend airecv;
|
||||||
logMessage(char [0-1024]) ownsend airecv;
|
logMessage(char [0-1024]) ownsend airecv;
|
||||||
forceLogoutWithNotify() ownrecv;
|
forceLogoutWithNotify() ownrecv;
|
||||||
setPinkSlips(uint8) required ownrecv db;
|
setPinkSlips(uint8 = 0) required ownrecv db;
|
||||||
setNametagStyle(uint8) broadcast required ram db;
|
setNametagStyle(uint8 = 0) broadcast required ram db;
|
||||||
setMail(simpleMail []) ownrecv;
|
setMail(simpleMail []) ownrecv;
|
||||||
setNumMailItems(uint32) airecv;
|
setNumMailItems(uint32) airecv;
|
||||||
setSimpleMailNotify(uint8) ownrecv airecv;
|
setSimpleMailNotify(uint8) ownrecv airecv;
|
||||||
|
@ -3269,4 +3269,3 @@ dclass DistributedTrashcanZeroMgr : DistributedPhaseEventMgr {
|
||||||
|
|
||||||
dclass DistributedSillyMeterMgr : DistributedPhaseEventMgr {
|
dclass DistributedSillyMeterMgr : DistributedPhaseEventMgr {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -42,3 +42,11 @@ class Settings:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def doSavedSettingsExist():
|
def doSavedSettingsExist():
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getAcceptingNewFriends():
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getAcceptingNonFriendWhispers():
|
||||||
|
return 1
|
||||||
|
|
|
@ -956,18 +956,18 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def _requestAvatarList(self):
|
def _requestAvatarList(self):
|
||||||
if not self.astronSupport:
|
self.sendGetAvatarsMsg()
|
||||||
self.sendGetAvatarsMsg()
|
|
||||||
else:
|
|
||||||
self.astronLoginManager.sendRequestAvatarList()
|
|
||||||
self.waitForDatabaseTimeout(requestName='WaitForAvatarList')
|
self.waitForDatabaseTimeout(requestName='WaitForAvatarList')
|
||||||
self.acceptOnce(OtpAvatarManager.OtpAvatarManager.OnlineEvent, self._requestAvatarList)
|
self.acceptOnce(OtpAvatarManager.OtpAvatarManager.OnlineEvent, self._requestAvatarList)
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def sendGetAvatarsMsg(self):
|
def sendGetAvatarsMsg(self):
|
||||||
datagram = PyDatagram()
|
if self.astronSupport:
|
||||||
datagram.addUint16(CLIENT_GET_AVATARS)
|
self.astronLoginManager.sendRequestAvatarList()
|
||||||
self.send(datagram)
|
else:
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint16(CLIENT_GET_AVATARS)
|
||||||
|
self.send(datagram)
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def exitWaitForAvatarList(self):
|
def exitWaitForAvatarList(self):
|
||||||
|
@ -1086,16 +1086,20 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def enterWaitForDeleteAvatarResponse(self, potAv):
|
def enterWaitForDeleteAvatarResponse(self, potAv):
|
||||||
self.handler = self.handleWaitForDeleteAvatarResponse
|
if not self.astronSupport:
|
||||||
|
self.handler = self.handleWaitForDeleteAvatarResponse
|
||||||
self.sendDeleteAvatarMsg(potAv.id)
|
self.sendDeleteAvatarMsg(potAv.id)
|
||||||
self.waitForDatabaseTimeout(requestName='WaitForDeleteAvatarResponse')
|
self.waitForDatabaseTimeout(requestName='WaitForDeleteAvatarResponse')
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def sendDeleteAvatarMsg(self, avId):
|
def sendDeleteAvatarMsg(self, avId):
|
||||||
datagram = PyDatagram()
|
if self.astronSupport:
|
||||||
datagram.addUint16(CLIENT_DELETE_AVATAR)
|
self.astronLoginManager.sendRequestRemoveAvatar(avId)
|
||||||
datagram.addUint32(avId)
|
else:
|
||||||
self.send(datagram)
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint16(CLIENT_DELETE_AVATAR)
|
||||||
|
datagram.addUint32(avId)
|
||||||
|
self.send(datagram)
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def exitWaitForDeleteAvatarResponse(self):
|
def exitWaitForDeleteAvatarResponse(self):
|
||||||
|
@ -1133,7 +1137,8 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def enterWaitForSetAvatarResponse(self, potAv):
|
def enterWaitForSetAvatarResponse(self, potAv):
|
||||||
self.handler = self.handleWaitForSetAvatarResponse
|
if not self.astronSupport:
|
||||||
|
self.handler = self.handleWaitForSetAvatarResponse
|
||||||
self.sendSetAvatarMsg(potAv)
|
self.sendSetAvatarMsg(potAv)
|
||||||
self.waitForDatabaseTimeout(requestName='WaitForSetAvatarResponse')
|
self.waitForDatabaseTimeout(requestName='WaitForSetAvatarResponse')
|
||||||
|
|
||||||
|
@ -1152,10 +1157,13 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
def sendSetAvatarIdMsg(self, avId):
|
def sendSetAvatarIdMsg(self, avId):
|
||||||
if avId != self.__currentAvId:
|
if avId != self.__currentAvId:
|
||||||
self.__currentAvId = avId
|
self.__currentAvId = avId
|
||||||
datagram = PyDatagram()
|
if self.astronSupport:
|
||||||
datagram.addUint16(CLIENT_SET_AVATAR)
|
self.astronLoginManager.sendRequestPlayAvatar(avId)
|
||||||
datagram.addUint32(avId)
|
else:
|
||||||
self.send(datagram)
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint16(CLIENT_SET_AVATAR)
|
||||||
|
datagram.addUint32(avId)
|
||||||
|
self.send(datagram)
|
||||||
if avId == 0:
|
if avId == 0:
|
||||||
self.stopPeriodTimer()
|
self.stopPeriodTimer()
|
||||||
else:
|
else:
|
||||||
|
@ -1413,7 +1421,8 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def enterWaitOnEnterResponses(self, shardId, hoodId, zoneId, avId):
|
def enterWaitOnEnterResponses(self, shardId, hoodId, zoneId, avId):
|
||||||
self.cleanGameExit = False
|
self.cleanGameExit = False
|
||||||
self.handler = self.handleWaitOnEnterResponses
|
if not self.astronSupport:
|
||||||
|
self.handler = self.handleWaitOnEnterResponses
|
||||||
self.handlerArgs = {'hoodId': hoodId,
|
self.handlerArgs = {'hoodId': hoodId,
|
||||||
'zoneId': zoneId,
|
'zoneId': zoneId,
|
||||||
'avId': avId}
|
'avId': avId}
|
||||||
|
@ -1635,33 +1644,52 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
else:
|
else:
|
||||||
self.gameFSM.request('playGame', [hoodId, zoneId, avId])
|
self.gameFSM.request('playGame', [hoodId, zoneId, avId])
|
||||||
|
|
||||||
def handlePlayGame(self, msgType, di):
|
if not config.GetBool('astron-support', True):
|
||||||
if self.notify.getDebug():
|
def handlePlayGame(self, msgType, di):
|
||||||
self.notify.debug('handle play game got message type: ' + `msgType`)
|
if self.notify.getDebug():
|
||||||
if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
self.notify.debug('handle play game got message type: ' + `msgType`)
|
||||||
self.handleGenerateWithRequired(di)
|
if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
||||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
self.handleGenerateWithRequired(di)
|
||||||
self.handleGenerateWithRequiredOther(di)
|
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
||||||
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
self.handleGenerateWithRequiredOther(di)
|
||||||
self.handleUpdateField(di)
|
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
||||||
elif msgType == CLIENT_OBJECT_DISABLE_RESP:
|
self.handleUpdateField(di)
|
||||||
self.handleDisable(di)
|
elif msgType == CLIENT_OBJECT_DISABLE_RESP:
|
||||||
elif msgType == CLIENT_OBJECT_DELETE_RESP:
|
self.handleDisable(di)
|
||||||
self.handleDelete(di)
|
elif msgType == CLIENT_OBJECT_DELETE_RESP:
|
||||||
elif msgType == CLIENT_GET_FRIEND_LIST_RESP:
|
self.handleDelete(di)
|
||||||
self.handleGetFriendsList(di)
|
elif msgType == CLIENT_GET_FRIEND_LIST_RESP:
|
||||||
elif msgType == CLIENT_GET_FRIEND_LIST_EXTENDED_RESP:
|
self.handleGetFriendsList(di)
|
||||||
self.handleGetFriendsListExtended(di)
|
elif msgType == CLIENT_GET_FRIEND_LIST_EXTENDED_RESP:
|
||||||
elif msgType == CLIENT_FRIEND_ONLINE:
|
self.handleGetFriendsListExtended(di)
|
||||||
self.handleFriendOnline(di)
|
elif msgType == CLIENT_FRIEND_ONLINE:
|
||||||
elif msgType == CLIENT_FRIEND_OFFLINE:
|
self.handleFriendOnline(di)
|
||||||
self.handleFriendOffline(di)
|
elif msgType == CLIENT_FRIEND_OFFLINE:
|
||||||
elif msgType == CLIENT_GET_AVATAR_DETAILS_RESP:
|
self.handleFriendOffline(di)
|
||||||
self.handleGetAvatarDetailsResp(di)
|
elif msgType == CLIENT_GET_AVATAR_DETAILS_RESP:
|
||||||
elif msgType == CLIENT_GET_PET_DETAILS_RESP:
|
self.handleGetAvatarDetailsResp(di)
|
||||||
self.handleGetAvatarDetailsResp(di)
|
elif msgType == CLIENT_GET_PET_DETAILS_RESP:
|
||||||
else:
|
self.handleGetAvatarDetailsResp(di)
|
||||||
self.handleMessageType(msgType, di)
|
else:
|
||||||
|
self.handleMessageType(msgType, di)
|
||||||
|
else:
|
||||||
|
def handlePlayGame(self, msgType, di):
|
||||||
|
if self.notify.getDebug():
|
||||||
|
self.notify.debug('handle play game got message type: ' + `msgType`)
|
||||||
|
if msgType == CLIENT_ENTER_OBJECT_REQUIRED:
|
||||||
|
self.handleGenerateWithRequired(di)
|
||||||
|
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED_OTHER:
|
||||||
|
self.handleGenerateWithRequiredOther(di)
|
||||||
|
elif msgType == CLIENT_OBJECT_SET_FIELD:
|
||||||
|
self.handleUpdateField(di)
|
||||||
|
elif msgType == CLIENT_OBJECT_DISABLE:
|
||||||
|
self.handleDisable(di)
|
||||||
|
elif msgType == CLIENT_OBJECT_DISABLE_OWNER:
|
||||||
|
self.handleDisable(di, ownerView=True)
|
||||||
|
elif msgType == CLIENT_OBJECT_DELETE_RESP:
|
||||||
|
self.handleDelete(di)
|
||||||
|
else:
|
||||||
|
self.handleMessageType(msgType, di)
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def enterSwitchShards(self, shardId, hoodId, zoneId, avId):
|
def enterSwitchShards(self, shardId, hoodId, zoneId, avId):
|
||||||
|
@ -2226,6 +2254,36 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
self.doGenerate(parentId, zoneId, classId, doId, di)
|
self.doGenerate(parentId, zoneId, classId, doId, di)
|
||||||
else:
|
else:
|
||||||
self.doGenerate(parentId, zoneId, classId, doId, di)
|
self.doGenerate(parentId, zoneId, classId, doId, di)
|
||||||
|
|
||||||
|
def handleGenerateWithRequiredOtherOwner(self, di):
|
||||||
|
classId = di.getUint16()
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleQuietZoneGenerateWithRequired(self, di):
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
doId = di.getUint32()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
doId = di.getUint32()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
else:
|
else:
|
||||||
def handleGenerateWithRequired(self, di, other=False):
|
def handleGenerateWithRequired(self, di, other=False):
|
||||||
doId = di.getUint32()
|
doId = di.getUint32()
|
||||||
|
@ -2356,6 +2414,36 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
# We're done.
|
# We're done.
|
||||||
dclass.stopGenerate()
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleGenerateWithRequiredOtherOwner(self, di):
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleQuietZoneGenerateWithRequired(self, di):
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
|
||||||
def handleAvatarListResponse(self, avatarList):
|
def handleAvatarListResponse(self, avatarList):
|
||||||
avList = []
|
avList = []
|
||||||
|
@ -2379,36 +2467,6 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
self.avList = avList
|
self.avList = avList
|
||||||
self.loginFSM.request('chooseAvatar', [self.avList])
|
self.loginFSM.request('chooseAvatar', [self.avList])
|
||||||
|
|
||||||
def handleGenerateWithRequiredOtherOwner(self, di):
|
|
||||||
classId = di.getUint16()
|
|
||||||
doId = di.getUint32()
|
|
||||||
parentId = di.getUint32()
|
|
||||||
zoneId = di.getUint32()
|
|
||||||
dclass = self.dclassesByNumber[classId]
|
|
||||||
dclass.startGenerate()
|
|
||||||
distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di)
|
|
||||||
dclass.stopGenerate()
|
|
||||||
|
|
||||||
def handleQuietZoneGenerateWithRequired(self, di):
|
|
||||||
parentId = di.getUint32()
|
|
||||||
zoneId = di.getUint32()
|
|
||||||
classId = di.getUint16()
|
|
||||||
doId = di.getUint32()
|
|
||||||
dclass = self.dclassesByNumber[classId]
|
|
||||||
dclass.startGenerate()
|
|
||||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
|
||||||
dclass.stopGenerate()
|
|
||||||
|
|
||||||
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
|
||||||
parentId = di.getUint32()
|
|
||||||
zoneId = di.getUint32()
|
|
||||||
classId = di.getUint16()
|
|
||||||
doId = di.getUint32()
|
|
||||||
dclass = self.dclassesByNumber[classId]
|
|
||||||
dclass.startGenerate()
|
|
||||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
|
||||||
dclass.stopGenerate()
|
|
||||||
|
|
||||||
def handleDisable(self, di, ownerView = False):
|
def handleDisable(self, di, ownerView = False):
|
||||||
doId = di.getUint32()
|
doId = di.getUint32()
|
||||||
if not self.isLocalId(doId):
|
if not self.isLocalId(doId):
|
||||||
|
|
|
@ -15,3 +15,6 @@ class OTPInternalRepository(AstronInternalRepository):
|
||||||
|
|
||||||
def getAccountIdFromSender(self):
|
def getAccountIdFromSender(self):
|
||||||
return (self.getMsgSender() >> 32) & 0xFFFFFFFF
|
return (self.getMsgSender() >> 32) & 0xFFFFFFFF
|
||||||
|
|
||||||
|
def getAvatarIdFromSender(self):
|
||||||
|
return self.getMsgSender() & 0xFFFFFFFF
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libotp import *
|
||||||
from direct.gui.DirectGui import *
|
from direct.gui.DirectGui import *
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.fsm import StateData
|
from direct.fsm import StateData
|
||||||
|
|
|
@ -149,3 +149,9 @@ class AstronLoginManager(DistributedObjectGlobal):
|
||||||
|
|
||||||
def acknowledgeAvatarNameResponse(self):
|
def acknowledgeAvatarNameResponse(self):
|
||||||
self._callback()
|
self._callback()
|
||||||
|
|
||||||
|
def sendRequestRemoveAvatar(self, avId):
|
||||||
|
self.sendUpdate('requestRemoveAvatar', [avId])
|
||||||
|
|
||||||
|
def sendRequestPlayAvatar(self, avId):
|
||||||
|
self.sendUpdate('requestPlayAvatar', [avId])
|
||||||
|
|
|
@ -191,6 +191,7 @@ class LoginOperation:
|
||||||
|
|
||||||
|
|
||||||
class GetAvatarsOperation:
|
class GetAvatarsOperation:
|
||||||
|
notify = DirectNotifyGlobal.directNotify.newCategory('GetAvatarsOperation')
|
||||||
|
|
||||||
def __init__(self, loginManager, sender):
|
def __init__(self, loginManager, sender):
|
||||||
self.loginManager = loginManager
|
self.loginManager = loginManager
|
||||||
|
@ -549,6 +550,181 @@ class AcknowledgeNameOperation:
|
||||||
del self.loginManager.account2operation[self.sender]
|
del self.loginManager.account2operation[self.sender]
|
||||||
|
|
||||||
|
|
||||||
|
class RemoveAvatarOperation:
|
||||||
|
notify = DirectNotifyGlobal.directNotify.newCategory('RemoveAvatarOperation')
|
||||||
|
|
||||||
|
def __init__(self, loginManager, sender):
|
||||||
|
self.loginManager = loginManager
|
||||||
|
self.sender = sender
|
||||||
|
self.account = None
|
||||||
|
self.avList = []
|
||||||
|
self.pendingAvatars = None
|
||||||
|
self.avatarFields = None
|
||||||
|
self.avId = None
|
||||||
|
|
||||||
|
def start(self, avId):
|
||||||
|
self.avId = avId
|
||||||
|
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, self.sender, self.__handleAccountRetrieved)
|
||||||
|
|
||||||
|
def __handleAccountRetrieved(self, dclass, fields):
|
||||||
|
if dclass != self.loginManager.air.dclassesByName['AstronAccountUD']:
|
||||||
|
# no uwu
|
||||||
|
return
|
||||||
|
|
||||||
|
self.account = fields
|
||||||
|
self.avList = self.account['ACCOUNT_AV_SET']
|
||||||
|
self.avList = self.avList[:6]
|
||||||
|
self.avList += [0] * (6 - len(self.avList))
|
||||||
|
self.__handleRemoveAvatar()
|
||||||
|
|
||||||
|
def __handleRemoveAvatar(self):
|
||||||
|
if self.avId not in self.avList:
|
||||||
|
# avatar doesn't exist.
|
||||||
|
return
|
||||||
|
|
||||||
|
index = self.avList.index(self.avId)
|
||||||
|
self.avList[index] = 0
|
||||||
|
avatarsRemoved = list(self.account.get('ACCOUNT_AV_SET_DEL', []))
|
||||||
|
avatarsRemoved.append([self.avId, int(time.time())])
|
||||||
|
estateId = self.account.get('ESTATE_ID', 0)
|
||||||
|
if estateId != 0:
|
||||||
|
self.loginManager.air.dbInterface.updateObject(self.loginManager.air.dbId, estateId,
|
||||||
|
self.loginManager.air.dclassesByName['DistributedEstateAI'],
|
||||||
|
{'setSlot%sToonId' % index: [0],
|
||||||
|
'setSlot%sItems' % index: [[]]})
|
||||||
|
|
||||||
|
self.loginManager.air.dbInterface.updateObject(self.loginManager.air.dbId, self.sender, self.loginManager.air.dclassesByName['AstronAccountUD'],
|
||||||
|
{'ACCOUNT_AV_SET': self.avList,
|
||||||
|
'ACCOUNT_AV_SET_DEL': avatarsRemoved},
|
||||||
|
{'ACCOUNT_AV_SET': self.account['ACCOUNT_AV_SET'],
|
||||||
|
'ACCOUNT_AV_SET_DEL': self.account['ACCOUNT_AV_SET_DEL']},
|
||||||
|
self.__handleAvatarRemoved)
|
||||||
|
|
||||||
|
def __handleAvatarRemoved(self, fields):
|
||||||
|
if fields:
|
||||||
|
# failed to remove the avatar.
|
||||||
|
return
|
||||||
|
|
||||||
|
self.__handleQueryAvatars()
|
||||||
|
|
||||||
|
def __handleQueryAvatars(self):
|
||||||
|
self.pendingAvatars = set()
|
||||||
|
self.avatarFields = {}
|
||||||
|
for avId in self.avList:
|
||||||
|
if avId:
|
||||||
|
self.pendingAvatars.add(avId)
|
||||||
|
def response(dclass, fields, avId=avId):
|
||||||
|
if dclass != self.loginManager.air.dclassesByName['DistributedToonUD']:
|
||||||
|
# mayonnaise
|
||||||
|
return
|
||||||
|
|
||||||
|
self.avatarFields[avId] = fields
|
||||||
|
self.pendingAvatars.remove(avId)
|
||||||
|
if not self.pendingAvatars:
|
||||||
|
self.__handleSendAvatars()
|
||||||
|
|
||||||
|
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, avId, response)
|
||||||
|
|
||||||
|
if not self.pendingAvatars:
|
||||||
|
self.__handleSendAvatars()
|
||||||
|
|
||||||
|
def __handleSendAvatars(self):
|
||||||
|
potentialAvatars = []
|
||||||
|
for avId, fields in self.avatarFields.items():
|
||||||
|
index = self.avList.index(avId)
|
||||||
|
wishNameState = fields.get('WishNameState', [''])[0]
|
||||||
|
name = fields['setName'][0]
|
||||||
|
nameState = 0
|
||||||
|
if wishNameState == 'OPEN':
|
||||||
|
nameState = 1
|
||||||
|
elif wishNameState == 'PENDING':
|
||||||
|
nameState = 2
|
||||||
|
elif wishNameState == 'APPROVED':
|
||||||
|
nameState = 3
|
||||||
|
name = fields['WishName'][0]
|
||||||
|
elif wishNameState == 'REJECTED':
|
||||||
|
nameState = 4
|
||||||
|
elif wishNameState == 'LOCKED':
|
||||||
|
nameState = 0
|
||||||
|
else:
|
||||||
|
# unknown name state.
|
||||||
|
nameState = 0
|
||||||
|
|
||||||
|
potentialAvatars.append([avId, name, fields['setDNAString'][0], index, nameState])
|
||||||
|
|
||||||
|
self.loginManager.sendUpdateToAccountId(self.sender, 'avatarListResponse', [potentialAvatars])
|
||||||
|
del self.loginManager.account2operation[self.sender]
|
||||||
|
|
||||||
|
|
||||||
|
class LoadAvatarOperation:
|
||||||
|
notify = DirectNotifyGlobal.directNotify.newCategory('LoadAvatarOperation')
|
||||||
|
|
||||||
|
def __init__(self, loginManager, sender):
|
||||||
|
self.loginManager = loginManager
|
||||||
|
self.sender = sender
|
||||||
|
self.avId = None
|
||||||
|
|
||||||
|
def start(self, avId):
|
||||||
|
self.avId = avId
|
||||||
|
self.__handleRetrieveAccount()
|
||||||
|
|
||||||
|
def __handleRetrieveAccount(self):
|
||||||
|
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, self.sender, self.__handleAccountRetrieved)
|
||||||
|
|
||||||
|
def __handleAccountRetrieved(self, dclass, fields):
|
||||||
|
if dclass != self.loginManager.air.dclassesByName['AstronAccountUD']:
|
||||||
|
# no uwu
|
||||||
|
return
|
||||||
|
|
||||||
|
self.account = fields
|
||||||
|
self.avList = self.account['ACCOUNT_AV_SET']
|
||||||
|
self.avList = self.avList[:6]
|
||||||
|
self.avList += [0] * (6 - len(self.avList))
|
||||||
|
self.__handleGetTargetAvatar()
|
||||||
|
|
||||||
|
def __handleGetTargetAvatar(self):
|
||||||
|
if self.avId not in self.avList:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.loginManager.air.dbInterface.queryObject(self.loginManager.air.dbId, self.avId, self.__handleAvatarRetrieved)
|
||||||
|
|
||||||
|
def __handleAvatarRetrieved(self, dclass, fields):
|
||||||
|
if dclass != self.loginManager.air.dclassesByName['DistributedToonUD']:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.avatar = fields
|
||||||
|
self.__handleSetAvatar()
|
||||||
|
|
||||||
|
def __handleSetAvatar(self):
|
||||||
|
channel = self.loginManager.GetAccountConnectionChannel(self.sender)
|
||||||
|
|
||||||
|
cleanupDatagram = PyDatagram()
|
||||||
|
cleanupDatagram.addServerHeader(self.avId, channel, STATESERVER_OBJECT_DELETE_RAM)
|
||||||
|
cleanupDatagram.addUint32(self.avId)
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addServerHeader(channel, self.loginManager.air.ourChannel, CLIENTAGENT_ADD_POST_REMOVE)
|
||||||
|
datagram.addString(cleanupDatagram.getMessage())
|
||||||
|
self.loginManager.air.send(datagram)
|
||||||
|
|
||||||
|
self.loginManager.air.sendActivate(self.avId, 0, 0, self.loginManager.air.dclassesByName['DistributedToonUD'])
|
||||||
|
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addServerHeader(channel, self.loginManager.air.ourChannel, CLIENTAGENT_OPEN_CHANNEL)
|
||||||
|
datagram.addChannel(self.loginManager.GetPuppetConnectionChannel(self.avId))
|
||||||
|
self.loginManager.air.send(datagram)
|
||||||
|
|
||||||
|
self.loginManager.air.clientAddSessionObject(channel, self.avId)
|
||||||
|
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addServerHeader(channel, self.loginManager.air.ourChannel, CLIENTAGENT_SET_CLIENT_ID)
|
||||||
|
datagram.addChannel(self.sender << 32 | self.avId) # accountId in high 32 bits, avatar in low.
|
||||||
|
self.loginManager.air.send(datagram)
|
||||||
|
|
||||||
|
self.loginManager.air.setOwner(self.avId, channel)
|
||||||
|
|
||||||
|
del self.loginManager.account2operation[self.sender]
|
||||||
|
|
||||||
|
|
||||||
class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('AstronLoginManagerUD')
|
notify = DirectNotifyGlobal.directNotify.newCategory('AstronLoginManagerUD')
|
||||||
|
|
||||||
|
@ -653,3 +829,45 @@ class AstronLoginManagerUD(DistributedObjectGlobalUD):
|
||||||
newOperation = AcknowledgeNameOperation(self, sender)
|
newOperation = AcknowledgeNameOperation(self, sender)
|
||||||
self.account2operation[sender] = newOperation
|
self.account2operation[sender] = newOperation
|
||||||
newOperation.start(avId)
|
newOperation.start(avId)
|
||||||
|
|
||||||
|
def requestRemoveAvatar(self, avId):
|
||||||
|
sender = self.air.getAccountIdFromSender()
|
||||||
|
if not sender:
|
||||||
|
# TODO KILL CONNECTION
|
||||||
|
return
|
||||||
|
|
||||||
|
if sender in self.account2operation:
|
||||||
|
# BAD!!!!
|
||||||
|
return
|
||||||
|
|
||||||
|
newOperation = RemoveAvatarOperation(self, sender)
|
||||||
|
self.account2operation[sender] = newOperation
|
||||||
|
newOperation.start(avId)
|
||||||
|
|
||||||
|
def requestPlayAvatar(self, avId):
|
||||||
|
currentAvId = self.air.getAvatarIdFromSender()
|
||||||
|
accId = self.air.getAccountIdFromSender()
|
||||||
|
if currentAvId and avId:
|
||||||
|
# todo: kill the connection
|
||||||
|
return
|
||||||
|
elif not currentAvId and not avId:
|
||||||
|
# I don't think we need to do anything extra here
|
||||||
|
return
|
||||||
|
|
||||||
|
sender = self.air.getAccountIdFromSender()
|
||||||
|
if not sender:
|
||||||
|
# TODO KILL CONNECTION
|
||||||
|
return
|
||||||
|
|
||||||
|
if sender in self.account2operation:
|
||||||
|
# BAD!!!!
|
||||||
|
return
|
||||||
|
|
||||||
|
if avId:
|
||||||
|
newOperation = LoadAvatarOperation(self, sender)
|
||||||
|
self.account2operation[sender] = newOperation
|
||||||
|
newOperation.start(avId)
|
||||||
|
else:
|
||||||
|
newOperation = UnloadAvatarOperation(self, sender)
|
||||||
|
self.account2operation[sender] = newOperation
|
||||||
|
newOperation.start(currentAvId)
|
||||||
|
|
|
@ -23,3 +23,6 @@ class LoginAstronAccount(LoginBase):
|
||||||
if __debug__:
|
if __debug__:
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def supportsAuthenticateDelete(self):
|
||||||
|
return 0
|
||||||
|
|
4
toontown/ai/HolidayManagerAI.py
Normal file
4
toontown/ai/HolidayManagerAI.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
class HolidayManagerAI:
|
||||||
|
def __init__(self, air):
|
||||||
|
self.air = air
|
||||||
|
self.currentHolidays = {}
|
|
@ -1,16 +1,25 @@
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
|
from otp.ai.AIZoneData import AIZoneDataStore
|
||||||
|
from otp.distributed.OtpDoGlobals import *
|
||||||
from toontown.distributed.ToontownInternalRepository import ToontownInternalRepository
|
from toontown.distributed.ToontownInternalRepository import ToontownInternalRepository
|
||||||
from toontown.distributed.ToontownDistrictAI import ToontownDistrictAI
|
from toontown.distributed.ToontownDistrictAI import ToontownDistrictAI
|
||||||
from otp.distributed.OtpDoGlobals import *
|
from toontown.ai.HolidayManagerAI import HolidayManagerAI
|
||||||
|
from toontown.catalog.CatalogManagerAI import CatalogManagerAI
|
||||||
|
from toontown.uberdog.DistributedInGameNewsMgrAI import DistributedInGameNewsMgrAI
|
||||||
|
|
||||||
class ToontownAIRepository(ToontownInternalRepository):
|
class ToontownAIRepository(ToontownInternalRepository):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('ToontownAIRepository')
|
notify = DirectNotifyGlobal.directNotify.newCategory('ToontownAIRepository')
|
||||||
|
|
||||||
def __init__(self, baseChannel, serverId, districtName):
|
def __init__(self, baseChannel, serverId, districtName):
|
||||||
ToontownInternalRepository.__init__(self, baseChannel, serverId, dcSuffix='AI')
|
ToontownInternalRepository.__init__(self, baseChannel, serverId, dcSuffix='AI')
|
||||||
|
self.doLiveUpdates = config.GetBool('want-live-updates', True)
|
||||||
self.districtName = districtName
|
self.districtName = districtName
|
||||||
self.districtId = None
|
self.districtId = None
|
||||||
self.district = None
|
self.district = None
|
||||||
|
self.holidayManager = None
|
||||||
|
self.zoneDataStore = None
|
||||||
|
self.inGameNewsMgr = None
|
||||||
|
self.catalogManager = None
|
||||||
|
|
||||||
def handleConnected(self):
|
def handleConnected(self):
|
||||||
ToontownInternalRepository.handleConnected(self)
|
ToontownInternalRepository.handleConnected(self)
|
||||||
|
@ -24,6 +33,53 @@ class ToontownAIRepository(ToontownInternalRepository):
|
||||||
# Claim ownership of that district...
|
# Claim ownership of that district...
|
||||||
self.district.setAI(self.ourChannel)
|
self.district.setAI(self.ourChannel)
|
||||||
|
|
||||||
|
# Create our local objects.
|
||||||
|
self.createLocals()
|
||||||
|
|
||||||
|
# Create our global objects.
|
||||||
|
self.createGlobals()
|
||||||
|
|
||||||
# Make our district available, and we're done.
|
# Make our district available, and we're done.
|
||||||
self.district.b_setAvailable(True)
|
self.district.b_setAvailable(True)
|
||||||
self.notify.info('Done.')
|
self.notify.info('Done.')
|
||||||
|
|
||||||
|
def createLocals(self):
|
||||||
|
"""
|
||||||
|
Creates "local" (non-distributed) objects.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Create our holiday manager...
|
||||||
|
self.holidayManager = HolidayManagerAI(self)
|
||||||
|
|
||||||
|
# Create our zone data store...
|
||||||
|
self.zoneDataStore = AIZoneDataStore()
|
||||||
|
|
||||||
|
def createGlobals(self):
|
||||||
|
"""
|
||||||
|
Creates "global" (distributed) objects.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Generate our in-game news manager...
|
||||||
|
self.inGameNewsMgr = DistributedInGameNewsMgrAI(self)
|
||||||
|
self.inGameNewsMgr.generateWithRequired(OTP_ZONE_ID_MANAGEMENT)
|
||||||
|
|
||||||
|
# Generate our catalog manager...
|
||||||
|
self.catalogManager = CatalogManagerAI(self)
|
||||||
|
|
||||||
|
def getTrackClsends(self):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def getAvatarExitEvent(self, avId):
|
||||||
|
return 'distObjDelete-%d' % avId
|
||||||
|
|
||||||
|
def getZoneDataStore(self):
|
||||||
|
return self.zoneDataStore
|
||||||
|
|
||||||
|
def incrementPopulation(self):
|
||||||
|
print 'TODO districtStats'
|
||||||
|
|
||||||
|
def decrementPopulation(self):
|
||||||
|
print 'TODO districtStats'
|
||||||
|
|
||||||
|
def sendQueryToonMaxHp(self, avId, callback):
|
||||||
|
pass # TODO?
|
||||||
|
|
|
@ -3,3 +3,9 @@ from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
||||||
|
|
||||||
class CatalogManagerAI(DistributedObjectAI):
|
class CatalogManagerAI(DistributedObjectAI):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogManagerAI')
|
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogManagerAI')
|
||||||
|
|
||||||
|
def startCatalog(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def deliverCatalogFor(self, _):
|
||||||
|
pass
|
||||||
|
|
|
@ -3,7 +3,6 @@ import datetime
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.distributed import DistributedObject
|
from direct.distributed import DistributedObject
|
||||||
from direct.showbase import AppRunnerGlobal
|
|
||||||
from otp.chat.WhiteList import WhiteList
|
from otp.chat.WhiteList import WhiteList
|
||||||
from toontown.toonbase import TTLocalizer
|
from toontown.toonbase import TTLocalizer
|
||||||
|
|
||||||
|
@ -23,14 +22,8 @@ class TTWhiteList(WhiteList, DistributedObject.DistributedObject):
|
||||||
vfs = VirtualFileSystem.getGlobalPtr()
|
vfs = VirtualFileSystem.getGlobalPtr()
|
||||||
filename = Filename('twhitelist.dat')
|
filename = Filename('twhitelist.dat')
|
||||||
searchPath = DSearchPath()
|
searchPath = DSearchPath()
|
||||||
if AppRunnerGlobal.appRunner:
|
if __debug__:
|
||||||
searchPath.appendDirectory(Filename.expandFrom('$TT_3_ROOT/phase_3/etc'))
|
searchPath.appendDirectory(Filename('resources/phase_3/etc'))
|
||||||
else:
|
|
||||||
searchPath.appendDirectory(Filename('.'))
|
|
||||||
searchPath.appendDirectory(Filename('etc'))
|
|
||||||
searchPath.appendDirectory(Filename.fromOsSpecific(os.path.expandvars('$TOONTOWN/src/chat')))
|
|
||||||
searchPath.appendDirectory(Filename.fromOsSpecific(os.path.expandvars('toontown/src/chat')))
|
|
||||||
searchPath.appendDirectory(Filename.fromOsSpecific(os.path.expandvars('toontown/chat')))
|
|
||||||
found = vfs.resolveFilename(filename, searchPath)
|
found = vfs.resolveFilename(filename, searchPath)
|
||||||
if not found:
|
if not found:
|
||||||
self.notify.info("Couldn't find whitelist data file!")
|
self.notify.info("Couldn't find whitelist data file!")
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libtoontown import *
|
||||||
from toontown.toonbase.ToonBaseGlobal import *
|
from toontown.toonbase.ToonBaseGlobal import *
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.fsm import StateData
|
from direct.fsm import StateData
|
||||||
|
|
|
@ -322,7 +322,8 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
self.avCreate = MakeAToon.MakeAToon(self.loginFSM, avList, 'makeAToonComplete', index, self.isPaid())
|
self.avCreate = MakeAToon.MakeAToon(self.loginFSM, avList, 'makeAToonComplete', index, self.isPaid())
|
||||||
self.avCreate.load()
|
self.avCreate.load()
|
||||||
self.avCreate.enter()
|
self.avCreate.enter()
|
||||||
self.handler = self.handleCreateAvatar
|
if not self.astronSupport:
|
||||||
|
self.handler = self.handleCreateAvatar
|
||||||
self.accept('makeAToonComplete', self.__handleMakeAToon, [avList, index])
|
self.accept('makeAToonComplete', self.__handleMakeAToon, [avList, index])
|
||||||
self.accept('nameShopCreateAvatar', self.sendCreateAvatarMsg)
|
self.accept('nameShopCreateAvatar', self.sendCreateAvatarMsg)
|
||||||
self.accept('nameShopPost', self.relayMessage)
|
self.accept('nameShopPost', self.relayMessage)
|
||||||
|
@ -332,13 +333,10 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
self.send(dg)
|
self.send(dg)
|
||||||
|
|
||||||
def handleCreateAvatar(self, msgType, di):
|
def handleCreateAvatar(self, msgType, di):
|
||||||
if self.astronSupport:
|
if msgType == CLIENT_CREATE_AVATAR_RESP or msgType == CLIENT_SET_NAME_PATTERN_ANSWER or msgType == CLIENT_SET_WISHNAME_RESP:
|
||||||
self.handleMessageType(msgType, di)
|
self.avCreate.ns.nameShopHandler(msgType, di)
|
||||||
else:
|
else:
|
||||||
if msgType == CLIENT_CREATE_AVATAR_RESP or msgType == CLIENT_SET_NAME_PATTERN_ANSWER or msgType == CLIENT_SET_WISHNAME_RESP:
|
self.handleMessageType(msgType, di)
|
||||||
self.avCreate.ns.nameShopHandler(msgType, di)
|
|
||||||
else:
|
|
||||||
self.handleMessageType(msgType, di)
|
|
||||||
|
|
||||||
def __handleMakeAToon(self, avList, avPosition):
|
def __handleMakeAToon(self, avList, avPosition):
|
||||||
done = self.avCreate.getDoneStatus()
|
done = self.avCreate.getDoneStatus()
|
||||||
|
@ -372,11 +370,38 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
del self.newPotAv
|
del self.newPotAv
|
||||||
return
|
return
|
||||||
|
|
||||||
def handleAvatarResponseMsg(self, di):
|
if not config.GetBool('astron-support', True):
|
||||||
self.cleanupWaitingForDatabase()
|
def handleAvatarResponseMsg(self, di):
|
||||||
avatarId = di.getUint32()
|
self.cleanupWaitingForDatabase()
|
||||||
returnCode = di.getUint8()
|
avatarId = di.getUint32()
|
||||||
if returnCode == 0:
|
returnCode = di.getUint8()
|
||||||
|
if returnCode == 0:
|
||||||
|
dclass = self.dclassesByName['DistributedToon']
|
||||||
|
NametagGlobals.setMasterArrowsOn(0)
|
||||||
|
loader.beginBulkLoad('localAvatarPlayGame', OTPLocalizer.CREnteringToontown, 400, 1, TTLocalizer.TIP_GENERAL)
|
||||||
|
localAvatar = LocalToon.LocalToon(self)
|
||||||
|
localAvatar.dclass = dclass
|
||||||
|
base.localAvatar = localAvatar
|
||||||
|
__builtins__['localAvatar'] = base.localAvatar
|
||||||
|
NametagGlobals.setToon(base.localAvatar)
|
||||||
|
localAvatar.doId = avatarId
|
||||||
|
self.localAvatarDoId = avatarId
|
||||||
|
parentId = None
|
||||||
|
zoneId = None
|
||||||
|
localAvatar.setLocation(parentId, zoneId)
|
||||||
|
localAvatar.generateInit()
|
||||||
|
localAvatar.generate()
|
||||||
|
localAvatar.updateAllRequiredFields(dclass, di)
|
||||||
|
self.doId2do[avatarId] = localAvatar
|
||||||
|
localAvatar.initInterface()
|
||||||
|
self.sendGetFriendsListRequest()
|
||||||
|
self.loginFSM.request('playingGame')
|
||||||
|
else:
|
||||||
|
self.notify.error('Bad avatar: return code %d' % returnCode)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
def handleAvatarResponseMsg(self, avatarId, di):
|
||||||
|
self.cleanupWaitingForDatabase()
|
||||||
dclass = self.dclassesByName['DistributedToon']
|
dclass = self.dclassesByName['DistributedToon']
|
||||||
NametagGlobals.setMasterArrowsOn(0)
|
NametagGlobals.setMasterArrowsOn(0)
|
||||||
loader.beginBulkLoad('localAvatarPlayGame', OTPLocalizer.CREnteringToontown, 400, 1, TTLocalizer.TIP_GENERAL)
|
loader.beginBulkLoad('localAvatarPlayGame', OTPLocalizer.CREnteringToontown, 400, 1, TTLocalizer.TIP_GENERAL)
|
||||||
|
@ -392,14 +417,13 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
localAvatar.setLocation(parentId, zoneId)
|
localAvatar.setLocation(parentId, zoneId)
|
||||||
localAvatar.generateInit()
|
localAvatar.generateInit()
|
||||||
localAvatar.generate()
|
localAvatar.generate()
|
||||||
localAvatar.updateAllRequiredFields(dclass, di)
|
dclass.receiveUpdateBroadcastRequiredOwner(localAvatar, di)
|
||||||
|
localAvatar.announceGenerate()
|
||||||
|
localAvatar.postGenerateMessage()
|
||||||
self.doId2do[avatarId] = localAvatar
|
self.doId2do[avatarId] = localAvatar
|
||||||
localAvatar.initInterface()
|
localAvatar.initInterface()
|
||||||
self.sendGetFriendsListRequest()
|
self.sendGetFriendsListRequest()
|
||||||
self.loginFSM.request('playingGame')
|
self.loginFSM.request('playingGame')
|
||||||
else:
|
|
||||||
self.notify.error('Bad avatar: return code %d' % returnCode)
|
|
||||||
return
|
|
||||||
|
|
||||||
def getAvatarDetails(self, avatar, func, *args):
|
def getAvatarDetails(self, avatar, func, *args):
|
||||||
pad = ScratchPad()
|
pad = ScratchPad()
|
||||||
|
@ -826,11 +850,14 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
self.friendsListError = 0
|
self.friendsListError = 0
|
||||||
|
|
||||||
def sendGetFriendsListRequest(self):
|
def sendGetFriendsListRequest(self):
|
||||||
self.friendsMapPending = 1
|
if self.astronSupport:
|
||||||
self.friendsListError = 0
|
print 'sendGetFriendsListRequest TODO'
|
||||||
datagram = PyDatagram()
|
else:
|
||||||
datagram.addUint16(CLIENT_GET_FRIEND_LIST)
|
self.friendsMapPending = 1
|
||||||
self.send(datagram)
|
self.friendsListError = 0
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint16(CLIENT_GET_FRIEND_LIST)
|
||||||
|
self.send(datagram)
|
||||||
|
|
||||||
def cleanPetsFromFriendsMap(self):
|
def cleanPetsFromFriendsMap(self):
|
||||||
for objId, obj in self.friendsMap.items():
|
for objId, obj in self.friendsMap.items():
|
||||||
|
@ -1050,29 +1077,63 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sendQuietZoneRequest(self):
|
def sendQuietZoneRequest(self):
|
||||||
self.sendSetZoneMsg(OTPGlobals.QuietZone)
|
if self.astronSupport:
|
||||||
|
self.sendSetZoneMsg(OTPGlobals.QuietZone, [])
|
||||||
|
else:
|
||||||
|
self.sendSetZoneMsg(OTPGlobals.QuietZone)
|
||||||
|
|
||||||
def handleQuietZoneGenerateWithRequired(self, di):
|
if not config.GetBool('astron-support', True):
|
||||||
parentId = di.getUint32()
|
def handleQuietZoneGenerateWithRequired(self, di):
|
||||||
zoneId = di.getUint32()
|
parentId = di.getUint32()
|
||||||
classId = di.getUint16()
|
zoneId = di.getUint32()
|
||||||
doId = di.getUint32()
|
classId = di.getUint16()
|
||||||
dclass = self.dclassesByNumber[classId]
|
doId = di.getUint32()
|
||||||
if dclass.getClassDef().neverDisable:
|
dclass = self.dclassesByNumber[classId]
|
||||||
dclass.startGenerate()
|
if dclass.getClassDef().neverDisable:
|
||||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
dclass.startGenerate()
|
||||||
dclass.stopGenerate()
|
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
||||||
parentId = di.getUint32()
|
parentId = di.getUint32()
|
||||||
zoneId = di.getUint32()
|
zoneId = di.getUint32()
|
||||||
classId = di.getUint16()
|
classId = di.getUint16()
|
||||||
doId = di.getUint32()
|
doId = di.getUint32()
|
||||||
dclass = self.dclassesByNumber[classId]
|
dclass = self.dclassesByNumber[classId]
|
||||||
if dclass.getClassDef().neverDisable:
|
if dclass.getClassDef().neverDisable:
|
||||||
dclass.startGenerate()
|
dclass.startGenerate()
|
||||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||||
dclass.stopGenerate()
|
dclass.stopGenerate()
|
||||||
|
else:
|
||||||
|
def handleQuietZoneGenerateWithRequired(self, di):
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
if dclass.getClassDef().neverDisable:
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
dclass = self.dclassesByNumber[classId]
|
||||||
|
if dclass.getClassDef().neverDisable:
|
||||||
|
dclass.startGenerate()
|
||||||
|
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||||
|
dclass.stopGenerate()
|
||||||
|
|
||||||
|
def handleGenerateWithRequiredOtherOwner(self, di):
|
||||||
|
if self.loginFSM.getCurrentState().getName() == 'waitForSetAvatarResponse':
|
||||||
|
doId = di.getUint32()
|
||||||
|
parentId = di.getUint32()
|
||||||
|
zoneId = di.getUint32()
|
||||||
|
classId = di.getUint16()
|
||||||
|
self.handleAvatarResponseMsg(doId, di)
|
||||||
|
|
||||||
def handleQuietZoneUpdateField(self, di):
|
def handleQuietZoneUpdateField(self, di):
|
||||||
di2 = DatagramIterator(di)
|
di2 = DatagramIterator(di)
|
||||||
|
|
|
@ -8,3 +8,9 @@ class ToontownInternalRepository(OTPInternalRepository):
|
||||||
|
|
||||||
def __init__(self, baseChannel, serverId=None, dcFileNames=None, dcSuffix='AI', connectMethod=None, threadedNet=None):
|
def __init__(self, baseChannel, serverId=None, dcFileNames=None, dcSuffix='AI', connectMethod=None, threadedNet=None):
|
||||||
OTPInternalRepository.__init__(self, baseChannel, serverId, dcFileNames, dcSuffix, connectMethod, threadedNet)
|
OTPInternalRepository.__init__(self, baseChannel, serverId, dcFileNames, dcSuffix, connectMethod, threadedNet)
|
||||||
|
|
||||||
|
def _isValidPlayerLocation(self, parentId, zoneId):
|
||||||
|
if zoneId < 1000 and zoneId != -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libotp import *
|
||||||
import FriendsListPanel
|
import FriendsListPanel
|
||||||
import FriendInviter
|
import FriendInviter
|
||||||
import FriendInvitee
|
import FriendInvitee
|
||||||
|
|
|
@ -12,6 +12,7 @@ import QuietZoneState
|
||||||
import ZoneUtil
|
import ZoneUtil
|
||||||
from toontown.toonbase import TTLocalizer
|
from toontown.toonbase import TTLocalizer
|
||||||
from toontown.toon.Toon import teleportDebug
|
from toontown.toon.Toon import teleportDebug
|
||||||
|
from direct.interval.IntervalGlobal import *
|
||||||
|
|
||||||
class Hood(StateData.StateData):
|
class Hood(StateData.StateData):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('Hood')
|
notify = DirectNotifyGlobal.directNotify.newCategory('Hood')
|
||||||
|
@ -25,6 +26,7 @@ class Hood(StateData.StateData):
|
||||||
self.id = None
|
self.id = None
|
||||||
self.hoodId = hoodId
|
self.hoodId = hoodId
|
||||||
self.titleText = None
|
self.titleText = None
|
||||||
|
self.titleTextSeq = None
|
||||||
self.titleColor = (1, 1, 1, 1)
|
self.titleColor = (1, 1, 1, 1)
|
||||||
self.holidayStorageDNADict = {}
|
self.holidayStorageDNADict = {}
|
||||||
self.spookySkyFile = None
|
self.spookySkyFile = None
|
||||||
|
@ -56,19 +58,17 @@ class Hood(StateData.StateData):
|
||||||
self.titleText.setColor(Vec4(*self.titleColor))
|
self.titleText.setColor(Vec4(*self.titleColor))
|
||||||
self.titleText.clearColorScale()
|
self.titleText.clearColorScale()
|
||||||
self.titleText.setFg(self.titleColor)
|
self.titleText.setFg(self.titleColor)
|
||||||
seq = Task.sequence(Task.pause(0.1), Task.pause(6.0), self.titleText.lerpColorScale(Vec4(1.0, 1.0, 1.0, 1.0), Vec4(1.0, 1.0, 1.0, 0.0), 0.5), Task(self.hideTitleTextTask))
|
self.titleTextSeq = Sequence(Wait(0.1), Wait(6.0), self.titleText.colorScaleInterval(0.5, Vec4(1.0, 1.0, 1.0, 0.0), Vec4(1.0, 1.0, 1.0, 1.0)), Func(self.hideTitleText))
|
||||||
taskMgr.add(seq, 'titleText')
|
self.titleTextSeq.start()
|
||||||
|
|
||||||
def hideTitleTextTask(self, task):
|
|
||||||
self.titleText.hide()
|
|
||||||
return Task.done
|
|
||||||
|
|
||||||
def hideTitleText(self):
|
def hideTitleText(self):
|
||||||
if self.titleText:
|
if self.titleText:
|
||||||
self.titleText.hide()
|
self.titleText.hide()
|
||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
taskMgr.remove('titleText')
|
if self.titleTextSeq:
|
||||||
|
self.titleTextSeq.finish()
|
||||||
|
self.titleTextSeq = None
|
||||||
if self.titleText:
|
if self.titleText:
|
||||||
self.titleText.cleanup()
|
self.titleText.cleanup()
|
||||||
self.titleText = None
|
self.titleText = None
|
||||||
|
@ -194,7 +194,9 @@ class Hood(StateData.StateData):
|
||||||
self.spawnTitleText(requestStatus['zoneId'])
|
self.spawnTitleText(requestStatus['zoneId'])
|
||||||
|
|
||||||
def exitSafeZoneLoader(self):
|
def exitSafeZoneLoader(self):
|
||||||
taskMgr.remove('titleText')
|
if self.titleTextSeq:
|
||||||
|
self.titleTextSeq.finish()
|
||||||
|
self.titleTextSeq = None
|
||||||
self.hideTitleText()
|
self.hideTitleText()
|
||||||
self.ignore(self.loaderDoneEvent)
|
self.ignore(self.loaderDoneEvent)
|
||||||
self.loader.exit()
|
self.loader.exit()
|
||||||
|
|
|
@ -111,7 +111,7 @@ class Place(StateData.StateData, FriendsListManager.FriendsListManager):
|
||||||
|
|
||||||
def removeSetZoneCompleteCallback(self, token):
|
def removeSetZoneCompleteCallback(self, token):
|
||||||
if token is not None:
|
if token is not None:
|
||||||
if token in self._setZoneCompleteLocalCallbacks:
|
if any(token == x[1] for x in self._setZoneCompleteLocalCallbacks._callbacks):
|
||||||
self._setZoneCompleteLocalCallbacks.remove(token)
|
self._setZoneCompleteLocalCallbacks.remove(token)
|
||||||
qzsd = self._getQZState()
|
qzsd = self._getQZState()
|
||||||
if qzsd:
|
if qzsd:
|
||||||
|
|
|
@ -138,18 +138,32 @@ class QuietZoneState(StateData.StateData):
|
||||||
self._setZoneCompleteCallbacks.remove(token)
|
self._setZoneCompleteCallbacks.remove(token)
|
||||||
return
|
return
|
||||||
|
|
||||||
def handleWaitForQuietZoneResponse(self, msgType, di):
|
if not config.GetBool('astron-support', True):
|
||||||
self.notify.debug('handleWaitForQuietZoneResponse(' + 'msgType=' + str(msgType) + ', di=' + str(di) + ')')
|
def handleWaitForQuietZoneResponse(self, msgType, di):
|
||||||
if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
self.notify.debug('handleWaitForQuietZoneResponse(' + 'msgType=' + str(msgType) + ', di=' + str(di) + ')')
|
||||||
base.cr.handleQuietZoneGenerateWithRequired(di)
|
if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
||||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
base.cr.handleQuietZoneGenerateWithRequired(di)
|
||||||
base.cr.handleQuietZoneGenerateWithRequiredOther(di)
|
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
||||||
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
base.cr.handleQuietZoneGenerateWithRequiredOther(di)
|
||||||
base.cr.handleQuietZoneUpdateField(di)
|
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
||||||
elif msgType in QUIET_ZONE_IGNORED_LIST:
|
base.cr.handleQuietZoneUpdateField(di)
|
||||||
self.notify.debug('ignoring unwanted message from previous zone')
|
elif msgType in QUIET_ZONE_IGNORED_LIST:
|
||||||
else:
|
self.notify.debug('ignoring unwanted message from previous zone')
|
||||||
base.cr.handlePlayGame(msgType, di)
|
else:
|
||||||
|
base.cr.handlePlayGame(msgType, di)
|
||||||
|
else:
|
||||||
|
def handleWaitForQuietZoneResponse(self, msgType, di):
|
||||||
|
self.notify.debug('handleWaitForQuietZoneResponse(' + 'msgType=' + str(msgType) + ', di=' + str(di) + ')')
|
||||||
|
if msgType == CLIENT_ENTER_OBJECT_REQUIRED:
|
||||||
|
base.cr.handleQuietZoneGenerateWithRequired(di)
|
||||||
|
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED_OTHER:
|
||||||
|
base.cr.handleQuietZoneGenerateWithRequiredOther(di)
|
||||||
|
elif msgType == CLIENT_OBJECT_SET_FIELD:
|
||||||
|
base.cr.handleQuietZoneUpdateField(di)
|
||||||
|
elif msgType in QUIET_ZONE_IGNORED_LIST:
|
||||||
|
self.notify.debug('ignoring unwanted message from previous zone')
|
||||||
|
else:
|
||||||
|
base.cr.handlePlayGame(msgType, di)
|
||||||
|
|
||||||
def handleWaitForZoneRedirect(self, msgType, di):
|
def handleWaitForZoneRedirect(self, msgType, di):
|
||||||
self.notify.debug('handleWaitForZoneRedirect(' + 'msgType=' + str(msgType) + ', di=' + str(di) + ')')
|
self.notify.debug('handleWaitForZoneRedirect(' + 'msgType=' + str(msgType) + ', di=' + str(di) + ')')
|
||||||
|
|
|
@ -219,7 +219,7 @@ class AvatarChoice(DirectButton):
|
||||||
nameBalloon = loader.loadModel('phase_3/models/props/chatbox_input')
|
nameBalloon = loader.loadModel('phase_3/models/props/chatbox_input')
|
||||||
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'))
|
||||||
cancelButtonImage = (buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr'))
|
cancelButtonImage = (buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr'))
|
||||||
self.deleteWithPasswordFrame = DirectFrame(pos=(0.0, 0.1, 0.2), parent=aspect2dp, relief=None, image=DGG.getDefaultDialogGeom(), image_color=ToontownGlobals.GlobalDialogColor, image_scale=(1.4, 1.0, 1.0), text=deleteText, text_wordwrap=19, text_scale=TTLocalizer.ACdeleteWithPasswordFrame, text_pos=(0, 0.25), textMayChange=1, sortOrder=NO_FADE_SORT_INDEX)
|
self.deleteWithPasswordFrame = DirectFrame(pos=(0.0, 0.1, 0.2), parent=aspect2dp, relief=None, image=DGG.getDefaultDialogGeom(), image_color=ToontownGlobals.GlobalDialogColor, image_scale=(1.4, 1.0, 1.0), text=deleteText, text_wordwrap=19, text_scale=TTLocalizer.ACdeleteWithPasswordFrame, text_pos=(0, 0.25), textMayChange=1, sortOrder=DGG.NO_FADE_SORT_INDEX)
|
||||||
self.deleteWithPasswordFrame.hide()
|
self.deleteWithPasswordFrame.hide()
|
||||||
if self.deleteWithPassword:
|
if self.deleteWithPassword:
|
||||||
self.passwordLabel = DirectLabel(parent=self.deleteWithPasswordFrame, relief=None, pos=(-0.07, 0.0, -0.2), text=TTLocalizer.AvatarChoicePassword, text_scale=0.08, text_align=TextNode.ARight, textMayChange=0)
|
self.passwordLabel = DirectLabel(parent=self.deleteWithPasswordFrame, relief=None, pos=(-0.07, 0.0, -0.2), text=TTLocalizer.AvatarChoicePassword, text_scale=0.08, text_align=TextNode.ARight, textMayChange=0)
|
||||||
|
|
|
@ -202,7 +202,7 @@ class CalendarGuiDay(DirectFrame):
|
||||||
except e:
|
except e:
|
||||||
numItems = 0
|
numItems = 0
|
||||||
|
|
||||||
if numItems <= self.scrollList.numItemsVisible:
|
if numItems <= self.scrollList['numItemsVisible']:
|
||||||
self.scrollList.incButton.hide()
|
self.scrollList.incButton.hide()
|
||||||
self.scrollList.decButton.hide()
|
self.scrollList.decButton.hide()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -128,14 +128,12 @@ class OptionsTabPage(DirectFrame):
|
||||||
'DirectX8': Settings.DX8}
|
'DirectX8': Settings.DX8}
|
||||||
|
|
||||||
def __init__(self, parent = aspect2d):
|
def __init__(self, parent = aspect2d):
|
||||||
self.parent = parent
|
|
||||||
self.currentSizeIndex = None
|
self.currentSizeIndex = None
|
||||||
DirectFrame.__init__(self, parent=self.parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0))
|
DirectFrame.__init__(self, parent=parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0))
|
||||||
self.load()
|
self.load()
|
||||||
return
|
return
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
self.parent = None
|
|
||||||
DirectFrame.destroy(self)
|
DirectFrame.destroy(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -473,13 +471,11 @@ class CodesTabPage(DirectFrame):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('CodesTabPage')
|
notify = DirectNotifyGlobal.directNotify.newCategory('CodesTabPage')
|
||||||
|
|
||||||
def __init__(self, parent = aspect2d):
|
def __init__(self, parent = aspect2d):
|
||||||
self.parent = parent
|
DirectFrame.__init__(self, parent=parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0))
|
||||||
DirectFrame.__init__(self, parent=self.parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0))
|
|
||||||
self.load()
|
self.load()
|
||||||
return
|
return
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
self.parent = None
|
|
||||||
DirectFrame.destroy(self)
|
DirectFrame.destroy(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libotp import *
|
||||||
from toontown.toonbase import ToontownGlobals
|
from toontown.toonbase import ToontownGlobals
|
||||||
from direct.showbase import DirectObject
|
from direct.showbase import DirectObject
|
||||||
from direct.fsm import StateData
|
from direct.fsm import StateData
|
||||||
|
|
|
@ -410,7 +410,7 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
|
||||||
|
|
||||||
def announceZoneChange(self, newZoneId, oldZoneId):
|
def announceZoneChange(self, newZoneId, oldZoneId):
|
||||||
from toontown.pets import PetObserve
|
from toontown.pets import PetObserve
|
||||||
self.air.welcomeValleyManager.toonSetZone(self.doId, newZoneId)
|
#self.air.welcomeValleyManager.toonSetZone(self.doId, newZoneId) # TODO
|
||||||
broadcastZones = [oldZoneId, newZoneId]
|
broadcastZones = [oldZoneId, newZoneId]
|
||||||
if self.isInEstate() or self.wasInEstate():
|
if self.isInEstate() or self.wasInEstate():
|
||||||
broadcastZones = union(broadcastZones, self.estateZones)
|
broadcastZones = union(broadcastZones, self.estateZones)
|
||||||
|
|
|
@ -12,6 +12,7 @@ from direct.showbase import PythonUtil
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.gui import DirectGuiGlobals
|
from direct.gui import DirectGuiGlobals
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libotp import *
|
||||||
from otp.avatar import LocalAvatar
|
from otp.avatar import LocalAvatar
|
||||||
from otp.login import LeaveToPayDialog
|
from otp.login import LeaveToPayDialog
|
||||||
from otp.avatar import PositionExaminer
|
from otp.avatar import PositionExaminer
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
from libtoontown import *
|
||||||
from direct.directnotify.DirectNotifyGlobal import *
|
from direct.directnotify.DirectNotifyGlobal import *
|
||||||
from direct.showbase import Loader
|
from direct.showbase import Loader
|
||||||
from toontown.toontowngui import ToontownLoadingScreen
|
from toontown.toontowngui import ToontownLoadingScreen
|
||||||
|
|
|
@ -3,3 +3,20 @@ from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
||||||
|
|
||||||
class DistributedInGameNewsMgrAI(DistributedObjectAI):
|
class DistributedInGameNewsMgrAI(DistributedObjectAI):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedInGameNewsMgrAI')
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedInGameNewsMgrAI')
|
||||||
|
|
||||||
|
def __init__(self, air):
|
||||||
|
DistributedObjectAI.__init__(self, air)
|
||||||
|
self.latestIssueStr = ''
|
||||||
|
|
||||||
|
def setLatestIssueStr(self, latestIssueStr):
|
||||||
|
self.latestIssueStr = latestIssueStr
|
||||||
|
|
||||||
|
def d_setLatestIssueStr(self, latestIssueStr):
|
||||||
|
self.sendUpdate('setLatestIssueStr', [latestIssueStr])
|
||||||
|
|
||||||
|
def b_setLatestIssueStr(self, latestIssueStr):
|
||||||
|
self.setLatestIssueStr(latestIssueStr)
|
||||||
|
self.d_setLatestIssueStr(latestIssueStr)
|
||||||
|
|
||||||
|
def getLatestIssueStr(self):
|
||||||
|
return self.latestIssueStr
|
||||||
|
|
Loading…
Reference in a new issue