Jump to content

Problems with gas and oil


Deleted800173User

Recommended Posts

Okay so I have 2 problems:

 

1. I'm trying to make my own poison gas effect for a room. (EDIT: Solved!)

I can write the script to deal the damage appropriately but I really want to include poison resist. I also want to vary the damage based on the player. And the damage needs to be slow so I can't just use the gas trap already in the game. I could just fake the poison damage using the script but I can't figure out how to tell what the player's poison resist is using scripts. So i need help. I can use either A (an explanation on how to deal "poison" damage using papyrus) or B (the syntax needed to get the player's, and any other actor reference's, current poison resistance.)(PS I currently have no script for this. But you can look at the poison gas trap script below, hidden in the spoiler tag)

 

2. I'm trying to cover a vary large area with oil but i can't use multiple oil spills or the game will crash when igniting them.

I tried scaling up the oil spill but the fire is the same size as normal meaning a player can easily dodge it plus it just looks stupid. After that I tried to place multiple oil spills next to each other but the game crashed when i ignited them. Help?

 

On a third note does anyone know approximately how many items I can have in a room before I need to worry about someone's computer crashing? (I have a very nice computer and it seems to handle it well, but I'm not sure about the many users of the mod I'm designing.)

 

 

scriptName TrapPoisonGas extends objectReference
;
;
;===================================================================
;;Properties from MQShoutTrigger
;===================================================================

Spell property voicelv01 auto		; level 1 shout
Spell property voicelv02 auto		; and 2
Spell property voicelv03 auto		; and 3, the most powerful

float property timeToClear auto hidden							; this variable is set according to what power of shout hit the fog

float property ClearTimeWeak = 5.0 auto			
{tweak setting for how long fog stays cleared by weakest shout
default = 5.0}

float property ClearTimeMed = 10.0 auto
{tweak setting for how long fog stays cleared by medium shout
default = 10.0}

float property ClearTimeStrong = 15.0 auto
{tweak setting for how long fog stays cleared by strongest shout
default = 15.0}

bool property allowEnableFlag = true auto
{when true, trigger will enable after clear time is up
when false, trigger will stay disabled}

; return value for IsFogOn function
; hidden property for use in child scripts
bool property bIsFogOn = false auto hidden

explosion property PoisonGasExplosion auto hidden
bool property weaponResolved = false auto hidden
int Property TrapLevel = 1 auto
{Used to determine the difficulty of the trap, currently only tied to damage
0 = Easy
1 = Medium (DEFAULT)
2 = Hard
3 = VeryHard}

;===================================================================
;;Gas Properties
;===================================================================

keyword property gasKeyword auto
magicEffect property gasMagicEffect01 Auto
float property fDuration = 15.0 auto
bool property isInitiallyActive = True auto
{Set whether the poison gas is initially active
default == TRUE}

bool property init = FALSE auto hidden
bool property TemporarilyCleared auto hidden
bool property loop = False auto hidden

;===================================================================
;;EVENT BLOCK
;===================================================================

event onCellLoad()
if !init && isInitiallyActive
	goToState("On")	;onAnim
	bIsFogOn = true
	loop = true
	init = TRUE
else
	init = TRUE
endif

if !weaponResolved
	ResolveLeveledExplosion ()
endif
endEvent

;===================================================================
;;STATE BLOCK
;===================================================================

;/
STATE WaitingForTrigger
event onBeginState()
	if !weaponResolved
		ResolveLeveledExplosion ()
	endif
endEvent

event onTrigger(objectReference triggerRef)
; 		Debug.Trace("Triggered: " + triggerRef + " " + !(triggerRef as actor).HasMagicEffectWithKeyword(gasKeyword))
	if triggerRef as actor
		if !(triggerRef as actor).HasMagicEffectWithKeyword(gasKeyword)
; 				debug.Trace(self + " has applied gas to " + triggerRef)
			;(triggerRef as actor).addSpell(gasSpell01)
			triggerRef.placeAtMe(PoisonGasExplosion)
		endif
	endif
endEvent

; event OnTriggerEnter (objectReference TriggerRef)
		; resolveTriggerLogic(triggerRef)
; endEvent

