diff --git a/config/mdarray.cfg b/config/mdarray.cfg new file mode 100644 index 00000000..ea9548ac --- /dev/null +++ b/config/mdarray.cfg @@ -0,0 +1,204 @@ +// Cubescript Multidimensional Arrays + +islists = [ + bool = 0 + loop i (listlen $arg1) [ + if (> (listlen (at $arg1 $i)) 1) [ + bool = 1; break + ] + ] + result $bool +] + +hasQuotePair = [ + bool = 0 + got_open_quote = -1 + got_close_quote = -1 + loop r (strlen $arg1) [ + if (testchar (substr $arg1 $r 1) 8) [ + if (= $got_open_quote -1) [ + got_open_quote = $r + ] [ + got_close_quote = $r + break; + ] + ] + ] + if (&& (!= $got_open_quote -1) (&& (!= $got_close_quote -1) (!= $got_open_quote $got_close_quote))) [ + result 1 + ] [ result 0 ] +] + +reverseString = [ + oldstr = $arg1 + newstr = "" + + loop i (strlen $oldstr) [ + newstr = (concatword $newstr (substr $oldstr (* (+ $i 1) -1) 1)) + ] + result $newstr +] + +extractSubarrayName = [ + open_bracket_pos = $arg2 + subarray_name = "" + + loop d (strlen $arg1) [ + tmpchar = (substr $arg1 (- $open_bracket_pos (+ $d 2)) 1) + if (testchar $tmpchar 7) break [ + if (&& (! (strcmp $tmpchar "[")) (! (strcmp $tmpchar "]"))) [ + subarray_name = (concatword $subarray_name $tmpchar) + ] + ] + ] + result (reverseString $subarray_name) +] + +MDArray_New_Subarray = [ + if (= (findlist (getalias $arg1) $arg2) -1) [ + add2list $arg1 $arg2 + if (islists $arg3) [ + add2list $arg1 (addpunct (concatword " " $arg3 " ") 1) + ] [ + add2list $arg1 (addpunct (concatword " " (addpunct $arg3) " ") 1) + ] + ] +] + +MDArray_Get_Bracket_Positions = [ + open_bracket_pos = (+ (strpos $arg1 $arg2) (strlen $arg2)) + close_bracket_pos = -1 + + loop i (- (strlen $arg1) $open_bracket_pos) [ + next_char = (+ (+ $open_bracket_pos $i) 1) + if (strstr (substr $arg1 $next_char 1) "]") [ + close_bracket_pos = $next_char + break + ] + ] +] + +MDArray_Get = [ + mdarray = (getalias $arg1) + target = (findlist $mdarray $arg2) + + if (!= $target -1) [ + MDArray_Get_Bracket_Positions $mdarray $arg2 + + if (!= $close_bracket_pos -1) [ + += open_bracket_pos 1 // skip the bracket itself when extracting the subarray with the line below + subarray = (substr $mdarray $open_bracket_pos (- $close_bracket_pos $open_bracket_pos)) + subarray = (substr $subarray 2 (- (strlen $subarray) 3)) // trim brackets/whitespace from the subarray + subarray = (substr $subarray 1 (- (strlen $subarray) 1)) // trim first quotation from the subarray + subarray = (substr $subarray 0 (- (strlen $subarray) 1)) // trim last quotation from the subarray + + // double check that the first and last chars of the subarray are not quotations + firstchar = (substr $subarray 0 1) + lastchar = (substr $subarray (- (strlen $subarray) 1) 1) + // trim quotations + if (! (hasQuotePair $subarray)) [ // only if its not a multi-word elements array + if (testchar $firstchar 8) [ subarray = (substr $subarray 1 (- (strlen $subarray) 1)) ] + if (testchar $lastchar 8) [ subarray = (substr $subarray 0 (- (strlen $subarray) 1)) ] + ] + + if (= $arg3 -1) [ + result $subarray + ] [ result (at $subarray $arg3) ] + ] + ] +] + +MDArray_Get_All_Opening_Bracket_Positions = [ + o_positions = "" + loop i (strlen $arg1) [ + if (strcmp (substr $arg1 $i 1) "[") [ + add2list o_positions $i + ] + ] + if (listlen $o_positions) [ + result $o_positions + ] [ result -1 ] +] + +MDArray_Get_Subarray_Count = [ + result (listlen (MDArray_Get_All_Opening_Bracket_Positions (getalias $arg1))) +] + +MDArray_Get_All_Subarray_Names = [ + opening_brackets = (MDArray_Get_All_Opening_Bracket_Positions (getalias $arg1)) + subarray_names = "" + + loop r (listlen $opening_brackets) [ + add2list subarray_names (extractSubarrayName (getalias $arg1) (at $opening_brackets $r)) + ] + result $subarray_names +] + +MDArray_Search = [ + mdarray = (getalias $arg1) + token = $arg2 + subarrays = (MDArray_Get_All_Subarray_Names $arg1) + search_results = "" + + loop u (listlen $subarrays) [ + curarray = (MDArray_Get $arg1 (at $subarrays $u) -1) + if (strstr $curarray $token) [ + if (! (strstr $search_results (at $subarrays $u))) [ + add2list search_results (at $subarrays $u) + ] + ] + ] + result $search_results +] + +MDArray_Delete_Subarray = [ + orig_array = (getalias $arg1) + target_subarray = $arg2 + target_pos = (strpos $orig_array $target_subarray) + gotclose = -1 + delstr = "" + + if (!= $target_pos -1) [ + loop h (strlen $orig_array) [ + if (< $h $target_pos) continue [ + if (strcmp (substr $orig_array $h 1) "]") [ + gotclose = $h; break + ] + ] + ] + delstr = (substr $orig_array $target_pos (- $gotclose $target_pos)) + $arg1 = (strreplace $orig_array $delstr "") + result (getalias $arg1) + ] +] + +MDArray_Modify_Subarray = [ + original_subarray = (MDArray_Get $arg1 $arg2 -1) + target_elem = $arg3 + new_elem = $arg4 + new_subarray = "" + + loop j (listlen $original_subarray) [ + next_elem = (at $original_subarray $j) + + if (= $j $target_elem) [ + if (> (listlen $new_elem) 1) [ + add2list new_subarray (addpunct $new_elem) + ] [ add2list new_subarray $new_elem ] + ] [ + if (> (listlen $next_elem) 1) [ + add2list new_subarray (addpunct $next_elem) + ] [ add2list new_subarray $next_elem ] + ] + ] + + MDArray_Delete_Subarray $arg1 $arg2 + if (islists $new_subarray) [ + MDArray_New_Subarray $arg1 $arg2 (addpunct $new_subarray $brackets) + ] [ + MDArray_New_Subarray $arg1 $arg2 (addpunct $new_subarray) + ] +] + +// some of these aliases can cause issues if they get stored in saved.cfg (missing bracket errors/etc.) +addListOnQuit "bool MDArray_New_Subarray MDArray_Get_Bracket_Positions MDArray_Get reverseString MDArray_Get_All_Opening_Bracket_Positions MDArray_Get_Subarray_Count MDArray_Get_All_Subarray_Names extractSubarrayName MDArray_Search MDArray_Delete_Subarray MDArray_Modify_Subarray original_subarray target_elem new_elem new_subarray j next_elem islists hasQuotePair got_open_quote got_close_quote r i d mdarray subarray firstchar lastchar oldstr newstr subarray_names subarray_name tmpchar token subarrays search_results curarray orig_array target_subarray target_pos gotclose delstr h next_char" \ No newline at end of file diff --git a/config/scripts.cfg b/config/scripts.cfg index aa9262d7..791a74ef 100644 --- a/config/scripts.cfg +++ b/config/scripts.cfg @@ -109,7 +109,7 @@ const NUM_WEAPONS (listlen $WEAPONS) const MODES "tdm coop dm surv ts ctf pf btdm bdm lss osok tosok bosok htf tktf ktf tpf tlss bpf blss bts btosok" const NUM_MODES (listlen $MODES) // ktf ac_mines - calls a vote for keep the flag ac_mines -// echo (ktf -1) = returns 15 +// echo (ktf -1) - returns 15 loop d $NUM_WEAPONS [ const (at $WEAPONS $d) $d ] loop r $NUM_MODES [ const (at $MODES $r) (addpunct (format "if (= $arg1 -1) [ result %1 ] [ votemap %1 %2 ]" $r (addpunct arg1 3)) 2) ] @@ -385,6 +385,7 @@ const customclaimadminscript [ // Execute other .cfgs/scripts. run on_quit +run mdarray run dyngamma run survival run autosave diff --git a/docs/reference.xml b/docs/reference.xml index c25056c8..ad6e7c84 100644 --- a/docs/reference.xml +++ b/docs/reference.xml @@ -1270,6 +1270,158 @@ echo foo + + + Adds a subarray to a cubescript multidimensional array. (alias) + + + + Output: how now brown cow + Output: brown + + + + + + + + + + + + + + + + + + + Returns a subarray or a subarray element of a cubescript multidimensional array. + + + + Output: how now brown cow + Output: brown + + + + + + + + + + + + + + + + + + + Modifies a subarray element of a cubescript multidimensional array. + + + + Output: 1 2 9 4 5 + + + + + + + + + + + + + + + + + + + + + Deletes an entire subarray from an existing cubescript multidimensional array. + + + + + + + + + + + + + + + + Returns the number of subarrays in a cubescript multidimensional array. + + + + + + + + + + + + + + + Returns a list of all subarray names in a cubescript multidimensional array. + + + + Output: chars words + + + + + + + + + + + + + + + + + Returns a list of all subarray names that have content matching a specific keyword. + + + + Output: words sentences + + + + + + + + + + + + + + +