Construction Set Der Scriptthread

Ich habe sowas schon mal gesehen. Ich kann Dir zwar nicht wirklich beim Scripten helfen, aber es war in etwa so gelöst:

In einem nicht erreichbaren Raum waren die NPCs aufgestellt. Je nach Abfrage wurde dann der "gebrauchte" in eine bestimmte Zelle teleportiert (oder enabled?). Jeder NPC hatte dann den passenden Dialog. Natürlich waren alle IDs unique.
 
  • Like
Reaktionen: Lyali
Du kannst die Rasse des NPCs zumindest vom Aussehen her nicht mit mir bekannten Mitteln ändern. Also musst du auf die Lösung von WormforEnnio zurückgreifen müssen. Geht damit auch viel leichter.
 
Ich habe mir für jede Rasse einen eigenen NPC erstellt und in Scripting for Dummies ein Beispielscript für die Rassenabfrage gefunden, welches ich mit enable bzw. disable angepasst habe (funktioniert bis jetzt ganz gut:D). Die Dialoge binde ich an eine eigene Klasse, so brauche ich nicht für jeden RassenNPC eine Kopie erstellen.
Danke nochmals.
 
Hallo zusammen,

habe ein kleines Problem bzgl. eines Skripts. Ich möchte einen Activator so mit einem Skript belegen, dass er dem Spieler alle vier Alchemie-Geräte ins Inventar bringt, eines aktiviert und nach dem Schließen des Alchemie-Menüs alle Geräte wieder entfernt.
Ich habe bereits zwei Skripte geschrieben. Wenn ich den Activator anklicke funktioniert auch alles wunderbar. Problem ist nur, dass man, wenn man in der gleichen Interior-Zelle einen NPC anspricht, im Dialogfenster angezeigt bekommt, dass die Alchemie-Geräte, die man gar nicht hat, entfernt wurden. Ich habe die Such-Funktion bereits probiert, kann mit den gefundenen Beiträgen aber so nichts anfangen.
Kann mir jemand sagen, wie ich meine Skripte anpassen muss, dass bei Aktivierung des Activators alles funktioniert, jedoch NPCs nicht betroffen sind?

Skript 1 (Liegt auf Activator)

Begin _ly_alc_script

if ( menumode == 1 )
return
endif

if ( OnActivate == 1 )
player-> AddItem "apparatus_ly_alembic_01" 1
player-> AddItem "apparatus_ly_calcinator_01" 1
player-> AddItem "apparatus_ly_retort_01" 1
player-> AddItem "apparatus_ly_mortar_01" 1
player-> Equip "apparatus_ly_mortar_01"
endif

StartScript _ly_alc_remove

End


Skript 2 (soll die Geräte wieder entfernen)

Begin _ly_alc_remove

if ( menumode == 1 )
return
endif

player->RemoveItem "apparatus_ly_alembic_01" 1
player->RemoveItem "apparatus_ly_calcinator_01" 1
player->RemoveItem "apparatus_ly_retort_01" 1
player->RemoveItem "apparatus_ly_mortar_01" 1

StopScript _ly_alc_remove

End
 
Dein Problem ist, dass du nur überprüfst, ob du ein Menü verlässt und nicht welches. Ich würde alles in ein Script packen:

Code:
begin _ly_alc_script

short state

if ( MenuMode == 1 )
  return
endif

if ( state == 0 )

  if ( OnActivate == 1 )
    Player-> AddItem "apparatus_ly_alembic_01" 1
    Player-> AddItem "apparatus_ly_calcinator_01" 1
    Player-> AddItem "apparatus_ly_retort_01" 1
    Player-> AddItem "apparatus_ly_mortar_01" 1
    Player-> Equip "apparatus_ly_mortar_01"

    set state to 1
    return
  endif

elseif ( state == 1 )

  Player->RemoveItem "apparatus_ly_alembic_01" 1
  Player->RemoveItem "apparatus_ly_calcinator_01" 1
  Player->RemoveItem "apparatus_ly_retort_01" 1
  Player->RemoveItem "apparatus_ly_mortar_01" 1

  set state to 0

endif

end

Ich habe es nicht ausprobiert, aber ich denke, das sollte funktionieren.
 
  • Like
Reaktionen: Lyali
Ich hab ein mehr oder weniger großes Scripting-Problem.

...und fang mal beim Urschleim an.

Kisten, in die unendlich viel reinpasst sind was tolles, deshalb wollte ich mir eine solche basteln.
Klar, ich hätte mir im CS eine Kiste mit sonst was für 'nem "Weight"-Wert hinschustern können - das war mir dan aber zu unelegant.

Also: Wo passt unendlich viel rein?
Richtig, in tote NPC.

Lösung: Ich bastel mir einen Activator mit Kisten-Mesh, auf dem ein Script liegt, der bewirkt, das bei aktivierung des Activators der (per Script) tote NPC aufgerufen wird (der passenderweise Kiste heißt, damit's keiner merkt.

Anderes Szenario, bei dem so etwas nützlich wäre:
Verzauberungsaltar: Ich will keinen NPC anquatschen müssen, um etwas verzaubern zu können, ich will einen Altar. Activator, über den ein NPC aktiviert wird, der in den Dialogoptionen Verzauberung anbietet.
Klar, im Endeffekt wird immer noch ein NPC angequatscht, aber hey, ich hätte 'nen Verzauberungsaltar

Mit dem CS kenn ich mich einigermaßen aus, vom Scripten hab ich keine Ahnung, also:
Scripting for Dummies gewälzt, gedacht: Passt schon, das krieg ich hin losgelegt und gescheitert.

Der Script sieht in etwa so aus:

Code:
Begin mein_truhenscript

If (Activate==1)
     "NPC-ID"->activate
endif

end

Wenn ich den Activator activiere passiert gar nichts.

Zweiter Anlauf (gleiches Ergebnis) - ich bastle eine VVariable rein:

Code:
Begin mein_kistenscript

short kiste

If (Activate==1)
     set kiste to 1
     If (kiste==1)
          "NPC_Kiste"->activate
          set kiste to 0
     endif
endif

end

Der NPC befindet sich in der gleichen Cell und ist per
Code:
sethealth, 0
ausgenockt. Er selber lässt sich auch ohne probleme aktivieren. Das selbe spiel mit 'nem Container anstatt des NPC hat auch nicht funktioniert.

Meine Frage: Wie gehts richtig, wenn überhaupt? Was mach ich falsch? (Außer gleich alles auf einmal machen/können zu wollen.)

Und es wäre super, wenn nicht nur ein Script, sondern auch eine Erklärung geliefert würde, damit ich's dann irgendwann auch mal kann...

Falls es einen derartigen Script schon auf die letzten 119 Seiten verschlagen haben sollte, möchte ich mich dafür entschuldigen, das ich diese nicht durchgewälzt habe...

Vielen Dank schon mal im Voraus
 
Lösung: Ich bastel mir einen Activator mit Kisten-Mesh, auf dem ein Script liegt, der bewirkt, das bei aktivierung des Activators der (per Script) tote NPC aufgerufen wird (der passenderweise Kiste heißt, damit's keiner merkt.
Das geht nicht. Hast du ja schon bemerkt - zudem hat dein Script einen Fehler, es muss "IF (OnActivate == 1)" heißen, aber das nur am Rande. Zudem würde - selbst wenn es ginge - im Inventarfenster der Button zum Entsorgen der Leiche auftauchen, der "Schmuh" würde also in jedem Fall bemerkt werden. Doch das eigentliche Problem besteht darin, dass man nicht "aus der Ferne" aktivieren kann. Der korrekte dafür infrage kommende (undokumentierte) Befehl wäre dieser:

"REFID"->activate, player

Wie Du sehen kannst, re-referenziere ich hier auf die player-ref, was bewirkt, dass der Spieler das (persistente & einzigarte) Objekt "REFID" aktiviert und damit das Standard-Verhalten für activate (Mouseover + Space) auslöst (bei Containern: Inventar öffnen). Das ist wichtig, da nur dann überhaupt das Inventar-Menu aufgehen kann. Dinge, die nicht direkt vom Spieler aktiviert werden (z.B. mittels AIActivate durch eine NPC), reagieren mitunter anders/gar nicht. Der Knackpunkt dabei ist, dass dies zwar bei unique/persistant Containern funktioniert (wenn sie mindestens einmal manuell aktiviert wurden, afaik), aber nicht bei toten NPCs.

Darum würde auch ein korrektes Script nichts machen. Einziger Weg (wenn eine NPC genutzt werden soll) ist Companion Share... aber das widerspricht dem gewünschten Effekt, weil man diesen Fake natürlich sieht.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Rumo
Oh, vielen Dank für die schnellen Antworten...

Ich werd's wahrscheinlich so machen (müssen), wie's ReneMiner beim Großen Beutel gemacht hat.

Damit, das der "Schmuh" (schönes Wort) dann auffällt muss ich dann halt leben - warum nicht mal eine sprechende Kiste, die sich darüber, das sie dauernd vollgestopft wird?

Danke an £exa für die ausführliche Erklärung (und die Hinweise auf meine Tippfehler - im CS sollte ich's richtig gemacht haben, aber selbst wenn nicht, hätt's ja nichts geholfen) ich bin jetzt um einiges Schlauer - es gibt manches, was in den Tuts nicht drin steht.

Ich schreib hier bestimmt nochmal... ;)
 
Hallo zusammen,

ich habe bzgl. des Companion-Skripts von Grumpy ein paar Fragen:

1.) Wenn ich mehreren NPCs das Skript zuordne, agieren dann alle gleich? Also wenn ich z.B. NPC 1 sage er soll Nahkampfwaffen benutzen, benutzen alle weiteren ebenfalls Nahkampfwaffen? Und wenn ja, wie muss ich das Skript anpassen, damit dies nicht der Fall ist?
Begin companionScript