Event OnHit(ObjectReference Aggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	if Aggressor == Game.GetPlayer()
		resolveTriggerLogic(None, (akSource as spell))
	endif
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState


STATE	HasBeenTriggered
; Nothing happens - this is a holding state
EVENT OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
; 		debug.Trace("Hit but inactive: "+self)
endEVENT 
endSTATE

STATE Inactive
event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endSTATE
/;

;;;;;;;;;;;;;;;;;;;;New stuff;;;;;;;;;;;;;;;;;;;;;;;;;

State On
event onBeginState()
	bIsFogOn = True
	playAnimation("playAnim02")	;onAnim
endEvent

;Currently has an actor inside
event onTrigger(objectReference triggerRef)
	if triggerRef as actor && !(triggerRef as actor).isDead()
	
		;If the actor does not already have a poison effect on them
		if !(triggerRef as actor).HasMagicEffectWithKeyword(gasKeyword)
; 				debug.Trace(self + " has applied gas to " + triggerRef)
			;(triggerRef as actor).addSpell(gasSpell01)
			triggerRef.placeAtMe(PoisonGasExplosion)
		endif
	endif
endEvent

;Activated by a trap trigger object
event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent

;This occurs when hit by a shout
Event OnHit(ObjectReference Aggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	if Aggressor == Game.GetPlayer() && (akSource as spell)
		resolveShoutLogic(akSource as spell)
	endif
endEvent
endState

auto State Off
event onBeginState()
	bIsFogOn = False
	playAnimation("playAnim01")	;offAnim
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState

State TempCleared
event onBeginState()
	bIsFogOn = False
	playAnimation("playAnim01")	;offAnim
	utility.wait(timeToClear)
	if TemporarilyCleared
		TemporarilyCleared = False
		goToState("On")
	else
		goToState("Off")
	endif
	
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState
;===================================================================
;;FUNCTION BLOCK
;===================================================================

Function ResolveShoutLogic(Spell akSpell)
; 	debug.Trace(self + "MQShoutTrigger: fireTriggerEvent from " + akSpell)
TemporarilyCleared = True
; set the time that this fog portion will stay cleared based on strength of the shout
if akSpell == voicelv01
	timeToClear = clearTimeWeak
elseif akSpell == voicelv02
	timeToClear = clearTimeMed
elseif akSpell == voicelv03
	timeToClear = clearTimeStrong
endif
goToState("TempCleared")
;setFogState(false)
; 	;debug.Trace(self + "Waiting " + timeToClear)
;utility.wait(timeToClear)
; if allowEnableFlag
	;self.enable()
	; setFogState(true)
; endif
; goToState("WaitingForTrigger")
endFunction

; Function resolveTriggerLogic(ObjectReference TriggerRef = None, Spell SpellRef = None)

;respond if struck by one of the shout projectiles
; 	; debug.Trace( self + "MQShoutTrigger: resolveTriggerLogic ObjectRef=" + TriggerRef + ",  SpellRef=" + spellRef)

; if spellRef;&& (spellRef == voicelv01 || spellRef == voicelv02 || spellRef == voicelv03)
	; goToState("HasBeenTriggered")
	; fireTriggerEvent(spellRef)
; endif

; endFunction

;Handle turning on or off
function ResolveGasActivation(objectReference activateRef)
TrapTriggerBase TriggerRef					;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase		;Set TriggerRef to our activateRef

if TriggerRef
	if TriggerRef.TriggerType == 0			;single
		loop = False
		if bIsFogOn
			;do nothing
			
		Else
			;turn on
			unregisterForUpdate()
			registerForSingleUpdate(fDuration)
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 1		;hold
	
		if loop
			loop = False
		else
			loop = True
		endif
		
		if bIsFogOn
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 2		;toggle
		if bIsFogOn
			loop = False
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			loop = True
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 3		;turn on
		loop = True
		if bIsFogOn
			;do nothing
		else
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 4		;turn off
		loop = False
		if bIsFogOn
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			;do nothing
		endif
	endif
Else
	
endif
endFunction

event onUpdate()
unregisterForUpdate()
if getState() == "On"
	if !loop
		goToState("Off")
	endif
elseif getState() == "TempCleared"
	TemporarilyCleared = False
else
endif
endEvent
; Function setFogState(bool bTurnOnFog)
; bIsFogOn = bTurnOnFog
; if bTurnOnFog
; 		; debug.Trace("Re-fogging: "+self)
	; self.enable()
; else
; 		; debug.Trace("unfogging: "+self)
	; self.disable()
; endif
; endFunction

;================================================================

int property LvlThreshold1 auto
int property LvlThreshold2 auto
int property LvlThreshold3 auto
int property LvlThreshold4 auto
int property LvlThreshold5 auto
Explosion property TrapPoisonGasExplosion01 auto
Explosion property TrapPoisonGasExplosion02 auto
Explosion property TrapPoisonGasExplosion03 auto
Explosion property TrapPoisonGasExplosion04 auto
Explosion property TrapPoisonGasExplosion05 auto
Explosion property TrapPoisonGasExplosion06 auto

Function ResolveLeveledExplosion ()
;Trace("ResolveLeveledWeapon")
int damageLevel
damageLevel = CalculateEncounterLevel(TrapLevel)

; weapon lvlWeaponM = LvlWeaponM1
; weapon lvlWeaponL = LvlWeaponL1
; weapon lvlWeaponR = LvlWeaponR1
explosion LvlExplosion = TrapPoisonGasExplosion01

if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2)
	; lvlWeaponM = LvlWeaponM2
	; lvlWeaponL = LvlWeaponL2
	; lvlWeaponR = LvlWeaponR2
	LvlExplosion = TrapPoisonGasExplosion02
	;Trace("damage threshold =")
	;Trace("2")
endif
if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3)
	;lvlWeaponM = LvlWeapon3
	LvlExplosion = TrapPoisonGasExplosion03
	;Trace("damage threshold =")
	;Trace("3")
