Moderator: Forum Guards
static final function string substr(coerce string string, coerce int start , optional coerce int length)
{
local string tmpString;
local int tmpInt;
if(start >= 0)
tmpInt = len(string)-start;
else
tmpInt = start*-1;
tmpString = right(string, tmpInt);
if(length > 0)
tmpString = left(tmpString, length);
else if(length < 0)
tmpString = left(tmpString, len(tmpString)+length);
return tmpString;
}
//================================================================================
// SubStr. Made by Alex ~ http://www.dxalpha.com/
//================================================================================
class SubStr extends Actor;
function PostBeginPlay()
{
local string testString;
Super.PostBeginPlay();
testString = "abcdef";
log(substr(testString, 1)); // bcdef
log(substr(testString, 1, 3)); // bcd
log(substr(testString, 0, 4)); // abcd
log(substr(testString, 0, 8)); // abcdef
log(substr(testString, -1, 1)); // f
log(substr(testString, -1)); // f
log(substr(testString, -2)); // ef
log(substr(testString, -3, 1)); // d
log(substr(testString, 0, -1)); // abcde
log(substr(testString, 2, -1)); // cde
log(substr(testString, 4, -4)); // empty
log(substr(testString, -3, -1)); // de
}
static final function string substr(coerce string string, coerce int start , optional coerce int length)
{
local string tmpString;
local int tmpInt;
if(start >= 0)
tmpInt = len(string)-start;
else
tmpInt = start*-1;
tmpString = right(string, tmpInt);
if(length > 0)
tmpString = left(tmpString, length);
else if(length < 0)
tmpString = left(tmpString, len(tmpString)+length);
return tmpString;
}
defaultproperties
{
bHidden=true
}
native static final function string GetConfig( string ConfigSection, string ConfigKey); // DEUS_EX CAC
str = "TestArray["$testIndex$"]";
return Class'IniTest'.Static.GetConfig("PackageName.IniTest", str);
[PackageName.IniTest]
TestArray[1]=aaa
TestArray[2]=qqq
TestArray[3]=ggggg
TestArray[4]=fff
TestArray[5]=ccc
static final function int strfind(coerce string Haystack, coerce string Needle)
{
local int StringIndex;
while(instr(Haystack,Needle) != -1)
{
Haystack = Right(Haystack,(Len(Haystack)-instr(Haystack,Needle))-1);
StringIndex++;
}
return StringIndex;
}
someInt = strfind("applepie", "p");
Mr.Fagstix wrote:This is why I fucking hate you. Because somehow you manage to take somebodies posts, twist them against them, troll them and flame bait them and then you still get away with it? Is this forums management on fucking crack or some shit? Fucking SERIOUSLY.
Mr.Fagstix wrote:This is why I fucking hate you. Because somehow you manage to take somebodies posts, twist them against them, troll them and flame bait them and then you still get away with it? Is this forums management on fucking crack or some shit? Fucking SERIOUSLY.
ReplacementInv.SetPropertyText("SkinColor", OtherInv.GetPropertyText("SkinColor"));
// Find the FBspNode for Point.
INT FindNode( UModel* Model, INT iPlane, FVector Point )
{
guard(FindNode);
check(Model);
INT Index = iPlane;
while ( Index != INDEX_NONE )
{
FBspNode& Node = Model->Nodes(Index);
if ( Node.iSurf != INDEX_NONE )
{
FBspSurf& Surf = Model->Surfs(Node.iSurf);
//debugf( TEXT("FindNode: Testing: FBspNode(%i) with FBspSurf(%i).Texture %s."), Index, Node.iSurf, Surf.Texture ? Surf.Texture->GetName() : TEXT("None") );
UBOOL Valid = 1;
FLOAT OldPlaneDot = 0.0f;
// Check for NumVertices == 0
if ( Node.NumVertices )
{
for ( INT i = 0; i < Node.NumVertices && Valid; i++ )
{
// Get Points.
FVector& A = Model->Points(Model->Verts(Node.iVertPool + i).pVertex);
FVector& B = Model->Points(Model->Verts(Node.iVertPool + ((i+1) % Node.NumVertices)).pVertex);
// Now build a plane.
FPlane Plane( A, (B-A)^FVector( Node.Plane.X, Node.Plane.Y, Node.Plane.Z ) );
// Now check Point against this plane.
FLOAT PlaneDot = Plane.PlaneDot( Point );
// Sign changed, check next FBspNode.
if ( OldPlaneDot * PlaneDot < 0.0f )
{
Valid = 0;
}
// Sign stayed the same, everything fine.
else
{
OldPlaneDot = PlaneDot;
}
}
// Passed check.
if ( Valid )
{
//debugf( TEXT("FindNode: Passed.") );
return Index;
}
//else
//{
//debugf( TEXT("FindNode: Failed.") );
//}
}
//else
//{
//debugf( TEXT("FindNode: Skipping: Node.NumVertices == 0.") );
//}
}
//else
//{
//debugf( TEXT("FindNode: Skipping: Node.iSurf == INDEX_NONE.") );
//}
Index = Node.iPlane;
}
return INDEX_NONE;
unguard;
}
//native(3220) final iterator function TraceTextureHan( class<Actor> BaseClass, out actor Actor, out name TexName, out name TexGroup, out int Flags, out vector HitLoc, out vector HitNorm, vector End, optional vector Start, optional vector Extent )
void AHXPlayerPawn::execTraceTextureHan(FFrame& Stack, RESULT_DECL)
{
guard(AHXPlayerPawn::execTraceTextureHan);
P_GET_OBJECT( UClass, BaseClass );
P_GET_OBJECT_REF( AActor, Actor );
P_GET_NAME_REF( TexName );
P_GET_NAME_REF( TexGroup );
P_GET_INT_REF( Flags );
P_GET_VECTOR_REF( HitLoc );
P_GET_VECTOR_REF( HitNorm );
P_GET_VECTOR( End );
P_GET_VECTOR_OPTX( Start, Location );
P_GET_VECTOR_OPTX( Extent, FVector( 0.0f, 0.0f, 0.0f ) );
P_FINISH;
FMemMark MemMark( GMem );
if ( !BaseClass )
BaseClass = AActor::StaticClass();
FCheckResult* Res = XLevel->MultiLineCheck( GMem, End, Start, Extent, 1, Level, 0 );
PRE_ITERATOR
if ( Res )
{
*Actor = Res->Actor;
*HitLoc = Res->Location;
*HitNorm = Res->Normal;
*TexName = NAME_None;
*TexGroup = NAME_None;
*Flags = 0;
if ( Res->Actor == Level )
{
Res->Item = FindNode( XLevel->Model, Res->Item, Res->Location );
if ( Res->Item != INDEX_NONE )
{
FBspNode& Node = XLevel->Model->Nodes(Res->Item);
if ( Node.iSurf != INDEX_NONE )
{
FBspSurf& Surf = XLevel->Model->Surfs(Node.iSurf);
if ( Surf.Texture )
{
*TexName = Surf.Texture->GetFName();
if ( Surf.Texture->GetOuter() )
{
*TexGroup = Surf.Texture->GetOuter()->GetFName();
}
}
*Flags = Surf.PolyFlags;
}
}
}
Res = (FCheckResult *)Res->Next;
}
else
{
Stack.Code = &Stack.Node->Script( wEndOffset + 1 );
*Actor = NULL;
break;
}
POST_ITERATOR
MemMark.Pop();
unguardexec;
}
FBspNode& Node = XLevel->Model->Nodes(Res->Item);
FBspSurf& Surf = XLevel->Model->Surfs(Node.iSurf);
han wrote:Maybe a fixed TraceTexture() version is sth. you might like (a whole new feeling with right footstep sounds).
- Code: Select all
// Find the FBspNode for Point.
INT FindNode( UModel* Model, INT iPlane, FVector Point )
{
guard(FindNode);
check(Model);
INT Index = iPlane;
while ( Index != INDEX_NONE )
{
FBspNode& Node = Model->Nodes(Index);
if ( Node.iSurf != INDEX_NONE )
{
FBspSurf& Surf = Model->Surfs(Node.iSurf);
//debugf( TEXT("FindNode: Testing: FBspNode(%i) with FBspSurf(%i).Texture %s."), Index, Node.iSurf, Surf.Texture ? Surf.Texture->GetName() : TEXT("None") );
UBOOL Valid = 1;
FLOAT OldPlaneDot = 0.0f;
// Check for NumVertices == 0
if ( Node.NumVertices )
{
for ( INT i = 0; i < Node.NumVertices && Valid; i++ )
{
// Get Points.
FVector& A = Model->Points(Model->Verts(Node.iVertPool + i).pVertex);
FVector& B = Model->Points(Model->Verts(Node.iVertPool + ((i+1) % Node.NumVertices)).pVertex);
// Now build a plane.
FPlane Plane( A, (B-A)^FVector( Node.Plane.X, Node.Plane.Y, Node.Plane.Z ) );
// Now check Point against this plane.
FLOAT PlaneDot = Plane.PlaneDot( Point );
// Sign changed, check next FBspNode.
if ( OldPlaneDot * PlaneDot < 0.0f )
{
Valid = 0;
}
// Sign stayed the same, everything fine.
else
{
OldPlaneDot = PlaneDot;
}
}
// Passed check.
if ( Valid )
{
//debugf( TEXT("FindNode: Passed.") );
return Index;
}
//else
//{
//debugf( TEXT("FindNode: Failed.") );
//}
}
//else
//{
//debugf( TEXT("FindNode: Skipping: Node.NumVertices == 0.") );
//}
}
//else
//{
//debugf( TEXT("FindNode: Skipping: Node.iSurf == INDEX_NONE.") );
//}
Index = Node.iPlane;
}
return INDEX_NONE;
unguard;
}
//native(3220) final iterator function TraceTextureHan( class<Actor> BaseClass, out actor Actor, out name TexName, out name TexGroup, out int Flags, out vector HitLoc, out vector HitNorm, vector End, optional vector Start, optional vector Extent )
void AHXPlayerPawn::execTraceTextureHan(FFrame& Stack, RESULT_DECL)
{
guard(AHXPlayerPawn::execTraceTextureHan);
P_GET_OBJECT( UClass, BaseClass );
P_GET_OBJECT_REF( AActor, Actor );
P_GET_NAME_REF( TexName );
P_GET_NAME_REF( TexGroup );
P_GET_INT_REF( Flags );
P_GET_VECTOR_REF( HitLoc );
P_GET_VECTOR_REF( HitNorm );
P_GET_VECTOR( End );
P_GET_VECTOR_OPTX( Start, Location );
P_GET_VECTOR_OPTX( Extent, FVector( 0.0f, 0.0f, 0.0f ) );
P_FINISH;
FMemMark MemMark( GMem );
if ( !BaseClass )
BaseClass = AActor::StaticClass();
FCheckResult* Res = XLevel->MultiLineCheck( GMem, End, Start, Extent, 1, Level, 0 );
PRE_ITERATOR
if ( Res )
{
*Actor = Res->Actor;
*HitLoc = Res->Location;
*HitNorm = Res->Normal;
*TexName = NAME_None;
*TexGroup = NAME_None;
*Flags = 0;
if ( Res->Actor == Level )
{
Res->Item = FindNode( XLevel->Model, Res->Item, Res->Location );
if ( Res->Item != INDEX_NONE )
{
FBspNode& Node = XLevel->Model->Nodes(Res->Item);
if ( Node.iSurf != INDEX_NONE )
{
FBspSurf& Surf = XLevel->Model->Surfs(Node.iSurf);
if ( Surf.Texture )
{
*TexName = Surf.Texture->GetFName();
if ( Surf.Texture->GetOuter() )
{
*TexGroup = Surf.Texture->GetOuter()->GetFName();
}
}
*Flags = Surf.PolyFlags;
}
}
}
Res = (FCheckResult *)Res->Next;
}
else
{
Stack.Code = &Stack.Node->Script( wEndOffset + 1 );
*Actor = NULL;
break;
}
POST_ITERATOR
MemMark.Pop();
unguardexec;
}