short Companion

float myx
float myy
float myz
float timer

short p_speed
short p_athletics
short p_strength
short p_willpower
short p_intelligence
short p_agility
short p_endurance
short p_personality
short p_luck

short p_health
short p_magicka
short p_fatigue
short p_attackbonus
short p_defendbonus
short p_resistmagicka

short p_longblade
short p_bluntweapon
short p_shortblade
short p_spear
short p_axe
short p_handtohand

short p_heavyarmor
short p_mediumarmor
short p_lightarmor
short p_unarmored
short p_block

; ENABLES COMPANION SHARE OPTION
; Used along with "short companion" (above).

Set Companion to 1

set myx to ( Player->GetPos x )
set myy to ( Player->GetPos y )
set myz to ( Player->GetPos z )

if ( menumode == 1 )
if ( GetPCSleep == 0 )
return
endif
endif

; ADDS DIALOG TOPICS.

AddTopic, "-Gemeinsam"
AddTopic, "-Wertung"
AddTopic, "-Zaubersprüche"
AddTopic, "-Gesundheit"
AddTopic, "-Kampftaktik"

; SPEED INCREASE AND FLEE MODE
; Sets companion's speed/athletics to higher value to improve "following" ability.
; Also causes companion to flee when specified health level is reached and resets
; speed/atletics/flee when healed.

if ( GetCurrentAiPackage == 3 )
if ( GetHealthGetRatio < .4 )
SetFlee, 1000
SetSpeed, 100
SetAthletics, 100
elseif ( GetHealthGetRatio > .4 )
SetFlee, 30
set p_speed to ( ( Player->GetSpeed ) + 85 )
set p_athletics to ( ( Player->GetAthletics ) + 85 )
SetSpeed, p_speed
SetAthletics, p_athletics
endif
endif
endif

; SPEED DECREASE FOR WANDER MODE
; Returns companion to more realistic speed/athletics values when in wander mode.

if ( GetCurrentAiPackage == 0 )
SetSpeed, 40
SetAthletics, 40
endif

; WARPING TO PLAYER ( Used to improve "following" ability)
; Companion will automatically "warp" to the player when specified
; distance has been exceeded and specified amount of time has elapsed.

