One thing I made was a dodgy mod that lets you 'talk' to NPC's. It compiled and it's all ok, but there's weird bugs. Example, instead of taking the players name it just says MTLPRI. And it uses the pawn chess piece instead of a mesh. And it doesn't use its name.
Big, untidy code here. If anyone feels like going through it.
- Code: Select all
//====================================================
// MPConvoPawn
//
// Cozmo
//
//====================================================
Class MPConvoPawn2 extends ScriptedPawn;
Var DeusExPlayer ConvoPlayer;
Var() class<Pawn> AppearAsClass;
Var bool bHasWarned;
Var() String PawnsName;
//--------------
// ConvoInfo
//--------------
Var(Convo) int ConvoMessages;
Var(Convo) String BusyMessage;
Var(Convo) int TalkTurn;
Var(Convo) String TheWaitMessage;
Var int OnMessage;
Var int PreviousSpeed;
Var String Message;
Var bool bWasSpeaking;
Var bool IsSpeaking;
Var Float deltaTime2;
Var(Messages) String aMessage1;
Var(Messages) String bMessage2;
Var(Messages) String cMessage3;
Var(Messages) String dMessage4;
Var(Messages) String eMessage5;
Var(Messages) String fMessage6;
Var(Messages) String gMessage7;
Var(Messages) String hMessage8;
Var(Messages) String iMessage9;
Var(Messages) String jMessage10;
Var(Messages) String kMessage11;
Var(Messages) String lMessage12;
Var(Messages) String mMessage13;
Var(Messages) String nMessage14;
Var(Messages) String oMessage15;
Var(Messages) String pMessage16;
Var(Messages) String qMessage17;
Var(Messages) String rMessage18;
Var(Messages) String sMessage19;
Var(Messages) String tMessage20;
function BeginPlay()
{
if(AppearAsClass != None)
{
UnfamiliarName=AppearAsClass.PawnsName;
FamiliarName=AppearAsClass.PawnsName;
BindName=AppearAsClass.PawnsName;
Mesh=AppearAsClass.default.Mesh;
MultiSkins[0]=AppearAsClass.default.MultiSkins[0];
MultiSkins[1]=AppearAsClass.default.MultiSkins[1];
MultiSkins[2]=AppearAsClass.default.MultiSkins[2];
MultiSkins[3]=AppearAsClass.default.MultiSkins[3];
MultiSkins[4]=AppearAsClass.default.MultiSkins[4];
MultiSkins[5]=AppearAsClass.default.MultiSkins[5];
MultiSkins[6]=AppearAsClass.default.MultiSkins[6];
MultiSkins[7]=AppearAsClass.default.MultiSkins[7];
Texture=AppearAsClass.default.Texture;
SetCollisionSize(AppearAsClass.default.CollisionRadius,AppearAsClass.default.CollisionHeight);
BaseEyeHeight=AppearAsClass.default.BaseEyeHeight;
AmbientSound=AppearAsClass.default.AmbientSound;
SoundRadius=AppearAsClass.default.SoundRadius;
SoundVolume=AppearAsClass.default.SoundVolume;
}
else
{
Destroy();
}
}
function Frob(Actor Frobber, Inventory frobWith)
{
//===================================================
//
// THIS SECTION IS TAKEN FROM THE PAWN.UC
//
//===================================================
local name animseq;
local float rnd;
local float tweentime;
// update the animation timers that we are using
animTimer[0] += deltaTime2;
animTimer[1] += deltaTime2;
animTimer[2] += deltaTime2;
if (bIsSpeaking)
{
// if our framerate is high enough (>20fps), tween the lips smoothly
if (Level.TimeSeconds - animTimer[3] < 0.05)
tweentime = 0.1;
else
tweentime = 0.0;
// the last animTimer slot is used to check framerate
animTimer[3] = Level.TimeSeconds;
if (nextPhoneme == "A")
animseq = 'MouthA';
else if (nextPhoneme == "E")
animseq = 'MouthE';
else if (nextPhoneme == "F")
animseq = 'MouthF';
else if (nextPhoneme == "M")
animseq = 'MouthM';
else if (nextPhoneme == "O")
animseq = 'MouthO';
else if (nextPhoneme == "T")
animseq = 'MouthT';
else if (nextPhoneme == "U")
animseq = 'MouthU';
else if (nextPhoneme == "X")
animseq = 'MouthClosed';
if (animseq != '')
{
if (lastPhoneme != nextPhoneme)
{
lastPhoneme = nextPhoneme;
TweenBlendAnim(animseq, tweentime);
}
}
}
else if (bWasSpeaking)
{
bWasSpeaking = False;
TweenBlendAnim('MouthClosed', tweentime);
}
// blink randomly
if (animTimer[0] > 2.0)
{
animTimer[0] = 0;
if (FRand() < 0.4)
PlayBlendAnim('Blink', 1.0, 0.1, 1);
}
//===================================================
//
// BACK TO MY OWN WORK.
//
// It's always best to avoid the Engine.u It confuses me.
//
//===================================================
if(ConvoPlayer == None)
{
ConvoPlayer = DeusExPlayer(Frobber);
SetTimer(2.5, true);
ConvoPlayer.ConsoleCommand("DeactivateAllAugs");
ConvoPlayer.SetRotation(Rotation+rot(0,0,32808));
//PreviousSpeed = ConvoPlayer.mpGroundSpeed;
//ConvoPlayer.mpGroundSpeed = 0;
}
else
{
DeusExPlayer(Frobber).ClientMessage("|p1"@BindName@": "@BusyMessage);
}
}
function Timer()
{
if(OnMessage == 0)
{
Message = TheWaitMessage;
}
if(OnMessage == 1)
{
Message = aMessage1;
}
if(OnMessage == 2)
{
Message = bMessage2;
}
if(OnMessage == 3)
{
Message = cMessage3;
}
if(OnMessage == 4)
{
Message = dMessage4;
}
if(OnMessage == 5)
{
Message = eMessage5;
}
if(OnMessage == 6)
{
Message = fMessage6;
}
if(OnMessage == 7)
{
Message = gMessage7;
}
if(OnMessage == 8)
{
Message = hMessage8;
}
if(OnMessage == 9)
{
Message = iMessage9;
}
if(OnMessage == 10)
{
Message = jMessage10;
}
if(OnMessage == 11)
{
Message = kMessage11;
}
if(OnMessage == 12)
{
Message = lMessage12;
}
if(OnMessage == 13)
{
Message = mMessage13;
}
if(OnMessage == 14)
{
Message = nMessage14;
}
if(OnMessage == 15)
{
Message = oMessage15;
}
if(OnMessage == 16)
{
Message = pMessage16;
}
if(OnMessage == 17)
{
Message = qMessage17;
}
if(OnMessage == 18)
{
Message = rMessage18;
}
if(OnMessage == 19)
{
Message = sMessage19;
}
if(OnMessage == 20)
{
Message = tMessage20;
}
if(ConvoPlayer != None)
{
if(TalkTurn == 0)
{
if(OnMessage <= ConvoMessages)
{
ConvoPlayer.ClientMessage("|p1"@BindName@": "@Message);
TalkTurn = 1;
OnMessage += 1;
}
else
{
//ConvoPlayer.mpGroundSpeed = PreviousSpeed;
ConvoPlayer = None;
TalkTurn = default.TalkTurn;
OnMessage = 0;
SetTimer(0.0, false);
}
}
else
{
ConvoPlayer.ClientMessage("|p1"@ConvoPlayer.PlayerReplicationInfo.Name@": "@Message);
TalkTurn = 0;
OnMessage += 1;
}
}
else
{
LoopAnim('BreatheLight',, 0.4);
}
if(OnMessage == 0)
{
LoopAnim('BreatheLight',, 0.4);
}
}
defaultproperties
{
PawnsName="Warning, no name set!"
GroundSpeed=0
TheWaitMessage="(Please wait...)"
TalkTurn=0
ConvoMessages=0
BusyMessage="I'm already talking to someone... Wait a minute."
}