Companion-Script-Tuning (für Tribunal) |  |
Im Modifikationen-Thread gab es eine Diskussion, ob man nicht den Söldner in Tribunal etwas aufpeppen könnte.
Nach einiger Überlegung, bin ich zum Schluss gekommen, das es besser wäre, diesen Söldner in Rühe zu lassen, sondern lieber eigene Söldner zu erstellen, die aber auch mit nach Gramfeste reisen können. Das hätte den Vorteil, das man nicht mit anderen Mods kollidiert und man könnte verschiedene Variationen von NPCs machen, und eventuell auch Teamwork-Funktionen untereinander (nur so ne Idee).
Um den Anfang zu machen und eure Fantasy etwas anzuregen poste ich gleich mal ein Script, das ich von Grumpy (Author einiger Companion-Mods) bekommen habe. Dies nutz bereits Tribunal-Funktionen und lässt sich auch wunderbar in den Code von Herbak einpflegen:
Begin brittScript
short Companion
short variablename
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_marksman
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
if ( menumode == 1 )
if ( GetPCSleep == 0 )
return
endif
endif
; ADDS DIALOG TOPICS.
AddTopic, "-Together"
AddTopic, "-Worth"
AddTopic, "-Spell"
AddTopic, "-Health"
; MARKSMAN
; Forces companion to use ranged weapon if in inventory.
; Uses anything else in inventory if ranged weapon is not present.
if ( Player->GetWeaponType <= 8 )
britt->setmarksman 0
elseif ( Player->GetWeaponType >=9 )
britt->setmarksman 1000
endif
endif
; 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 ( britt->GetHealthGetRatio < .4 )
britt->SetFlee, 1000
britt->SetSpeed, 100
britt->SetAthletics, 100
elseif ( britt->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 ( britt->GetWeaponDrawn )
elseif ( britt->GetSpellReadied )
return
elseif ( britt->GetDistance Player > 800 )
set timer to timer + GetSecondsPassed
if ( timer > 10 )
set timer to 0
set myx to ( Player->GetPos x )
set myy to ( Player->GetPos y )
set myz to ( Player->GetPos z )
britt->SetPos x myx
britt->SetPos y myy
britt->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.
; Note-This only works when the companion has been directed by the
; player to cast a spell of levitation. Otherwise companion
will
; go into wait mode when player levitates.
if ( GetCurrentAiPackage == 3 )
if ( Player->GetEffect, sEffectLevitate == 1 )
if ( britt->GetEffect, sEffectLevitate == 1 )
set myz to ( Player->GetPos z )
britt->SetPos z myz
endif
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 ( GetCurrentAiPackage == 3 )
if ( Player->GetEffect, sEffectLevitate == 1 )
if ( britt->GetEffect, sEffectLevitate == 0 )
britt->AIWander 0 0 0 0
endif
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 ( britt->GetEffect, sEffectLevitate == 1 )
britt->AIFollow Player 0 0 0 0
set myz to ( Player->GetPos z )
britt->SetPos z myz
endif
endif
endif
; hier kommt im Original noch ein sehr einfallsloser Level-Up Code, der den NPC sehr zu einer Kopie des Spielers macht. Das würde ich lieber von Herbak übernehmen, und damit dem Spieler die Wahl lassen, wo der NPC besser wird.
end brittScript
Das Script würde ich gerne mit Herbaks Steigerungs- und Kampfsystem mischen (das obige System der Kampfumschaltung gefällt mir so überhaupt nicht) und dann um eventuelle Ideen die uns hier noch so einfallen erweitern. Also immer her mit den (Verbesserungs-)Vorschlägen.
__________________ keep on modding...
Dieser Beitrag wurde von iladrion am 04.05.2003, 20:43 Uhr editiert.
|