if ( GetCurrentAiPackage == 3 )
if ( GetWeaponDrawn == 1 )
elseif ( GetSpellReadied == 1 )
return
elseif ( GetDistance Player > 800 )
set timer to timer + GetSecondsPassed
if ( timer > 8 )
set timer to 0
SetPos x myx
SetPos y myy
SetPos z myz
endif
endif
endif

; LEVITATION
; Sets the "z" axis to that of the player when both player and companion
; are levitating. Game AI for NPC levitation works poorly in the vertical.
; This fixes that.

if ( GetEffect, sEffectLevitate == 1 )
if ( GetWeaponDrawn == 1 )
elseif ( GetSpellReadied == 1 )
return
elseif ( GetEffect, sEffectLevitate == 1 )
SetPos z myz
endif
endif

; Causes companion to go into wait mode if player levitates and companion
; has not been directed by the player to cast her own spell of levitation.
; Needed to keep companion from "warping" to player and falling to her death.

if ( Player->GetEffect, sEffectLevitate == 1 )
if ( GetEffect, sEffectLevitate == 0 )
AIWander 0 0 0 0
endif
endif

; Based on an original idea by "The Other Felix", this section
; gets companion to fall with the player if the player's current
; means of levitation expires.

if ( Player->GetEffect, sEffectLevitate == 0 )
if ( GetEffect, sEffectLevitate == 1 )
SetPos z myz
endif
endif

; Used to allow companion to levitate and rejoin player if companion
; was previously in wait mode.

if ( GetCurrentAiPackage == 0 )
if ( Player->GetEffect, sEffectLevitate == 1 )
if ( GetEffect, sEffectLevitate == 1 )
AIFollow Player 0 0 0 0
SetPos z myz
endif
endif
endif

; LEVELING SCHEME AND CHECK STATS WHEN PLAYER SLEEPS
; This is done to keep the entire script from running all of the time
; (keep the script's impact on game performance to a minimum).
; Stat increases will only be aquired by the companion when the
; player sleeps.

if ( GetCurrentAIPackage == 3 )
if (GetPCSleep == 1 )
set p_strength to ( ( Player->GetStrength ) * 0.75 )
set p_willpower to ( ( Player->GetWillpower ) * 1.10 )
set p_intelligence to ( ( Player->GetIntelligence ) * 1.20 )
set p_agility to ( ( Player->GetAgility ) * 1.10 )
set p_endurance to ( ( Player->GetEndurance ) * 0.80 )
set p_personality to ( ( Player->GetPersonality ) * 1.25 )
set p_luck to ( Player->GetLuck )

set p_health to ( Player->Gethealth )
set p_magicka to ( Player-> Getmagicka )
set p_fatigue to ( Player->Getfatigue )
set p_attackbonus to ( ( Player->GetAttackBonus ) * 1.25 )
set p_defendbonus to ( ( Player->GetDefendBonus ) * 1.50 )
set p_resistmagicka to ( ( Player->GetResistMagicka ) * 1.50 )

set p_longblade to ( ( Player->GetLevel ) + 35 )
set p_bluntweapon to ( ( Player->GetLevel ) + 35 )
set p_shortblade to ( ( Player->GetLevel ) + 35 )
set p_spear to ( ( Player->GetLevel ) + 35 )
set p_axe to ( ( Player->GetLevel ) + 35 )
set p_handtohand to ( ( Player->GetLevel ) + 35 )

set p_heavyarmor to ( ( Player->GetLevel ) + 45 )
set p_mediumarmor to ( ( Player->GetLevel ) + 45 )
set p_lightarmor to ( ( Player->GetLevel ) + 45 )
set p_unarmored to ( ( Player->GetLevel ) + 44 )
set p_block to ( ( Player->GetLevel ) + 45 )

SetStrength, p_strength
SetWillpower, p_willpower
SetIntelligence, p_intelligence
SetAgility, p_agility
SetEndurance, p_endurance
SetPersonality, p_personality
SetLuck, p_luck

SetHealth, p_health
SetMagicka, p_magicka
SetFatigue, p_fatigue
SetAttackBonus, p_attackbonus
SetDefendBonus, p_defendbonus
SetResistMagicka, p_resistmagicka

SetLongblade, p_longblade
SetBluntweapon, p_bluntweapon
SetShortblade, p_shortblade
SetSpear, p_spear
SetAxe, p_axe
SetHandtohand, p_handtohand

SetHeavyarmor, p_heavyarmor
SetMediumarmor, p_mediumarmor
SetLightarmor, p_lightarmor
SetUnarmored, p_unarmored
SetBlock, p_block
endif
endif

end companionScript

2.) Es gibt ja im Dialog-Fenster den Befehl ‚Teilen’. Kann ich unter Persuasion einstellen, dass ‚Teilen’ erst bei einer bestimmten Bedingung möglich ist? (Ähnlich der Einstellung, dass man Mitglied einer bestimmten Fraktion sein muss, bevor man etwas kaufen kann)
 
