mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-13 18:17:49 -04:00
Initial Commit of CyanWorlds.com Engine Open Source Client/Plugin
This commit is contained in:
9688
MOULOpenSourceClientPlugin/Plasma20/Scripts/Python/plasma/Plasma.py
Normal file
9688
MOULOpenSourceClientPlugin/Plasma20/Scripts/Python/plasma/Plasma.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,256 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
class Enum:
|
||||
"""Enum base class"""
|
||||
def __init__(self):
|
||||
"""None"""
|
||||
pass
|
||||
|
||||
class EnumValue:
|
||||
"""A basic enumeration value"""
|
||||
def __init__(self):
|
||||
"""None"""
|
||||
pass
|
||||
|
||||
class PtAIMsgType:
|
||||
"""(none)"""
|
||||
kUnknown = 0
|
||||
kBrainCreated = 1
|
||||
kArrivedAtGoal = 2
|
||||
|
||||
class PtAccountUpdateType:
|
||||
"""(none)"""
|
||||
kCreatePlayer = 1
|
||||
kDeletePlayer = 2
|
||||
kUpgradePlayer = 3
|
||||
kActivePlayer = 4
|
||||
kChangePassword = 5
|
||||
|
||||
class PtBehaviorTypes:
|
||||
"""(none)"""
|
||||
kBehaviorTypeFall = 8192
|
||||
kBehaviorTypeIdle = 32
|
||||
kBehaviorTypeWalkingJump = 2
|
||||
kBehaviorTypeSidestepRight = 4096
|
||||
kBehaviorTypeRunningJump = 4
|
||||
kBehaviorTypeLinkIn = 65536
|
||||
kBehaviorTypeAnyJump = 7
|
||||
kBehaviorTypeRunningImpact = 8
|
||||
kBehaviorTypeWalk = 64
|
||||
kBehaviorTypeRun = 128
|
||||
kBehaviorTypeTurnRight = 1024
|
||||
kBehaviorTypeWalkBack = 256
|
||||
kBehaviorTypeMovingTurnLeft = 16384
|
||||
kBehaviorTypeGroundImpact = 16
|
||||
kBehaviorTypeStandingJump = 1
|
||||
kBehaviorTypeTurnLeft = 512
|
||||
kBehaviorTypeAnyImpact = 24
|
||||
kBehaviorTypeSidestepLeft = 2048
|
||||
kBehaviorTypeMovingTurnRight = 32768
|
||||
kBehaviorTypeLinkOut = 131072
|
||||
|
||||
class PtBookEventTypes:
|
||||
"""(none)"""
|
||||
kNotifyImageLink = 0
|
||||
kNotifyShow = 1
|
||||
kNotifyHide = 2
|
||||
kNotifyNextPage = 3
|
||||
kNotifyPreviousPage = 4
|
||||
kNotifyCheckUnchecked = 5
|
||||
kNotifyClose = 6
|
||||
|
||||
class PtBrainModes:
|
||||
"""(none)"""
|
||||
kGeneric = 0
|
||||
kLadder = 1
|
||||
kSit = 2
|
||||
kEmote = 3
|
||||
kAFK = 4
|
||||
kNonGeneric = 5
|
||||
|
||||
class PtButtonNotifyTypes:
|
||||
"""(none)"""
|
||||
kNotifyOnUp = 0
|
||||
kNotifyOnDown = 1
|
||||
kNotifyOnUpAndDown = 2
|
||||
|
||||
class PtCCRPetitionType:
|
||||
"""(none)"""
|
||||
kGeneralHelp = 0
|
||||
kBug = 1
|
||||
kFeedback = 2
|
||||
kExploit = 3
|
||||
kHarass = 4
|
||||
kStuck = 5
|
||||
kTechnical = 6
|
||||
|
||||
class PtEventType:
|
||||
"""(none)"""
|
||||
kCollision = 1
|
||||
kPicked = 2
|
||||
kControlKey = 3
|
||||
kVariable = 4
|
||||
kFacing = 5
|
||||
kContained = 6
|
||||
kActivate = 7
|
||||
kCallback = 8
|
||||
kResponderState = 9
|
||||
kMultiStage = 10
|
||||
kSpawned = 11
|
||||
kClickDrag = 12
|
||||
kOfferLinkingBook = 14
|
||||
kBook = 15
|
||||
|
||||
class PtGUIMultiLineDirection:
|
||||
"""(none)"""
|
||||
kLineStart = 1
|
||||
kLineEnd = 2
|
||||
kBufferStart = 3
|
||||
kBufferEnd = 4
|
||||
kOneBack = 5
|
||||
kOneForward = 6
|
||||
kOneWordBack = 7
|
||||
kOneWordForward = 8
|
||||
kOneLineUp = 9
|
||||
kOneLineDown = 10
|
||||
kPageUp = 11
|
||||
kPageDown = 12
|
||||
|
||||
class PtGameScoreTypes:
|
||||
"""(none)"""
|
||||
kFixed = 0
|
||||
kAccumulative = 1
|
||||
kAccumAllowNegative = 2
|
||||
|
||||
class PtJustify:
|
||||
"""(none)"""
|
||||
kLeftJustify = 0
|
||||
kCenter = 1
|
||||
kRightJustify = 2
|
||||
|
||||
class PtLOSObjectType:
|
||||
"""(none)"""
|
||||
kClickables = 0
|
||||
kCameraBlockers = 1
|
||||
kCustom = 2
|
||||
kShootable = 3
|
||||
|
||||
class PtLOSReportType:
|
||||
"""(none)"""
|
||||
kReportHit = 0
|
||||
kReportMiss = 1
|
||||
kReportHitOrMiss = 2
|
||||
|
||||
class PtLanguage:
|
||||
"""(none)"""
|
||||
kEnglish = 0
|
||||
kFrench = 1
|
||||
kGerman = 2
|
||||
kSpanish = 3
|
||||
kItalian = 4
|
||||
kJapanese = 5
|
||||
kNumLanguages = 6
|
||||
|
||||
class PtMarkerMsgType:
|
||||
"""(none)"""
|
||||
kMarkerCaptured = 0
|
||||
|
||||
class PtMovieEventReason:
|
||||
"""(none)"""
|
||||
kMovieDone = 0
|
||||
|
||||
class PtMultiStageEventType:
|
||||
"""(none)"""
|
||||
kEnterStage = 1
|
||||
kBeginingOfLoop = 2
|
||||
kAdvanceNextStage = 3
|
||||
kRegressPrevStage = 4
|
||||
|
||||
class PtNotificationType:
|
||||
"""(none)"""
|
||||
kActivator = 0
|
||||
kVarNotification = 1
|
||||
kNotifySelf = 2
|
||||
kResponderFF = 3
|
||||
kResponderChangeState = 4
|
||||
|
||||
class PtNotifyDataType:
|
||||
"""(none)"""
|
||||
kNumber = 1
|
||||
kKey = 2
|
||||
|
||||
class PtSDLReadWriteOptions:
|
||||
"""(none)"""
|
||||
kTimeStampOnRead = 16
|
||||
kDirtyOnly = 1
|
||||
kSkipNotificationInfo = 2
|
||||
kBroadcast = 4
|
||||
|
||||
class PtSDLVarType:
|
||||
"""(none)"""
|
||||
kInt = 0
|
||||
kFloat = 1
|
||||
kBool = 2
|
||||
kString32 = 3
|
||||
kKey = 4
|
||||
kStateDescriptor = 5
|
||||
kCreatable = 6
|
||||
kDouble = 7
|
||||
kTime = 8
|
||||
kByte = 9
|
||||
kShort = 10
|
||||
kVector3 = 50
|
||||
kPoint3 = 51
|
||||
kRGB = 52
|
||||
kRGBA = 53
|
||||
kQuaternion = 54
|
||||
kNone = -1
|
||||
|
||||
class PtScoreRankGroups:
|
||||
"""(none)"""
|
||||
kIndividual = 0
|
||||
kNeighborhood = 1
|
||||
|
||||
class PtScoreTimePeriods:
|
||||
"""(none)"""
|
||||
kOverall = 0
|
||||
kYear = 1
|
||||
kMonth = 2
|
||||
kDay = 3
|
||||
|
||||
class PtStatusLogFlags:
|
||||
"""(none)"""
|
||||
kDebugOutput = 32
|
||||
kFilledBackground = 1
|
||||
kAppendToLast = 2
|
||||
kDontWriteFile = 4
|
||||
kDeleteForMe = 8
|
||||
kTimestamp = 64
|
||||
kStdout = 128
|
||||
kTimeInSeconds = 256
|
||||
kAlignToTop = 16
|
||||
kTimeAsDouble = 512
|
||||
|
@ -0,0 +1,108 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
"""
|
||||
This module is the constants for the controlKeys that are is a parameter in the OnKeyEvent callback
|
||||
"""
|
||||
|
||||
# OnControlKeyEvent controlKey types
|
||||
kKeyAction=0
|
||||
kKeyActionMouse=1
|
||||
kKeyJump=2
|
||||
kKeyMoveForward=3
|
||||
kKeyMoveBackward=4
|
||||
kKeyStrafeLeft=5
|
||||
kKeyStrafeRight=6
|
||||
kKeyMoveUp=7
|
||||
kKeyMoveDown=8
|
||||
kKeyRotateLeft=9
|
||||
kKeyRotateRight=10
|
||||
kKeyRotateUp=11
|
||||
kKeyRotateDown=12
|
||||
kKeyModFast=13
|
||||
kKeyAlwaysRun=14
|
||||
kKeyEquip=15
|
||||
kKeyDrop=16
|
||||
kKeyTurnTo=17
|
||||
kKeyDriveMode=18
|
||||
kKeyCamMoveForward=19
|
||||
kKeyCamMoveBackward=20
|
||||
kKeyCamMoveUp=21
|
||||
kKeyCamMoveDown=22
|
||||
kKeyCamMoveLeft=23
|
||||
kKeyCamMoveRight=24
|
||||
kKeyCamPanUp=25
|
||||
kKeyCamPanDown=26
|
||||
kKeyCamPanLeft=27
|
||||
kKeyCamPanRight=28
|
||||
kKeyCamMoveFast=29
|
||||
kKeyCamRotateRight=30
|
||||
kKeyCamRotateLeft=31
|
||||
kKeyCamRotateUp=32
|
||||
kKeyCamRotateDown=33
|
||||
kKeyCamRecenter=34
|
||||
kKeyCamSpeedUp=35
|
||||
kKeyCamSpeedDown=36
|
||||
kKeyCamZoomIn=37
|
||||
kKeyCamZoomOut=38
|
||||
kKeyCamConsoleMode=39
|
||||
kKeyConsoleCommand=40
|
||||
kKeyTogglePhysical=41
|
||||
kKeyPick=42
|
||||
# axis controls
|
||||
kKeyMove=43
|
||||
kKeyTurn=44
|
||||
kKeyMouseX=45
|
||||
kKeyMouseY=46
|
||||
# special controls
|
||||
kKeySetCursorUp=47
|
||||
kKeySetCursorDown=48
|
||||
kKeySetCursorRight=49
|
||||
kKeySetCursorLeft=50
|
||||
kKeySetCursorPoised=51
|
||||
kKeySetCursorHidden=52
|
||||
kKeySetCursorUnhidden=53
|
||||
kKeySetCursorArrow=54
|
||||
kKeySearchForPickable=55
|
||||
kKeyIncreaseMicVol=56
|
||||
kKeyDecreaseMicVol=57
|
||||
kKeyPushToTalk=58
|
||||
kKeySetThirdPersonMode=59
|
||||
kKeySetFirstPersonMode=60
|
||||
kKeySetWalkMode=61
|
||||
kKeySetFreeLook=62
|
||||
kKeySetConsoleSingle=63
|
||||
kKeySetConsoleHidden=64
|
||||
# Inventory controls
|
||||
dead__kKeySetEquipedState=65
|
||||
dead__kKeyScrollUpList=66
|
||||
dead__kKeyScrollDownList=67
|
||||
dead__kKeySetInventoryActive=68
|
||||
dead__kKeySetInventoryDisActive=69
|
||||
dead__kKeyRemoveInventoryObject=70
|
||||
dead__kKeyEnableObject=71
|
||||
# Avatar emote controls
|
||||
kKeyEmote=72
|
||||
kKeyExitMode=73
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,159 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
class PtBlueSpiralMsgTypes:
|
||||
"""(none)"""
|
||||
kBlueSpiralGameStarted = 8
|
||||
kBlueSpiralClothOrder = 4
|
||||
kBlueSpiralSuccessfulHit = 5
|
||||
kBlueSpiralGameWon = 6
|
||||
kBlueSpiralGameOver = 7
|
||||
|
||||
class PtClimbingWallMsgTypes:
|
||||
"""(none)"""
|
||||
kClimbingWallNumBlockersChanged = 4
|
||||
kClimbingWallReadyMsg = 5
|
||||
kClimbingWallBlockersChanged = 6
|
||||
kClimbingWallPlayerEntered = 7
|
||||
kClimbingWallSuitMachineLocked = 8
|
||||
kClimbingWallGameOver = 9
|
||||
|
||||
class PtClimbingWallReadyTypes:
|
||||
"""(none)"""
|
||||
kClimbingWallReadyNumBlockers = 0
|
||||
kClimbingWallReadyBlockers = 1
|
||||
|
||||
class PtGameCliInviteErrors:
|
||||
"""(none)"""
|
||||
kGameInviteSuccess = 0
|
||||
kGameInviteErrNotOwner = 1
|
||||
kGameInviteErrAlreadyInvited = 2
|
||||
kGameInviteErrAlreadyJoined = 3
|
||||
kGameInviteErrGameStarted = 4
|
||||
kGameInviteErrGameOver = 5
|
||||
kGameInviteErrGameFull = 6
|
||||
kGameInviteErrNoJoin = 7
|
||||
|
||||
class PtGameCliMsgTypes:
|
||||
"""(none)"""
|
||||
kGameCliPlayerJoinedMsg = 0
|
||||
kGameCliPlayerLeftMsg = 1
|
||||
kGameCliInviteFailedMsg = 2
|
||||
kGameCliOwnerChangeMsg = 3
|
||||
kGameCliTTTMsg = 4
|
||||
kGameCliHeekMsg = 5
|
||||
kGameCliMarkerMsg = 6
|
||||
kGameCliBlueSpiralMsg = 7
|
||||
kGameCliClimbingWallMsg = 8
|
||||
kGameCliVarSyncMsg = 9
|
||||
|
||||
class PtGameMgrMsgTypes:
|
||||
"""(none)"""
|
||||
kGameMgrInviteReceivedMsg = 1
|
||||
kGameMgrInviteRevokedMsg = 2
|
||||
|
||||
class PtHeekCountdownStates:
|
||||
"""(none)"""
|
||||
kHeekCountdownStart = 0
|
||||
kHeekCountdownStop = 1
|
||||
kHeekCountdownIdle = 2
|
||||
|
||||
class PtHeekGameChoice:
|
||||
"""(none)"""
|
||||
kHeekGameChoiceRock = 0
|
||||
kHeekGameChoicePaper = 1
|
||||
kHeekGameChoiceScissors = 2
|
||||
|
||||
class PtHeekGameSeq:
|
||||
"""(none)"""
|
||||
kHeekGameSeqCountdown = 0
|
||||
kHeekGameSeqChoiceAnim = 1
|
||||
kHeekGameSeqGameWinAnim = 2
|
||||
|
||||
class PtHeekLightStates:
|
||||
"""(none)"""
|
||||
kHeekLightOn = 0
|
||||
kHeekLightOff = 1
|
||||
kHeekLightFlash = 2
|
||||
|
||||
class PtHeekMsgTypes:
|
||||
"""(none)"""
|
||||
kHeekPlayGame = 4
|
||||
kHeekGoodbye = 5
|
||||
kHeekWelcome = 6
|
||||
kHeekDrop = 7
|
||||
kHeekSetup = 8
|
||||
kHeekLightState = 9
|
||||
kHeekInterfaceState = 10
|
||||
kHeekCountdownState = 11
|
||||
kHeekWinLose = 12
|
||||
kHeekGameWin = 13
|
||||
kHeekPointUpdate = 14
|
||||
|
||||
class PtMarkerGameTypes:
|
||||
"""(none)"""
|
||||
kMarkerGameQuest = 0
|
||||
kMarkerGameCGZ = 1
|
||||
kMarkerGameCapture = 2
|
||||
kMarkerGameCaptureAndHold = 3
|
||||
|
||||
class PtMarkerMsgTypes:
|
||||
"""(none)"""
|
||||
kMarkerTemplateCreated = 4
|
||||
kMarkerTeamAssigned = 5
|
||||
kMarkerGameType = 6
|
||||
kMarkerGameStarted = 7
|
||||
kMarkerGamePaused = 8
|
||||
kMarkerGameReset = 9
|
||||
kMarkerGameOver = 10
|
||||
kMarkerGameNameChanged = 11
|
||||
kMarkerTimeLimitChanged = 12
|
||||
kMarkerGameDeleted = 13
|
||||
kMarkerMarkerAdded = 14
|
||||
kMarkerMarkerDeleted = 15
|
||||
kMarkerMarkerNameChanged = 16
|
||||
kMarkerMarkerCaptured = 17
|
||||
|
||||
class PtTTTGameResult:
|
||||
"""(none)"""
|
||||
kTTTGameResultWinner = 0
|
||||
kTTTGameResultTied = 1
|
||||
kTTTGameResultGave = 2
|
||||
kTTTGameResultError = 3
|
||||
|
||||
class PtTTTMsgTypes:
|
||||
"""(none)"""
|
||||
kTTTGameStarted = 4
|
||||
kTTTGameOver = 5
|
||||
kTTTMoveMade = 6
|
||||
|
||||
class PtVarSyncMsgTypes:
|
||||
"""(none)"""
|
||||
kVarSyncNumericVarCreated = 8
|
||||
kVarSyncStringVarChanged = 4
|
||||
kVarSyncNumericVarChanged = 5
|
||||
kVarSyncAllVarsSent = 6
|
||||
kVarSyncStringVarCreated = 7
|
||||
|
@ -0,0 +1,469 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
"""
|
||||
This module is contains the datatypes and constants for
|
||||
interfacing with the KI subsytem
|
||||
"""
|
||||
|
||||
# OnKIMsg and PtSendKIMessage command types
|
||||
kEnterChatMode=1 # start chat mode on KI, 'value' doesn't matter
|
||||
kSetChatFadeDelay=2 # set the chat fade time, 'value' is the delay in seconds
|
||||
kSetTextChatAdminMode=3 # set self to be admin mode, 'value' is 1 to go into Admin mode, 0 remove
|
||||
kDisableKIandBB=4 # disable the KI and the blackbar, 'value' doesn't matter
|
||||
kEnableKIandBB=5 # enable the KI and the blackbar, 'value' doesn't matter
|
||||
kYesNoDialog=6 # request that the KI put up a yes/no dialog for someone else
|
||||
kAddPlayerDevice=7 # add player interactive device to list of devices, 'value' is device name
|
||||
kRemovePlayerDevice=8 # remove player interactive device from list, 'value' is device name
|
||||
kUpgradeKILevel=9 # upgrade new level of KI (if already at that level, nevermind), 'value' is the new level
|
||||
kDowngradeKILevel=10 # remove (drop) the KI level (if not at that level, nevermind), 'value' is the level to remove
|
||||
kRateIt=11 # request for the KI to ask the user to Rate something
|
||||
kSetPrivateChatChannel=12 # sets the private chat channel to number, for private rooms
|
||||
kUnsetPrivateChatChannel=13 # undoes the the private chat channel.
|
||||
kStartBookAlert=14 # start the book alert
|
||||
kMiniBigKIToggle=15 # shortcut to toggling the miniKI/bigKI
|
||||
kKIPutAway=16 # shortcut to hiding all of the KI
|
||||
kChatAreaPageUp=17 # shortcut to paging up the chat area
|
||||
kChatAreaPageDown=18 # shortcut to paging down the chat area
|
||||
kChatAreaGoToBegin=19 # shortcut to going to the beginning of the chat area
|
||||
kChatAreaGoToEnd=20 # shortcut to going to the end of the chat area
|
||||
kKITakePicture=21 # shortcut to taking a picture in the KI
|
||||
kKICreateJournalNote=22 # shortcut to creating a journal note in the KI
|
||||
kKIToggleFade=23 # shortcut to toggle fade mode in the miniKI (only if miniKI only)
|
||||
kKIToggleFadeEnable=24 # shortcut to toggling the enable flag for fading chat
|
||||
kKIChatStatusMsg=25 # display a status message (net propagated) in the chat window
|
||||
kKILocalChatStatusMsg=26 # display a status message (local only) in the chat window
|
||||
kKIUpSizeFont=27 # up size the font in the KI (chatarea)
|
||||
kKIDownSizeFont=28 # down size the font in the KI (chatarea)
|
||||
kKIOpenYeehsaBook=29 # open the Yeehsa book, if not already open
|
||||
kKIOpenKI=30 # open the KI a little at a time
|
||||
kKIShowCCRHelp=31 # show the CCR help dialog
|
||||
kKICreateMarker=32 # create a marker
|
||||
kKICreateMarkerFolder=33 # create a marker folder(node) game in the current Age's journal folder
|
||||
kKILocalChatErrorMsg=34 # display an error message (local only) in the chat window
|
||||
kKIPhasedAllOn=35 # turn on all the phased KI functionality
|
||||
kKIPhasedAllOff=36 # turn off all the phased KI functionality
|
||||
kKIOKDialog=37 # display an OK dialog box (localized)
|
||||
kDisableYeeshaBook=38 # don't allow linking with the Yeesha book (gameplay)
|
||||
kEnableYeeshaBook=39 # re-allow linking with the Yeesha book
|
||||
kQuitDialog=40 # put up Quit dialog
|
||||
kTempDisableKIandBB=41 # temp disable KI and blackbar (done by av system)
|
||||
kTempEnableKIandBB=42 # temp re-enable the KI and blackbar (done by av system)
|
||||
kDisableEntireYeeshaBook=43 # disable the entire Yeeshabook, not for gameplay, but prevent linking
|
||||
kEnableEntireYeeshaBook=44 # enable the entire Yeeshabook, not for gameplay
|
||||
kKIOKDialogNoQuit=45 # display OK dialog in the KI without quiting afterwards
|
||||
kGZUpdated=46 # the GZ game was updated
|
||||
kGZInRange=47 # a GZ marker is in range
|
||||
kGZOutRange=48 # GZ markers are out of range
|
||||
kUpgradeKIMarkerLevel=49 # upgrade the KI marker level
|
||||
kKIShowMiniKI=50 # force the miniKI up
|
||||
kGZFlashUpdate=51 # flash update to the GZ display on the miniKI (without saving)
|
||||
kStartJournalAlert = 52 # start the journal alert
|
||||
kAddJournalBook = 53 # add the journal book to the BB
|
||||
kRemoveJournalBook = 54 # remove the journal book from the BB
|
||||
kKIOpenJournalBook = 55 # show the journal book
|
||||
kMGStartCGZGame = 56 # Start CGZ Marker Game
|
||||
kMGStopCGZGame = 57 # Stop CGZ Marker Game
|
||||
kKICreateMarkerNode = 58 #Creates the marker game vault Node
|
||||
kStartKIAlert = 59 # start the KI alert
|
||||
kUpdatePelletScore = 60 # Updates the pellet score
|
||||
kFriendInviteSent = 61 # Result of friend invite received
|
||||
kRegisterImager = 62 # Imagers send to register themselves with the KI
|
||||
|
||||
# kUpgradeKILevel and kDowngradeKILevel levels
|
||||
kNanoKI=0
|
||||
kMicroKI=1
|
||||
kNormalKI=2
|
||||
kLowestKILevel = kNanoKI
|
||||
kHighestKILevel = kNormalKI
|
||||
|
||||
# Upgrade levels for the KI marker
|
||||
kKIMarkerNotUpgraded = 0
|
||||
kKIMarkerFirstLevel = 1 # can play marker tag, but no GPS, can play first set of GZMarkers
|
||||
kKIMarkerSecondLevel = 2 # can get to back room in GreatZero and play second set of GZmarkers
|
||||
kKIMarkerNormalLevel = 3 # complete both GZmarker trials - has GPS
|
||||
|
||||
# GZ Marker and Calibration GZ Marker status
|
||||
kGZMarkerInactive = "0"
|
||||
kGZMarkerAvailable = "1"
|
||||
kGZMarkerCaptured = "2"
|
||||
kGZMarkerUploaded = "3"
|
||||
|
||||
# Calibration GZ Marker Games
|
||||
kCGZMarkerInactive = "0"
|
||||
kCGZMarkerAvailable = "1"
|
||||
kCGZMarkerCaptured = "2"
|
||||
kCGZMarkerUploaded = "3"
|
||||
gCGZAllStates = [ kCGZMarkerInactive, kCGZMarkerAvailable, kCGZMarkerCaptured, kCGZMarkerUploaded ]
|
||||
kCGZFirstGame = 0
|
||||
kCGZFinalGame = 3
|
||||
kCGZToransGame = 0
|
||||
kCGZHSpansGame = 1
|
||||
kCGZVSpansGame = 2
|
||||
kCGZActivateGZ = 3
|
||||
|
||||
|
||||
# -- chronicle names and types
|
||||
kChronicleKILevel = "PlayerKILevel"
|
||||
kChronicleKILevelType = 2
|
||||
kChronicleCensorLevel = "PlayerCensorLevel"
|
||||
kChronicleCensorLevelType = 2
|
||||
kChronicleKIMarkerLevel = "KIMarkerLevel"
|
||||
kChronicleKIMarkerLevelType = 2
|
||||
kChronicleGZGames = "GZGames"
|
||||
kChronicleGZGamesType = 1
|
||||
kChronicleGZMarkersAquired = "GZMarkersAquired"
|
||||
kChronicleGZMarkersAquiredType = 1
|
||||
kChronicleCalGZMarkersAquired = "CalGZMarkers"
|
||||
kChronicleCalGZMarkersAquiredType = 1
|
||||
|
||||
|
||||
def PtDetermineKILevel():
|
||||
"Get the KILevel"
|
||||
# assume that they have none...
|
||||
import Plasma
|
||||
import string
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleKILevel)
|
||||
if type(entry) != type(None):
|
||||
level = string.atoi(entry.chronicleGetValue())
|
||||
# make sure it is a valid level
|
||||
if level >= kLowestKILevel and level <= kHighestKILevel:
|
||||
return level
|
||||
# if couldn't be determine... just assume lowest form
|
||||
return kNanoKI
|
||||
|
||||
def PtDetermineCensorLevel():
|
||||
"Get the KILevel"
|
||||
# assume that they have none...
|
||||
import Plasma
|
||||
import string
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleCensorLevel)
|
||||
if type(entry) != type(None):
|
||||
level = string.atoi(entry.chronicleGetValue())
|
||||
return level
|
||||
# if couldn't be determine... just assume lowest form
|
||||
return 0
|
||||
|
||||
def PtDetermineKIMarkerLevel():
|
||||
"Get the KIMarkerLevel"
|
||||
# assume that they have none...
|
||||
import Plasma
|
||||
import string
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleKIMarkerLevel)
|
||||
if type(entry) != type(None):
|
||||
level = string.atoi(entry.chronicleGetValue())
|
||||
return level
|
||||
# if couldn't be determine... just assume lowest form
|
||||
return kKIMarkerNotUpgraded
|
||||
|
||||
def PtGetCGZGameState(whichGame):
|
||||
"Get the CGZ Game level"
|
||||
# assume that they have none...
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
if whichGame >= kCGZFirstGame and whichGame <= kCGZFinalGame:
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleCalGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
allStates = entry.chronicleGetValue()
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtGetCGZGameLevel current chronicle is %s"%(allStates),level=PlasmaTypes.kDebugDumpLevel)
|
||||
state = kCGZMarkerInactive # assume inactive
|
||||
try:
|
||||
state = allStates[whichGame]
|
||||
except LookupError:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtGetCGZGameLevel - CGZ marker game not there? chron=%s"%(allStates),level=PlasmaTypes.kErrorLevel)
|
||||
pass
|
||||
return state
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtGetCGZGameLevel no chronicle yet",level=PlasmaTypes.kDebugDumpLevel)
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtGetCGZGameLevel - invalid CGZ game of %d"%(whichGame),level=PlasmaTypes.kErrorLevel)
|
||||
pass
|
||||
# if couldn't be determine... just assume lowest form
|
||||
return kCGZMarkerInactive
|
||||
|
||||
def PtSetCGZGameState(whichGame,state):
|
||||
"Get the CGZ Game level"
|
||||
# assume that they have none...
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
if whichGame >= kCGZFirstGame and whichGame <= kCGZFinalGame:
|
||||
if type(state) == type("") and state in gCGZAllStates:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtSetCGZGameLevel - setting game %d to %s"%(whichGame,state),level=PlasmaTypes.kDebugDumpLevel)
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleCalGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
allStates = entry.chronicleGetValue()
|
||||
newStates = ""
|
||||
for idx in range(kCGZFinalGame+1):
|
||||
if idx == whichGame:
|
||||
newStates += state
|
||||
else:
|
||||
try:
|
||||
newStates += allStates[idx]
|
||||
except LookupError:
|
||||
newStates += kCGZMarkerInactive
|
||||
# make sure we get whatever is beyond this
|
||||
newStates += allStates[kCGZFinalGame+1:]
|
||||
entry.chronicleSetValue(newStates)
|
||||
entry.save()
|
||||
else:
|
||||
# create a new one
|
||||
newStates = ""
|
||||
for idx in range(kCGZFinalGame+1):
|
||||
if idx == whichGame:
|
||||
newStates += state
|
||||
else:
|
||||
newStates += kCGZMarkerInactive
|
||||
vault.addChronicleEntry(kChronicleCalGZMarkersAquired,kChronicleCalGZMarkersAquiredType,newStates)
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtSetCGZGameLevel - invalid CGZ game state of:",state,level=PlasmaTypes.kErrorLevel)
|
||||
pass
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PlasmaKITypes:PtSetCGZGameLevel - invalid CGZ game of %d"%(whichGame),level=PlasmaTypes.kErrorLevel)
|
||||
pass
|
||||
|
||||
def PtWhichCGZPlaying():
|
||||
"Has the player completed the CGZ stuff"
|
||||
import Plasma
|
||||
whichGame = -1
|
||||
state = kCGZMarkerInactive
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleCalGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
allStates = entry.chronicleGetValue()
|
||||
if len(allStates) > kCGZFinalGame:
|
||||
state = kCGZMarkerUploaded
|
||||
for i in range(kCGZFinalGame+1):
|
||||
if allStates[i] == kCGZMarkerAvailable or allStates[i] == kCGZMarkerCaptured:
|
||||
whichGame = i
|
||||
state = allStates[i]
|
||||
break
|
||||
if allStates[i] != kCGZMarkerUploaded:
|
||||
state = kCGZMarkerInactive
|
||||
return (whichGame,state)
|
||||
|
||||
def PtIsCGZDone():
|
||||
"Has the player completed the CGZ stuff"
|
||||
import Plasma
|
||||
isDone = 0
|
||||
vault = Plasma.ptVault()
|
||||
entry = vault.findChronicleEntry(kChronicleCalGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
allStates = entry.chronicleGetValue()
|
||||
if len(allStates) > kCGZFinalGame:
|
||||
# assume that we are going to find them all
|
||||
isDone = 1
|
||||
for i in range(kCGZFinalGame+1):
|
||||
if allStates[i] != kCGZMarkerUploaded:
|
||||
isDone = 0
|
||||
break
|
||||
return isDone
|
||||
|
||||
def PtDetermineGZ():
|
||||
"Get the current GZ states"
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
import string
|
||||
GZPlaying = 0
|
||||
MarkerToGetColor = 'off'
|
||||
MarkerGottenColor = 'off'
|
||||
MarkerToGetNumber = 0
|
||||
MarkerGottenNumber = 0
|
||||
KIMarkerLevel = PtDetermineKIMarkerLevel()
|
||||
if KIMarkerLevel > kKIMarkerNotUpgraded:
|
||||
# see if they are playing a CGZ game
|
||||
(whichGame,state) = PtWhichCGZPlaying()
|
||||
if KIMarkerLevel < kKIMarkerNormalLevel or (KIMarkerLevel == kKIMarkerNormalLevel and whichGame != -1):
|
||||
vault = Plasma.ptVault()
|
||||
# is there a chronicle for the GZ games?
|
||||
entry = vault.findChronicleEntry(kChronicleGZGames)
|
||||
if type(entry) != type(None):
|
||||
gameString = entry.chronicleGetValue()
|
||||
PlasmaTypes.PtDebugPrint("PtDetermineGZ: - game string is %s" % (gameString),level=PlasmaTypes.kDebugDumpLevel)
|
||||
args = gameString.split()
|
||||
if len(args) == 3:
|
||||
try:
|
||||
GZPlaying = string.atoi(args[0])
|
||||
colors = args[1].split(':')
|
||||
MarkerGottenColor = colors[0]
|
||||
MarkerToGetColor = colors[1]
|
||||
outof = args[2].split(':')
|
||||
MarkerGottenNumber = string.atoi(outof[0])
|
||||
MarkerToGetNumber = string.atoi(outof[1])
|
||||
except ValueError:
|
||||
PlasmaTypes.PtDebugPrint("xKI:GZ - error trying to read GZGames Chronicle",level=PlasmaTypes.kErrorLevel)
|
||||
# we don't know which one it errored on, so just reset them all
|
||||
GZPlaying = 0
|
||||
MarkerToGetColor = 'off'
|
||||
MarkerGottenColor = 'off'
|
||||
MarkerToGetNumber = 0
|
||||
MarkerGottenNumber = 0
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("xKI:GZ - error GZGames string formation error",level=PlasmaTypes.kErrorLevel)
|
||||
pass
|
||||
else:
|
||||
# can't be playing a GZGame!
|
||||
# ...might be a MarkerTag game... let the KI determine that.
|
||||
pass
|
||||
PlasmaTypes.PtDebugPrint("PtDetermineGZ: - returning game=%d colors=%s:%s markers=%d:%d" % (GZPlaying, MarkerGottenColor, MarkerToGetColor ,MarkerGottenNumber, MarkerToGetNumber),level=PlasmaTypes.kDebugDumpLevel)
|
||||
return (GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber)
|
||||
|
||||
def PtCaptureGZMarker(GZMarkerInRange):
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
# get current GZ Game state
|
||||
(GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber) = PtDetermineGZ()
|
||||
# make sure there is room for the capture marker
|
||||
if GZPlaying and MarkerToGetNumber > MarkerGottenNumber:
|
||||
# set the marker status to 'gotten'
|
||||
# ...in the GZ marker chronicle
|
||||
vault = Plasma.ptVault()
|
||||
# is there a chronicle for the GZ games?
|
||||
entry = vault.findChronicleEntry(kChronicleGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
markers = entry.chronicleGetValue()
|
||||
markerIdx = GZMarkerInRange - 1
|
||||
if markerIdx >= 0 and markerIdx < len(markers):
|
||||
# Set the marker to "captured"
|
||||
PlasmaTypes.PtDebugPrint("PtCaptureGZMarker: starting with '%s' changing %d to '%s'" % (markers,GZMarkerInRange,kGZMarkerCaptured),level=PlasmaTypes.kDebugDumpLevel)
|
||||
if len(markers)-(markerIdx+1) != 0:
|
||||
markers = markers[:markerIdx] + kGZMarkerCaptured + markers[-(len(markers)-(markerIdx+1)):]
|
||||
else:
|
||||
markers = markers[:markerIdx] + kGZMarkerCaptured
|
||||
#PlasmaTypes.PtDebugPrint("xKI: out string is '%s'" % (markers),level=PlasmaTypes.kDebugDumpLevel)
|
||||
entry.chronicleSetValue(markers)
|
||||
entry.save()
|
||||
# update the marker Gotten count
|
||||
totalGotten = markers.count(kGZMarkerCaptured)
|
||||
KIMarkerLevel = PtDetermineKIMarkerLevel()
|
||||
if KIMarkerLevel > kKIMarkerFirstLevel:
|
||||
# if this is the second wave of markers (or beyond)
|
||||
totalGotten -= 5
|
||||
if totalGotten < 0:
|
||||
totalGotten = 0
|
||||
if totalGotten > MarkerToGetNumber:
|
||||
totalGotten = MarkerToGetNumber
|
||||
MarkerGottenNumber = totalGotten
|
||||
# save update to chronicle
|
||||
PtUpdateGZGamesChonicles(GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber)
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PtCaptureGZMarker: invalid marker serial number of %d" % (gGZMarkerInRange),level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PtCaptureGZMarker: no chronicle entry found",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
else:
|
||||
PlasmaTypes.PtDebugPrint("PtCaptureGZMarker: no game or this game is complete",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
|
||||
def PtVerifyGZMarker():
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
# get current GZ Game state
|
||||
(GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber) = PtDetermineGZ()
|
||||
# make sure there is room for the capture marker
|
||||
if GZPlaying:
|
||||
# set the marker status to 'gotten'
|
||||
# ...in the GZ marker chronicle
|
||||
vault = Plasma.ptVault()
|
||||
# is there a chronicle for the GZ games?
|
||||
entry = vault.findChronicleEntry(kChronicleGZMarkersAquired)
|
||||
if type(entry) != type(None):
|
||||
markers = entry.chronicleGetValue()
|
||||
# get what was really gotten
|
||||
totalGotten = markers.count(kGZMarkerCaptured)
|
||||
KIMarkerLevel = PtDetermineKIMarkerLevel()
|
||||
if KIMarkerLevel > kKIMarkerFirstLevel:
|
||||
# if this is the second wave of markers (or beyond)
|
||||
totalGotten -= 5
|
||||
if totalGotten < 0:
|
||||
totalGotten = 0
|
||||
if totalGotten > MarkerToGetNumber:
|
||||
totalGotten = MarkerToGetNumber
|
||||
if totalGotten != MarkerGottenNumber:
|
||||
PlasmaTypes.PtDebugPrint("PtVerifyGZMarker: Error! Gotten different than real. They say=%d We say=%d"%(MarkerGottenNumber,totalGotten),level=PlasmaTypes.kErrorLevel )
|
||||
MarkerGottenNumber = totalGotten
|
||||
# save update to chronicle
|
||||
PtUpdateGZGamesChonicles(GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber)
|
||||
Plasma.PtSendKIMessage(kGZUpdated,0)
|
||||
return (GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber)
|
||||
|
||||
def PtUpdateGZGamesChonicles(GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber):
|
||||
"Update the GZ chronicle variable"
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
vault = Plasma.ptVault()
|
||||
# is there a chronicle for the GZ games?
|
||||
entry = vault.findChronicleEntry(kChronicleGZGames)
|
||||
try:
|
||||
upstring = "%d %s:%s %d:%d" % (GZPlaying,MarkerGottenColor,MarkerToGetColor,MarkerGottenNumber,MarkerToGetNumber)
|
||||
if type(entry) != type(None):
|
||||
entry.chronicleSetValue(upstring)
|
||||
entry.save()
|
||||
else:
|
||||
# if there is none, then just add another entry
|
||||
vault.addChronicleEntry(kChronicleGZGames,kChronicleGZGamesType,upstring)
|
||||
except TypeError:
|
||||
if type(GZPlaying) != type(0):
|
||||
PlasmaTypes.PtDebugPrint("PtUpdateGZGamesChronicle: GZPlaying wrong type (should be integer)",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
if type(MarkerToGetColor) != type(""):
|
||||
PlasmaTypes.PtDebugPrint("PtUpdateGZGamesChronicle: GZPlaying wrong type (should be string)",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
if type(MarkerGottenColor) != type(""):
|
||||
PlasmaTypes.PtDebugPrint("PtUpdateGZGamesChronicle: GZPlaying wrong type (should be string)",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
if type(MarkerToGetNumber) != type(0):
|
||||
PlasmaTypes.PtDebugPrint("PtUpdateGZGamesChronicle: GZPlaying wrong type (should be integer)",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
if type(MarkerGottenNumber) != type(0):
|
||||
PlasmaTypes.PtDebugPrint("PtUpdateGZGamesChronicle: GZPlaying wrong type (should be integer)",level=PlasmaTypes.kErrorLevel )
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
# OnRTChat flags
|
||||
# NOTE: kRTChatInterAge = 8 is being used in cyMisc.cpp SendRTChat (hard coded) so don't change here unless you change that too
|
||||
kRTChatPrivate=1
|
||||
kRTChatAdmin=2
|
||||
kRTChatPrivateAdmin=3
|
||||
kRTChatInterAge=8
|
||||
kRTChatStatusMsg=16
|
||||
kRTChatNeighborsMsg=32
|
||||
|
||||
# flags channel mask
|
||||
kRTChatFlagMask = 65535
|
||||
kRTChatChannelMask = 65280
|
||||
kRTChatNoChannel = 255
|
||||
|
||||
# OnCCRMsg flags
|
||||
kCCRBeginCommunication=1
|
||||
kCCRChat=2
|
||||
kCCREndCommunication=3
|
||||
kCCRReturnChatMsg=4
|
@ -0,0 +1,34 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
class PtLinkingRules:
|
||||
"""(none)"""
|
||||
kBasicLink = 0
|
||||
kOriginalBook = 1
|
||||
kSubAgeBook = 2
|
||||
kOwnedBook = 3
|
||||
kVisitBook = 4
|
||||
kChildAgeBook = 5
|
||||
|
@ -0,0 +1,820 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
"""
|
||||
This module is contains the datatypes and constants for
|
||||
interfacing with the Plasma 2.0 engine.
|
||||
"""
|
||||
from Plasma import *
|
||||
from PlasmaConstants import *
|
||||
|
||||
####################################
|
||||
# Utility functions
|
||||
####################################
|
||||
false=0
|
||||
true=1
|
||||
|
||||
# OnNotify Event enums
|
||||
kCollisionEvent=PtEventType.kCollision # [1]=enter flag, [2]=hitter(probably avatar), [3]=hittee
|
||||
kPickedEvent=PtEventType.kPicked # [1]=enter flag, [2]=picker(probably avatar), [3]=pickee, [4]=hitpoint(world) [5]=hitpoint(local)
|
||||
kControlKeyEvent=PtEventType.kControlKey # [1]=key id, [2]=down flag
|
||||
kVariableEvent=PtEventType.kVariable # [1]=name, [2]=data type, [3]=data
|
||||
kFacingEvent=PtEventType.kFacing # [1]=enabled flag, [2]=facer(probably avatar), [3]=facee, [4]=dot product
|
||||
kContainedEvent=PtEventType.kContained # [1]=entering flag, [2]=contained(probably avatar), [3]=container
|
||||
kActivateEvent=PtEventType.kActivate # [1]=active flag, [2]=activate flag
|
||||
kCallbackEvent=PtEventType.kCallback # [1]=callback id
|
||||
kResponderStateEvent=PtEventType.kResponderState # [1]=state id
|
||||
kMultiStageEvent=PtEventType.kMultiStage # [1]=what stage, [2]=event(see below), [3]=avatar
|
||||
kSpawnedEvent=PtEventType.kSpawned # [1]=spawner, [2]=spawnee (usually avatar)
|
||||
kClickDragEvent=PtEventType.kClickDrag # not used yet
|
||||
kOfferLinkingBook=PtEventType.kOfferLinkingBook # [1]=offerer, [2]=link panel ID of age offered
|
||||
|
||||
|
||||
# OnNotify Var Event Data Types
|
||||
kVarNumberType=PtNotifyDataType.kNumber
|
||||
kVarKeyType=PtNotifyDataType.kKey
|
||||
# OnNotify MultiStageEvent - what event types
|
||||
kEnterStage=PtMultiStageEventType.kEnterStage
|
||||
kBeginingOfLoop=PtMultiStageEventType.kBeginingOfLoop
|
||||
kAdvanceNextStage=PtMultiStageEventType.kAdvanceNextStage
|
||||
kRegressPrevStage=PtMultiStageEventType.kRegressPrevStage
|
||||
# Behavior - gotoStage
|
||||
kStageExitBrain=-1 # sending ptAttribBehavior to stage -1 will exit brain
|
||||
|
||||
# OnGUINotify Control Types
|
||||
kDialog=1
|
||||
kButton=2
|
||||
kDraggable=3
|
||||
kListBox=4
|
||||
kTextBox=5
|
||||
kEditBox=6
|
||||
kUpDownPair=7
|
||||
kKnob=8
|
||||
kDragBar=9
|
||||
kCheckBox=10
|
||||
kRadioGroup=11
|
||||
kDynamicTextControl=12
|
||||
kMultiLineEdit=13
|
||||
# GUIControlListBox String Justify Types
|
||||
kLeftJustify=1
|
||||
kRightJustify=2
|
||||
# GUIControlListBox String inherit flag
|
||||
kNoInherit=0
|
||||
kInheritFromNormal=1
|
||||
kInheritFromSelect=2
|
||||
kSelectDetermined=3
|
||||
kSelectUseGUIColor=4
|
||||
# GUIControlMultiLineEdit style flags (additive)
|
||||
kFontBold=1
|
||||
kFontItalic=2
|
||||
kFontShadowed=4
|
||||
|
||||
# OnGUINotify Event Types
|
||||
kShowHide=1 # show or hide change (only on kDialog)
|
||||
kAction=2 # kButton clicked, kListBox item clicked on, kEditBox hit enter
|
||||
kValueChanged=3 # value changed in control (could be from kUpDownPair,kKnob,kCheckBox,kRadioGroup
|
||||
kDialogLoaded=4 # the dialog has just been loaded
|
||||
kFocusChange=5 # the focus changed from one control to another, or none, within the dialog
|
||||
kExitMode = 6 # Modal dialog received an exit mode command
|
||||
kInterestingEvent = 7 # an interesting event happened
|
||||
|
||||
# OnRoomLoad 'what' types
|
||||
kLoaded=1
|
||||
kUnloaded=2
|
||||
|
||||
# Clothing group Types and clothing types
|
||||
kMaleClothingGroup=0
|
||||
kFemaleClothingGroup=1
|
||||
kAnyClothingItem=-1
|
||||
kPantsClothingItem=0
|
||||
kShirtClothingItem=1
|
||||
kLeftHandClothingItem=2
|
||||
kRightHandClothingItem=3
|
||||
kFaceClothingItem=4
|
||||
kHairClothingItem=5
|
||||
kLeftFootClothingItem=6
|
||||
kRightFootClothingItem=7
|
||||
kAccessoryClothingItem=8
|
||||
|
||||
#Debug print levels
|
||||
kDebugDumpLevel = 1
|
||||
kWarningLevel = 2
|
||||
kErrorLevel = 3
|
||||
kAssertLevel = 4
|
||||
|
||||
|
||||
def PtAssert(cond, msg):
|
||||
"Plasma assert. Just like the Python one but we can set it to NOP in release"
|
||||
assert cond,msg
|
||||
|
||||
def PtDebugPrint(*msgs,**keywords):
|
||||
"Plasma debug print. Will be NOP'd when released"
|
||||
try:
|
||||
level = keywords['level']
|
||||
except LookupError:
|
||||
level = kErrorLevel
|
||||
if level >= PtGetPythonLoggingLevel():
|
||||
if level == 4:
|
||||
PtAssert(0,msgs[0])
|
||||
else:
|
||||
for msg in msgs:
|
||||
print msg
|
||||
|
||||
def PtGetObjectName(obj):
|
||||
"Given a ptSceneobject, return its name"
|
||||
if isinstance(obj,ptSceneobject):
|
||||
if type(obj.getKey()) != type(None):
|
||||
return obj.getKey().getName()
|
||||
return "nil"
|
||||
|
||||
# add an event that is in the form of a list
|
||||
# ...to a notify message
|
||||
def PtAddEvent(notify,event):
|
||||
"Add an event of any type to a ptNotify message object"
|
||||
if type(event) != type([]):
|
||||
print "Unrecognized event record structure"
|
||||
return
|
||||
if event[0] == kCollisionEvent:
|
||||
notify.addCollisionEvent(event[1],event[2].getKey(),event[3].getKey())
|
||||
elif event[0] == kPickedEvent:
|
||||
notify.addPickEvent(event[1],event[2].getKey(),event[3].getKey(),event[4])
|
||||
elif event[0] == kControlKeyEvent:
|
||||
notify.addControlKeyEvent(event[1],event[2])
|
||||
elif event[0] == kVariableEvent:
|
||||
if event[2] == kVarNumberType:
|
||||
notify.addVarNumber(event[1],event[3])
|
||||
elif event[2] == kVarKeyType:
|
||||
notify.addVarKey(event[1],event[3])
|
||||
elif event[0] == kFacingEvent:
|
||||
notify.addFacingEvent(event[1],event[2].getKey(),event[3].getKey(),event[4])
|
||||
elif event[0] == kContainedEvent:
|
||||
notify.addContainerEvent(event[1],event[2].getKey(),event[3].getKey())
|
||||
elif event[0] == kActivateEvent:
|
||||
notify.addActivateEvent(event[1],event[2])
|
||||
elif event[0] == kCallbackEvent:
|
||||
notify.addCallbackEvent(event[1])
|
||||
elif event[0] == kResponderStateEvent:
|
||||
notify.addResponderState(event[1])
|
||||
else:
|
||||
print "Unrecognized event type %d" % (event[0])
|
||||
|
||||
# add a list of events into a ptNotify message
|
||||
def PtAddEvents(notify, events):
|
||||
"Add a list of events to a ptNotify message object"
|
||||
if type(events) == type([]):
|
||||
for event in events:
|
||||
PtAddEvent(notify,event)
|
||||
|
||||
# find the avatar in event record list
|
||||
def PtFindAvatar(events):
|
||||
"Find the avatar in one of the event records"
|
||||
for event in events:
|
||||
if event[0]==kCollisionEvent or event[0]==kPickedEvent or event[0]==kFacingEvent or event[0]==kContainedEvent or event[0]==kSpawnedEvent:
|
||||
return event[2]
|
||||
if event[0] == kMultiStageEvent:
|
||||
return event[3]
|
||||
# didn't find one
|
||||
return None
|
||||
|
||||
####################################
|
||||
# Exceptions
|
||||
####################################
|
||||
import exceptions
|
||||
class ptResponderStateError(exceptions.Exception):
|
||||
def __init__(self,args=None):
|
||||
self.args = args
|
||||
|
||||
#
|
||||
# Attributes that will be exposed in Max to be filled in by <someone>
|
||||
|
||||
####################################
|
||||
# base class for all attributes
|
||||
####################################
|
||||
# (This makes it easy to find all the attributes in a module)
|
||||
class ptAttribute:
|
||||
def __init__(self,id,name, vislistid = -1, visliststates = []):
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.vis_id = vislistid
|
||||
self.vis_states = visliststates
|
||||
|
||||
def setVisInfo(self, id, stateslist):
|
||||
self.vis_id = id
|
||||
self.vis_states = stateslist
|
||||
|
||||
def getVisInfo(self):
|
||||
return (self.vis_id, self.vis_states)
|
||||
|
||||
# base class for all list attributes
|
||||
# (This makes it easy to find all the attributes that are a list)
|
||||
class ptAttributeList(ptAttribute):
|
||||
def __init__(self,id,name):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
|
||||
# Boolean attribute (Checkbox)
|
||||
class ptAttribBoolean(ptAttribute):
|
||||
def __init__(self,id,name=None, default=0):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = default
|
||||
def getdef(self):
|
||||
return (self.id,self.name,1,self.value)
|
||||
|
||||
# Integer attribute (Spinner)
|
||||
class ptAttribInt(ptAttribute):
|
||||
def __init__(self,id,name=None,default=0,rang=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = default
|
||||
self.rang = rang
|
||||
def getdef(self):
|
||||
return (self.id,self.name,2,self.value,self.rang)
|
||||
|
||||
# Floating point number attribute (Spinner)
|
||||
class ptAttribFloat(ptAttribute):
|
||||
def __init__(self,id,name=None,default=0.0,rang=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = default
|
||||
self.rang = rang
|
||||
def getdef(self):
|
||||
return (self.id,self.name,3,self.value,self.rang)
|
||||
|
||||
# String attribute (Edit box)
|
||||
class ptAttribString(ptAttribute):
|
||||
def __init__(self,id,name=None,default=""):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = default
|
||||
def getdef(self):
|
||||
return (self.id,self.name,4,self.value)
|
||||
|
||||
# Drop-down list attribute (Drop-down list combo box)
|
||||
class ptAttribDropDownList(ptAttribute):
|
||||
def __init__(self,id,name=None,options=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.options = options
|
||||
def getdef(self):
|
||||
return (self.id,self.name,20,self.options)
|
||||
|
||||
# Sceneobject attribute (pick single sceneobject box)
|
||||
class ptAttribSceneobject(ptAttribute):
|
||||
def __init__(self,id,name=None,netForce=0):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.sceneobject = None
|
||||
self.netForce = netForce
|
||||
def getdef(self):
|
||||
return (self.id,self.name,5)
|
||||
def __setvalue__(self,value):
|
||||
if self.netForce:
|
||||
value.netForce(1)
|
||||
self.value = value
|
||||
self.sceneobject = self.value
|
||||
|
||||
# Sceneobject list attribute (pick multiple sceneobjects box)
|
||||
class ptAttribSceneobjectList(ptAttributeList):
|
||||
def __init__(self,id,name=None,byObject=0,netForce=0):
|
||||
ptAttributeList.__init__(self,id,name)
|
||||
self.value = [] # start as an empty list
|
||||
self.sceneobject = self.value
|
||||
self.netForce = netForce
|
||||
if byObject:
|
||||
self.byObject = {}
|
||||
else:
|
||||
self.byObject = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,6)
|
||||
def __setvalue__(self,value):
|
||||
if self.netForce:
|
||||
value.netForce(1)
|
||||
self.value.append(value)
|
||||
if type(self.byObject) == type({}):
|
||||
name = value.getName()
|
||||
self.byObject[name] = value
|
||||
|
||||
# attribute list of keys
|
||||
class ptAttributeKeyList(ptAttributeList):
|
||||
def __init__(self,id,name=None,byObject=0,netForce=0):
|
||||
ptAttributeList.__init__(self,id,name)
|
||||
self.value = []
|
||||
self.netForce = netForce
|
||||
if byObject:
|
||||
self.byObject = {}
|
||||
else:
|
||||
self.byObject = None
|
||||
def enable(self,objectName=None):
|
||||
if self.value != None:
|
||||
if type(objectName) != type(None) and type(self.byObject) != type(None):
|
||||
pkey = self.byObject[objectName]
|
||||
if self.netForce:
|
||||
pkey.netForce(1)
|
||||
pkey.enable()
|
||||
elif type(self.value)==type([]):
|
||||
for pkey in self.value:
|
||||
if self.netForce:
|
||||
pkey.netForce(1)
|
||||
pkey.enable()
|
||||
else:
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
self.value.enable()
|
||||
def disable(self,objectName=None):
|
||||
if self.value != None:
|
||||
if type(objectName) != type(None) and type(self.byObject) != type(None):
|
||||
pkey = self.byObject[objectName]
|
||||
if self.netForce:
|
||||
pkey.netForce(1)
|
||||
pkey.disable()
|
||||
elif type(self.value)==type([]):
|
||||
for pkey in self.value:
|
||||
if self.netForce:
|
||||
pkey.netForce(1)
|
||||
pkey.disable()
|
||||
else:
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
self.value.disable()
|
||||
def __setvalue__(self,value):
|
||||
if self.netForce:
|
||||
value.netForce(1)
|
||||
self.value.append(value)
|
||||
if type(self.byObject) == type({}):
|
||||
name = value.getName()
|
||||
self.byObject[name] = value
|
||||
|
||||
# Activator attribute (pick activator types box)
|
||||
class ptAttribActivator(ptAttributeKeyList):
|
||||
def getdef(self):
|
||||
return (self.id,self.name,8)
|
||||
def enableActivator(self):
|
||||
for key in self.value:
|
||||
key.getSceneObject().physics.enable()
|
||||
def disableActivator(self):
|
||||
for key in self.value:
|
||||
key.getSceneObject().physics.disable()
|
||||
def volumeSensorIgnoreExtraEnters(self,state):
|
||||
for key in self.value:
|
||||
key.getSceneObject().volumeSensorIgnoreExtraEnters(state)
|
||||
|
||||
# Activator attribute (pick activator types box)
|
||||
class ptAttribActivatorList(ptAttributeKeyList):
|
||||
def getdef(self):
|
||||
return (self.id,self.name,7)
|
||||
|
||||
# Responder attribute (pick responder types box)
|
||||
class ptAttribResponder(ptAttributeKeyList):
|
||||
def __init__(self,id,name=None,statelist=None,byObject=0,netForce=0):
|
||||
ptAttributeKeyList.__init__(self,id,name,byObject,netForce)
|
||||
self.state_list = statelist
|
||||
def getdef(self):
|
||||
return (self.id,self.name,9)
|
||||
def run(self,key,state=None,events=None,avatar=None,objectName=None,netForce=0,netPropagate=1,fastforward=0):
|
||||
# has the value been set?
|
||||
if type(self.value) != type(None):
|
||||
nt = ptNotify(key)
|
||||
nt.clearReceivers()
|
||||
# see if the value is a list or byObject or a single
|
||||
if type(objectName) != type(None) and type(self.byObject) != type(None):
|
||||
nt.addReceiver(self.byObject[objectName])
|
||||
elif type(self.value)==type([]):
|
||||
for resp in self.value:
|
||||
nt.addReceiver(resp)
|
||||
else:
|
||||
nt.addReceiver(self.value)
|
||||
if not netPropagate:
|
||||
nt.netPropagate(0)
|
||||
# ptNotify defaults to netPropagate=1
|
||||
if netForce or self.netForce:
|
||||
nt.netForce(1)
|
||||
# see if the state is specified
|
||||
if type(state) == type(0):
|
||||
raise ptResponderStateError,"Specifying state as a number is no longer supported"
|
||||
elif type(state) == type(''):
|
||||
if type(self.state_list) != type(None):
|
||||
try:
|
||||
idx = self.state_list.index(state)
|
||||
nt.addResponderState(idx)
|
||||
except ValueError:
|
||||
raise ptResponderStateError, "There is no state called '%s'"%(state)
|
||||
else:
|
||||
raise ptResponderStateError,"There is no state list provided"
|
||||
# see if there are events to pass on
|
||||
if type(events) != type(None):
|
||||
PtAddEvents(nt,events)
|
||||
if type(avatar) != type(None):
|
||||
nt.addCollisionEvent(1,avatar.getKey(),avatar.getKey())
|
||||
if fastforward:
|
||||
nt.setType(PtNotificationType.kResponderFF)
|
||||
# if fast forwarding, then only do it on the local client
|
||||
nt.netPropagate(0)
|
||||
nt.netForce(0)
|
||||
nt.setActivate(1.0)
|
||||
nt.send()
|
||||
def setState(self,key,state,objectName=None,netForce=0,netPropagate=1):
|
||||
# has the value been set?
|
||||
if type(self.value) != type(None):
|
||||
nt = ptNotify(key)
|
||||
nt.clearReceivers()
|
||||
# see if the value is a list or byObject or a single
|
||||
if type(objectName) != type(None) and type(self.byObject) != type(None):
|
||||
nt.addReceiver(self.byObject[objectName])
|
||||
elif type(self.value)==type([]):
|
||||
for resp in self.value:
|
||||
nt.addReceiver(resp)
|
||||
else:
|
||||
nt.addReceiver(self.value)
|
||||
if not netPropagate:
|
||||
nt.netPropagate(0)
|
||||
# ptNotify defaults to netPropagate=1
|
||||
if netForce or self.netForce:
|
||||
nt.netForce(1)
|
||||
# see if the state is specified
|
||||
if type(state) == type(0):
|
||||
raise ptResponderStateError,"Specifying state as a number is no longer supported"
|
||||
elif type(state) == type(''):
|
||||
if type(self.state_list) != type(None):
|
||||
try:
|
||||
idx = self.state_list.index(state)
|
||||
nt.addResponderState(idx)
|
||||
except ValueError:
|
||||
raise ptResponderStateError, "There is no state called '%s'"%(state)
|
||||
else:
|
||||
raise ptResponderStateError,"There is no state list provided"
|
||||
# see if there are events to pass on
|
||||
nt.setType(PtNotificationType.kResponderChangeState)
|
||||
nt.setActivate(1.0)
|
||||
nt.send()
|
||||
|
||||
def getState(self):
|
||||
if (type(self.value) != type(None)):
|
||||
if type(self.value)==type([]):
|
||||
for resp in self.value:
|
||||
obj = resp.getSceneObject()
|
||||
idx = obj.getResponderState()
|
||||
curState = self.state_list[idx]
|
||||
return curState
|
||||
else:
|
||||
obj = self.value.getSceneObject()
|
||||
idx = obj.getResponderState()
|
||||
curState = self.state_list[idx]
|
||||
return curState
|
||||
|
||||
|
||||
# Responder attribute List
|
||||
class ptAttribResponderList(ptAttribResponder):
|
||||
def getdef(self):
|
||||
return (self.id,self.name,10)
|
||||
|
||||
# Activator attribute (pick activator types box)
|
||||
class ptAttribNamedActivator(ptAttribActivator):
|
||||
def getdef(self):
|
||||
# get attribute as a string, then we will turn it into an activator later
|
||||
return (self.id,self.name,4,self.value)
|
||||
|
||||
# Responder attribute (pick responder types box)
|
||||
class ptAttribNamedResponder(ptAttribResponder):
|
||||
def getdef(self):
|
||||
# get attribute as a string, then we will turn it into an responder later
|
||||
return (self.id,self.name,4,self.value)
|
||||
|
||||
# DynamicText attribute pick button
|
||||
class ptAttribDynamicMap(ptAttribute):
|
||||
def __init__(self,id,name=None,netForce=0):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.textmap = None
|
||||
self.netForce = netForce
|
||||
# this is to set the value via method (only called if defined)
|
||||
def __setvalue__(self,value):
|
||||
# has a ptDynamicText already been made
|
||||
try:
|
||||
self.textmap.addKey(value)
|
||||
except AttributeError:
|
||||
self.textmap = ptDynamicMap(value)
|
||||
if self.netForce:
|
||||
self.textmap.netForce(1)
|
||||
self.value = self.textmap
|
||||
def getdef(self):
|
||||
return (self.id,self.name,11)
|
||||
|
||||
# a GUI Dialogbox attribute
|
||||
class ptAttribGUIDialog(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.dialog = None
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,12)
|
||||
def __setvalue__(self,value):
|
||||
self.dialog = ptGUIDialog(value)
|
||||
self.value = self.dialog
|
||||
|
||||
# a Exclude region attribute
|
||||
kExRegRelease = 0
|
||||
kExRegClear = 1
|
||||
class ptAttribExcludeRegion(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,13)
|
||||
def clear(self,sender):
|
||||
if type(self.value) != type(None):
|
||||
PtExcludeRegionSet(sender,self.value,kExRegClear)
|
||||
def release(self,sender):
|
||||
if type(self.value) != type(None):
|
||||
PtExcludeRegionSet(sender,self.value,kExRegRelease)
|
||||
def enable(self):
|
||||
self.sceneobject.physics.enable()
|
||||
def disable(self):
|
||||
self.sceneobject.physics.disable()
|
||||
def clearNow(self,sender):
|
||||
if type(self.value) != type(None):
|
||||
PtExcludeRegionSetNow(sender,self.value,kExRegClear)
|
||||
def releaseNow(self,sender):
|
||||
if type(self.value) != type(None):
|
||||
PtExcludeRegionSetNow(sender,self.value,kExRegRelease)
|
||||
|
||||
class ptAttribWaveSet(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,19)
|
||||
def __setvalue__(self,value):
|
||||
self.waveset = ptWaveSet(value)
|
||||
self.value = self.waveset
|
||||
|
||||
class ptAttribSwimCurrent(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.current = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,21)
|
||||
def __setvalue__(self,value):
|
||||
self.current = ptSwimCurrentInterface(value)
|
||||
self.value = self.current
|
||||
|
||||
class ptAttribClusterList(ptAttributeList):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = []
|
||||
def getdef(self):
|
||||
return (self.id,self.name,22)
|
||||
def __setvalue__(self,value):
|
||||
self.value.append(ptCluster(value))
|
||||
|
||||
# special class for byObject that gets the parents name of the values when someone first asks for them
|
||||
class ptByAnimObject(dict):
|
||||
def __init__(self):
|
||||
dict.__init__(self)
|
||||
self.gotParentKeys = 0
|
||||
def getParentKeys(self):
|
||||
# if we haven't got the parent keys yet, then add them to the dict
|
||||
if not self.gotParentKeys:
|
||||
for anim in dict.values(self):
|
||||
# get the animation target key
|
||||
aKey = anim.getFirstKey()
|
||||
if aKey:
|
||||
# get its parent key
|
||||
pKey = aKey.getParentKey()
|
||||
if pKey:
|
||||
# only add this key once
|
||||
if not pKey.getName() in self:
|
||||
dict.__setitem__(self,pKey.getName(),anim)
|
||||
self.gotParentKeys = 1
|
||||
def __getitem__(self,key):
|
||||
self.getParentKeys()
|
||||
return dict.__getitem__(self,key)
|
||||
def keys(self):
|
||||
self.getParentKeys()
|
||||
return dict.keys(self)
|
||||
def get(self, key, *args):
|
||||
self.getParentKeys()
|
||||
return dict.get(self, key, *args)
|
||||
|
||||
# an Animation attribute
|
||||
kAnimEaseNoEase = 0
|
||||
kAnimEaseConstAccel = 1
|
||||
kAnimEaseSpline = 2
|
||||
class ptAttribAnimation(ptAttribute):
|
||||
def __init__(self,id,name=None,byObject=0,netForce=0):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.animName = ""
|
||||
self.netForce = netForce
|
||||
if byObject:
|
||||
self.byObject = ptByAnimObject()
|
||||
else:
|
||||
self.byObject = None
|
||||
# this is to set the value via method (only called if defined)
|
||||
def __setvalue__(self,value):
|
||||
# has a ptAnimation already been made
|
||||
if type(value) == type(""):
|
||||
self.animName = value
|
||||
try:
|
||||
self.animation.setAnimName(value)
|
||||
# then if there are animations by object then set those, too
|
||||
if isinstance(self.byObject,ptByAnimObject):
|
||||
for anim in self.byObject.values():
|
||||
anim.setAnimName(value)
|
||||
except AttributeError:
|
||||
self.animation = ptAnimation()
|
||||
self.animation.setAnimName(value)
|
||||
if self.netForce:
|
||||
self.animation.netForce(1)
|
||||
self.value = self.animation
|
||||
elif isinstance(value,ptKey):
|
||||
try:
|
||||
self.animation.addKey(value)
|
||||
except AttributeError:
|
||||
self.animation = ptAnimation()
|
||||
self.animation.addKey(value)
|
||||
if self.netForce:
|
||||
self.animation.netForce(1)
|
||||
self.value = self.animation
|
||||
if isinstance(self.byObject,ptByAnimObject):
|
||||
singleAnim = ptAnimation()
|
||||
singleAnim.addKey(value)
|
||||
if self.netForce:
|
||||
singleAnim.netForce(1)
|
||||
# set name if known
|
||||
if self.animName != "":
|
||||
singleAnim.setAnimName(self.animName)
|
||||
name = value.getName()
|
||||
self.byObject[name] = singleAnim
|
||||
def getdef(self):
|
||||
return (self.id,self.name,14)
|
||||
|
||||
# a Behavior attribute
|
||||
class ptAttribBehavior(ptAttribute):
|
||||
"Attribute for specifying behaviors, including multistage Behaviors"
|
||||
def __init__(self,id,name=None,netForce=1,netProp=1):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.netForce = netForce
|
||||
self.netProp = netProp
|
||||
def __setvalue__(self,value):
|
||||
self.value = value
|
||||
PtSetBehaviorNetFlags(self.value, self.netForce, self.netProp)
|
||||
def getdef(self):
|
||||
return (self.id,self.name,15)
|
||||
def run(self,avatar):
|
||||
"This will run the behavior on said avatar"
|
||||
if type(self.value) != type(None):
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
avatar.avatar.netForce(1)
|
||||
avatar.avatar.runBehavior(self.value,self.netForce,self.netProp)
|
||||
def nextStage(self,avatar,transitionTime=1.0,setTimeFlag=1,newTime=0.0,dirFlag=0,isForward=1):
|
||||
"This will go to the next stage in a multi-stage behavior"
|
||||
if type(self.value) != type(None):
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
avatar.avatar.netForce(1)
|
||||
avatar.avatar.nextStage(self.value,transitionTime,setTimeFlag,newTime,dirFlag,isForward,self.netForce)
|
||||
def previousStage(self,avatar,transitionTime=1.0,setTimeFlag=1,newTime=0.0,dirFlag=0,isForward=1):
|
||||
"This will go to the next stage in a multi-stage behavior"
|
||||
if type(self.value) != type(None):
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
avatar.avatar.netForce(1)
|
||||
avatar.avatar.previousStage(self.value,transitionTime,setTimeFlag,newTime,dirFlag,isForward,self.netForce)
|
||||
def gotoStage(self,avatar,stage,transitionTime=1.0,setTimeFlag=1,newTime=0.0,dirFlag=0,isForward=1):
|
||||
"This will go to the next stage in a multi-stage behavior"
|
||||
if type(self.value) != type(None):
|
||||
if self.netForce:
|
||||
self.value.netForce(1)
|
||||
avatar.avatar.netForce(1)
|
||||
avatar.avatar.gotoStage(self.value,stage,transitionTime,setTimeFlag,newTime,dirFlag,isForward,self.netForce)
|
||||
def setLoopCount(self,stage,loopCount):
|
||||
"This will set the loop count for a stage"
|
||||
if type(self.value) != type(None):
|
||||
PtSetBehaviorLoopCount(self.value,stage,loopCount,self.netForce)
|
||||
|
||||
# Material texture attribute pick button
|
||||
class ptAttribMaterial(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
self.map = None
|
||||
# this is to set the value via method (only called if defined)
|
||||
def __setvalue__(self,value):
|
||||
self.map = ptImage(value)
|
||||
self.value = self.map
|
||||
def getdef(self):
|
||||
return (self.id,self.name,16)
|
||||
|
||||
class ptAttribMaterialAnimation(ptAttribute):
|
||||
def __init__(self, id, name = None):
|
||||
ptAttribute.__init__(self, id, name)
|
||||
self.value = None
|
||||
self.animation = None
|
||||
|
||||
def __setvalue__(self, value):
|
||||
if type(self.animation) == type(None):
|
||||
self.animation = ptAnimation()
|
||||
self.animation.addKey(value)
|
||||
self.value = self.animation
|
||||
else:
|
||||
self.animation.addKey(value)
|
||||
|
||||
def getdef(self):
|
||||
return (self.id, self.name, 23)
|
||||
|
||||
|
||||
# Sceneobject list attribute (pick multiple sceneobjects box)
|
||||
class ptAttribMaterialList(ptAttributeList):
|
||||
def __init__(self,id,name=None,byObject=0,netForce=0):
|
||||
ptAttributeList.__init__(self,id,name)
|
||||
self.value = [] # start as an empty list
|
||||
self.map = self.value
|
||||
self.netForce = netForce
|
||||
if byObject:
|
||||
self.byObject = {}
|
||||
else:
|
||||
self.byObject = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,6)
|
||||
def __setvalue__(self,value):
|
||||
if self.netForce:
|
||||
value.netForce(1)
|
||||
self.value.append(value)
|
||||
if type(self.byObject) == type({}):
|
||||
name = value.getName()
|
||||
self.byObject[name] = value
|
||||
|
||||
# a GUI PopUpMenu attribute
|
||||
class ptAttribGUIPopUpMenu(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,17)
|
||||
def __setvalue__(self,value):
|
||||
self.menu = ptGUIPopUpMenu(value)
|
||||
self.value = self.menu
|
||||
|
||||
# a GUI Skin attribute
|
||||
class ptAttribGUISkin(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,18)
|
||||
def __setvalue__(self,value):
|
||||
self.skin = ptGUISkin(value)
|
||||
self.value = self.skin
|
||||
|
||||
# a Grass Shader attribute
|
||||
class ptAttribGrassShader(ptAttribute):
|
||||
def __init__(self,id,name=None):
|
||||
ptAttribute.__init__(self,id,name)
|
||||
self.value = None
|
||||
def getdef(self):
|
||||
return (self.id,self.name,24)
|
||||
def __setvalue__(self,value):
|
||||
self.shader = ptGrassShader(value)
|
||||
self.value = self.shader
|
||||
|
||||
|
||||
#
|
||||
# ptModifier - class for creating a Plasma modifier, such as a responder
|
||||
|
||||
# base class
|
||||
class ptModifier:
|
||||
def __init__(self):
|
||||
self.key = None
|
||||
self.SDL = None
|
||||
self.version = 0
|
||||
|
||||
class ptResponder(ptModifier):
|
||||
# this modifier will get a plNotifyMsg as an OnNotify
|
||||
def __init__(self):
|
||||
ptModifier.__init__(self)
|
||||
self.sceneobject = None
|
||||
|
||||
class ptMultiModifier(ptModifier):
|
||||
# this modifier can be attached to multiple object, but only one module
|
||||
def __init__(self):
|
||||
ptModifier.__init__(self)
|
@ -0,0 +1,98 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
class PtVaultCallbackTypes:
|
||||
"""(none)"""
|
||||
kVaultConnected = 1
|
||||
kVaultNodeSaved = 2
|
||||
kVaultNodeRefAdded = 3
|
||||
kVaultRemovingNodeRef = 4
|
||||
kVaultNodeRefRemoved = 5
|
||||
kVaultNodeInitialized = 6
|
||||
kVaultOperationFailed = 7
|
||||
kVaultNodeAdded = 8
|
||||
kVaultDisconnected = 9
|
||||
|
||||
class PtVaultNodeTypes:
|
||||
"""(none)"""
|
||||
kInvalidNode = 0
|
||||
kAgeInfoNode = 33
|
||||
kAgeInfoListNode = 34
|
||||
kMarkerGameNode = 35
|
||||
kVNodeMgrPlayerNode = 2
|
||||
kVNodeMgrAgeNode = 3
|
||||
kFolderNode = 22
|
||||
kPlayerInfoNode = 23
|
||||
kImageNode = 25
|
||||
kTextNoteNode = 26
|
||||
kSDLNode = 27
|
||||
kAgeLinkNode = 28
|
||||
kChronicleNode = 29
|
||||
kPlayerInfoListNode = 30
|
||||
|
||||
class PtVaultNotifyTypes:
|
||||
"""(none)"""
|
||||
kRegisteredOwnedAge = 9
|
||||
kUnRegisteredOwnedAge = 10
|
||||
kRegisteredVisitAge = 11
|
||||
kUnRegisteredVisitAge = 12
|
||||
kPublicAgeCreated = 13
|
||||
kPublicAgeRemoved = 14
|
||||
|
||||
class PtVaultStandardNodes:
|
||||
"""(none)"""
|
||||
kUserDefinedNode = 0
|
||||
kInboxFolder = 1
|
||||
kBuddyListFolder = 2
|
||||
kIgnoreListFolder = 3
|
||||
kPeopleIKnowAboutFolder = 4
|
||||
kChronicleFolder = 6
|
||||
kAvatarOutfitFolder = 7
|
||||
kAgeTypeJournalFolder = 8
|
||||
kSubAgesFolder = 9
|
||||
kHoodMembersFolder = 11
|
||||
kAllPlayersFolder = 12
|
||||
kAgeMembersFolder = 13
|
||||
kAgeJournalsFolder = 14
|
||||
kAgeInstanceSDLNode = 16
|
||||
kCanVisitFolder = 18
|
||||
kAgeOwnersFolder = 19
|
||||
kAllAgeGlobalSDLNodesFolder = 20
|
||||
kPlayerInfoNode = 21
|
||||
kPublicAgesFolder = 22
|
||||
kAgesIOwnFolder = 23
|
||||
kAgesICanVisitFolder = 24
|
||||
kAvatarClosetFolder = 25
|
||||
kGlobalInboxFolder = 30
|
||||
|
||||
class PtVaultTextNoteSubTypes:
|
||||
"""(none)"""
|
||||
kGeneric = 0
|
||||
|
||||
class PtVaultTextNoteTypes:
|
||||
"""(none)"""
|
||||
kGeneric = 0
|
||||
kCCRPetition = 1
|
||||
|
@ -0,0 +1,208 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
# glue code in python for the glue code in C++
|
||||
# This assumes that this will be loaded into the module that we are trying to do
|
||||
# with an execfile('.\\python\\system\\glue.py') at the end of the module (after everything is defined)
|
||||
# SPECIAL WARNING(1): This glue code returns the attributes in reverse ID order!
|
||||
glue_cl = None # the class of the modifier
|
||||
glue_inst = None # instance of the class modifier
|
||||
glue_params = None # parameters dictionary: mapped id to instance
|
||||
glue_paramKeys = None # this is the parameter ID list, that should be sorted
|
||||
try:
|
||||
x = glue_verbose
|
||||
except NameError:
|
||||
glue_verbose = 0
|
||||
def glue_getClass():
|
||||
global glue_cl
|
||||
if glue_cl == None:
|
||||
try:
|
||||
cl = eval(glue_name)
|
||||
if issubclass(cl,ptModifier):
|
||||
glue_cl = cl
|
||||
else:
|
||||
if glue_verbose:
|
||||
print "Class %s is not derived from modifier" % (cl.__name__)
|
||||
except NameError:
|
||||
if glue_verbose:
|
||||
try:
|
||||
print "Could not find class %s" % (glue_name)
|
||||
except NameError:
|
||||
print "Filename/classname not set!"
|
||||
return glue_cl
|
||||
def glue_getInst():
|
||||
global glue_inst
|
||||
if type(glue_inst) == type(None):
|
||||
cl = glue_getClass()
|
||||
if cl != None:
|
||||
glue_inst = cl()
|
||||
return glue_inst
|
||||
def glue_delInst():
|
||||
global glue_inst
|
||||
global glue_cl
|
||||
global glue_params
|
||||
global glue_paramKeys
|
||||
if type(glue_inst) != type(None):
|
||||
del glue_inst
|
||||
# remove our references
|
||||
glue_cl = None
|
||||
glue_params = None
|
||||
glue_paramKeys = None
|
||||
def glue_getVersion():
|
||||
inst = glue_getInst()
|
||||
ver = inst.version
|
||||
glue_delInst()
|
||||
return ver
|
||||
def glue_findAndAddAttribs(obj, glue_params):
|
||||
if isinstance(obj,ptAttribute):
|
||||
if glue_params.has_key(obj.id):
|
||||
if glue_verbose:
|
||||
print "WARNING: Duplicate attribute ids!"
|
||||
print "%s has id %d which is already defined in %s" % (obj.name, obj.id, glue_params[obj.id].name)
|
||||
else:
|
||||
glue_params[obj.id] = obj
|
||||
elif type(obj) == type([]):
|
||||
for o in obj:
|
||||
glue_findAndAddAttribs(o, glue_params)
|
||||
elif type(obj) == type({}):
|
||||
for o in obj.values():
|
||||
glue_findAndAddAttribs(o, glue_params)
|
||||
elif type(obj) == type( () ):
|
||||
for o in obj:
|
||||
glue_findAndAddAttribs(o, glue_params)
|
||||
|
||||
def glue_getParamDict():
|
||||
global glue_params
|
||||
global glue_paramKeys
|
||||
if type(glue_params) == type(None):
|
||||
glue_params = {}
|
||||
gd = globals()
|
||||
for obj in gd.values():
|
||||
glue_findAndAddAttribs(obj, glue_params)
|
||||
# rebuild the parameter sorted key list
|
||||
glue_paramKeys = glue_params.keys()
|
||||
glue_paramKeys.sort()
|
||||
glue_paramKeys.reverse() # reserve the order because PlasmaMax will ask for them in reverse order
|
||||
return glue_params
|
||||
def glue_getClassName():
|
||||
cl = glue_getClass()
|
||||
if cl != None:
|
||||
return cl.__name__
|
||||
if glue_verbose:
|
||||
print "Class not found in %s.py" % (glue_name)
|
||||
return None
|
||||
def glue_getBlockID():
|
||||
inst = glue_getInst()
|
||||
if inst != None:
|
||||
return inst.id
|
||||
if glue_verbose:
|
||||
print "Instance could not be created in %s.py" % (glue_name)
|
||||
return None
|
||||
def glue_getNumParams():
|
||||
pd = glue_getParamDict()
|
||||
if pd != None:
|
||||
return len(pd)
|
||||
if glue_verbose:
|
||||
print "No attributes found in %s.py" % (glue_name)
|
||||
return 0
|
||||
def glue_getParam(number):
|
||||
global glue_paramKeys
|
||||
pd = glue_getParamDict()
|
||||
if pd != None:
|
||||
# see if there is a paramKey list
|
||||
if type(glue_paramKeys) == type([]):
|
||||
if number >= 0 and number < len(glue_paramKeys):
|
||||
return pd[glue_paramKeys[number]].getdef()
|
||||
else:
|
||||
print "glue_getParam: Error! %d out of range of attribute list" % (number)
|
||||
else:
|
||||
pl = pd.values()
|
||||
if number >= 0 and number < len(pl):
|
||||
return pl[number].getdef()
|
||||
else:
|
||||
if glue_verbose:
|
||||
print "glue_getParam: Error! %d out of range of attribute list" % (number)
|
||||
if glue_verbose:
|
||||
print "GLUE: Attribute list error"
|
||||
return None
|
||||
def glue_setParam(id,value):
|
||||
pd = glue_getParamDict()
|
||||
if pd != None:
|
||||
if pd.has_key(id):
|
||||
# first try to set the attribute via function call (if there is one)
|
||||
try:
|
||||
pd[id].__setvalue__(value)
|
||||
except AttributeError:
|
||||
if isinstance(pd[id],ptAttributeList):
|
||||
try:
|
||||
if type(pd[id].value) != type([]):
|
||||
pd[id].value = [] # make sure that the value starts as an empty list
|
||||
except AttributeError:
|
||||
pd[id].value = [] # or if value hasn't been defined yet, then do it now
|
||||
pd[id].value.append(value) # add in new value to list
|
||||
else:
|
||||
pd[id].value = value
|
||||
else:
|
||||
if glue_verbose:
|
||||
print "setParam: can't find id=",id
|
||||
else:
|
||||
print "setParma: Something terribly has gone wrong. Head for the cover."
|
||||
def glue_isNamedAttribute(id):
|
||||
pd = glue_getParamDict()
|
||||
if pd != None:
|
||||
try:
|
||||
if isinstance(pd[id],ptAttribNamedActivator):
|
||||
return 1
|
||||
if isinstance(pd[id],ptAttribNamedResponder):
|
||||
return 2
|
||||
except KeyError:
|
||||
if glue_verbose:
|
||||
print "Could not find id=%d attribute" % (id)
|
||||
return 0
|
||||
def glue_isMultiModifier():
|
||||
inst = glue_getInst()
|
||||
if isinstance(inst,ptMultiModifier):
|
||||
return 1
|
||||
return 0
|
||||
def glue_getVisInfo(number):
|
||||
global glue_paramKeys
|
||||
pd = glue_getParamDict()
|
||||
if pd != None:
|
||||
# see if there is a paramKey list
|
||||
if type(glue_paramKeys) == type([]):
|
||||
if number >= 0 and number < len(glue_paramKeys):
|
||||
return pd[glue_paramKeys[number]].getVisInfo()
|
||||
else:
|
||||
print "glue_getVisInfo: Error! %d out of range of attribute list" % (number)
|
||||
else:
|
||||
pl = pd.values()
|
||||
if number >= 0 and number < len(pl):
|
||||
return pl[number].getVisInfo()
|
||||
else:
|
||||
if glue_verbose:
|
||||
print "glue_getVisInfo: Error! %d out of range of attribute list" % (number)
|
||||
if glue_verbose:
|
||||
print "GLUE: Attribute list error"
|
||||
return None
|
286
MOULOpenSourceClientPlugin/Plasma20/Scripts/Python/plasma/pch.py
Normal file
286
MOULOpenSourceClientPlugin/Plasma20/Scripts/Python/plasma/pch.py
Normal file
@ -0,0 +1,286 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
""" pch - Plasma Console Helper
|
||||
This module aids in the using the plasma console to debug PythonFileComponents.
|
||||
"""
|
||||
# plasma console helper
|
||||
import Plasma
|
||||
import PlasmaTypes
|
||||
import sys
|
||||
|
||||
# globals for the outside and inside to grab
|
||||
__pmods = []
|
||||
__sel = 0
|
||||
__selattr = 0
|
||||
|
||||
# help!
|
||||
def help():
|
||||
"display help"
|
||||
print "functions:"
|
||||
print " getmods() - gets all the modules available"
|
||||
print " showmods() - show the modules (and the current selected module)"
|
||||
print " selmod(i) - selects module 'i'; returns module object"
|
||||
print " showmod() - shows detail of the module selected"
|
||||
print " showdoc() - shows the doc field of the module selected"
|
||||
print " showattribs() - shows all the plasma attributes of the module selected"
|
||||
print " selattrib(id) - selects attribute 'id' in the selected module;"
|
||||
print " returns attribute object"
|
||||
print " setattrib(value) - sets the selected attribute to 'value'"
|
||||
print " showglobals() - shows the globals for the selected module"
|
||||
print " setglobal(name,value) - set global 'name' to 'value' in selected module"
|
||||
print " getglobal(name) - returns global object"
|
||||
print " showinst() - shows the instance of the ptModifier class for the selected"
|
||||
print " module"
|
||||
print " getinst() - returns the instance object"
|
||||
print " showvars(inst) - shows the instance variables of the ptModifier class of"
|
||||
print " the selected module"
|
||||
print " showmethods(inst) - shows the methods of the ptModifier class of the"
|
||||
print " selected module"
|
||||
print " showfunc(method) - decompiles a method or function and shows source"
|
||||
print " setvar(name,value) - sets instance variable 'name' to 'value' in the"
|
||||
print " selected module"
|
||||
print " getvar(name) - returns the instance variable object (in selected module)"
|
||||
# modules
|
||||
def getmods():
|
||||
"get all the PythonFileComponent modules"
|
||||
global __pmods,__sel
|
||||
__pmods = [] # wipe the module list clean
|
||||
print "Plasma modules:"
|
||||
for modname in sys.modules.keys():
|
||||
mod = sys.modules[modname]
|
||||
if hasattr(mod,"glue_inst"):
|
||||
if __sel == len(__pmods):
|
||||
print "*%d. %s" % (len(__pmods),modname[:-13])
|
||||
else:
|
||||
print " %d. %s" % (len(__pmods),modname[:-13])
|
||||
__pmods.append([modname,mod])
|
||||
def showmods():
|
||||
"show all the PythonFileComponent modules"
|
||||
global __pmods
|
||||
global __sel
|
||||
idx = 0
|
||||
print "Plasma modules:"
|
||||
for mod in __pmods:
|
||||
if idx == __sel:
|
||||
print "*%d. %s" % (idx,mod[0][:-13])
|
||||
else:
|
||||
print " %d. %s" % (idx,mod[0][:-13])
|
||||
idx += 1
|
||||
def selmod(idx=None):
|
||||
"select a module from the list"
|
||||
global __pmods
|
||||
global __sel
|
||||
if type(idx) == type(None):
|
||||
idx = __sel
|
||||
elif type(idx) == type(""):
|
||||
# its a string, then find it by module name
|
||||
i = 0
|
||||
for mod in __pmods:
|
||||
if mod[0][:-13] == idx:
|
||||
break
|
||||
i += 1
|
||||
# if we didn't find the module
|
||||
if i == len(__pmods):
|
||||
print "Module %s not found" % idx
|
||||
return
|
||||
idx = i
|
||||
if idx < len(__pmods):
|
||||
__sel = idx
|
||||
print "%s selected" % (__pmods[idx][0][:-13])
|
||||
return __pmods[__sel][1]
|
||||
else:
|
||||
print "Error: index not valid. There are %d modules" % (len(__pmods))
|
||||
# find attributes
|
||||
def showmod():
|
||||
"show details of the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
print "Module: %s" % (__pmods[__sel][0][:-13])
|
||||
showdoc()
|
||||
showattribs()
|
||||
showglobals()
|
||||
showinst()
|
||||
def showdoc():
|
||||
"show the doc of the module selected"
|
||||
global __pmods
|
||||
global __sel
|
||||
print "Doc:"
|
||||
print __pmods[__sel][1].__doc__
|
||||
def showattribs():
|
||||
"show the plasma attributes of the module selected"
|
||||
global __pmods
|
||||
global __sel
|
||||
global __selattr
|
||||
print "Attributes in %s:" % (__pmods[__sel][0][:-13])
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptAttribute):
|
||||
if __selattr == ist.id:
|
||||
print "*(%d) %s(%s) =" % (ist.id,name,ist.__class__.__name__),ist.value
|
||||
else:
|
||||
print " (%d) %s(%s) =" % (ist.id,name,ist.__class__.__name__),ist.value
|
||||
def selattrib(id=None):
|
||||
"select a plasma attribute by id in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
global __selattr
|
||||
if type(id) == type(None):
|
||||
id = __selattr
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptAttribute):
|
||||
if id == ist.id:
|
||||
__selattr = ist.id
|
||||
print "%s(%s) =" % (name,ist.__class__.__name__),ist.value
|
||||
return ist
|
||||
print "Error: Attribute ID %d not found" % (id)
|
||||
def setattrib(value):
|
||||
"set the value of the selected plasma attribute in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
global __selattr
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptAttribute):
|
||||
if __selattr == ist.id:
|
||||
if type(ist.value) == type(None) or type(ist.value) == type(value):
|
||||
# see if there is a __setvalue__ method
|
||||
try:
|
||||
ist.__setvalue__(value)
|
||||
except AttributeError:
|
||||
ist.value = value
|
||||
else:
|
||||
print "Error: value is not same type as attribute"
|
||||
return
|
||||
print "Error: Attribute ID %d not found" % (id)
|
||||
# find globals
|
||||
def showglobals():
|
||||
"show the global variables of the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
print "Globals:"
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
# make sure that its not something we already know about
|
||||
if not hasattr(Plasma,name) and not hasattr(PlasmaTypes,name):
|
||||
if not isinstance(ist,PlasmaTypes.ptAttribute) and not isinstance(ist,PlasmaTypes.ptModifier):
|
||||
if name[:2] != '__' and name[:4] != 'glue':
|
||||
if type(ist) != type(sys) and type(ist) != type(PlasmaTypes.ptAttribute):
|
||||
print " %s =" % (name),ist
|
||||
def setglobal(name,value):
|
||||
"set a global variable to a value with in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
# first see if there is already a glabal by that name
|
||||
if not __pmods[__sel][1].__dict__.has_key(name):
|
||||
print "Warning: creating new global!"
|
||||
__pmods[__sel][1].__dict__[name] = value
|
||||
print "%s = " % (name),__pmods[__sel][1].__dict__[name]
|
||||
def getglobal(name):
|
||||
"get a global variable with in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
return __pmods[__sel][1].__dict__[name]
|
||||
# find instance
|
||||
def showinst():
|
||||
"show details of the instance of the ptModifier class in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptModifier):
|
||||
print "Instance of %s in module %s:" % (ist.__class__.__name__,__pmods[__sel][1].__name__[:-13])
|
||||
print " Doc: ",ist.__doc__
|
||||
showvars(ist)
|
||||
showmethods(ist)
|
||||
def getinst():
|
||||
"gets the instance of the ptModifier class in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptModifier):
|
||||
return ist
|
||||
def showvars(instance):
|
||||
"shows the variables of the instance"
|
||||
print " Variables:"
|
||||
if len(instance.__dict__) > 0:
|
||||
for vname in instance.__dict__.keys():
|
||||
print " %s =" % (vname),instance.__dict__[vname]
|
||||
else:
|
||||
print " (none)"
|
||||
def showmethods(instance):
|
||||
"shows the methods of the instance"
|
||||
print " Methods:"
|
||||
for mname in instance.__class__.__dict__.keys():
|
||||
mist = instance.__class__.__dict__[mname]
|
||||
# is it a function... see if it has code
|
||||
if hasattr(mist,'func_code'):
|
||||
# gather arguments
|
||||
args = "("
|
||||
for i in range(mist.func_code.co_argcount):
|
||||
args += mist.func_code.co_varnames[i]
|
||||
if i+1 < mist.func_code.co_argcount:
|
||||
args += ","
|
||||
args += ")"
|
||||
print " %s%s" % (mist.__name__,args)
|
||||
print " Doc:", mist.__doc__
|
||||
def showfunc(f):
|
||||
"decompiles function"
|
||||
import decompyle
|
||||
if hasattr(f,'func_code'):
|
||||
# create the argument list
|
||||
argstr = "("
|
||||
argcount = 0
|
||||
for arg in f.func_code.co_varnames[:f.func_code.co_argcount]:
|
||||
argstr += arg
|
||||
argcount += 1
|
||||
if argcount < f.func_code.co_argcount:
|
||||
argstr += ","
|
||||
argstr += ")"
|
||||
print "%s%s" % (f.func_name,argstr)
|
||||
print " Doc:",f.__doc__
|
||||
decompyle.decompyle(f.func_code)
|
||||
def setvar(vname,value):
|
||||
"set a variable within the instance of the ptModifier class in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptModifier):
|
||||
# first see if there is already a glabal by that name
|
||||
if not ist.__dict__.has_key(vname):
|
||||
print "Warning: creating new class variable!"
|
||||
ist.__dict__[vname] = value
|
||||
print "%s = " % (vname),ist.__dict__[vname]
|
||||
def getvar(vname):
|
||||
"get the variable in the instance of the ptModifier class in the selected module"
|
||||
global __pmods
|
||||
global __sel
|
||||
for name in __pmods[__sel][1].__dict__.keys():
|
||||
ist = __pmods[__sel][1].__dict__[name]
|
||||
if isinstance(ist,PlasmaTypes.ptModifier):
|
||||
return ist.__dict__[vname]
|
@ -0,0 +1,140 @@
|
||||
""" *==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==* """
|
||||
"""
|
||||
This module is the word filter to be used...
|
||||
"""
|
||||
import string
|
||||
import re
|
||||
|
||||
# Rating levels
|
||||
xRatedG = 0
|
||||
xRatedPG = 1
|
||||
xRatedPG13 = 2
|
||||
xRatedR = 3
|
||||
xRatedX = 4
|
||||
|
||||
class LanguageFilter:
|
||||
def __init__(self):
|
||||
pass
|
||||
def test(self,sentence):
|
||||
"returns censored sentence"
|
||||
return xRatedG
|
||||
def censor(self,sentence,censorLevel):
|
||||
"returns censored sentence"
|
||||
return sentence
|
||||
|
||||
class ExactMatchListFilter(LanguageFilter):
|
||||
def __init__(self,wordlist):
|
||||
self.wordlist = wordlist
|
||||
def test(self,sentence):
|
||||
"return the rating of sentence in question"
|
||||
rated = xRatedG # assume rated lowest level
|
||||
startidx = 0
|
||||
for endidx in range(len(sentence)):
|
||||
if sentence[endidx] in string.whitespace or sentence[endidx] in string.punctuation:
|
||||
if startidx != endidx:
|
||||
try:
|
||||
# find and get rating and substitute
|
||||
rating = self.wordlist[string.lower(sentence[startidx:endidx])]
|
||||
except LookupError:
|
||||
# couldn't find word
|
||||
rating = None
|
||||
if rating != None and rating.rating > rated:
|
||||
# substitute into string
|
||||
rated = rating.rating
|
||||
startidx = endidx + 1
|
||||
if startidx < len(sentence):
|
||||
try:
|
||||
# find and get rating and substitute
|
||||
rating = self.wordlist[string.lower(sentence[startidx:])]
|
||||
except LookupError:
|
||||
# couldn't find word
|
||||
rating = None
|
||||
if rating != None and rating.rating > rated:
|
||||
# substitute into string
|
||||
rated = rating.rating
|
||||
return rated
|
||||
|
||||
def censor(self,sentence,censorLevel):
|
||||
"censors a sentence to a rating"
|
||||
# break into words, but perserve original punctuation
|
||||
censored = ""
|
||||
startidx = 0
|
||||
for endidx in range(len(sentence)):
|
||||
if sentence[endidx] in string.whitespace or sentence[endidx] in string.punctuation:
|
||||
if startidx != endidx:
|
||||
try:
|
||||
# find and get rating and substitute
|
||||
rating = self.wordlist[string.lower(sentence[startidx:endidx])]
|
||||
except LookupError:
|
||||
# couldn't find word
|
||||
rating = None
|
||||
if rating != None and rating.rating > censorLevel:
|
||||
# substitute into string
|
||||
censored += rating.substitute + sentence[endidx]
|
||||
else:
|
||||
censored += sentence[startidx:endidx] + sentence[endidx]
|
||||
else:
|
||||
censored += sentence[startidx]
|
||||
startidx = endidx + 1
|
||||
if startidx < len(sentence):
|
||||
# Special after loop processing!
|
||||
try:
|
||||
# find and get rating and substitute
|
||||
rating = self.wordlist[string.lower(sentence[startidx:])]
|
||||
except LookupError:
|
||||
# couldn't find word
|
||||
rating = None
|
||||
if rating != None and rating.rating > censorLevel:
|
||||
# substitute into string
|
||||
censored += rating.substitute
|
||||
else:
|
||||
censored += sentence[startidx:]
|
||||
return censored
|
||||
|
||||
class REFilter(LanguageFilter):
|
||||
def __init__(self,regexp,rating):
|
||||
self.compiledRE = re.compile(regexp, re.IGNORECASE | re.MULTILINE )
|
||||
if not isinstance(rating,Rating):
|
||||
PtDebugPrint("ptWordFilter: rating for %s not of type Rating" % (regexp))
|
||||
self.rating = rating
|
||||
def test(self,sentence):
|
||||
"return the rating of sentence in question"
|
||||
if self.compiledRE.search(sentence) != None:
|
||||
return self.rating.rating
|
||||
return xRatedG
|
||||
def censor(self,sentence,censorLevel):
|
||||
"censors a sentence to a rating"
|
||||
if self.rating.rating > censorLevel:
|
||||
if self.compiledRE.search(sentence) != None:
|
||||
return self.compiledRE.sub(self.rating.substitute,sentence)
|
||||
return sentence
|
||||
|
||||
class Rating:
|
||||
"substitute can be string for exact substitute or number of splat replacement"
|
||||
def __init__(self,rating,subtitute="*****"):
|
||||
self.rating = rating
|
||||
self.substitute = subtitute
|
Reference in New Issue
Block a user