Paste #48547: Edit of P#48546 - Edit of P#48545 - Edit of P#48544 - Untitled Paste

Date: 2018/07/10 15:34:41 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


DUL_WRCG:
  type: procedure
  debug: false
  DUL:
    author:
    - Anthony
    - BloodEko
    name:
    - Weighted Random Choice Generator
    description:
    - Supply a list of weight/return values and have one of the values returned to you randomly based on weight.
    usage:
    - <proc[DUL_WRCG].context[weight/return|...]>
    example:
    - give <proc[DUL_WRCG].context[10/i@apple|1/i@gold_ingot|20/i@stone]>


  script:
    - define list <def[raw_context]>
    - define weightList <def[list].parse[before[/]]>
    - define weight <def[weightList].sum>

    - define number <util.random.int[1].to[%weight%]>
    - define hv 0

    - foreach <def[list]>:
      - define ov %hv%
      - define lv <def[ov].add[1]>
      - define hv <def[ov].add[<def[weightList].get[%loop_index%]>]>
      - if %number% >= %lv% && %number% <= %hv% {
        - determine '<def[value].after[/]>'
        }