2.) Es gibt ja im Dialog-Fenster den Befehl ‚Teilen’. Kann ich unter Persuasion einstellen, dass ‚Teilen’ erst bei einer bestimmten Bedingung möglich ist? (Ähnlich der Einstellung, dass man Mitglied einer bestimmten Fraktion sein muss, bevor man etwas kaufen kann)

Nicht so direkt. Teilen ist keine AI-Option, für die du ein Thema zur Verfügung hast. Allerdings könntest du mit einem Script den gewünschten Effekt erzeugen.

Das Teilen wird ja durch das Inventarscript (bzw. Variable) Companion bestimmt. Durch ein (Dialog-)Script auf dem Actor könntest du nun abfangen, wann man sich im Dialog befindet und die Variable bei nicht passenden Bedingungen auf 0 setzen bis man den Dialog wieder verlässt. Dann sollte Teilen unmöglich sein, der Actor sich sonst aber wie ein Gefährte verhalten.
 
  • Like
Reaktionen: Lyali
Wenn ich also möchte, dass ich erst einen Auftrag für den NPC erledigen muss, bevor er mir als Begleiter zur Verfügung steht, kann ich das über eine Abfragebedingung für einen bestimmten Journaleintrag regeln, oder?
Begin companionScript

short Companion

float myx
float myy
float myz
float timer

short p_speed
short p_athletics
short p_strength
short p_willpower
short p_intelligence
short p_agility
short p_endurance
short p_personality
short p_luck

short p_health
short p_magicka
short p_fatigue
short p_attackbonus
short p_defendbonus
short p_resistmagicka

short p_longblade
short p_bluntweapon
short p_shortblade
short p_spear
short p_axe
short p_handtohand

short p_heavyarmor
short p_mediumarmor
short p_lightarmor
short p_unarmored
short p_block

; ENABLES COMPANION SHARE OPTION
; Used along with "short companion" (above).

if ( GetJournalIndex "XY" >= 10 )

Set Companion to 1

set myx to ( Player->GetPos x )
set myy to ( Player->GetPos y )
set myz to ( Player->GetPos z )

if ( menumode == 1 )
if ( GetPCSleep == 0 )
return
endif
endif

; ADDS DIALOG TOPICS.

AddTopic, "-Gemeinsam"
AddTopic, "-Wertung"
AddTopic, "-Zaubersprüche"
AddTopic, "-Gesundheit"
AddTopic, "-Kampftaktik"

; SPEED INCREASE AND FLEE MODE
; Sets companion's speed/athletics to higher value to improve "following" ability.
; Also causes companion to flee when specified health level is reached and resets
; speed/atletics/flee when healed.

if ( GetCurrentAiPackage == 3 )
if ( GetHealthGetRatio < .4 )
SetFlee, 1000
SetSpeed, 100
SetAthletics, 100
elseif ( GetHealthGetRatio > .4 )
SetFlee, 30
set p_speed to ( ( Player->GetSpeed ) + 85 )
set p_athletics to ( ( Player->GetAthletics ) + 85 )
SetSpeed, p_speed
SetAthletics, p_athletics
endif
endif
endif

