Giter Club home page Giter Club logo

dialoguecontroller's Introduction

DialogueController for CitizenFX

This is a resource for handling GTA's scripted conversations.

It supports both regular conversations and randomized lines.

It can be provided peds to run these on or none to just play the audio.

Supports C# and lua exports

Examples

Lua: Regular, no assigned ped

    -- Lua requires for it to be json encoded, json.encode is included in the lua runtime.
	-- This is due to Lua -> C# issues. 
	local dialogue = {
        gxt = "imblzau", -- GXT name
        line = "IMBLZ_FIRSTF", -- Line name without 1A lines and such
        speakers = {
            ["2"] = "EXECPA_FEMALE", -- Speakers, required, based on SL. needs to be accurate
        },
        peds = nil,
        --[[peds = {
            ["2"] = PlayerPedId(),
        },]]
        forcePedsVisible = false, -- used for debugging purposes only, optional
        phoneCall = false, -- optional, forces frontend
        forceRadio = false, -- optional
    }
    exports['DialogueController']:startDialogueJson(json.encode(dialogue))

Randomized Line:

    local dialogue = {
        gxt = "jhaud", -- gxt dictionary
        line = "JH_SWITCH", -- the randomized line, where JH_SWITCH_01 JH_SWITCH_02 exists, simply remove the _##
        voice = "Michael", -- voice of the line
        ped = -1, -- ped to play audio on, -1 means it will play on a generated ped attached to the player
    }
    exports['DialogueController']:startRandomizedDialogueJson(json.encode(dialogue))

C#: Does not seem functional at the moment. if you have any idea how to properly use them they just directly hook up to (or should...) to the functions.

How to find voice lines

The best way to find voicelines is using https://github.com/root-cause/v-labels 's labels.json

Have a line in mind open the (rather large) json in your preferred text editor and CTRL+F for the subtitle

For example, say we want to find pavel's line about the loch ness monster.

CTRL-F "from movement patterns i would say"

The label for that line is HS4P_193__5, this is a weird case where it has double underscores so remove the following the get the line:

HS4P_193__5 -> HS4P_193_

Always remove _[NUMBER] or _[NUMBER]A where applicable.

Then grab the gxt dictionary by scrolling up until you see hs4paud. thats the GXT dictionary

For speakers, it is a bit more tricky and may require some guessing. if you open the _speech.dat4.nametable for that DLC you can find at the bottom the voice names.

Like HS4_PAVEL, HS4_SNIPER1. Use context to put it together. If you are running the debug copy, you will see speaker id's get logged in f8. You can use these to determine the speaker ID. note that they can go beyond 9 and become like F for some lines (like the sniper) You can only use the actual letters to specify these, it will handle the rest for you.

it will ONLY work with the correct voice.

Some basic ones are Lester, Michael, Trevor, Franklin, Lamar, NervousRon etc. You can also find these in the decompiled scripts.

For randomized lines, simply take what is in JH_SWITCH_01 JH_SWITCH_02 and remove _## to get the voiceline name.

Sometimes you can use https://raw.githubusercontent.com/Parik27/V.Rainbomizer/master/data/VoiceLines.txt to find the speakers

"Queuing up" lines.

Simply use IsScriptedConversationOngoing() to determine and wait for lines to complete.

This resource does not offer any way to do this at the moment, but may in the future. It in the meantime instantly kills any conversation when it is called upon.

Known issues

There is a hitch on first run from lua using the json exports due to Newtonsoft.Json loading.

dialoguecontroller's People

Contributors

lucas7yoshi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.