4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

390 lines
12 KiB

Scriptname _SAG_Activ_DiceBlackJackMainsScript extends Quest
_00E_TavernGames_GamlingTableSC objGamblingTable
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function InitiateGame(_00E_TavernGames_GamlingTableSC objGamblingTableRef)
objGamblingTable = objGamblingTableRef
; _SAG_Activ_BlackJackDiceQuest
s_chargeninitialtext = Game.GetGameSettingString("sCharGenControlsDisabled")
Game.SetGameSettingString("sCharGenControlsDisabled", "")
Commentator.GetActorBase().SetVoiceType(Opponent.GetActorReference().GetVoiceType())
Commentator.SetName(Opponent.GetReference().GetDisplayName())
Commentator.SetDisplayName(Opponent.GetReference().GetDisplayName(), true)
initialFurn = PlayerRef.GetFurnitureReference()
game.DisablePlayerControls(true, true, true, true, true, false, true, false, 0)
game.ForceFirstPerson()
game.SetInChargen(true, true, true)
PlayerPosition.MoveTo(PlayerRef as objectreference, 0.000000, 0.000000, 0.000000, true)
utility.Wait(0.300000)
PlayerRef.MoveTo(Marker, 0.000000, 0.000000, 0.000000, true)
iStartGold = Opponent.GetReference().GetItemcount(Gold001)
if Opponent.GetReference().IsDisabled()
Opponent.GetReference().Enable(false)
endIf
Commentator.Say(GenericDialogue_Gambling_StartGameTopic)
Utility.Wait(5.0)
Step01()
EndFunction
Function Step01()
if Opponent.GetReference().GetItemcount(Gold001) >= iStartGold*3
Opponent.GetReference().RemoveItem(Gold001, 30000)
Opponent.GetReference().AddItem(Gold001, iStartGold*3)
EndIf
Message.ResetHelpMessage("TossCoinTailsEvent")
Message.ResetHelpMessage("TossCoinHeadEvent")
PlayerThrowing = 0
OpponentTHrowing = 0
PlayerScore = 0
OpponentScore = 0
if PlayerRef.GetItemcount(gold001) < Opponent.GetReference().GetItemCount(gold001)
MaxBet = PlayerRef.GetItemcount(gold001) / 2
elseif PlayerRef.GetItemcount(gold001) >= Opponent.GetReference().GetItemCount(gold001)
MaxBet = Opponent.GetReference().GetItemcount(gold001) / 2
endif
if EnderalFunctions.TextInputEnabled()
PlayerBet = (((self as QUEST) as FORM) as UILIB_1).ShowTextInput(PlaceYourBet .GetName()+MaxBet, MaxBet) as int
else
float fPrevValue = PlayerRef.GetActorValue("Variable08")
PlayerRef.SetActorValue("Variable08", MaxBet)
int iBet = _SAG_SelectBetMessage.Show()
PlayerRef.SetActorValue("Variable08", fPrevValue)
if iBet == 0
PlayerBet = 50
elseif iBet == 1
PlayerBet = 100
elseif iBet == 2
PlayerBet = 200
elseif iBet == 3
PlayerBet = 350
elseif iBet == 4
PlayerBet = 500
elseif iBet == 5
PlayerBet = 750
elseif iBet == 6
PlayerBet = 1000
else
PlayerBet = 0
endif
endif
if PlayerBet <= 0
QuitGame()
elseif PlayerBet > MaxBet
Step01()
Return
else
Step02()
endif
EndFunction
Function Step02()
MaxDice01 = Utility.RandomInt(0,5)
MaxDice02 = Utility.RandomInt(0,5)
MaxScore = (MaxDice01+MaxDice02+2) *3
_00E_TavernGames_DiceRollM.Play(PlayerREF)
Utility.Wait(1.5)
MaxDices[MaxDice01].Enable(true)
MaxDices2[MaxDice02].Enable(true)
Utility.Wait(2.0)
MaxScoreMessage.Show(MaxDice01+MaxDice02+2,MaxScore)
CoinToss()
EndFunction
Function CoinToss()
CoinTossResult = Utility.RandomInt(0,1)
Coin[CoinTossResult].Enable(true)
if CoinTossResult == 0
Head.ShowAsHelpMessage("TossCoinHeadEvent", 5.0, 1.0,1)
Utility.Wait(3.0)
PlayerTurn()
else
Tails.ShowAsHelpMessage("TossCoinTailsEvent", 5.0, 1.0,1)
Utility.Wait(3.0)
OpponentTurn()
endif
EndFunction
Function PlayerTurn()
PlayerPlayed = TRUE
PlayerDice1[PlayerDice01].Disable()
PlayerDice2[PlayerDice02].Disable()
PlayerDice01 = Utility.RandomInt(0,5)
PlayerDice02 = Utility.RandomInt(0,5)
_00E_TavernGames_DiceRollM.Play(PlayerREF)
Utility.Wait(1.5)
PlayerDice1[PlayerDice01].Enable(true)
PlayerDice2[PlayerDice02].Enable(true)
PlayerScore += (PlayerDice01+PlayerDice02+2)
PlayerThrowing += 1
if PlayerScore > MaxScore
_SAG_Activ_BJ_Fails.Value += 1
_SAG_Activ_BJ_GoldLost.Value += PlayerBet *2
PlayerDiceFail.Show(PlayerScore, MaxScore, PlayerBet*2)
PlayerRef.RemoveItem(Gold001, PlayerBet*2, false, Opponent.GetReference())
PlayAgain()
elseif PlayerScore == MaxScore
_SAG_Activ_BJ_Victories.Value += 1
If _SAG_Activ_BJ_Victories.GetValueInt() == 10
Steam.UnlockAchievement("END_DICEGOD_01")
EndIf
_SAG_Activ_BJ_GoldWon.Value += PLayerBet *2
PlayerPerfectDice.Show(MaxScore, PlayerBet*2)
Opponent.GetReference().RemoveItem(Gold001, PLayerBet*2)
PlayerRef.AddItem(Gold001, PlayerBet*2)
PlayAgain()
elseif PlayerScore < MaxScore
int ThrowAgainChoice = ThrowAgain.Show(PlayerScore, PlayerThrowing, OpponentScore, OpponentTHrowing, MaxScore)
if ThrowAgainChoice == 0
PlayerTurn()
elseif THrowAgainCHoice == 1 && !OpponentPlayed
OpponentTurn()
elseif OpponentPlayed && ThrowAgainChoice == 1
if OpponentScore == PlayerScore
ExAequo.Show(PlayerBet)
_SAG_Activ_BJ_ExAequo.Value += 1
Commentator.Say(GenericDialogue_Gambling_PlayerWonTopic)
Utility.Wait(4)
PlayAgain()
elseif OpponentScore > PlayerScore
_SAG_Activ_BJ_Fails.Value += 1
_SAG_Activ_BJ_GoldLost.Value += PlayerBet
OpponentWon.Show(OpponentScore, MaxScore, PlayerScore, PlayerBet)
PlayerRef.RemoveItem(Gold001, PlayerBet, false, Opponent.GetReference())
Commentator.Say(GenericDialogue_Gambling_PlayerLostTopic)
Utility.Wait(4)
PlayAgain()
elseif OpponentScore < PlayerScore
_SAG_Activ_BJ_Victories.Value += 1
If _SAG_Activ_BJ_Victories.GetValueInt() == 10
Steam.UnlockAchievement("END_DICEGOD_01")
EndIf
_SAG_Activ_BJ_GoldWon.Value += PLayerBet
PlayerWon.Show(PlayerScore, MaxScore, OpponentScore, PlayerBet)
Opponent.GetReference().RemoveItem(Gold001, PLayerBet)
PlayerRef.AddItem(Gold001, PlayerBet)
Commentator.Say(GenericDialogue_Gambling_PlayerWonTopic)
Utility.Wait(4)
PlayAgain()
endif
endif
endif
EndFunction
Function OpponentTurn()
Utility.Wait(0.5)
OpponentPlayed = TRUE
OpponentDice1[OpponentDice01].Disable()
OpponentDice2[OpponentDice02].Disable()
OpponentDice01 = Utility.RandomInt(0,5)
OpponentDice02 = Utility.RandomInt(0,5)
_00E_TavernGames_DiceRollM.Play(PlayerREF)
Utility.Wait(1.5)
OpponentDice1[OpponentDice01].Enable(true)
OpponentDice2[OpponentDice02].Enable(true)
OpponentScore += (OpponentDice01+OpponentDice02+2)
OpponentThrowing += 1
if OpponentScore > MaxScore
_SAG_Activ_BJ_Victories.Value += 1
If _SAG_Activ_BJ_Victories.GetValueInt() == 10
Steam.UnlockAchievement("END_DICEGOD_01")
EndIf
_SAG_Activ_BJ_GoldWon.Value += PlayerBet *2
OpponentDiceFail.Show(OpponentScore, MaxScore, PlayerBet*2)
Opponent.GetReference().RemoveItem(Gold001, PlayerBet*2)
PlayerRef.AddItem(Gold001, PlayerBet*2)
PlayAgain()
elseif OpponentScore == MaxScore
_SAG_Activ_BJ_Fails.Value += 1
_SAG_Activ_BJ_GoldLost.Value += PlayerBet *2
OpponentPerfectDice.Show(OpponentScore,PlayerBet*2)
PlayerRef.RemoveItem(Gold001, PlayerBet*2, false, Opponent.GetReference())
PlayAgain()
elseif OpponentScore < MaxScore
int RiskTreshold = Utility.RandomInt(5,9)
if PlayerScore >= OpponentScore && MaxScore - OpponentScore >= RiskTreshold
OpponentTurn()
elseif PlayerScore <= OpponentScore && PlayerPlayed == FALSE && MaxScore - OpponentScore >= RiskTreshold
OpponentTurn()
elseif PlayerScore <= OpponentScore && PlayerPLayed == TRUE && MaxScore - OpponentScore >= RiskTreshold+5
OpponentTurn()
elseif PlayerScore < OpponentScore && PlayerPlayed == TRUE && MaxScore - OpponentScore < RiskTreshold+5
_SAG_Activ_BJ_Fails.Value += 1
_SAG_Activ_BJ_GoldLost.Value += PlayerBet
OpponentWon.Show(OpponentScore, MaxScore, PlayerScore, PlayerBet)
PlayerRef.RemoveItem(Gold001, PlayerBet, false, Opponent.GetReference())
PlayAgain()
elseif PlayerScore == OpponentScore && PlayerPlayed == TRUE && MaxScore - OpponentScore < RiskTreshold - 3
ExAequo.Show(PlayerBet)
_SAG_Activ_BJ_ExAequo.Value += 1
PlayAgain()
else
if !PlayerPlayed
PlayerTurn()
else
if PlayerPlayed && PlayerScore > OpponentScore
_SAG_Activ_BJ_Victories.Value += 1
If _SAG_Activ_BJ_Victories.GetValueInt() == 10
Steam.UnlockAchievement("END_DICEGOD_01")
EndIf
_SAG_Activ_BJ_GoldWon.Value += PlayerBet
PlayerWon.Show(PlayerScore, MaxScore, OpponentScore, PlayerBet)
PLayerRef.AddItem(Gold001, PlayerBet)
Opponent.GetReference().RemoveItem(Gold001, PlayerBet)
PlayAgain()
elseif PlayerPlayed && PlayerScore == OpponentScore
ExAequo.Show(PlayerBet)
_SAG_Activ_BJ_ExAequo.Value += 1
PlayAgain()
elseif PlayerPlayed && PlayerScore < OpponentScore
_SAG_Activ_BJ_Fails.Value += 1
_SAG_Activ_BJ_GoldLost.Value += PlayerBet
OpponentWon.Show(OpponentScore, MaxScore, PlayerScore, PlayerBet)
PlayerRef.RemoveItem(Gold001, PlayerBet, false)
Opponent.GetReference().AddItem(Gold001, PlayerBet)
PlayAgain()
endif
endif
endif
endif
EndFunction
Function PlayAgain()
if PlayerRef.GetItemCount(Gold001) >= 10 && Opponent.GetReference().GetItemCount(Gold001) >= 10
int PlayAgainChoice = PlayAgainMessage.Show(PlayerRef.GetItemCount(gold001), Opponent.GetReference().GetItemCount(gold001))
if PlayAgainChoice == 0
MaxDices[MaxDice01].Disable()
MaxDices2[MaxDice02].Disable()
PlayerDice1[PlayerDice01].Disable()
PlayerDice2[PlayerDice02].Disable()
OpponentDice1[OpponentDice01].Disable()
OpponentDice2[OpponentDice02].Disable()
PlayerPlayed = FALSE
OpponentPlayed = FALSE
Coin[CoinTOssResult].Disable()
Step01()
else
QuitGame()
endif
else
QuitGame()
endif
EndFunction
Function QuitGame()
Game.SetGameSettingString("sCharGenControlsDisabled", s_chargeninitialtext)
if initialfurn
PlayerRef.MoveTo(initialfurn)
else
PlayerRef.MoveTo(Playerposition)
endif
Game.EnablePlayerControls()
Game.SetInChargen(abDisableSaving = false, abDisableWaiting = true, abShowControlsDisabledMessage = false)
Opponent.Clear()
MaxDices[MaxDice01].Disable()
MaxDices2[MaxDice02].Disable()
PlayerDice1[PlayerDice01].Disable()
PlayerDice2[PlayerDice02].Disable()
OpponentDice1[OpponentDice01].Disable()
OpponentDice2[OpponentDice02].Disable()
PlayerPlayed = FALSE
OpponentPlayed = FALSE
Coin[CoinTOssResult].Disable()
objGamblingTable.SendGameFinishedEvent()
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
int iStartGold
Topic Property GenericDialogue_Gambling_StartGameTopic Auto
Topic Property GenericDialogue_Gambling_PlayerLostTopic Auto
Topic Property GenericDialogue_Gambling_PlayerWonTopic Auto
Topic Property GenericDialogue_Gambling_PlayerCheatTopic Auto
Message Property Head Auto
Message Property Tails Auto
Message Property ThrowAgain Auto
Message Property OpponentWon Auto
Message Property PlayerWon Auto
Message Property ExAequo Auto
Message Property PlayAgainMessage Auto
Message Property PlayerPerfectDice Auto
Message Property OpponentPerfectDice Auto
Message Property PlayerDiceFail Auto
Message Property OpponentDiceFail Auto
GlobalVariable Property _SAG_Activ_BJ_ExAequo Auto
GlobalVariable Property _SAG_Activ_BJ_Fails Auto
GlobalVariable Property _SAG_Activ_BJ_GoldLost Auto
GlobalVariable Property _SAG_Activ_BJ_GoldWon Auto
GlobalVariable Property _SAG_Activ_BJ_Victories Auto
Message Property PlaceYourBet Auto
Message Property _SAG_SelectBetMessage Auto
String s_chargeninitialtext
Int OpponentTHrowing = 0
Int PlayerTHrowing = 0
Message Property MaxScoreMessage Auto
MiscObject Property Gold001 Auto
Sound Property _00E_TavernGames_DiceRollM Auto
Int MaxBet
Int PlayerBet
Int PlayerScore
Int OpponentScore
Int MaxScore
Actor Property PlayerRef Auto
ObjectReference Property PlayerPosition Auto
ReferenceAlias Property Opponent Auto
Actor Property Commentator Auto
ObjectReference initialFurn
ObjectReference Property Marker Auto
Objectreference[] Property MaxDices Auto
Objectreference[] Property MaxDices2 Auto
Objectreference[] Property PlayerDice1 Auto
Objectreference[] Property PlayerDice2 Auto
Objectreference[] Property OpponentDice1 Auto
Objectreference[] Property OpponentDice2 Auto
ObjectReference[] Property Coin Auto
Int CoinTossResult
Int OpponentDice01
Int OpponentDice02
Int PlayerDice01
Int PlayerDice02
int MaxDice02
int MaxDice01
Bool OpponentPlayed = FALSE
Bool PlayerPlayed = FALSE