Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE FUNCTION public.fn_dice_parse(dice text) RETURNS TABLE(rolls integer, die integer, modifier integer, result integer)
- LANGUAGE plpgsql
- AS $_$
- declare
- parsed text[];
- begin
- parsed := regexp_matches(dice, '^\s*(\d+)d(\d+)([+-]\d+)?\s*$');
- rolls := parsed[1]::integer;
- die := parsed[2]::integer;
- modifier := parsed[3]::integer;
- if (rolls is null and die is null and modifier is null) then
- parsed := regexp_matches(dice, '^\s*([+-]?\d+)\s*$');
- modifier := parsed[1]::integer;
- result := modifier;
- if (modifier is null) then
- return;
- end if;
- else
- if (modifier is null) then
- result := 0;
- else
- result := modifier;
- end if;
- if (rolls > 0 and die > 0) then
- for i in 1..rolls loop
- result := result + floor(random() * die) + 1;
- end loop;
- end if;
- end if;
- return next;
- end;
- $_$;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement