enderalse/scripts/source/_sag_playcards_mainscript.psc

535 lines
17 KiB
Plaintext

Scriptname _SAG_PlayCards_MainScript extends Quest
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function OpenCardInterface(_00E_TavernGames_GamlingTableSC objGamblingTableRef)
objGamblingTable = objGamblingTableRef
s_chargeninitialtext = Game.GetGameSettingString("sCharGenControlsDisabled")
Game.SetGameSettingString("sCharGenControlsDisabled","")
initialFurn = PlayerRef.GetFurnitureReference()
Game.DisablePlayerControls(abMovement = true, abFighting = true, abCamSwitch =true, abLooking = true, abSneaking = true, abMenu = false, abActivate = true, abJournalTabs = false, aiDisablePOVType = 0)
Game.ForceFirstPerson()
Commentator.GetActorBase().SetVoiceType((Opponent.GetReference() as Actor).GetVoiceType())
Commentator.SetName(Opponent.GetReference().GetDisplayName())
Commentator.SetDisplayName(Opponent.GetReference().GetDisplayName(), true)
Game.SetInChargen(abDisableSaving = true, abDisableWaiting = true, abShowControlsDisabledMessage = true)
PlayerPosition.MoveTo(PlayerRef)
Utility.Wait(0.3)
PlayerRef.MoveTo(Cameraman)
if Opponent.GetReference().IsDisabled()
Opponent.GetReference().Enable()
endif
Commentator.Say(GenericDialogue_Gambling_StartGameTopic)
Utility.Wait(5)
PlayCards()
EndFunction
Function PlayCards()
Step01()
EndFunction
int Function Step01() ; place your bet
; need to calculate the max bet first
if Opponent.GetReference().GetItemCount(Gold001) > PlayerRef.GetItemCount(Gold001)
MaxBet = (PlayerRef.GetItemCount(Gold001))/2
elseif Opponent.GetReference().GetItemCount(Gold001) < PlayerRef.GetItemCount(Gold001)
MaxBet = (Opponent.GetReference().GetItemCount(Gold001))/2
else
MaxBet = (PlayerRef.GetItemCount(Gold001))/2
endif
PlayerBet = (((self as QUEST) as FORM) as UILIB_1).ShowTextInput(PlaceYourBet .GetName()+MaxBet, MaxBet) as int
if PlayerBet == 0
FinishGameAndClearUp()
elseif PlayerBet > MaxBet
Step01()
else
PlayerPurse.EnableNoWait(true)
OpponentBet = utility.RandomInt(PlayerBet +(-3) , PlayerBet +5)
if OpponentBet <= 0
OpponentBet = PlayerBet
endif
GlobalBet = OpponentBet + PlayerBet
BetMessage.Show(PlayerBet, OpponentBet, GlobalBet)
EnemyPurse.EnableNoWait(true)
RegisterForKey(14)
RegisterForKey(271)
Helps.ShowAsHelpMessage("ShowCurrentStatsPC", 4.0, 3.0, 1)
Step02()
Return PlayerBet
endif
EndFunction
Function Step02() ; take player's cards
PCardLeft = Utility.RandomInt(0, 9)
PCardMiddle = Utility.RandomInt(0, 9)
PCardRight = Utility.RandomInt(0, 9)
totalplayer = 3 + PCardLeft + PCardMiddle + PCardRight
int BoostPrice = (PlayerBet*45)/100
Utility.Wait(2.0)
CardFlip.Play(PlayerRef)
PlayersLeft[PCardLeft].EnableNoWait(true)
Utility.Wait(2)
CardFlip.Play(PlayerRef)
PlayersRight[PCardRight].EnableNoWait(true)
Utility.Wait(2)
CardFlip.Play(PlayerRef)
PlayersMiddle[PCardMiddle].EnableNoWait(true)
Utility.Wait(2)
RegisterForKey(46)
RegisterForKey(280)
PressToCheatNow.ShowAsHelpMessage("PCCheatNow", 4.0, 3.0, 1)
Utility.Wait(4.0)
UnregisterforKey(46)
UnregisterforKey(280)
;incase the player was detected
while bInCheatAttempt == true
Utility.Wait(0.1)
endwhile
totalplayer = 3 + PCardLeft + PCardMiddle + PCardRight
PlayerScore.Show(totalplayer)
int choicedices = ThrowDices.Show(BoostPrice)
if ChoiceDices == 0
_00E_TavernGames_DiceRollM.Play(PlayerRef)
Utility.Wait(0.75)
int Dices = Utility.RandomInt(2, 12)
PlayerDice01 = Utility.RandomInt(1,6)
PlayerDice02 = Utility.RandomInt(1,6)
Dices = PlayerDice01 +PlayerDice02
PlayerDiceGroup01[PlayerDice01+(-1)].Enable(true)
PlayerDiceGroup02[PlayerDice02+(-1)].Enable(true)
totalplayer = totalplayer + Dices
PlayerRef.RemoveItem(Gold001, BoostPrice, false, Opponent.GetReference())
DicesResult.Show(Dices, totalplayer)
endif
Helps.ShowAsHelpMessage("ShowCurrentStatsPC", 4.0, 3.0, 1)
Step03()
EndFunction
Function Step03() ; take opponent's cards
Utility.Wait(1.5)
ECardLeft = Utility.RandomInt(0, 9)
ECardRight = Utility.RandomInt(0, 9)
ECardMiddle = Utility.RandomInt(0, 9)
totalEnemy = 3 + ECardLeft + EcardRight + EcardMiddle
int EBoostPrice = (OpponentBet*45)/100
int EnemyDices = Utility.RandomInt(2, 12)
OpponentDice01 = Utility.RandomInt(1,6)
OpponentDice02 = Utility.RandomInt(1,6)
EnemyDices = OpponentDice01 + OpponentDice02
CardFlip.Play(PlayerRef)
EnemyMiddle[ECardMiddle].EnableNoWait(true)
Utility.Wait(2)
CardFlip.Play(PlayerRef)
EnemyRight[ECardRight].EnableNoWait(true)
Utility.Wait(2)
CardFlip.Play(PlayerRef)
EnemyLeft[ECardLeft].EnableNoWait(true)
Utility.Wait(2.0)
if totalEnemy > totalplayer
EnemyResult.Show(totalEnemy)
elseif totalEnemy + 11 >= totalplayer
_00E_TavernGames_DiceRollM.Play(PlayerRef)
Utility.Wait(0.75)
OpponentDiceGroup01[OpponentDice01+(-1)].Enable(true)
OpponentDiceGroup02[OpponentDice02+(-1)].Enable(true)
EnemyDicesResult.Show(totalEnemy, EnemyDices, EBoostPrice)
Opponent.GetReference().RemoveItem(Gold001, EBoostPrice, false, PlayerRef)
totalEnemy = totalEnemy + EnemyDices
else
EnemyResult.Show(totalEnemy)
endif
Helps.ShowAsHelpMessage("ShowCurrentStatsPC", 2.0, 3.0, 1)
Step04()
EndFunction
Function Step04() ; check who won
if totalEnemy > totalPlayer
EnemyWon.Show(totalplayer, totalEnemy, GlobalBet)
PlayerRef.RemoveItem(Gold001, PlayerBet, false, Opponent.GetReference())
LostGames.Value += 1
LostBets.Value += GlobalBet
Commentator.Say(GenericDialogue_Gambling_PlayerLostTopic)
Utility.Wait(4)
elseif totalEnemy < totalPlayer
Victory.Add()
PlayerWon.Show(totalplayer, totalEnemy, GlobalBet)
Opponent.GetReference().RemoveItem(Gold001, OpponentBet, false, PlayerRef)
WonGames.Value += 1
WonBets.Value += GlobalBet
Commentator.Say(GenericDialogue_Gambling_PlayerWonTopic)
If Wongames.GetValueInt() == 10 && _00E_AchievementsEnabled.GetValueInt() == 1
Game.UnlockAchievement("END_CARDSHARK_01")
EndIf
Utility.Wait(4)
elseif totalEnemy == totalPlayer
NoOneWon.Show(totalplayer, totalEnemy)
ExAequo.Value += 1
Commentator.Say(GenericDialogue_Gambling_PlayerWonTopic)
Utility.Wait(4)
endif
if PlayerRef.GetItemCount(Gold001) >= 10 && Opponent.GetReference().GetItemCount(Gold001) >= 10
int PlayAgainCHoice = PlayAgain.Show(PlayerRef.GetItemCount(Gold001),Opponent.GetReference().GetItemCount(Gold001) )
if PlayAgainChoice == 0
ResetGame()
else
FinishGameAndClearUp()
endif
else
FinishGameNoGold()
EndIf
EndFunction
Function FinishGameNoGold()
if Opponent.GetReference().GetItemCount(GOld001) < 10
OpponentNoMoreGold.Show()
endif
OpponentShoutThief.Clear()
UnregisterForKey(14)
UnregisterForKey(271)
punishment = 0
if Opponent.GetReference().IsDisabled()
Opponent.GetReference().Enable()
endif
PlayerDiceGroup01[PlayerDice01+(-1)].Disable(false)
PlayerDiceGroup02[PlayerDice02+(-1)].Disable(false)
OpponentDiceGroup01[OpponentDice01+(-1)].Disable(false)
OpponentDiceGroup02[OpponentDice02+(-1)].Disable(false)
PlayersLeft[PCardLeft].Disable(FALSE)
PlayersRight[PCardRight].Disable(false)
PlayersMiddle[PCardMiddle].Disable(false)
EnemyLeft[ECardLeft].Disable(false)
EnemyRight[ECardRight].Disable(false)
EnemyMiddle[ECardMiddle].Disable(false)
EnemyPurse.Disable(false)
PlayerPurse.Disable(false)
Opponent.Clear()
Victory.Remove()
playerbet = 0
opponentbet = 0
globalbet = 0
totalplayer = 0
totalenemy = 0
Message.ResetHelpMessage("ShowCurrentStatsPC")
Message.ResetHelpMessage("PCCheatNow")
Utility.Wait(2.0)
if initialFurn != none
PlayerRef.MoveTo(initialFurn)
else
PlayerRef.MoveTo(PlayerPosition)
endif
Game.EnablePlayerControls()
Game.SetGameSettingString("sCharGenControlsDisabled", s_chargeninitialtext)
Game.SetInChargen(abDisableSaving = false, abDisableWaiting = true, abShowControlsDisabledMessage = false)
objGamblingTable.SendGameFinishedEvent()
EndFunction
Function ResetGame()
OpponentShoutThief.Clear()
punishment = 0
if Opponent.GetReference().IsDisabled()
Opponent.GetReference().Enable()
endif
PlayerDiceGroup01[PlayerDice01+(-1)].Disable(false)
PlayerDiceGroup02[PlayerDice02+(-1)].Disable(false)
OpponentDiceGroup01[OpponentDice01+(-1)].Disable(false)
OpponentDiceGroup02[OpponentDice02+(-1)].Disable(false)
PlayersLeft[PCardLeft].Disable(FALSE)
PlayersRight[PCardRight].Disable(false)
PlayersMiddle[PCardMiddle].Disable(false)
EnemyLeft[ECardLeft].Disable(false)
EnemyRight[ECardRight].Disable(false)
EnemyMiddle[ECardMiddle].Disable(false)
EnemyPurse.Disable(false)
PlayerPurse.Disable(false)
Victory.Remove()
playerbet = 0
opponentbet = 0
globalbet = 0
totalplayer = 0
totalenemy = 0
Message.ResetHelpMessage("ShowCurrentStatsPC")
Message.ResetHelpMessage("PCCheatNow")
PlayCards()
EndFunction
Function FinishGameAndClearUp()
OpponentShoutThief.Clear()
UnregisterForKey(14)
UnregisterForKey(271)
punishment = 0
if Opponent.GetReference().IsDisabled()
Opponent.GetReference().Enable()
endif
PlayerDiceGroup01[PlayerDice01+(-1)].Disable(false)
PlayerDiceGroup02[PlayerDice02+(-1)].Disable(false)
OpponentDiceGroup01[OpponentDice01+(-1)].Disable(false)
OpponentDiceGroup02[OpponentDice02+(-1)].Disable(false)
PlayersLeft[PCardLeft].Disable(FALSE)
PlayersRight[PCardRight].Disable(false)
PlayersMiddle[PCardMiddle].Disable(false)
EnemyLeft[ECardLeft].Disable(false)
EnemyRight[ECardRight].Disable(false)
EnemyMiddle[ECardMiddle].Disable(false)
EnemyPurse.Disable(false)
PlayerPurse.Disable(false)
Opponent.Clear()
Victory.Remove()
playerbet = 0
opponentbet = 0
globalbet = 0
totalplayer = 0
totalenemy = 0
Message.ResetHelpMessage("ShowCurrentStatsPC")
Message.ResetHelpMessage("PCCheatNow")
; Utility.Wait(2.0)
if initialFurn != none
PlayerRef.MoveTo(initialFurn)
else
PlayerRef.MoveTo(PlayerPosition)
endif
Game.EnablePlayerControls()
Game.SetGameSettingString("sCharGenControlsDisabled", s_chargeninitialtext)
Game.SetInChargen(abDisableSaving = false, abDisableWaiting = true, abShowControlsDisabledMessage = false)
objGamblingTable.SendGameFinishedEvent()
EndFunction
Event OnKeyDown(int control)
if !UI.IsMenuOpen("MessageBoxMenu")
if control == 14 || control == 271
Stats.Show(playerbet, OpponentBet, GlobalBet, totalplayer, totalenemy)
elseif control == 46 || control == 280
AttemptToCheat()
endif
endif
EndEvent
Function AttemptToCheat()
bInCheatAttempt = true
UnregisterforKey(46)
UnregisterforKey(280)
Int[] iNums = new Int[3]
iNums[0] = PCardLeft
iNums[1] = PCardMiddle
iNums[2] = PCardRight
Int index = iNums.Length
Int iLowestValue = 9
int iLowestCard
While index
index -= 1
Int CurrentValue = iNums[index]
if CurrentValue < iLowestValue
iLowestValue = CurrentValue
iLowestCard = index
endif
EndWhile
;Debug.Notification("Lowest Value: " + (iLowestValue+1) + ", Lowest Card: " + (iLowestCard+1))
if iLowestCard == 0
PCardLeftBeforeCheat = PCardLeft
PlayersLeft[PCardLeft].Disable(true)
PCardLeft = 9
PlayersLeft[PCardLeft].Enable(true)
ReplacedCard = 1
CalculateIfDetected()
elseif iLowestCard == 1
PCardMiddleBeforeCheat = PCardMiddle
PlayersMiddle[PCardMiddle].Disable(true)
PCardMiddle = 9
PlayersMiddle[PCardMiddle].Enable(true)
ReplacedCard = 2
CalculateIfDetected()
elseif iLowestCard == 2
PCardRightBeforeCheat = PCardRight
PlayersRight[PCardRight].Disable(true)
PCardRight = 9
PlayersRight[PCardRight].Enable(true)
ReplacedCard = 3
CalculateIfDetected()
elseif iLowestValue == 9
AllCardsOptimized.Show()
endif
iLowestValue = 9
bInCheatAttempt = false
EndFunction
Function CalculateIfDetected()
float DetectionChance = Utility.RandomFloat(25.0, 110.0)
if PlayerRef.GetActorValue("Pickpocket")+ (-15.0) <= DetectionChance
Punishment = (OpponentBet*40)/100
OpponentBet -= Punishment
GlobalBet -= Punishment
_00E_TavernGames_GetCaughtM.Play(PlayerREF)
_00E_TavernGames_CaughtCheatingImod.Apply()
Caught.Show(Punishment)
if ReplacedCard == 1
PlayersLeft[PCardLeft].Disable(true)
PCardLeft = PCardLeftBeforeCheat
PlayersLeft[PCardLeft].Enable(true)
elseif ReplacedCard == 2
PlayersMiddle[PCardMiddle].Disable(true)
PCardMiddle = PCardMiddleBeforeCheat
PlayersMiddle[PCardMiddle].Enable(true)
elseif ReplacedCard == 3
PlayersRight[PCardRight].Disable(true)
PCardRight = PCardRightBeforeCheat
PlayersRight[PCardRight].Enable(true)
endif
Commentator.Say(GenericDialogue_Gambling_PlayerCheatTopic)
Utility.Wait(4)
EndIf
Return
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
String s_chargeninitialtext
Int TotalEnemy = 0
Int OpponentBet = 0
Int MaxBet = 0
Int Property TotalPlayer = 0 Auto
Int GlobalBet = 0
Int Property PlayerBet = 0 Auto
Int PlayerDice01
Int PlayerDice02
Int ReplacedCard
Int punishment = 0
Int ECardMiddle
Int ECardLeft
Int ECardRight
Int PCardMiddle
Int PCardLeft
Int PCardRight
Int PCardLeftBeforeCheat
Int PCardMiddleBeforeCheat
Int PCardRightBeforeCheat
Int OpponentDice01
Int OpponentDice02
bool bInCheatAttempt = false
ObjectReference initialFurn
_00E_TavernGames_GamlingTableSC objGamblingTable
Topic Property GenericDialogue_Gambling_StartGameTopic Auto
Topic Property GenericDialogue_Gambling_PlayerLostTopic Auto
Topic Property GenericDialogue_Gambling_PlayerWonTopic Auto
Topic Property GenericDialogue_Gambling_PlayerCheatTopic Auto
Actor Property Commentator Auto
Actor Property PlayerRef Auto
Message Property PlaceYourBet Auto
GlobalVariable Property ExAequo Auto
GlobalVariable Property WonGames Auto
GlobalVariable Property LostGames Auto
GlobalVariable Property LostBets Auto
GlobalVariable Property WonBets Auto
GlobalVariable Property _00E_AchievementsEnabled Auto
ReferenceAlias Property OpponentShoutThief Auto
ReferenceAlias Property Opponent Auto
ImageSpaceModifier Property _00E_TavernGames_CaughtCheatingImod Auto
Message Property PlayAgain Auto
Message Property PressToCheatNow Auto
Message Property PlayerScore Auto
Message Property DicesResult Auto
Message Property ThrowDices Auto
Message Property BetMessage Auto
Message Property EnemyDicesResult Auto
Message Property EnemyResult Auto
Message Property OpponentNoMoreGold Auto
Message Property Caught Auto
Message Property Helps Auto
Message Property Stats Auto
Message Property PlayerWon Auto
Message Property EnemyWon Auto
Message Property NoOneWon Auto
Message Property AllCardsOptimized Auto
ObjectReference Property EnemyPurse Auto
ObjectReference Property PlayerPurse Auto
ObjectReference Property PlayerPosition Auto Hidden
ObjectReference Property Cameraman Auto
ObjectReference Property PlayCards_ThiefShouter Auto
;PLAYER CARDS
ObjectReference[] Property PlayersLeft Auto
ObjectReference[] Property PlayersMiddle Auto
ObjectReference[] Property PlayersRight Auto
; OPPONENT CARDS
ObjectReference[] Property EnemyLeft Auto
ObjectReference[] Property EnemyMiddle Auto
ObjectReference[] Property EnemyRight Auto
ObjectReference[] Property PlayerDiceGroup01 Auto
ObjectReference[] Property PlayerDiceGroup02 Auto
ObjectReference[] Property OpponentDiceGroup01 Auto
ObjectReference[] Property OpponentDiceGroup02 Auto
MusicType Property Victory Auto
Sound Property CardFlip Auto
Sound Property _00E_TavernGames_ThiefShoutM Auto
Sound Property _00E_TavernGames_GetCaughtM Auto
Sound Property _00E_TavernGames_DiceRollM Auto
MiscObject Property Gold001 Auto
ObjectReference Property BeeHive Auto