void CRunningScript::PlayAnimScriptCommand(int opcodeId) {
char animName[24];
char fileName[16];
bool lockZ = false;
bool interruptable = true;
this->CollectParameters(1);
int pedHandle = ScriptParams[0].i;
this->ReadTextLabelFromScript(animName, 24);
this->ReadTextLabelFromScript(fileName, 16);
switch (opcodeId) {
case COMMAND_TASK_PLAY_ANIM:
case COMMAND_TASK_PLAY_ANIM_SECONDARY:
this->CollectParameters(6);
break;
case COMMAND_TASK_PLAY_ANIM_NON_INTERRUPTABLE:
interruptable = false;
this->CollectParameters(6);
break;
case COMMAND_TASK_PLAY_ANIM_WITH_FLAGS:
this->CollectParameters(8);
interruptable = ScriptParams[6].i != 0;
lockZ = ScriptParams[7].i != 0;
break;
}
float frameDelta = ScriptParams[0].f;
int loop = ScriptParams[1].i;
int lockLastX = ScriptParams[2].i;
int lockLastY = ScriptParams[3].i;
int lockLastFrame = ScriptParams[4].i;
int time = ScriptParams[5].i;
int flags = 0x10;
if (loop || time > 0 && !lockLastFrame)
flags = 0x12;
if (lockLastX)
flags |= 0x40;
if (lockLastY)
flags |= 0x80;
if (!lockLastFrame)
flags |= 8;
if (opcodeId == COMMAND_TASK_PLAY_ANIM_SECONDARY)
flags |= 0x400;
bool isActiveSequence = false;
if (CTaskSequences::ms_iActiveSequence >= 0)
isActiveSequence = true;
CTaskSimpleRunNamedAnim *taskAnim = new CTaskSimpleRunNamedAnim(animName, fileName, flags, frameDelta, time, !interruptable, isActiveSequence, lockZ, 0);
if (opcodeId == COMMAND_TASK_PLAY_ANIM_SECONDARY) {
CTaskSimpleAffectSecondaryBehaviour *affectSecondaryBehaviour = new CTaskSimpleAffectSecondaryBehaviour(1, 4, taskAnim);
this->GivePedScriptedTask(pedHandle, taskAnim, opcodeId);
}