Lingara Lingara Mwongozo Miongozo API Maktaba Programu Unda Pachika Programu ya wavuti
Lugha: Kiswahili

Mazungumzo ya NPC

Ukurasa huu umetafsiriwa kutoka Kiingereza. Ikiwa hizi mbili zinatofautiana, ukurasa wa Kiingereza ndio sahihi. Soma ukurasa wa Kiingereza

Mhusika katika mchezo wako anaweza kufanya mazungumzo na mchezaji katika lugha anayojifunza, kwa kiwango chake. Kila mstari ambao mchezaji husema ni zamu moja: kifurushi cha mchezaji huutuma, na jibu la mhusika hutiririka kurudi kwa vipande.

Kile zamu inabeba

Kila zamu hutuma kila kitu ambacho mhusika anahitaji, kwa sababu Lingara haihifadhi mazungumzo yoyote kati ya zamu:

  • npc: nani anazungumza. name yake ni herufi 1 hadi 32, na persona yake ya hiari ni mstari mmoja wa maelezo, herufi 1 hadi 120, kama vile “muuzaji wa maandazi”.
  • scene: ya hiari, mahali mazungumzo yanapofanyika, herufi 1 hadi 160.
  • source_lang na target_lang: lugha ya mchezaji mwenyewe na ile anayojifunza. Lazima ziwe tofauti, na mhusika huzungumza target_lang pekee.
  • level: kiwango cha mchezaji, kuanzia 1 hadi 9. Mwongozo wa Lingara “Maana ya kiwango” unaeleza kipimo hicho.
  • line: kile mchezaji amesema hivi punde, herufi 1 hadi 500.
  • history: mazungumzo hadi sasa, la zamani zaidi kwanza, isiyozidi mistari 12. Kila mstari una speaker, ama player au npc, na text yake, herufi 1 hadi 500.

Kila maandishi ni mstari mmoja. Mchezo wako huhifadhi mazungumzo: kifurushi cha mchezaji hushikilia dirisha la kila mazungumzo unayofungua, huongeza kila zamu iliyokamilika ndani yake, hukata kila jibu hadi herufi zake 500 za kwanza, na huondoa mistari ya zamani zaidi inayozidi 12.

Lingara huichukulia persona na scene kama maandishi yasiyoaminika kutoka kwa mchezo wako. Huunda jinsi mhusika anavyozungumza, kamwe si kile anachoruhusiwa kufanya.

Jinsi jibu linavyowasili

Jibu hutiririka kama vipande vya maandishi, ambavyo mchezo wako huviunganisha vinapowasili. Taarifa inaweza kuja katikati yake, kama vile inayosema kwamba jibu lilikatizwa. Zamu huisha kwa done jibu linapokamilika, au kwa error linaposhindwa. Zamu haiwezi kuendelezwa: muunganisho ukikatika, mchezaji husema mstari huo tena.

Sema mstari mmoja kwa wakati mmoja kwa kila mhusika. Mstari unaosemwa wakati mhusika bado anajibu hukataliwa badala ya kuwekwa kwenye foleni, kwa sababu kila zamu hutozwa.

Nani analipa

Ni wachezaji wa mteja anayelipa kwa matumizi pekee wanaoweza kufanya mazungumzo, na kila zamu hutozwa mteja huyo. Tokeni ya mchezaji inahitaji embed:play.

Lugha ya mfano wa msimbo

Bevy

fn spawn_seller(mut commands: Commands) {
    let mei = NpcDialogue::new("Mei", "zh", 2)
        .and_then(|npc| npc.with_persona("a dumpling seller"))
        .and_then(|npc| npc.with_scene("the night market"))
        .expect("within Lingara's bounds");
    commands.spawn(mei);
    commands.spawn(Player);
}

/// One turn at a time: a line said while the NPC is replying is a `Busy` error.
fn talk(keys: Res<ButtonInput<KeyCode>>, npcs: Query<Entity, With<NpcDialogue>>, mut say: MessageWriter<NpcSay>) {
    if keys.just_pressed(KeyCode::Digit1) {
        for entity in &npcs {
            say.write(NpcSay { entity, line: "饺子多少钱?".into() });
        }
    }
}

