Page MenuHomeFeedback Tracker

[Feature request] Way to stop kbTell
New, NormalPublic

Description

Currently, we have no way to stop kbTell conversations. Sound always has to finish. If we had way to stop it early, we could create systems for skippable conversations like other games have or reactions to certain user scripted actions. With other sound playing commands like say3D, playSound3D, playMusic...sounds can be stoped by deleting sound source or by playing empty sounds (playMusic "";). I would like to see possibility to do the same with kbTell. I think kbTell should return soundSource like other commands do for ease of scripting. When sound is deleted, lips on talking person should stop moving automatically as the sentence is no longer playing. I don't know the technical aspect, so if that's not possible, new command like kbTerminate would be needed.

Details

Severity
Feature
Resolution
Open
Reproducibility
N/A
Operating System
Windows 10 x64
Operating System Version
22H2
Category
Scripting
Additional Information

Simple example code in case of soundSource:

[] spawn {
_soundSource = player kbTell [BIS_HQ, "myTopic", "playerSentence1"];
sleep 5;
deleteVehicle _soundSource;//person that's talking should automatically stop moving the lips
//player setRandomLip false;//should stops lips from moving if talking person would not stop moving lips automatically
};

In case of command, here is simple example how I imagine to use the command:

[] spawn {
private _skippableTalk = [] spawn {
player kbTell [BIS_HQ, "myTopic", "playerSentence1"];//sound that's playing for 20 seconds normally
waitUntil { player kbWasSaid [BIS_HQ, "myTopic", "playerSentence1", 3]; };
BIS_HQ kbTell [player, "myTopic", "HQSentence1"];
waitUntil { BIS_HQ kbWasSaid [player, "myTopic", "HQSentence1", 3]; };
};
sleep 5;
//if Jeep is destroyed finish conversation early
if (!alive Jeep) then {
terminate _skippableTalk;
kbTerminate [player,"myTopic","playerSentence1"];//command would check if sentence from topic is playing or is in queue of sentences to be played
  };
};

Syntax:
kbTerminate [person,topicName,sentenceClass];

person: Object
topicName: String
sentenceClass: String

kbWasSaid should return false if sentence was terminated

And when you're at it, you could also try to fix the necessarity to have radio in inventory. It's kinda weird that person can't talk directly if assigned radio item is not present.
Thanks for considering this feature.