Paste #107146: Simple Dice Game

Date: 2023/03/09 23:56:23 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


#---------------------------------------------------------------------#
#-----Simple Dice Game. Player and delayer rolls 3 dices--------------#
#--------If player dices summary more than dealers -------------------#
#--------player bet doublled, otherwise it burns----------------------#
#---------------------------------------------------------------------#

#------------------------#
#--------TASKS-----------#
#------------------------#

simple_dice_game_roll_dices:
#-----Procedure to roll 3 dices and wrtite to list.
    debug: false
    type: procedure
    script:
    - repeat 3:
        - define dices:->:<util.random.int[1].to[6]>
    - determine <[dices]>

simple_dice_game_print_result:
#-----Print result of rolling with total points.
    debug: false
    type: task
    defenitions: who|dice1|dice2|dice3|total
    script:
    - narrate "------------"
    - narrate "<[who]> dices:"
    - narrate "|---| |---| |---|"
    - narrate "|-<[dice1]>-| |-<[dice2]>-| |-<[dice3]>-| Total = <[total]>"
    - narrate "|---| |---| |---|"

simple_dice_game_winner_check:
#-----Check winner.
    debug: false
    type: task
    defenitions: player_sum_check|dealer_sum_check
    script:
    - narrate "~~~~~~RESULT~~~~~~"
    - wait 1s
    - if <[player_sum_check]> == <[dealer_sum_check]>:
        - narrate "Draw!"
        - stop
    - if <[player_sum_check]> > <[dealer_sum_check]>:
            - narrate "<player.name> win!"
            - give <player.flag[bet]> quantity:2
            - flag <player> bet:!
            #-----Give player his bet with reward and remove bet flag
    - else:
        - narrate "<player.name> lose!"
        - wait 1s
        - narrate "Dealer keeps <player.flag[bet].formatted.to_uppercase>!"
        - flag <player> bet:!

simple_dice_game_drop_bet:
#-----Return bet and clean flag.
    debug: false
    type: task
    script:
    - give <player.flag[bet]> quantity:1
    - flag <player> bet:!

simple_dice_game:
    debug: false
    type: task
    script:
    - narrate "Nice! Let's roll"
    - wait 1s
    - foreach <list[player|dealer]> as:entity:
        - define <[entity]>_dices:<proc[simple_dice_game_roll_dices]>
        #-----Roll dice
        - define <[entity]>_sum:<[<[entity]>_dices].sum>
        #-----Save dice summary
        - ~run simple_dice_game_print_result def.who:<[entity].to_uppercase> def.dice1:<[<[entity]>_dices].get[1]> def.dice2:<[<[entity]>_dices].get[2]> def.dice3:<[<[entity]>_dices].get[3]> def.total:<[<[entity]>_sum]>
        #-----Print result
        - wait 1s
    - ~run simple_dice_game_winner_check def.player_sum_check:<[player_sum]> def.dealer_sum_check:<[dealer_sum]>
    #-----Check winner
    - wait 1s

#------------------------#
#-----NPC ASSIGNMENT-----#
#------------------------#

simple_dice_game_npc:
    type: assignment
    actions:
        on assignment:
        - trigger name:click state:true
        - trigger name:proximity state:true radius:5
        - trigger name:chat state:true cooldown:2s radius:3
    interact scripts:
    - simple_dice_game_interact

simple_dice_game_interact:
    debug: false
    type: interact
    steps:
        default*:
            proximity trigger:
                entry:
                    script:
                    - engage
                    - narrate "Wanna play dices?"
                    - wait 1s
                    - narrate "Rules: If you win - your bet will be doubled. If you lose I will take your et."
                    - wait 1s
                    - narrate "If so, take your bet to the hand and click on me."
                    - disengage
                exit:
                    script:
                    - narrate "See you."
                    #-----Return bet and clean flag if player leave.
                    - if <player.has_flag[bet]>:
                        - inject simple_dice_game_drop_bet
            click trigger:
                script:
                    - engage
                    #-----Return bet and clean flag if player already have bet flag, but in default state.
                    - if <player.has_flag[bet]>:
                        - inject simple_dice_game_drop_bet
                    - flag <player> bet:<player.item_in_hand>
                    - take iteminhand quantity:1
                    #-----Remember player bet and take item
                    - narrate "Your bet is <player.flag[bet].formatted.to_uppercase>? Are you sure?"
                    - narrate "<&7>[<element[<&4><&n>Yes].click_chat[Yes].on_hover[Yes]> or <element[<&4><&n>No].click_chat[No].on_hover[No]>] or click for yes"
                    #-----Ask for confirmation(yes, no, or click)
                    - disengage
                    - zap game_acception 1m
        game_acception:
            proximity trigger:
                exit:
                    script:
                        #-----Return bet and clean flag if player leave.
                        - narrate "As you wish"
                        - inject simple_dice_game_drop_bet
                        - zap *
            click trigger:
                script:
                    - engage
                    - inject simple_dice_game
                    - narrate "Thank you"
                    - disengage
                    - zap *
            chat trigger:
                1:
                    trigger: /Yes|Yes|yes/
                    script:
                        - engage
                        - inject simple_dice_game
                        #-----Run game
                        - narrate "Thank you"
                        - disengage
                        - zap *
                2:
                    trigger: /NO|No|no/
                    script:
                        #-----Return bet and clean flag if player disagry.
                        - engage
                        - narrate "Ok"
                        - inject simple_dice_game_drop_bet
                        - disengage
                        - zap *
                3:
                    trigger: /*/
                    script:
                        - narrate "Please click <&7>[<element[<&4><&n>Yes].click_chat[Yes].on_hover[Yes]> or <element[<&4><&n>No].click_chat[No].on_hover[No]>] or click for yes"
                        - zap game_acception 30s