/// `streaming` grows as the reply arrives; `turns` holds the finished ones.
fn show_reply(transcripts: Query<&NpcTranscript, Changed<NpcTranscript>>) {
    for transcript in &transcripts {
        if let Some(partial) = &transcript.streaming {
            info!("…{partial}");
        }
    }
}

Unity

public DialogueId OpenDialogue(string npc, string sourceLang, string targetLang, byte level) =>
    Client.DialogueOpen(new DialogueConfig { Npc = new Npc { Name = npc }, SourceLang = sourceLang, TargetLang = targetLang, Level = level });

// The reply streams back as NpcTurn events: append each Fragment's text to your label.
public RequestId Say(DialogueId dialogue, string line) => Client.DialogueSay(dialogue, line);

Godot C#

public long OpenDialogue(string npc, string sourceLang, string targetLang, byte level) =>
    Client.DialogueOpen(new DialogueConfig { Npc = new Npc { Name = npc }, SourceLang = sourceLang, TargetLang = targetLang, Level = level }).Value;

// The reply streams back as NpcTurnFragment signals, then one NpcTurnFinished.
public long Say(long dialogue, string line) => Client.DialogueSay(new DialogueId(dialogue), line).Value;

GDScript

# A LingaraNpc child per character: npc_name, target_lang and level in the
# inspector. say() returns false while a turn is in flight (turns are never
# queued, because each one is billed).
func talk_to_mei(line: String) -> void:
	if mei.say(line):
		bubble.text = "…"


func _on_mei_replied(text: String) -> void:
	bubble.text = text

Unreal C++

void ALingaraEmbedSnippetActor::Say(const FString& Line)
{
	ELingaraCallResult Result;
	FLingaraEmbedError Error;
	if (Dialogue == 0)
	{
		FLingaraDialogueConfig Config;
		Config.Npc.Name = TEXT("Mei");
		Config.Npc.Persona = TEXT("a tea seller at the night market");
		Config.SourceLang = TEXT("en");
		Config.TargetLang = TEXT("zh");
		Config.Level = 2;
		Dialogue = Lingara()->DialogueOpen(Config, Result, Error);
	}
	Reply.Reset();
	Lingara()->DialogueSay(Dialogue, Line, Result, Error);
}

// The reply streams back as npc_turn events: append each fragment.
void ALingaraEmbedSnippetActor::HandleNpcTurn(const FLingaraNpcTurn& Turn)
{
	if (Turn.Dialogue == Dialogue && Turn.Update.Type == ELingaraNpcTurnUpdateType::Fragment)
	{
		Reply += Turn.Update.Text;
	}
}

Kotlin

fun talkToMei(line: String) {
    val dialogue = npc ?: lingara.dialogueOpen(DialogueConfig(Npc("Mei", "a tea seller"), "the tea house", "en", "zh", 2, emptyList()))
    npc = dialogue
    lingara.dialogueSay(dialogue, line)
}

private fun onNpcTurn(update: NpcTurnUpdate) {
    when (update) {
        is NpcTurnUpdate.Opened -> bubble = ""
        is NpcTurnUpdate.Fragment -> bubble += update.text
        is NpcTurnUpdate.Finished -> bubble = update.text
        else -> Unit
    }
}

Java

void talkToMei(String line) {
  if (npc < 0) {
    Npc mei = new Npc("Mei", "a tea seller");
    npc =
        lingara.dialogueOpen(new DialogueConfig(mei, "the tea house", "en", "zh", 2, List.of()));
  }
  lingara.dialogueSay(npc, line);
}

void onNpcTurn(EmbedEvent.NpcTurn turn) {
  if (turn.getUpdate() instanceof NpcTurnUpdate.Fragment fragment) {
    bubble.append(fragment.getText());
  } else if (turn.getUpdate() instanceof NpcTurnUpdate.Finished finished) {
    bubble.setLength(0);
    bubble.append(finished.getText());
  }
}

Tazama pia