Construction Set Condition fürs Schwimmen

sinHHHans

Bürger
Ich möchte einen Zauber machen bei dem der PC in der Luft schwimmen kann. Wenn der player ins Wasser geht muss ja irgendeine Variable oder sowas auf 1 gestellt werden ,wodurch das Programm weiss dass es die Schwimm Animationen aktivieren muss.Kennt einer die Condition oder wie sowas geht ?
 
Es gibt die Funktion "IsSwimming", diese wird als Bedingung bei den Animationen benutzt. Aber es gibt keine funktion wie "setSwimming".
Ich glaube nicht das das so einfach zu lösen ist.

Grüsse Zerlix
 
Danke für die Ratschläge werd mich dann mal ransetzten ,hab auch noch nen andern Mod gehohlt wo sowas mit Animationen gemacht wird :)
 
So weit so gut hier ist der aktuelle Zwischenstand:

Code:
scn MYAirSwimmingPlayerSCEffect


ref player		
float xfactme		
float yfactme		
float zfactme		
float height			
float direc			
float speedmod	
short toggle			
short toggle2		


Begin ScriptEffectUpdate

set player to getself
	if player.getDisabled == 1
		return
	endif
player.ResetFallDamageTimer
				set toggle to 0
				set toggle2 to 1
				set speedmod to 4 * GetSecondsPassed
					if speedmod > 4
						set speedmod to 2
					endif

				
				set zfactme to player.GetPos Z
				set height to (Player.GetAngle X) * speedmod
				set zfactme to zfactme - height

				set xfactme to player.GetPos x
				set yfactme to player.GetPos y
				set direc to player.GetAngle z

					if direc < 90 && toggle == 0
						set toggle to 1
						set yfactme to yfactme + ( 90 - direc ) * speedmod
						set xfactme to xfactme + ( direc - 0 ) * speedmod
					endif

					if direc < 180 && toggle == 0
						set toggle to 1
						set direc to direc - 90
						set yfactme to yfactme + ( 0 - direc ) * speedmod
						set xfactme to xfactme + ( 90 - direc ) * speedmod
					endif

				
					if direc < 270 && toggle == 0
						set toggle to 1
						set direc to direc - 180
						set yfactme to yfactme + ( direc - 90 ) * speedmod
						set xfactme to xfactme + ( 0 - direc ) * speedmod
					endif

				
					if  toggle == 0
						set toggle to 1
						set direc to direc - 270
						set yfactme to yfactme + ( direc - 0 ) * speedmod
						set xfactme to xfactme + ( direc - 90 ) * speedmod
					endif
					
					player.SetPos y, yfactme
					player.SetPos x, xfactme
					player.SetPos z, zfactme
				
			player.PlayGroup jumploop, 1
			player.setscale 0.2
			
	
	if player.IsRunning != 1 && toggle2 == 1
		set toggle2 to 0 
	endif
end
Begin ScriptEffectFinish
		

End

Hier sind die Dinge die Funktionieren :
  1. Der spieler Lässt sich durch die Luft bewegen
    Er wird kleiner

So und all die Dinge die noch nicht Funzen :

  1. Der Spieler macht keine Schwimm anims (Weiß nich wie das geht )
    Der Spieler lässt sich nicht mehr anhalten wenn er einmal los Fliegt
    Wenn der Zauber aufhört bleibt er weiterhin in der "Runterfall-Pose "
    Der spieler kann durch Wände fliegen (wie mit tcl)

Mehr fällt mir vorerst nicht ein ,kann mir jmd helfen :cry: :cry: :cry:
Bitte :)

Mittlerweile sind die meisten Bugs raus ,
aber der player fliegt immernoch durch Wände
er bewegt sich stetig gerade aus und lässt sich nicht rückwärts steuern
und er schwimmt halt noch net
der Rest funzt eigentlich :) :) :)
Code:
 scn MYAirSwimmingPlayerSCEffect

float xfactme        
float yfactme        
float zfactme        
float height            
float direc            
float speedmod

Begin ScriptEffectUpdate
set speedmod to 4 * GetSecondsPassed
      if speedmod > 4
           set speedmod to 4
      endif          
set zfactme to player.GetPos Z
set height to (Player.GetAngle X) * speedmod
set zfactme to zfactme - height
set xfactme to player.GetPos x
set yfactme to player.GetPos y
set direc to player.GetAngle z
    if player.IsRunning == 1 
                    if direc < 90
                        set yfactme to yfactme + ( 90 - direc ) * speedmod
                        set xfactme to xfactme + ( direc - 0 ) * speedmod
                    elseif direc < 180
                        set direc to direc - 90
                        set yfactme to yfactme + ( 0 - direc ) * speedmod
                        set xfactme to xfactme + ( 90 - direc ) * speedmod
                    elseif direc < 270
                        set direc to direc - 180
                        set yfactme to yfactme + ( direc - 90 ) * speedmod
                        set xfactme to xfactme + ( 0 - direc ) * speedmod
                    else
                        set direc to direc - 270
                        set yfactme to yfactme + ( direc - 0 ) * speedmod
                        set xfactme to xfactme + ( direc - 90 ) * speedmod
                    endif
      endif            
player.SetPos y, yfactme
player.SetPos x, xfactme
player.SetPos z, zfactme
;player.PlayGroup jumploop, 1 
player.setscale 0.02
end

Begin ScriptEffectFinish     
player.setscale 1.0
End

Irgendwelche Verbesserungsvorschläge ?
 
Zuletzt bearbeitet von einem Moderator: