Paste #45496: Untitled Paste

Date: 2017/11/12 18:22:39 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


Sneaking_Event:
  type: world
  debug: false
  events:
    on player starts sneaking:
    - run SneakCheck id:SneakCheck_<player.uuid>
    on player stops sneaking:
    - queue 'q@SneakCheck_<player.uuid>' clear
    - actionbar ""
    on player walks: 
    - if !<player.is_sneaking> { 
      - foreach <player.eye_location.find.npcs.within[5]> { 
        - look <def[value]> <player.eye_location> 
        - actionbar target:<player> ""
        }
      } 
SneakCheck: 
  type: task 
  debug: false
  script: 
    - while true {
        - ^define npcs <player.eye_location.find.npcs.within[20]>
        - if <player.has_flag[DetectedBy]> {
          - ^actionbar target:<player> "<bold>Detected"
          - ^look <player.flag[DetectedBy]> <player.eye_location>
          - wait 5t
          - ^while next
          }
        - if <def[npcs].filter[eye_location.facing[<player>].degrees[45]].filter[eye_location.line_of_sight[<player.eye_location>]].size> > 0 {
          - ^flag <player> DetectedBy:->:<def[npcs]> duration:10s
          - wait 5t
          - ^while next
          }
        - foreach <def[npcs]> {
          - if <proc[HiddenSneakChance].context[<player.eye_location.light_level>|<proc[ArmorWeight].context[<player>]>|<def[value].flag[NPCSkill]||50>|<player.flag[SneakSkill]||50>|<proc[SneakBonus]>|<def[value].as_npc.location.distance[<player.eye_location]>]>].mul[0.025]> > <util.random.decimal> {
            - ^narrate "<def[value].name> detected you by algorithm"
            - ^flag <player> DetectedBy:->:<def[npcs]> duration:10s
            - wait 5t
            - ^while next
            }
          }
        - actionbar target:<player> "<italic>Hidden"
        - wait 5t
    }

HiddenSneakChance:
  type: procedure
  definitions: light|armor|npcSkill|playerSkill|itemBonus|distance
  debug: false
  script:
    - define exponent <el@-1.566.add[<el@0.3.mul[<def[light].as_decimal>]>].add[<el@3.46.mul[<def[armor].as_decimal>]>].add[<el@0.022.mul[<def[npcSkill].as_decimal>]>].sub[<el@0.022.mul[<def[playerSkill].as_decimal>]>].sub[<el@0.022.mul[<def[itemBonus].as_decimal>]>].sub[<el@0.155.mul[<def[distance].as_decimal>]>]>
    - define algorithm <el@2.71828.power[<def[exponent].as_decimal>]>
    - determine <def[algorithm].div[<def[algorithm].add[1].as_decimal>]>

ArmorWeight:
  type: procedure
  definitions: player
  debug: false
  script:
    - define result 0.0
    - if <def[player].equipment.helmet.material> contains "iron" || <def[player].equipment.helmet.material> contains "diamond" {
        - define result <def[result].add[0.15]>
      }
    - if <def[player].equipment.chestplate.material> contains "iron" || <def[player].equipment.chestplate.material> contains "diamond" {
        - define result <def[result].add[0.25]>
      }
    - if <def[player].equipment.leggings.material> contains "iron" || <def[player].equipment.leggings.material> contains "diamond" {
        - define result <def[result].add[0.25]>
      }
    - if <def[player].equipment.boots.material> contains "iron" || <def[player].equipment.boots.material> contains "diamond" {
        - define result <def[result].add[0.35]>
      }
    - determine <def[result]>
SneakBonus:
  type: procedure
  definitions: player
  debug: false
  script:
    - determine 50