Paste #19348: Edit of P#19347 - Untitled Paste

Date: 2015/08/13 13:26:25 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


# +----------------------------------
# |   Territory scripts
# +----------------------------------

# War Master NPC

Territoy_World_Script:
    type: world
    events:
# +----------------------------------
# |   On Server start
# +----------------------------------
        on server start:
        - run Load_Territories instantly
        - run Save_Territories delay:5m

Load_Territories:
    type: task
    Script:
      - if <server.has_file[Territories.yml]> {
        - yaml "load:/Data/Territories.yml" id:Territories
        - narrate "<dark_green>Loading Territories..."
        } else {
        - yaml create id:Territories
        - narrate "<red>Couldn't find Territories.yml file."
        - narrate "<dark_green>Creating new <gold>Territories.yml <dark_green>file"
        - yaml id:Territories set Territories.Test.Nation:Unclaimed
        - yaml id:Territories set Territories.Test.Cost:10000
        - yaml id:Territories set Territories.Test.Bordering_Regions:->:Testland
        - yaml id:Territories set Territories.Test.Bordering_Regions:->:Testling
        - yaml "savefile:/Data/Territories.yml" id:Territories
        }

Save_Territories:
    type: task
    Script:
      - yaml "savefile:/Data/Territories.yml" id:Territories
      - run Save_Territories delay:10m

War_Master_Assignment:
    type: assignment
    interact scripts:
    - 10 War_Master_Nation1
    actions:
        on assignment:
        # These triggers enable interaction with an NPC via chatting, clicking and entering proximity
        - trigger name:chat state:true
        - trigger name:click state:true
        - trigger name:proximity state:true
        - lookclose <npc> state:true

War_Master_Nation1:
    type: interact
    steps:
        1:
            Click Trigger:
                Script:
                - if <player.in_group[Leader]> {
                  - narrate "<red>[War Master] -> You<&co> <yellow>What can I do for you?"
                  - zap step:2
                  } else {
                  - narrate "<red>[War Master] -> You<&co> <yellow>Move a long peasent. I only server our leader."
                  }
        2:
            Click Trigger:
                Script:
                - narrate "<red>[War Master] -> You<&co> <yellow>What can I do for you?"
            chat Trigger:
                1:
                    Trigger: "/regex:(?i).*claim.*|.*invade.*|.*conquer.*/"
                    Script:
                      - if <context.message.contains[claim]> {
                        - narrate "<red>[War Master] -> You<&co> <yellow>What region would you like to lay claim to?"
                      } else if <context.message.contains[invade]> {
                        - narrate "<red>[War Master] -> You<&co> <yellow>What region would you like to invade?"
                      } else if <context.message.contains[conquer]> {
                        - narrate "<red>[War Master] -> You<&co> <yellow>What region would you like to conquer?"
                      }

                      - zap step:Invade
            proximity Trigger:
                exit:
                    Script:
                      - narrate "<red>RESET Warmater"
                      - zap step:1
        Invade:
            Click Trigger:
                Script:
                - narrate "<red>[War Master] -> You<&co> <yellow>What region would you like to invade?"
            chat Trigger:
                1:
                    Trigger: "/regex:.+/"
                    Script:
                      - if <yaml[Territories].read[Territories].contains[<context.message>]> {
                        - define region <context.message>
                        - narrate "<red><region@%region%.owners.formatted>"
                        # Check If the region is unclaimed
                        - if <region@%region%.owners.formatted> == "" {
                          # Check that the leader owns a bordering region.
                          - foreach <yaml[Territories].read[Territories.%region%.Bordering_Regions]> {
                            - narrate "<red>bordering region<&co> %value%"
                            - if <region@%value%.owners.formatted> == <player.name> {
                              - narrate "<green> SUCCESS You own a bordering region."
                              } else {
                                - narrate "<red>[War Master] -> You<&co> <yellow>To invade %region%, you must first conquer a bordering territory."
                                - zap step:1
                                - determine cancelled
                              }
                          # Check if the leader can afford it.
                          - if <player.town.nation.balance> < <yaml[Territories].read[Territories.<context.message>.cost]> {
                            - narrate "<red>[War Master] -> You<&co> <yellow>We don't have enough ducats to to make claim to this land sir."
                            - wait 1
                            - narrate "<red>[War Master] -> You<&co> <yellow>Claiming <context.message> will cost us at least <red><yaml[Territories].read[Territories.<context.message>.cost]> <yellow>ducats."
                            - zap step:1
                            } else {
                              - narrate "<red>[War Master] -> You<&co> <yellow>Claiming <context.message> is going to cost at least <red><yaml[Territories].read[Territories.<context.message>.cost]><yellow>. Are you sure you want to claim this territory?"
                              - zap step:Invasion_Confirmation
                            }
                          # Else if it's already owned
                          } else {
                            # Check if the leader can afford it.
                            - if <player.town.nation.balance> < <yaml[Territories].read[Territories.<context.message>.cost]> {
                              - narrate "<red>[War Master] -> You<&co> <yellow>We don't have enough ducats to to make such an invasion sir."
                              - wait 1
                              - narrate "<red>[War Master] -> You<&co> <yellow>Invading <context.message> will cost us at least <red><yaml[Territories].read[Territories.<context.message>.cost]> <yellow>ducats."
                              - zap step:1
                              } else {
                                - narrate "<red>[War Master] -> You<&co> <yellow>Invading <context.message> is going to cost at least <red><yaml[Territories].read[Territories.<context.message>.cost]><yellow>. Are you sure you want to do this?"
                                - zap step:Invasion_Confirmation
                              }
                            }
                        } else {
                          - narrate "<red>[War Master] -> You<&co> <yellow>I've never heard of <context.message>."
                          - wait 1
                          - narrate "<red>[War Master] -> You<&co> <yellow>Look at the map and tell me what region you would like to conquer."
                          }
                        }
            proximity Trigger:
                exit:
                    Script:
                      - narrate "<red>RESET Warmater"
                      - zap step:1
        Invasion_Confirmation:
            chat Trigger:
                1:
                    Trigger: "/regex:(?i).*Yes.*|.*Yeah.*|.*sure.*/"
                    Script:
                      - if <yaml[Territories].read[Territories].contains[<context.message>]> {
                        - narrate "<red>[War Master] -> You<&co> <yellow>Are you sure you want to invade <context.message>?"
                        - zap step:Invastion_Confirmation
                      } else {
                        - narrate "<red>[War Master] -> You<&co> <yellow>Very well. Come see me again if you ever need help with war."
                      }
            proximity Trigger:
                exit:
                    Script:
                      - zap step:1