endif
if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4)
	;lvlWeaponM = LvlWeapon4
	LvlExplosion = TrapPoisonGasExplosion04
	;Trace("damage threshold =")
	;Trace("4")
endif
if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5)
	;lvlWeaponM = LvlWeapon5
	LvlExplosion = TrapPoisonGasExplosion05
	;Trace("damage threshold =")
	;Trace("5")
endif
if (damageLevel > LvlThreshold5)
	;lvlWeaponM = LvlWeapon6
	LvlExplosion = TrapPoisonGasExplosion06
	;Trace("damage threshold =")
	;Trace("6")
endif

; ballistaWeaponM = lvlWeaponM
; ballistaWeaponL = lvlWeaponL
; ballistaWeaponR = lvlWeaponR
PoisonGasExplosion = LvlExplosion
weaponResolved = True
EndFunction

 

 

P.S. I was also wondering if there was a way to code an item so that a player cannot pick up the item(as in into his inventory) but can still move the item around using the "E" button

Edited by Guest
Link to comment
Share on other sites

While I don't know how to create a hazard(stupid me :wallbash: )

Messing around in the CK for a bit reveled that poisons use the AlchDamageHealth Magic effect wich also has poison resitence built into it,there is also a duration one named AlchDamageHealthDuration (these are IDs by the way not the ingame names).The AlchDamageHealthRavage is an instantenius version and wouldn't suit your needs.

So...A hazard that appilies one of those magic effects

Link to comment
Share on other sites

I found it! apparently the poison gas has an explosion effect that deals the damage! yes!

EDIT: oil also uses an explosion object which i may be able to resize or make a new one that simply IS larger! oh man I've been at this road block all week! Now if i can just figure out how to do that item trick.

Edited by Guest
Link to comment
Share on other sites

Okay so I have copied the original poison gas and made copies of the explosion and ench(enchantment?) Anyways you can see my new script below. ()

 

Scriptname TTTGTrapPoisonGasScript extends ObjectReference  
;
;
;===================================================================
;;Properties from MQShoutTrigger
;===================================================================

Spell property voicelv01 auto		; level 1 shout
Spell property voicelv02 auto		; and 2
Spell property voicelv03 auto		; and 3, the most powerful

float property timeToClear auto hidden							; this variable is set according to what power of shout hit the fog

float property ClearTimeWeak = 5.0 auto			
{tweak setting for how long fog stays cleared by weakest shout
default = 5.0}

float property ClearTimeMed = 10.0 auto
{tweak setting for how long fog stays cleared by medium shout
default = 10.0}

float property ClearTimeStrong = 15.0 auto
{tweak setting for how long fog stays cleared by strongest shout
default = 15.0}

bool property allowEnableFlag = true auto
{when true, trigger will enable after clear time is up
when false, trigger will stay disabled}

; return value for IsFogOn function
; hidden property for use in child scripts
bool property bIsFogOn = false auto hidden

