Interessant...
Letztens wollte ich glatt noch ein neues Geisterreitervideo machen, doch als ich heute mal zu dem Kerl schaue, steht er wie angewurzelt auf seinem Pferd da und mag seine Patroullie nicht machen, trotz richtiger Packages. Einzig wenn ich ihn angreife, reagiert er
Ich versuche übers Wochenende ein neues Skript zu schreiben, das ähnlich so funktioniert wie das von Fluffy.
Soll heißen es gibt keine Konditionen mehr zu denen die verschiedenen KI-Pakete ausgeführt werden.
Stattdessen werden die KI-Pakete dynamisch per Skript ausgewählt, während der Reiter selber absolute keine KI-Pakete enthält.
Möglicherweise beißt sich die Zuweisung der Konditionen mit der Ausführung der Pakete, darum sollte es leichter sein die Pakete immer einzeln und auch nur dann wenn man sie braucht zuzuführen.
Ansonsten scheint der gute Kerl wohl an seiner eingenen KI zu ersticken XD
Arme Gamebryo
Doku
Ich bin grad am Uploaden.
Das neue Skript sieht so aus:
- [+]
scn LazaelSCN
Short EPWert
Short EPFinal
Short DoOnce
Short TrefferGesamt
Short TrefferPlayer
Short State
Short Death
ref LazaelReittier
ref LazaelReittierKampfZiel
ref LazaelKampfZiel
Float DistancePferd
Short FrameCounter
Short ActivatePferd
Short LazaelReiterPatrolRoute
Begin GameMode
if GetDead && HasEffectShader GhostEffect == 0
PMS GhostEffect
SAA 0.01
endif
if GeisterpferdRef.IsInCombat && GeisterpferdRef.GetCombatTarget != GetCombatTarget
Set LazaelKampfZiel to GetCombatTarget
Set LazaelReittierKampfZiel to GeisterpferdRef.GetCombatTarget
StopCombat LazaelKampfZiel
StartCombat LazaelReittierKampfZiel
endif
if LazaelReiterPatrolRoute == 0
if GetDistance LazaelMarker02 < GetDistance LazaelMarker01
set LazaelReiterPatrolRoute to 2
if GetCurrentPackage != LazaelReiterPackage01 && GetCurrentAIPackage == 0
AddScriptPackage LazaelReiterPackage02
elseif GetCurrentPackage == LazaelReiterPackage01
RemoveScriptPackage LazaelReiterPackage01
endif
else
set LazaelReiterPatrolRoute to 1
if GetCurrentPackage != LazaelReiterPackage02 && GetCurrentAIPackage == 0
AddScriptPackage LazaelReiterPackage01
elseif GetCurrentPackage == LazaelReiterPackage02
RemoveScriptPackage LazaelReiterPackage02
endif
endif
elseif GetDistance LazaelMarker02 <= 150 && LazaelReiterPatrolRoute != 2
set LazaelReiterPatrolRoute to 2
if GetCurrentPackage == LazaelReiterPackage01
RemoveScriptPackage LazaelReiterPackage01
endif
elseif GetDistance LazaelMarker01 <= 150 && LazaelReiterPatrolRoute != 1
set LazaelReiterPatrolRoute to 1
if GetCurrentPackage == LazaelReiterPackage02
RemoveScriptPackage LazaelReiterPackage02
endif
endif
if GetCurrentAIPackage == 22
if IsSpellTarget MOB20KazaelSpell
Dispel MOB20KazaelSpell
endif
If HasSpell MobGhostEffect == 0
AddSpell MobGhostEffect
endif
if GeisterpferdRef.GetActorAlpha != 0.01
GeisterpferdRef.SAA 0.01
endif
if LazaelReittier == 0
Set LazaelReittier to LazaelRef.GetHorse
LazaelReittier.ModAV ResistParalysis 125
LazaelRef.ModAV ResistParalysis 125
ResetHealth
endif
if ActivatePferd == 0
if DistancePferd != GetDistance GeisterpferdRef && FrameCounter == 25
Set DistancePferd to GetDistance GeisterpferdRef
Set FrameCounter to 0
elseif DistancePferd == GetDistance GeisterpferdRef && FrameCounter == 25
Set FrameCounter to 0
Set DistancePferd to 0
Set ActivatePferd to 1
GeisterpferdRef.Activate GeisterpferdRef
else
Set FrameCounter to FrameCounter + 1
endif
endif
elseif FrameCounter != 0
Set FrameCounter to 0
elseif GetCurrentAIPackage != 23 && IsRidingHorse == 0
If HasSpell MobGhostEffect
RemoveSpell MobGhostEffect
sms GhostEffect
SAA 0.7
endif
if GeisterpferdRef.GetActorAlpha != 1
GeisterpferdRef.SAA 1
endif
if LazaelReittier != 0
LazaelReittier.ModAV ResistParalysis -125
LazaelRef.ModAV ResistParalysis -125
Set LazaelReittier to 0
endif
endif
If IsRidingHorse
if ActivatePferd
Set ActivatePferd to 0
endif
If HasSpell MobGhostEffect == 0
AddSpell MobGhostEffect
endif
if GeisterpferdRef.GetActorAlpha != 0.01
GeisterpferdRef.SAA 0.01
endif
if LazaelReittier == 0 && GetAV ResistParalysis != 125
Set LazaelReittier to LazaelRef.GetHorse
LazaelReittier.ModAV ResistParalysis 125
LazaelRef.ModAV ResistParalysis 125
endif
If IsInCombat == 0 && GetCurrentAIPackage != 23 && GetCurrentPackage != LazaelReiterPackage01 && GetCurrentPackage != LazaelReiterPackage02 && GetCurrentPackage != LazaelReiterAmbushPlayer
if LazaelReiterPatrolRoute == 1
AddScriptPackage LazaelReiterPackage01
elseif LazaelReiterPatrolRoute == 2
AddScriptPackage LazaelReiterPackage02
endif
endif
Else
If IsInCombat == 0 && GetDistance GeisterpferdRef <= 200 && GetCurrentAIPackage != 22 && GetCurrentPackage == LazaelReiterSeekHorse
if LazaelReiterPatrolRoute == 1
AddScriptPackage LazaelReiterPackage01
elseif LazaelReiterPatrolRoute == 2
AddScriptPackage LazaelReiterPackage02
endif
elseIf IsInCombat == 0 && GetDistance GeisterpferdRef <= 200 && GetCurrentAIPackage != 22 && GetCurrentPackage != LazaelReiterSeekHorse
if LazaelReiterPatrolRoute == 1
AddScriptPackage LazaelReiterPackage01
elseif LazaelReiterPatrolRoute == 2
AddScriptPackage LazaelReiterPackage02
endif
elseIf IsInCombat == 0 && GetDistance GeisterpferdRef <= 200 && GetCurrentAIPackage != 22 && GetCurrentPackage == LazaelReiterAmbushPlayer && Player.GetDead
if LazaelReiterPatrolRoute == 1
AddScriptPackage LazaelReiterPackage01
elseif LazaelReiterPatrolRoute == 2
AddScriptPackage LazaelReiterPackage02
endif
elseIf IsInCombat == 0 && GetDistance GeisterpferdRef > 200 && GetCurrentAIPackage != 22 && GetCurrentPackage != LazaelReiterSeekHorse && GetCurrentPackage != LazaelReiterAmbushPlayer
AddScriptPackage LazaelReiterSeekHorse
elseIf IsInCombat == 0 && GetDistance GeisterpferdRef > 200 && GetCurrentAIPackage != 22 && GetCurrentPackage == LazaelReiterAmbushPlayer && Player.GetDead
AddScriptPackage LazaelReiterSeekHorse
endif
endif
If IsInCombat && GetCombatTarget == Player && IsEssential && Player.GetDead == 0
SetEssential 45Lazael 0
if GetInFaction PlayerFaction
SetFactionRank PlayerFaction, -1
Player.AddSpellNS Mob20KazaelFluch
AddScriptPackage LazaelReiterAmbushPlayer
endif
Elseif IsInCombat && GetCombatTarget != Player && IsEssential == 0 && GetDead == 0
SetEssential 45Lazael 1
Endif
If Player.GetHorse == GeisterpferdRef && GetInFaction PlayerFaction && Player.GetDead == 0 && GetCurrentPackage != LazaelReiterAmbushPlayer
SetFactionRank PlayerFaction, -1
Player.AddSpellNS Mob20KazaelFluch
AddScriptPackage LazaelReiterAmbushPlayer
endif
;___________________Initialisierung____
if ( DoOnce == 0 )
Set EPWert to 500 ; <----- Nur hier EP Wert eintragen!
Set DoOnce to 1
endif
if ( State == 1 )
if ( TrefferPlayer >= 1 )
Set EPFinal to (TrefferPlayer*EPWert/TrefferGesamt)
Set EP to EP + EPFinal
Message "EP + %5.0f" EPFinal
Set State to 2
endif
endif
end
Begin OnHit Player
Set TrefferPlayer to TrefferPlayer + 1
end
Begin OnHit
Set TrefferGesamt to TrefferGesamt + 1
end
Begin OnDeath
if Death == 0
Set VarPlayerKills to ( VarPlayerKills +1 )
;AddItem 4Goetterdaemmerungshelm 1
;Additem 4Goetterdaemmerungsharnisch 1
Player.RemoveSpellNS Mob20KazaelFluch
Player.AddSpell Mob20KazaelSegen
set death to 1
endif
Set State to 1
end
Begin OnActivate Player
If death == 1
activate Player
endif
end
Etwas überladen, dafür gibt es keine KI-Pakete mehr, die sich gegenseitig fertig machen und kein überzogen verwendetes EVP.
Getestet wurde es unter 4 Bedingung.
1.) Neues Spiel
a) Charkter zum Geisterreiter teleportiert.
b) Charakter nach Treomar teleportiert und von dort zum Geisterreiter gewandert.
2.) Bestehender Spielstand mit kaputter KI
a) Charakter zum Geisterreiter teleportiert.
b) Charakter zum Bergkloster teleportiert (war in diesem Fall näher) und von dort zum Geisterreiter gewandert.
In allen Fällen hat sich der Reiter entsprechend gut verhalten.
Im neuen Spiel, ebenso wie beim bestehenden Spielstand, wurde der Reiter auch auf seiner Tour begleitet. Er ändert erfolgreich die Richtung und führt seine Patroullie endlos fort, sobald der entsprechende Zielpunkt seiner Patroullien-KI erreicht wurde.
Sobald die neuen Dateien hochgeladen sind, geb ich in einem neuen Post Bescheid.