Author Topic: Get Types Script for $TypeMasks::  (Read 660 times)

I need to know what typemasks an object falls under when working with container raycasts.  I got tired of doing objectID.getType() and trying to decode that every time.  So I made a script that does it for me.

Code: (gettypes.cs) [Select]
function servercmdgettypes(%client,%id)
{
if(isObject(%id))
{
servercmdgettypestype(%client,%id.getType());
}
else
{
messageclient(%client,0,"Invalid Object");
}
}

function servercmdgettypestype(%client,%val)
{
messageclient(%client,0,"\c6$TypeMasks::All");
if(%val>=536870912)
{
messageclient(%client,0,"UnknownObjectType - 536870912");
%val = (%val-536870912)|0;
}
if(%val>=$TypeMasks::DamagableItemObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::DamagableItemObjectType");
%val = (%val-$TypeMasks::DamagableItemObjectType)|0;
}
if(%val>=$TypeMasks::StaticRenderedObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::StaticRenderedObjectType");
%val = (%val-$TypeMasks::StaticRenderedObjectType)|0;
}
if(%val>=$TypeMasks::FxBrickAlwaysObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::FxBrickAlwaysObjectType");
%val = (%val-$TypeMasks::FxBrickAlwaysObjectType)|0;
}
if(%val>=$TypeMasks::FxBrickObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::FxBrickObjectType");
%val = (%val-$TypeMasks::FxBrickObjectType)|0;
}
if(%val>=$TypeMasks::StaticTSObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::StaticTSObjectType");
%val = (%val-$TypeMasks::StaticTSObjectType)|0;
}
if(%val>=$TypeMasks::PhysicalZoneObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::PhysicalZoneObjectType");
%val = (%val-$TypeMasks::PhysicalZoneObjectType)|0;
}
if(%val>=$TypeMasks::DebrisObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::DebrisObjectType");
%val = (%val-$TypeMasks::DebrisObjectType)|0;
}
if(%val>=2097152)
{
messageclient(%client,0,"UnknownObjectType = 2097152");
%val = (%val-2097152)|0;
}
if(%val>=$TypeMasks::CorpseObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::CorpseObjectType");
%val = (%val-$TypeMasks::CorpseObjectType)|0;
}
if(%val>=$TypeMasks::ExplosionObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::ExplosionObjectType");
%val = (%val-$TypeMasks::ExplosionObjectType)|0;
}
if(%val>=$TypeMasks::ProjectileObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::ProjectileObjectType");
%val = (%val-$TypeMasks::ProjectileObjectType)|0;
}
if(%val>=$TypeMasks::VehicleBlockerObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::VehicleBlockerObjectType");
%val = (%val-$TypeMasks::VehicleBlockerObjectType)|0;
}
if(%val>=$TypeMasks::VehicleObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::VehicleObjectType");
%val = (%val-$TypeMasks::VehicleObjectType)|0;
}
if(%val>=$TypeMasks::ItemObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::ItemObjectType");
%val = (%val-$TypeMasks::ItemObjectType)|0;
}
if(%val>=$TypeMasks::PlayerObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::PlayerObjectType");
%val = (%val-$TypeMasks::PlayerObjectType)|0;
}
if(%val>=$TypeMasks::StaticShapeObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::StaticShapeObjectType");
%val = (%val-$TypeMasks::StaticShapeObjectType)|0;
}
if(%val>=$TypeMasks::CameraObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::CameraObjectType");
%val = (%val-$TypeMasks::CameraObjectType)|0;
}
if(%val>=$TypeMasks::ShapeBaseObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::ShapeBaseObjectType");
%val = (%val-$TypeMasks::ShapeBaseObjectType)|0;
}
if(%val>=$TypeMasks::GameBaseObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::GameBaseObjectType");
%val = (%val-$TypeMasks::GameBaseObjectType)|0;
}
if(%val>=512)
{
messageclient(%client,0,"UnknownObjectType = 512");
%val = (%val-512)|0;
}
if(%val>=256)
{
messageclient(%client,0,"UnknownObjectType = 256");
%val = (%val-256)|0;
}
if(%val>=128)
{
messageclient(%client,0,"UnknownObjectType = 128");
%val = (%val-128)|0;
}
if(%val>=$TypeMasks::MarkerObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::MarkerObjectType");
%val = (%val-$TypeMasks::MarkerObjectType)|0;
}
if(%val>=$TypeMasks::TriggerObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::TriggerObjectType");
%val = (%val-$TypeMasks::TriggerObjectType)|0;
}
if(%val>=$TypeMasks::WaterObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::WaterObjectType");
%val = (%val-$TypeMasks::WaterObjectType)|0;
}
if(%val>=$TypeMasks::InteriorObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::InteriorObjectType");
%val = (%val-$TypeMasks::InteriorObjectType)|0;
}
if(%val>=$TypeMasks::TerrainObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::TerrainObjectType");
%val = (%val-$TypeMasks::TerrainObjectType)|0;
}
if(%val>=$TypeMasks::EnvironmentObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::EnvironmentObjectType");
%val = (%val-$TypeMasks::EnvironmentObjectType)|0;
}
if(%val>=$TypeMasks::StaticObjectType)
{
messageclient(%client,0,"\c6$TypeMasks::StaticObjectType");
%val = (%val-$TypeMasks::StaticObjectType)|0;
}
messageclient(%client,0,"\c6Remainder: "@%val);
}

Usage:
/gettypes [object id]
/gettypestype [typemask # eg. 19456 for a player object]

I had to make a small bit of code to subtract one number from another, because torque was turning everything into scientific notation.  That is what stringsubtract is.

The result of /gettypes [playerobject] would look like this:
$TypeMasks::All
$TypeMasks::PlayerObjectType
$TypeMasks::ShapeBaseObjectType
$TypeMasks::GameBaseObjectType
Remainder: 00000
« Last Edit: June 07, 2016, 09:04:47 PM by Tendon »

%val = (%val-###)|0; instead of using stringsubtract

Thank you.  I'll update op.  I'll put the original script on this post if anyone is interested in stringsubtract for some reason.
« Last Edit: June 07, 2016, 09:05:11 PM by Tendon »

The type is a bit mask, so you should be using & operator instead of >=. Now you can also skip all the nonsense with subtracting numbers.

%type = ...
%str = "";

if(%type & $TypeMasks::TerrainObjectType)
    %str = %str SPC "Terrain";
if(%type & $TypeMasks::FxBrickObjectType)
    %str = %str SPC "Brick";
...

if(%str !$= "")
    messageClient(%client, '', "matched types:" @ %str);

« Last Edit: June 10, 2016, 04:31:40 AM by Zeblote »