kio 10 Posted March 17, 2010 thanks for reuploadind the mission. Share this post Link to post Share on other sites
Harlow-16AA- 0 Posted April 5, 2010 Quick question- I've got the basic conversation working now, where you can select a single answer which will then close the conversation. Is there a simple way to have the conversation menu open again once you've received the reply, with the conversation options you had previously, but minus the ones you've selected already? I haven't had much luck using "if" cases within the switch-case-do (i.e. "If I've already asked this, don't show it as an option."). Thanks :) Share this post Link to post Share on other sites
Harlow-16AA- 0 Posted April 5, 2010 After messing about with it some more, I've gotten the "if not" statements working. So my conversation tree looks like this now: BIS_convMenu = []; if (_from == villager1 && _sentenceId == "" && !(_this kbWasSaid [_from, _topic, "intel_translator_welcome", 999999])) then { BIS_convMenu = BIS_convMenu + [["Greet Villager", _topic, "intel_translator_welcome", []]]; }; //once you receive the Villager's return Welcome, give the Option for any of the three sentences below switch (_sentenceId) do { case "intel_villager1_welcome": { BIS_convMenu = BIS_convMenu + [["Ask Question 1.", _topic, "intel_translator_Q1_0", []]]; BIS_convMenu = BIS_convMenu + [["Ask Question 2.", _topic, "intel_translator_Q2_0", []]]; BIS_convMenu = BIS_convMenu + [["Thank the Villager.", _topic, "intel_translator_thanks", []]]; }; //if you ahaven't asked Question 2 yet, give the Option to do so once receiving "Answer 1" case "intel_villager1_A1_0": { if not (_this kbWasSaid [_from, _topic, "intel_translator_Q2_0", 999999]) then {BIS_convMenu = BIS_convMenu + [["Ask Question 2.", _topic, "intel_translator_Q2_0", []]]; }; BIS_convMenu = BIS_convMenu + [["Thank the Villager.", _topic, "intel_translator_thanks", []]]; }; //if you haven't asked about Question 1 yet, give the Option to do so once receiving "Answer 2" case "intel_villager1_A2_0": { if not (_this kbWasSaid [_from, _topic, "intel_translator_Q1_0", 999999]) then {BIS_convMenu = BIS_convMenu + [["Ask Question 1.", _topic, "intel_translator_Q1_0", []]]; }; BIS_convMenu = BIS_convMenu + [["Thank the Villager.", _topic, "intel_translator_thanks", []]]; }; }; // return the sentence list pool BIS_convMenu Share this post Link to post Share on other sites
ediko911 10 Posted April 6, 2010 (edited) Hi all. Could I ask someone to explain me how exactly these conversations work. I don't need anything fancy like choosing your answers yet.I need to keep it simple so that the conversation goes on by itself. I tried creating talk.bikb but how do you actually make it work? Ive tried without success. Is there just a trigger where I need to type execute talk.bikb or something? I really don't get it, maximum I got was made Arma2 crash like 5 times in a row because it didn't like how I wrote the bibk. file, would be really good if it didn't crash but just showed me the error without exiting the whole game it gets too frustrating now. The example mission didn't help at all. It just got me confused even more. Could someone post how to make it simple, like in an intro a camera fly's in a trigger and the text starts going (I plan adding voices later when I actually learn how to make even the simplest conversations) or if player enters the zone and starts talking with other people? Thanks for your patience. Edited April 6, 2010 by ediko911 Grammar Share this post Link to post Share on other sites
luckyhendrix 10 Posted April 16, 2010 It seems the link for the demo missions is down again. It would be very nice if someone could re-upload it. thanks Share this post Link to post Share on other sites
k i n g 0 Posted April 22, 2010 Thanks, i realy tried it with your instructions, but i did not get it. now i am able to continue my campagne! thanx Share this post Link to post Share on other sites
luckyhendrix 10 Posted May 1, 2010 How would you do if you'd want to add a topic to all civilian ? wheter they're generated by ALICE or not Share this post Link to post Share on other sites
Jezuro 452 Posted May 3, 2010 {if (side _x == Civilian) then {_x kbAddTopic [. . .]}} forEach allUnits Share this post Link to post Share on other sites
k i n g 0 Posted May 3, 2010 I just dont get it with this fsm-files, pretty difficult. I read a lot, but it is still hard. but in the beginning you say there is a "Manual" conversation flow. How do i start this manual conversation? i tried it with a sqf file, but it does not work. and another question: i want to avoid the player from moving. he should only be able to move his head. how and where do i implement this condition? Share this post Link to post Share on other sites
cpt-craig 11 Posted June 23, 2010 Sorry but is there somewhere a reference for all the default voice classnames so i could like use the phrases from the game like you did in your example mission. Thanks in advance Share this post Link to post Share on other sites
Jezuro 452 Posted June 29, 2010 All dubbing soundfiles are packed in addon dubbing.pbo. Conversation sentences are defined in .bikb files located in every mission folder, subfolder \kb. Share this post Link to post Share on other sites
MulleDK19 21 Posted July 11, 2010 This is working great for me. But there are some words (That I really really need), that I can't make the unit say :/ This is not my real sentence, lol, but it works, except "sniper" is not spoken. In fact, any vehicle is not spoken. I can use SniperRifle, etc., but not vehicles... Does vehicle words have postfixes or prefixes? Like vehiclesniper or unitsniper, or something? class Sentences{ class RequestReinforcements { text = "This is sniper"; speech[] = {thisis,sniper}; class Arguments {}; }; }; Share this post Link to post Share on other sites
rübe 127 Posted July 26, 2010 Is it actually possible to define custom words? I see in the config, words are defined like this (see dubbingradio_e.pbo): class RadioProtocol_EP1_EN: RadioProtocolBase { class Words { micOut = {"\ca\DubbingRadio_E\Data\Mic_Out1.ogg"}; micOut1 = {"\ca\DubbingRadio_E\Data\over01.ogg"}; micOut2 = {"\ca\DubbingRadio_E\Data\over02.ogg"}; micOut3 = {"\ca\DubbingRadio_E\Data\over03.ogg"}; loop = {"\ca\DubbingRadio_E\Data\radionoise1.ogg"}; beepBeep = {"\ca\DubbingRadio_E\Data\beep.ogg"}; pause = {"\ca\DubbingRadio_E\Data\empty01sec.ogg"}; xmit = {"\ca\DubbingRadio_E\Data\beep.ogg"}; sabot = {}; mgun = {}; NO_SPEECH = {}; empty = {}; Advance = {"DEFAULT\Advance.ogg"}; And = {"DEFAULT\And.ogg"}; Are = {"DEFAULT\Are.ogg"}; ... The natural place do define custom words would be in the description.ext. But I don't see anything mentioned about CfgWords anywhere. So is this currently possible at all (without resorting to addons)? Is it legal to define CfgWords like CfgRadio in the description.ext file? Or shall we use CfgRadio or CfgSounds to define words, would that work? The biki states that the argument speech is an array of Strings, where each string is an already defined word in configs. So I guess the easiest solution - without the need to actually define custom words - is not legal, i.e. something like this: class { text = "$STR_fullSentence"; speech[] = {"\Sound\part1.ogg", %Number, "\Sound\part2.ogg"}; class Arguments { class Number {type = "simple";}; }; }; in a bikb file would not work, wouldn't it? And as for the variable part or the placeholder, %Number in this case, which are later passed along with kbTell.. Shall these sounds be defined as CfgRadio? Share this post Link to post Share on other sites
rübe 127 Posted July 29, 2010 Further I wonder if it's possible to declare alternative stealth/wisper sounds, which could be used to great effect? Well, but first we need to know how to define and use custom words. I really hope that this is possible at all, for glueing sentence dynamically together would help a lot with dubbing. The benefits are obvious. Share this post Link to post Share on other sites
wiggum2 31 Posted August 29, 2010 Is there any way to let the text disappear faster ? Because it stays pretty long... Share this post Link to post Share on other sites
IndeedPete 1038 Posted August 29, 2010 http://community.bistudio.com/wiki/clearRadio ;) Share this post Link to post Share on other sites
wiggum2 31 Posted August 29, 2010 (edited) http://community.bistudio.com/wiki/clearRadio;) ...man, i always search for the wrong stuff at the wiki... :D Thanks ! :) Another question: Is it possible to get a line break into the text ? Edited August 29, 2010 by Wiggum Share this post Link to post Share on other sites
Muzzleflash 111 Posted September 15, 2010 Using OA 1.54 and playing from the editor I'm unable to to play the sound files. I have this (in class Sentences ofc): class Hello_1 { text = "Hello, how are you?"; speech[] = {"Hello_1.ogg"}; class Arguments {}; }; And with speech[] = {}; it works fine, the text is written 2s later the response comes etc. etc.. However if I put a sound file: "Hello_1.ogg" in my mission root folder and put that in as above, no sound is played, however the 2s delay between the hello and the response is gone. The sound file is about 2s long so it is not muted or something like that. I tried using one of the sound files from the example by Jezuro and renamed that to Hello_1.ogg however that gives the same result. What must I do to have the sample played. In case it matters the sound is being "played by" the player. Share this post Link to post Share on other sites
CarlGustaffa 4 Posted September 18, 2010 I've been messing about this now for a while, using the Domination kbTell system as a basis to learn from. What I think may scare off the new guy is the complexity of the kbTell array once you start putting in arguments, where some arguments have text only, others speech only, and some both text and speech. So here is a pretty complex example I've done myself in order to get textual and verbal communications with FDC during an artillery request which is a bit more complex than the vanilla game really supports. I won't show the generated variables that is put into it, other than to say that _vocalarray and _vocaltype are precalculated arrays of strings, where the strings match the actual words (filenames found in "ArmA 2\Expansion\Addons\dubbingradio_e\RADIO\Male01EN\DEFAULT\*", but without the extension. "Pause" is also a word if you need to break it up a little for verbal clarity). So, for an advanced parameter example, I have this setup in .bikb file: class ArtilleryRequest { text = "%Team, requesting %Type strike %Mode %Location. %Rounds salvoes!"; speech[] = {%Team,%Type,%Location}; class Arguments { class Team {type = "simple";}; class Type {type = "simple";}; class Mode {type = "simple";}; class Rounds {type = "simple";}; class Location {type = "simple";}; }; }; And what you may be presented in a worst case scenario: player kbTell [_speaker,d_kb_topic_side_arti,"ArtilleryRequest",["Team","",_firstsecondstr,[_firstsecondstr]],["Type","",d_ari_type,_vocaltype],["Mode","",if (_mode == "grid") then {" at grid"} else {", observer position"},[]],["Location","",if (_mode == "grid") then {if (count _input == 8) then {_position call Xf_ToGrid8} else {mapGridPosition getMarkerPos D_ARTI_MARKER_HELPER};} else {format ["%1. Angle %2 mils at %3 meters", _grid,_mils,_dist]},_vocalarray],["Rounds","",str(d_ari_salvos),[]],true]; That's just nasty and completely unreadable, and trying to edit it will be anything but easy. So let's break it up. What's the biki information about the syntax? person kbTell [receiver, topic, sentence id, [argument name, argument value, argument text, argument speech], ...{,forceRadio}] Those ... indicates that there can be more arrays of parameters. So if we separate the parameters from the rest, and make them separate lines, we get a nicer looking syntax, like: person kbTell [receiver, topic, sentence id, [argument name, argument value, argument text, [b][color="#ff0000"][[/color][/b]argument speech[b][color="Red"]][/color][/b]], ... {,forceRadio} ] I highlighted the speech argument, as it's easy to overlook the fact that this is an array of strings. See below where I have a string stored in firstsecondstr, that I put that into []. If you apply that to my example, you end up with (for my 5 parameters): player kbTell [_speaker,d_kb_topic_side_arti,"ArtilleryRequest", ["Team","",_firstsecondstr,[_firstsecondstr]], ["Type","",d_ari_type,_vocaltype], ["Mode","",if (_mode == "grid") then {" at grid"} else {", observer position"},[]], ["Location","",if (_mode == "grid") then {if (count _input == 8) then {_position call Xf_ToGrid8} else {mapGridPosition getMarkerPos D_ARTI_MARKER_HELPER};} else {format ["%1. Angle %2 mils at %3 meters", _grid,_mils,_dist]},_vocalarray], ["Rounds","",str(d_ari_salvos),[]], true ]; It's looking better, but with nested if statements in the code, it can be further refined for readability. Something like this: player kbTell [_speaker,d_kb_topic_side_arti,"ArtilleryRequest", ["Team","",_firstsecondstr,[_firstsecondstr]], ["Type","",d_ari_type,_vocaltype], ["Mode","", if (_mode == "grid") then { " at grid" } else { ", observer position" },[] ], ["Location","", if (_mode == "grid") then { if (count _input == 8) then { _position call Xf_ToGrid8 } else { mapGridPosition getMarkerPos D_ARTI_MARKER_HELPER }; } else { format ["%1. Angle %2 mils at %3 meters", _grid,_mils,_dist] },_vocalarray], ["Rounds","",str(d_ari_salvos),[]], true ]; And there it is. This made that noncomprehensible messy looking kbTell line from hell you just downloaded, into something that may be easier to follow and change into what you need. Share this post Link to post Share on other sites
HateDread 13 Posted December 22, 2010 Fyi, example mission is down :( Oops! Google Chrome could not connect to arma.jezurosworkshop.net Share this post Link to post Share on other sites
Evil_Echo 11 Posted December 22, 2010 Now have the kb system working very well, it just takes a little practice to get your head fully wrapped around it. And using it with the MP support modules ( rKBTELL via the RE call ) works fine for simple phrases. But remote version does not appear to support complex phrases, ones with variable substitution. Looking at the 1.56 version of the MP module seems to support that finding. :confused: All is not lost, you just need to use a wrapper script and rEXECVM that instead. Share this post Link to post Share on other sites
DankTank 10 Posted December 23, 2010 The sample mission link is broken so I really have no chance of understanding this. :( I hate how simple things (in theory) are so difficult to accomplish when making missions worth a damn. Share this post Link to post Share on other sites
Evil_Echo 11 Posted December 23, 2010 Check the other thread on this subject - I have posted some samples inline there. Share this post Link to post Share on other sites
Jezuro 452 Posted March 11, 2011 Okay, after even my private server went down, I hope I just reuploaded the mission for the last time. Share this post Link to post Share on other sites
igneous01 19 Posted April 6, 2011 Hey Jezuro im having a problem using the interrupted event, It does not work for my conversation (infact i cannot use sentenceid check for anything) I have an NPC, and a trigger around him that will add the topics to the npc and the player that walks into the trigger. I can engage in conversation with him, but as soon as I hit backspace, the check sentenceid == "Interrupted" does not go through in the fsm, and doesnt display the hint. I did add an Interrupted sentence class into the bikb file, and i added it into the fsm. Does this check only work when in the start state of an fsm? Currently It is setup that: the player must talk to him first, this works then the NPC engages with the first sentence, also works then the player response, works npc engages with second sentence, works the entire conversation and flow works, but the interrupted check does not, hanging the entire conversation and all the scripts, until the player has given a response (which he cant since he has cancelled the conversation) here is a picture of my FSM so that maybe someone here might explain to me why this doesnt work: http://img695.imageshack.us/i/npcborisfsm.jpg/ I had to use kbWasSaid to check if a response was given, sentenceId does not work apparently after the first state, and kbWasSaid does not work to check for "Interrupted" Share this post Link to post Share on other sites