explosion property PoisonGasExplosion auto hidden
bool property weaponResolved = false auto hidden
int Property TrapLevel = 1 auto
{Used to determine the difficulty of the trap, currently only tied to damage
0 = Easy
1 = Medium (DEFAULT)
2 = Hard
3 = VeryHard}

;===================================================================
;;Gas Properties
;===================================================================

keyword property gasKeyword auto
magicEffect property gasMagicEffect01 Auto
float property fDuration = 15.0 auto
bool property isInitiallyActive = True auto
{Set whether the poison gas is initially active
default == TRUE}

bool property init = FALSE auto hidden
bool property TemporarilyCleared auto hidden
bool property loop = False auto hidden

;===================================================================
;;EVENT BLOCK
;===================================================================

event onCellLoad()
if !init && isInitiallyActive
	goToState("On")	;onAnim
	bIsFogOn = true
	loop = true
	init = TRUE
else
	init = TRUE
endif

if !weaponResolved
	ResolveLeveledExplosion ()
endif
endEvent

;===================================================================
;;STATE BLOCK
;===================================================================

;/
STATE WaitingForTrigger
event onBeginState()
	if !weaponResolved
		ResolveLeveledExplosion ()
	endif
endEvent

event onTrigger(objectReference triggerRef)
; 		Debug.Trace("Triggered: " + triggerRef + " " + !(triggerRef as actor).HasMagicEffectWithKeyword(gasKeyword))
	if triggerRef as actor
		if !(triggerRef as actor).HasMagicEffectWithKeyword(gasKeyword)
; 				debug.Trace(self + " has applied gas to " + triggerRef)
			;(triggerRef as actor).addSpell(gasSpell01)
			triggerRef.placeAtMe(PoisonGasExplosion)
		endif
	endif
endEvent

; event OnTriggerEnter (objectReference TriggerRef)
		; resolveTriggerLogic(triggerRef)
; endEvent

