diff --git a/doc/function/index.txt b/doc/function/index.txt index 6664e6b9..c70387b1 100644 --- a/doc/function/index.txt +++ b/doc/function/index.txt @@ -109,6 +109,7 @@ These functions are built into the program, other [[type:function]]s can be defi ! Cards <<< | [[fun:new_card]] Construct a new [[type:card]] object. +| [[fun:new_uid]] Construct a new uid. | [[fun:add_card_to_set]] Add a [[type:card]] to a [[type:set]]. | [[fun:get_card_styling]] Get the styling data of a [[type:card]]. | [[fun:get_card_stylesheet]] Get the stylesheet of a [[type:card]]. diff --git a/doc/function/new_uid.txt b/doc/function/new_uid.txt new file mode 100644 index 00000000..1df0d731 --- /dev/null +++ b/doc/function/new_uid.txt @@ -0,0 +1,10 @@ +Function: new_uid + +--Usage-- +> new_uid() + +Returns a new card uid, a string of 32 random digits, which is guaranteed to not exist in the set. + +--Parameters-- +! Parameter Type Description +| @set@ [[type:set]] The set in which to look for uid conflicts. This can be omitted since 'set' is a predefined variable. diff --git a/src/script/functions/construction.cpp b/src/script/functions/construction.cpp index 33856791..c65d5dab 100644 --- a/src/script/functions/construction.cpp +++ b/src/script/functions/construction.cpp @@ -19,10 +19,11 @@ #include #include #include +#include #include // ----------------------------------------------------------------------------- : new_card - + SCRIPT_FUNCTION(new_card) { SCRIPT_PARAM(GameP, game); SCRIPT_OPTIONAL_PARAM_(bool, ignore_field_not_found); @@ -166,11 +167,22 @@ SCRIPT_FUNCTION(add_card_to_set) { } } SCRIPT_RETURN(false); +} + +SCRIPT_FUNCTION(new_uid) { + SCRIPT_PARAM_C(Set*, set); + String uid = generate_uid(); + for (int i = 0; i < 100; i++) { + if (set->card_uids.find(uid) == set->card_uids.end()) break; + uid = generate_uid(); + } + SCRIPT_RETURN(uid); } // ----------------------------------------------------------------------------- : Init void init_script_construction_functions(Context& ctx) { ctx.setVariable(_("new_card"), script_new_card); + ctx.setVariable(_("new_uid"), script_new_uid); ctx.setVariable(_("add_card_to_set"), script_add_card_to_set); }