mirror of
https://github.com/Jusctsch5/ironsphererpg.git
synced 2026-01-20 03:54:45 +00:00
Taking everything obtained from http://ironsphererpg2.webs.com/ and dumping it in a git repo
509 lines
14 KiB
C#
509 lines
14 KiB
C#
//======================================= ARRAYS ======================================
|
|
// Written by JeremyIrons for IronSphere
|
|
// March 07 2002
|
|
// -Requires an isnumeric function
|
|
//=====================================================================================
|
|
//
|
|
// Tribes2 CS code does not properly support arrays, and so I've coded a "hack" to store data
|
|
// in SimSets and emulating array functionality.
|
|
// Every support function supports the key => value system (see PHP), but when specifying keys
|
|
// and values, the => must be an argument by itself enclosed by quotes.
|
|
//
|
|
// Example:
|
|
// array("test", "hello", "there", "mykey", "=>", "myvalue", "everyone");
|
|
//
|
|
// This will create the global variable $test and the equivalent in PHP would be:
|
|
// $test = array("hello", "there", "mykey" => "myvalue", "everyone");
|
|
//
|
|
// For a hack, it's not that far off. I've written a bunch of useful support functions, which
|
|
// are listed below. They attempt to emulate their PHP counterparts. For more details on their
|
|
// functionality, visit http://www.php.net/
|
|
//
|
|
// To access the value of an array, you must access the array as if it were an object. The
|
|
// parameter will be the key with an underscore in front of it:
|
|
//
|
|
// Example:
|
|
// array("test", "hello", "there", "mykey", "=>", "myvalue", "everyone");
|
|
// echo($test._0);
|
|
// echo($test._1);
|
|
// echo($test._mykey);
|
|
// echo($test._2);
|
|
//
|
|
// will display:
|
|
//
|
|
// hello
|
|
// there
|
|
// myvalue
|
|
// everyone
|
|
//
|
|
// Unfortunately we can't place a variable in the place of _0, _1, etc. such as $test.%k
|
|
// Instead you will need to use the array_get_value_at function, like in this example:
|
|
//
|
|
// array("myarray", "hello", "there", "mykey", "=>", "myvalue", "everyone");
|
|
// %k = "mykey";
|
|
// echo($myarray.array_get_value_at(%k));
|
|
//
|
|
// Notice that you did not need to specify the underscore.
|
|
|
|
//=====================================================================================
|
|
// SUPPORT FUNCTIONS:
|
|
//=====================================================================================
|
|
//
|
|
// array(%arrayname, %arg1, %arg2, %arg3, etc)
|
|
// explode(%arrayname, %string, %delimiter, optional %limit)
|
|
// %x = array.implode(%glue);
|
|
// split = explode
|
|
// join = implode
|
|
// array_reset()
|
|
// array_end()
|
|
// array_next()
|
|
// array_prev()
|
|
// array_current()
|
|
// array_count()
|
|
// array_sizeof() = array_count
|
|
// is_array()
|
|
// array_get_key()
|
|
// array_get_value()
|
|
// array_get_key_at_index(%index)
|
|
// array_get_value_at_index(%index)
|
|
// array_get_value_at(%key)
|
|
// array_key_exists(%key)
|
|
// in_array(%value)
|
|
// array_search(%value)
|
|
// array_pop(%newarrayname)
|
|
// array_push(%newarrayname, %arg1, %arg2, %arg3, etc)
|
|
// array_shift(%newarrayname)
|
|
// array_unshift(%newarrayname, %arg1, %arg2, %arg3, etc)
|
|
// array_sum()
|
|
//
|
|
//=====================================================================================
|
|
|
|
$array_debug = true;
|
|
|
|
//%a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50
|
|
function array(%arrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
_array(%arrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50);
|
|
}
|
|
|
|
function _array(%arrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
%key = "";
|
|
%j = 0;
|
|
%count = 0; //indicates the actual amount of key => value combinations
|
|
|
|
eval("if(isObject($" @ %arrname @ ")){$" @ %arrname @ ".delete();}");
|
|
|
|
%sb = "$" @ %arrname @ " = new SimSet(){";
|
|
|
|
for(%i = 0; %i <= 50; %i++)
|
|
{
|
|
eval("%arg = %a" @ %i @ ";");
|
|
eval("%nextarg = %a" @ (%i+1) @ ";");
|
|
|
|
if(%arg $= "")
|
|
break;
|
|
|
|
if(%nextarg $= "=>")
|
|
{
|
|
%key = %arg;
|
|
%i++;
|
|
}
|
|
else
|
|
{
|
|
if(%key !$= "" && !isnumeric(%key))
|
|
{
|
|
%k = "_" @ %key;
|
|
}
|
|
else
|
|
{
|
|
if(%key !$= "")
|
|
%j = %key;
|
|
|
|
%k = "_" @ %j;
|
|
%j++;
|
|
}
|
|
%key = "";
|
|
|
|
%sb = %sb @ %k @ " = \"" @ %arg @ "\";";
|
|
%sb = %sb @ "__internal_key" @ %count @ " = \"" @ %k @ "\";";
|
|
%sb = %sb @ "__internal_value" @ %count @ " = \"" @ %arg @ "\";";
|
|
%count++;
|
|
}
|
|
}
|
|
|
|
%sb = %sb @ "__internal_pointer = 0;";
|
|
%sb = %sb @ "__internal_count = " @ (%count-1) @ ";";
|
|
%sb = %sb @ "};";
|
|
|
|
if($array_debug) echo(%sb);
|
|
eval(%sb);
|
|
}
|
|
|
|
function SimSet::implode(%this, %glue)
|
|
{
|
|
%flag = 0;
|
|
%g = "";
|
|
|
|
%this.array_reset();
|
|
while((%val = %this.array_get_value()) !$= false)
|
|
{
|
|
if(%flag $= 1)
|
|
%g = %glue;
|
|
%flag++;
|
|
|
|
%stick = %stick @ %g @ %val;
|
|
}
|
|
|
|
return %stick;
|
|
}
|
|
function explode(%arrname, %string, %delimiter, %limit)
|
|
{
|
|
%sb = "array(\"" @ %arrname @ "\"";
|
|
|
|
%tstr = %string @ %delimiter;
|
|
%lpos = 0;
|
|
while((%pos = strpos(%tstr, %delimiter)) !$= -1)
|
|
{
|
|
%chunk = getsubstr(%tstr, %lpos, (%pos - %lpos));
|
|
%tstr = getsubstr(%tstr, %pos + strlen(%delimiter), 999999);
|
|
|
|
%sb = %sb @ ", \"" @ %chunk @ "\"";
|
|
|
|
if(%limit !$= "")
|
|
{
|
|
%count++;
|
|
if(%count >= %limit)
|
|
break;
|
|
}
|
|
}
|
|
|
|
%sb = %sb @ ");";
|
|
|
|
eval(%sb);
|
|
}
|
|
|
|
function SimSet::join(%this, %glue)
|
|
{
|
|
//same as implode
|
|
return %this.implode(%glue);
|
|
}
|
|
function split(%newarrname, %string, %delimiter, %limit)
|
|
{
|
|
//same as explode
|
|
explode(%newarrname, %string, %delimiter, %limit);
|
|
}
|
|
|
|
function SimSet::array_reset(%this)
|
|
{
|
|
%this.__internal_pointer = 0;
|
|
|
|
return true;
|
|
}
|
|
function SimSet::array_end(%this)
|
|
{
|
|
%this.__internal_pointer = %this.__internal_count;
|
|
|
|
return true;
|
|
}
|
|
function SimSet::array_next(%this)
|
|
{
|
|
if(%this.__internal_pointer <= %this.__internal_count)
|
|
{
|
|
%this.__internal_pointer++;
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
function SimSet::array_prev(%this)
|
|
{
|
|
if(%this.__internal_pointer > 0)
|
|
{
|
|
%this.__internal_pointer--;
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
function SimSet::array_current(%this)
|
|
{
|
|
return %this.__internal_pointer;
|
|
}
|
|
function SimSet::array_count(%this)
|
|
{
|
|
return %this.__internal_count;
|
|
}
|
|
function SimSet::array_sizeof(%this)
|
|
{
|
|
//same as array_count
|
|
return %this.array_count();
|
|
}
|
|
function SimSet::is_array(%this)
|
|
{
|
|
if(%this.__internal_count !$= "")
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function SimSet::array_get_key(%this)
|
|
{
|
|
if(%this.__internal_pointer > %this.__internal_count)
|
|
return false;
|
|
|
|
//gets the key at the current array pointer and moves the pointer forward
|
|
%key = %this.array_get_key_at_index(%this.__internal_pointer);
|
|
%this.array_next();
|
|
|
|
return %key;
|
|
}
|
|
function SimSet::array_get_value(%this)
|
|
{
|
|
if(%this.__internal_pointer > %this.__internal_count)
|
|
return false;
|
|
|
|
//gets the value at the current array pointer and moves the pointer forward
|
|
%val = %this.array_get_value_at_index(%this.__internal_pointer);
|
|
%this.array_next();
|
|
|
|
return %val;
|
|
}
|
|
function SimSet::array_get_key_at_index(%this, %index)
|
|
{
|
|
if(%index > %this.__internal_count)
|
|
return false;
|
|
|
|
eval("%key = %this.__internal_key" @ %index @ ";");
|
|
return getsubstr(%key, 1, 999999);
|
|
}
|
|
function SimSet::array_get_value_at_index(%this, %index)
|
|
{
|
|
if(%index > %this.__internal_count)
|
|
return false;
|
|
|
|
eval("%val = %this.__internal_value" @ %index @ ";");
|
|
return %val;
|
|
}
|
|
function SimSet::array_get_value_at(%this, %key)
|
|
{
|
|
eval("%val = %this._" @ %key @ ";");
|
|
return %val;
|
|
}
|
|
|
|
function SimSet::array_key_exists(%this, %keyfind)
|
|
{
|
|
for(%i = 0; %i <= %this.__internal_count; %i++)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
if(%key $= %keyfind)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function SimSet::in_array(%this, %valfind)
|
|
{
|
|
for(%i = 0; %i <= %this.__internal_count; %i++)
|
|
{
|
|
%val = %this.array_get_value_at_index(%i);
|
|
if(%val $= %valfind)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function SimSet::array_search(%this, %valfind)
|
|
{
|
|
for(%i = 0; %i <= %this.__internal_count; %i++)
|
|
{
|
|
%val = %this.array_get_value_at_index(%i);
|
|
if(%val $= %valfind)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
return %key;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//WARNING: echo'ing the result of this function crashes T2. No idea why.
|
|
function SimSet::array_pop(%this, %newarrname)
|
|
{
|
|
%ret = %this.array_get_value_at_index(%this.__internal_count);
|
|
|
|
%sb = "array(\"" @ %newarrname @ "\"";
|
|
|
|
//rebuild array with the last element removed
|
|
for(%i = 0; %i < %this.__internal_count; %i++)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
%value = %this.array_get_value_at_index(%i);
|
|
|
|
%sb = %sb @ ", \"" @ %key @ "\", \"=>\", \"" @ %value @ "\"";
|
|
}
|
|
|
|
%sb = %sb @ ");";
|
|
|
|
if($array_debug) echo(%sb);
|
|
eval(%sb);
|
|
|
|
return %ret;
|
|
}
|
|
|
|
function SimSet::array_push(%this, %newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
%this._array_push(%newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50);
|
|
}
|
|
function SimSet::_array_push(%this, %newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
%sb = "array(\"" @ %newarrname @ "\"";
|
|
|
|
//get contents of current array
|
|
for(%i = 0; %i < %this.__internal_count; %i++)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
%value = %this.array_get_value_at_index(%i);
|
|
|
|
%sb = %sb @ ", \"" @ %key @ "\", \"=>\", \"" @ %value @ "\"";
|
|
}
|
|
|
|
%j = 0;
|
|
%key = "";
|
|
for(%i = 0; %i <= 50; %i++)
|
|
{
|
|
eval("%arg = %a" @ %i @ ";");
|
|
eval("%nextarg = %a" @ (%i+1) @ ";");
|
|
|
|
if(%arg $= "")
|
|
break;
|
|
|
|
if(%nextarg $= "=>")
|
|
{
|
|
%key = %arg;
|
|
%i++;
|
|
}
|
|
else
|
|
{
|
|
if(%key !$= "")
|
|
{
|
|
%k = %key;
|
|
%key = "";
|
|
}
|
|
else
|
|
%k = "";
|
|
|
|
if(%k $= "")
|
|
%sb = %sb @ ", \"" @ %arg @ "\"";
|
|
else
|
|
%sb = %sb @ ", \"" @ %k @ "\", \"=>\", \"" @ %arg @ "\"";
|
|
}
|
|
}
|
|
|
|
%sb = %sb @ ");";
|
|
|
|
if($array_debug) echo(%sb);
|
|
eval(%sb);
|
|
}
|
|
|
|
//WARNING: echo'ing the result of this function crashes T2. No idea why.
|
|
function SimSet::array_shift(%this, %newarrname)
|
|
{
|
|
%ret = %this.array_get_value_at_index(0);
|
|
|
|
%sb = "array(\"" @ %newarrname @ "\"";
|
|
|
|
//rebuild array with the last element removed
|
|
for(%i = 1; %i <= %this.__internal_count; %i++)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
%value = %this.array_get_value_at_index(%i);
|
|
|
|
%sb = %sb @ ", \"" @ %key @ "\", \"=>\", \"" @ %value @ "\"";
|
|
}
|
|
|
|
%sb = %sb @ ");";
|
|
|
|
if($array_debug) echo(%sb);
|
|
eval(%sb);
|
|
|
|
return %ret;
|
|
}
|
|
|
|
function SimSet::array_unshift(%this, %newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
%this._array_unshift(%newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50);
|
|
}
|
|
function SimSet::_array_unshift(%this, %newarrname, %a0, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13, %a14, %a15, %a16, %a17, %a18, %a19, %a20, %a21, %a22, %a23, %a24, %a25, %a26, %a27, %a28, %a29, %a30, %a31, %a32, %a33, %a34, %a35, %a36, %a37, %a38, %a39, %a40, %a41, %a42, %a43, %a44, %a45, %a46, %a47, %a48, %a49, %a50)
|
|
{
|
|
%sb = "array(\"" @ %newarrname @ "\"";
|
|
|
|
//build new part of array
|
|
%j = 0;
|
|
%key = "";
|
|
for(%i = 0; %i <= 50; %i++)
|
|
{
|
|
eval("%arg = %a" @ %i @ ";");
|
|
eval("%nextarg = %a" @ (%i+1) @ ";");
|
|
|
|
if(%arg $= "")
|
|
break;
|
|
|
|
if(%nextarg $= "=>")
|
|
{
|
|
%key = %arg;
|
|
%i++;
|
|
}
|
|
else
|
|
{
|
|
if(%key !$= "")
|
|
{
|
|
%k = %key;
|
|
%key = "";
|
|
}
|
|
else
|
|
%k = "";
|
|
|
|
if(%k $= "")
|
|
%sb = %sb @ ", \"" @ %arg @ "\"";
|
|
else
|
|
%sb = %sb @ ", \"" @ %k @ "\", \"=>\", \"" @ %arg @ "\"";
|
|
}
|
|
}
|
|
|
|
//get contents of current array
|
|
for(%i = 0; %i < %this.__internal_count; %i++)
|
|
{
|
|
%key = %this.array_get_key_at_index(%i);
|
|
%value = %this.array_get_value_at_index(%i);
|
|
|
|
%sb = %sb @ ", \"" @ %key @ "\", \"=>\", \"" @ %value @ "\"";
|
|
}
|
|
|
|
%sb = %sb @ ");";
|
|
|
|
if($array_debug) echo(%sb);
|
|
eval(%sb);
|
|
}
|
|
|
|
function SimSet::array_sum(%this)
|
|
{
|
|
%total = 0;
|
|
for(%i = 0; %i <= %this.__internal_count; %i++)
|
|
%total += %this.array_get_value_at_index(%i);
|
|
|
|
return %total;
|
|
}
|
|
|
|
function SimSet::test(%this, %tmp)
|
|
{
|
|
%this.array_reset();
|
|
while((%val = %this.array_get_value()) !$= false)
|
|
{
|
|
echo("val: " @ %val);
|
|
}
|
|
|
|
%r = %this.array_search(%tmp);
|
|
echo("array_search(" @ %tmp @ "): " @ %r);
|
|
echo(%this.array_get_value_at(%r));
|
|
}
|
|
|
|
if($array_debug) array("test", "hello", "there", "mykey", "=>", "myvalue", "everyone"); |