コード例 #1
0
def start_conversation(camp: gears.GearHeadCampaign,pc,npc,cue=None):
    # If this NPC has no relationship with the PC, create that now.
    realnpc = npc.get_pilot()
    if realnpc and not realnpc.relationship:
        realnpc.relationship = camp.get_relationship(realnpc)
    if not cue:
        npcteam = camp.scene.local_teams.get(npc)
        if npcteam and camp.scene.player_team.is_enemy(npcteam):
            cue = ATTACK_STARTER
        elif camp.is_favorable_to_pc(realnpc):
            cue = HELLO_STARTER
        elif npc not in camp.party and camp.is_unfavorable_to_pc(realnpc):
            cue = UNFAVORABLE_STARTER
        else:
            cue = HELLO_STARTER
    cviz = ghdview.ConvoVisualizer(npc,camp,pc=pc)
    cviz.rollout()
    convo = pbge.dialogue.DynaConversation(camp,realnpc,pc,cue,visualizer=cviz)
    convo.converse()
    if realnpc:
        realnpc.relationship.met_before = True
コード例 #2
0
def build_grammar( mygram, camp: gears.GearHeadCampaign, speaker, audience ):
    speaker = speaker.get_pilot()
    tags = list(speaker.get_tags())
    if speaker.relationship and not speaker.relationship.met_before:
        tags.append(ghgrammar.FIRST_TIME)
    else:
        tags.append(ghgrammar.MET_BEFORE)
    if audience:
        audience = audience.get_pilot()
        react = speaker.get_reaction_score(audience,camp)
        if react > 60:
            tags += [ghgrammar.LIKE,ghgrammar.LOVE]
        elif react > 20:
            tags += [ghgrammar.LIKE,]
        elif react < -60:
            tags += [ghgrammar.DISLIKE,ghgrammar.HATE]
        elif react < -20:
            tags += [ghgrammar.DISLIKE,]
        if audience is camp.pc:
            if camp.is_favorable_to_pc(speaker):
                tags.append(ghgrammar.FAVORABLE)
            elif camp.is_unfavorable_to_pc(speaker):
                tags.append(ghgrammar.UNFAVORABLE)

    trait_absorb(mygram,ghgrammar.DEFAULT_GRAMMAR,tags)
    for p in camp.active_plots():
        pgram = p.get_dialogue_grammar(speaker, camp)
        if pgram:
            mygram.absorb( pgram )
    if speaker.relationship and audience is camp.pc:
        mygram.absorb(speaker.relationship.get_grammar())
    if speaker is camp.pc and audience and audience.relationship:
        mygram.absorb(audience.relationship.get_pc_grammar())

    if hasattr(speaker, "faction") and speaker.faction:
        mygram["[speaker_faction]"] = [str(speaker.faction),]

    mygram.absorb({"[speaker]":(str(speaker),),"[audience]":(str(audience),)})