Event OnHit(ObjectReference Aggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	if Aggressor == Game.GetPlayer()
		resolveTriggerLogic(None, (akSource as spell))
	endif
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState


STATE	HasBeenTriggered
; Nothing happens - this is a holding state
EVENT OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
; 		debug.Trace("Hit but inactive: "+self)
endEVENT 
endSTATE

STATE Inactive
event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endSTATE
/;



float totalDamage = 0.0
float damagePerSec
bool unactivated = TRUE
State On
event onBeginState()
	bIsFogOn = True
	playAnimation("playAnim02")	;onAnim
endEvent
;=====================================================================
;CATWHEEL'S ADDITION
;======================================================================
;Currently has an actor inside

event onTrigger(objectReference triggerRef)
	if(triggerRef == game.getPlayer() && unactivated)
		unactivated = FALSE
	debug.Notification(" has player inside")
	while(!self.isDisabled())
					debug.Notification(" beginning loop")
					Utility.wait(0.5)
	if (triggerRef as actor && !(triggerRef as actor).isDead())
		damagePerSec = ((((triggerRef as actor).GetBaseActorValue("Health"))/100) + 1)
		totalDamage = totalDamage + damagePerSec
		;If the actor does not already have a poison effect on them
		if (totalDamage >= 8)
			debug.Notification("has applied gas")
			Utility.wait(0.5)
			;(triggerRef as actor).addSpell(gasSpell01)
			triggerRef.placeAtMe(PoisonGasExplosion)
			totalDamage = totalDamage - 8
		endif
	endif
Utility.wait(0.5)
endwhile
endif
endEvent
;=====================================================================
; END OF CATWHEEL'S ADDITION (MORE AT THE BOTTOM)
;======================================================================

;Activated by a trap trigger object
event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent

;This occurs when hit by a shout
Event OnHit(ObjectReference Aggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	if Aggressor == Game.GetPlayer() && (akSource as spell)
		resolveShoutLogic(akSource as spell)
	endif
endEvent
endState

auto State Off
event onBeginState()
	bIsFogOn = False
	playAnimation("playAnim01")	;offAnim
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState

State TempCleared
event onBeginState()
	bIsFogOn = False
	playAnimation("playAnim01")	;offAnim
	utility.wait(timeToClear)
	if TemporarilyCleared
		TemporarilyCleared = False
		goToState("On")
	else
		goToState("Off")
	endif
	
endEvent

event onActivate(objectReference activateRef)
	ResolveGasActivation(activateRef)
endEvent
endState
;===================================================================
;;FUNCTION BLOCK
;===================================================================

Function ResolveShoutLogic(Spell akSpell)
; 	debug.Trace(self + "MQShoutTrigger: fireTriggerEvent from " + akSpell)
TemporarilyCleared = True
; set the time that this fog portion will stay cleared based on strength of the shout
if akSpell == voicelv01
	timeToClear = clearTimeWeak
elseif akSpell == voicelv02
	timeToClear = clearTimeMed
elseif akSpell == voicelv03
	timeToClear = clearTimeStrong
endif
goToState("TempCleared")
;setFogState(false)
; 	;debug.Trace(self + "Waiting " + timeToClear)
;utility.wait(timeToClear)
; if allowEnableFlag
	;self.enable()
	; setFogState(true)
; endif
; goToState("WaitingForTrigger")
endFunction

; Function resolveTriggerLogic(ObjectReference TriggerRef = None, Spell SpellRef = None)

;respond if struck by one of the shout projectiles
; 	; debug.Trace( self + "MQShoutTrigger: resolveTriggerLogic ObjectRef=" + TriggerRef + ",  SpellRef=" + spellRef)

; if spellRef;&& (spellRef == voicelv01 || spellRef == voicelv02 || spellRef == voicelv03)
	; goToState("HasBeenTriggered")
	; fireTriggerEvent(spellRef)
; endif

; endFunction

;Handle turning on or off
function ResolveGasActivation(objectReference activateRef)
TrapTriggerBase TriggerRef					;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase		;Set TriggerRef to our activateRef

if TriggerRef
	if TriggerRef.TriggerType == 0			;single
		loop = False
		if bIsFogOn
			;do nothing
			
		Else
			;turn on
			unregisterForUpdate()
			registerForSingleUpdate(fDuration)
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 1		;hold
	
		if loop
			loop = False
		else
			loop = True
		endif
		
		if bIsFogOn
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 2		;toggle
		if bIsFogOn
			loop = False
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			loop = True
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 3		;turn on
		loop = True
		if bIsFogOn
			;do nothing
		else
			;turn on
			goToState("On")	;onAnim
		endif
	elseif TriggerRef.TriggerType == 4		;turn off
		loop = False
		if bIsFogOn
			;turn off
			if TemporarilyCleared
				TemporarilyCleared = False
			else
				goToState("Off")	;offAnim
			endif
		Else
			;do nothing
		endif
	endif
Else
	
endif
endFunction

event onUpdate()
unregisterForUpdate()
if getState() == "On"
	if !loop
		goToState("Off")
	endif
elseif getState() == "TempCleared"
	TemporarilyCleared = False
else
endif
endEvent
; Function setFogState(bool bTurnOnFog)
; bIsFogOn = bTurnOnFog
; if bTurnOnFog
; 		; debug.Trace("Re-fogging: "+self)
	; self.enable()
; else
; 		; debug.Trace("unfogging: "+self)
	; self.disable()
; endif
; endFunction

;=====================================================================
;CATWHEEL'S ADDITION
;======================================================================
int property LvlThreshold1 auto
int property LvlThreshold2 auto
int property LvlThreshold3 auto
int property LvlThreshold4 auto
int property LvlThreshold5 auto
Explosion property ttgTrapPoisonGasExplosion01 auto
;Explosion property TrapPoisonGasExplosion01 auto
;Explosion property TrapPoisonGasExplosion02 auto
;Explosion property TrapPoisonGasExplosion03 auto
;Explosion property TrapPoisonGasExplosion04 auto
;Explosion property TrapPoisonGasExplosion05 auto
;Explosion property TrapPoisonGasExplosion06 auto

Function ResolveLeveledExplosion ()
;Trace("ResolveLeveledWeapon")
int damageLevel
damageLevel = CalculateEncounterLevel(TrapLevel)

; weapon lvlWeaponM = LvlWeaponM1
; weapon lvlWeaponL = LvlWeaponL1
; weapon lvlWeaponR = LvlWeaponR1
explosion LvlExplosion = ttgTrapPoisonGasExplosion01

; ballistaWeaponM = lvlWeaponM
; ballistaWeaponL = lvlWeaponL
; ballistaWeaponR = lvlWeaponR
PoisonGasExplosion = LvlExplosion
weaponResolved = True
EndFunction

 

 

In short the new code starts it says all the notifications but no damage is received when it says "has applied gas"

 

Any ideas how to get the poison damage to properly apply!?

Edited by Guest
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...