; SPEED DECREASE FOR WANDER MODE
; Returns companion to more realistic speed/athletics values when in wander mode.

if ( GetCurrentAiPackage == 0 )
SetSpeed, 40
SetAthletics, 40
endif

; WARPING TO PLAYER ( Used to improve "following" ability)
; Companion will automatically "warp" to the player when specified
; distance has been exceeded and specified amount of time has elapsed.

if ( GetCurrentAiPackage == 3 )
if ( GetWeaponDrawn == 1 )
elseif ( GetSpellReadied == 1 )
return
elseif ( GetDistance Player > 800 )
set timer to timer + GetSecondsPassed
if ( timer > 8 )
set timer to 0
SetPos x myx
SetPos y myy
SetPos z myz
endif
endif
endif

; LEVITATION
; Sets the "z" axis to that of the player when both player and companion
; are levitating. Game AI for NPC levitation works poorly in the vertical.
; This fixes that.

if ( GetEffect, sEffectLevitate == 1 )
if ( GetWeaponDrawn == 1 )
elseif ( GetSpellReadied == 1 )
return
elseif ( GetEffect, sEffectLevitate == 1 )
SetPos z myz
endif
endif

; Causes companion to go into wait mode if player levitates and companion
; has not been directed by the player to cast her own spell of levitation.
; Needed to keep companion from "warping" to player and falling to her death.

if ( Player->GetEffect, sEffectLevitate == 1 )
if ( GetEffect, sEffectLevitate == 0 )
AIWander 0 0 0 0
endif
endif

; Based on an original idea by "The Other Felix", this section
; gets companion to fall with the player if the player's current
; means of levitation expires.

if ( Player->GetEffect, sEffectLevitate == 0 )
if ( GetEffect, sEffectLevitate == 1 )
SetPos z myz
endif
endif

; Used to allow companion to levitate and rejoin player if companion
; was previously in wait mode.

if ( GetCurrentAiPackage == 0 )
if ( Player->GetEffect, sEffectLevitate == 1 )
if ( GetEffect, sEffectLevitate == 1 )
AIFollow Player 0 0 0 0
SetPos z myz
endif
endif
endif

; LEVELING SCHEME AND CHECK STATS WHEN PLAYER SLEEPS
; This is done to keep the entire script from running all of the time
; (keep the script's impact on game performance to a minimum).
; Stat increases will only be aquired by the companion when the
; player sleeps.

if ( GetCurrentAIPackage == 3 )
if (GetPCSleep == 1 )
set p_strength to ( ( Player->GetStrength ) * 0.75 )
set p_willpower to ( ( Player->GetWillpower ) * 1.10 )
set p_intelligence to ( ( Player->GetIntelligence ) * 1.20 )
set p_agility to ( ( Player->GetAgility ) * 1.10 )
set p_endurance to ( ( Player->GetEndurance ) * 0.80 )
set p_personality to ( ( Player->GetPersonality ) * 1.25 )
set p_luck to ( Player->GetLuck )

set p_health to ( Player->Gethealth )
set p_magicka to ( Player-> Getmagicka )
set p_fatigue to ( Player->Getfatigue )
set p_attackbonus to ( ( Player->GetAttackBonus ) * 1.25 )
set p_defendbonus to ( ( Player->GetDefendBonus ) * 1.50 )
set p_resistmagicka to ( ( Player->GetResistMagicka ) * 1.50 )

set p_longblade to ( ( Player->GetLevel ) + 35 )
set p_bluntweapon to ( ( Player->GetLevel ) + 35 )
set p_shortblade to ( ( Player->GetLevel ) + 35 )
set p_spear to ( ( Player->GetLevel ) + 35 )
set p_axe to ( ( Player->GetLevel ) + 35 )
set p_handtohand to ( ( Player->GetLevel ) + 35 )

set p_heavyarmor to ( ( Player->GetLevel ) + 45 )
set p_mediumarmor to ( ( Player->GetLevel ) + 45 )
set p_lightarmor to ( ( Player->GetLevel ) + 45 )
set p_unarmored to ( ( Player->GetLevel ) + 44 )
set p_block to ( ( Player->GetLevel ) + 45 )

SetStrength, p_strength
SetWillpower, p_willpower
SetIntelligence, p_intelligence
SetAgility, p_agility
SetEndurance, p_endurance
SetPersonality, p_personality
SetLuck, p_luck

SetHealth, p_health
SetMagicka, p_magicka
SetFatigue, p_fatigue
SetAttackBonus, p_attackbonus
SetDefendBonus, p_defendbonus
SetResistMagicka, p_resistmagicka

SetLongblade, p_longblade
SetBluntweapon, p_bluntweapon
SetShortblade, p_shortblade
SetSpear, p_spear
SetAxe, p_axe
SetHandtohand, p_handtohand

SetHeavyarmor, p_heavyarmor
SetMediumarmor, p_mediumarmor
SetLightarmor, p_lightarmor
SetUnarmored, p_unarmored
SetBlock, p_block
endif
endif
endif

end companionScript
 
Ich hätte mal eine Frage zu den Sound-Effekten bei der Waffennutzung. Ich habe folgendes Problem: Ich möchte gerne eine Muskete ins Spiel einbauen (Klassifizierung als Crossbow, Animation im Spiel klappt wunderbar). Allerdings hört man bei Benutzung im Spiel das Sirren einer Sehne. Ich könnte zwar die betreffende Sounddatei im Data Files-Ordner ändern, dann würde dies aber für alle Armbrüste gelten.
Nun zur eigentlichen Frage: Gibt es die Möglichkeit, die Muskete so mit einen Script zu versehen, dass bei jedem Schuss ein zusätzlicher Soundeffekt (nämlich das Schussgeräusch) abgespielt wird? Oder eine andere Lösung für mein Problem?
 
Das habe ich vor Ewigkeiten auch mal gemacht. Nicht für eine Muskete, aber das Prinzip ist das gleiche - zwei Bedingungen:

1. Die Muskete muss ein Unique sein
2. du benötigst einen neuen Soundeffekt für den Gewehrknall.

Dann kannst du folgendes tun:

Code:
begin Gunshot_Script

IF ( player->HasItemEquipped [COLOR="#FF0000"]"ID_MUSKETE"[/COLOR] )
	IF ( GetSoundPlaying "crossbowShoot" )
		player->StopSound "crossbowShoot"
		player->PlaySound [COLOR="#FF0000"]"ID_Musketenschuss"[/COLOR]
	EndIF
EndIF

end
Das sollte eigentlich seinen Dienst tun. Auf gleiche Art kannst Du damit auch das Nachladen der Waffe verändern.
 
Das habe ich vor Ewigkeiten auch mal gemacht. Nicht für eine Muskete, aber das Prinzip ist das gleiche - zwei Bedingungen:

1. Die Muskete muss ein Unique sein
2. du benötigst einen neuen Soundeffekt für den Gewehrknall.

Dann kannst du folgendes tun:

Code:
begin Gunshot_Script

IF ( player->HasItemEquipped [COLOR=#FF0000]"ID_MUSKETE"[/COLOR] )
    IF ( GetSoundPlaying "crossbowShoot" )
        player->StopSound "crossbowShoot"
        player->PlaySound [COLOR=#FF0000]"ID_Musketenschuss"[/COLOR]
    EndIF
EndIF

end
Das sollte eigentlich seinen Dienst tun. Auf gleiche Art kannst Du damit auch das Nachladen der Waffe verändern.

Schätze das Script soll an die Muskete?
So wird's den nicht Sound abspielen. Es sei denn Du schreibst if ( Player-> GetSoundPlaying... denn die Muskete selbst spielt den Sound ja nicht ab- so wird's nie die Bedingung erfüllen.
Würde auch abstürzen wenn ein Objekt im Inventar solche Späßchen macht.
 
Zuletzt bearbeitet:
@ ReneMiner: Ich habe £exa's Skript (ohne player->GetSoundPlaying) an die Muskete angehängt und es funzt einwandfrei. Dennoch danke ich dir für deine Hilfe.