""" *==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 / > .
Additional permissions under GNU GPL version 3 section 7
If you modify this Program , or any covered work , by linking or
combining it with any of RAD Game Tools Bink SDK , Autodesk 3 ds Max SDK ,
NVIDIA PhysX SDK , Microsoft DirectX SDK , OpenSSL library , Independent
JPEG Group JPEG library , Microsoft Windows Media SDK , or Apple QuickTime SDK
( or a modified version of those libraries ) ,
containing parts covered by the terms of the Bink SDK EULA , 3 ds Max EULA ,
PhysX SDK EULA , DirectX SDK EULA , OpenSSL and SSLeay licenses , IJG
JPEG Library README , Windows Media SDK EULA , or QuickTime SDK EULA , the
licensors of this Program grant you additional
permission to convey the resulting work . Corresponding Source for a
non - source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work .
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