chaosCoin
Download the raw chaosCoin.ser file
Uses: AdvDestroyItem · AmountOf · Broadcast · Cassie · ClearCountdown · CloseDoor · Countdown · Except · Explode · GetPlayerData · GiveItem · Hint · IsAllowed · LockDoor · Random · ResetLightColor · SetBypass · SetHealth · SetLightColor · SetMaxHealth · SetPlayerData · SetRole · SetSize · TPPlayer · TPPosition · Take · UnlockDoor · FlippingCoin · OnEvent
Complete script
chaosCoin.ser
# Disabled by default: remove # from the filename to enable this script.
# this script adds a fully functioning coin with custom behaviors
!-- OnEvent FlippingCoin
# formats of broadcasts, used to not repeat the same things in different broadcasts
$hintInfo = "<color=#ff5555><size=30><b>"
$baseText = "<size=20><b><color=green>the holy coin has been used<br><size=35></color>"
$afterText = "<color=white><size=25><b>"
# "coin locked" is a property of this player, storing whether a coin can be used.
# this is because some effects of the coin take time, and we DO NOT want to
# have the coin be used again WHILE a different effect is still ongoing
if {GetPlayerData @evPlayer "coin locked" false} is true
Hint @evPlayer 5s "{$hintInfo}You can't use the coin for now!<br><size=20>Come back when the current effect has finished."
IsAllowed false
stop
end
# 50% chance to lose the coin
chance 50%
Hint @evPlayer 3s "{$hintInfo}Your coin has turned into dust..."
AdvDestroyItem {@evPlayer -> heldItemRef}
end
# select a random effect of the coin, from 9 available
$effect = Random 1 9 int
# give the player a revolver for a round of russian roulette
if $effect is 1
GiveItem @evPlayer GunRevolver
Broadcast @evPlayer 5s "{$baseText}Let's play russian roulette!"
stop
end
# HP change
if $effect is 2
$newHP = Random 1 150 int
SetHealth @evPlayer $newHP
SetMaxHealth @evPlayer $newHP
Broadcast @evPlayer 5s "{$baseText}You now have {$newHP} HP!"
stop
end
# rave
if $effect is 3
*room = @evPlayer -> roomRef
# explode player if he isnt in a room
if {*room -> isInvalid}
Explode @evPlayer
stop
end
# we are blocking the use of the coin for the player
# until the rave is over
SetPlayerData @evPlayer "coin locked" true
Broadcast @evPlayer 5s "{$baseText}Time for a rave!"
CloseDoor *room
LockDoor *room AdminCommand
SetLightColor *room #000000
repeat 5
SetLightColor *room #ff0000 _ .5s
wait .5s
SetLightColor *room #00ff00 _ .5s
wait .5s
SetLightColor *room #0000ff _ .5s
wait .5s
end
wait .1s
UnlockDoor *room
ResetLightColor *room
SetPlayerData @evPlayer "coin locked" false
stop
end
# bomb
if $effect is 4
SetPlayerData @evPlayer "coin locked" true
$initRole = @evPlayer -> role
Countdown @evPlayer 15s "{$baseText}<color=red>You have %seconds% seconds left to live!"
# waiting 15 seconds here
repeat 15
wait 1s
# every second we are checking if the role of the player changed
# if so, we remove the countdown and unlock the coin
if {@evPlayer -> role} isnt $initRole
ClearCountdown @evPlayer
SetPlayerData @evPlayer "coin locked" false
stop
end
end
Explode @evPlayer
SetPlayerData @evPlayer "coin locked" false
stop
end
# bypass
if $effect is 5
$initRole = @evPlayer -> role
SetPlayerData @evPlayer "coin locked" true
Countdown @evPlayer 15s "{$baseText}You can now open any keycard locked thing! (for %seconds% seconds)"
SetBypass @evPlayer true
repeat 15
wait 1s
if {@evPlayer -> role} isnt $initRole
ClearCountdown @evPlayer
break
end
end
SetBypass @evPlayer false
SetPlayerData @evPlayer "coin locked" false
stop
end
# role downgrade
if $effect is 6
$role = @evPlayer -> role
if $role isnt "ClassD"
SetRole @evPlayer ClassD None
elif $role isnt "Scp0492"
SetRole @evPlayer Scp0492
else
SetRole @evPlayer Spectator
end
Broadcast @evPlayer 5s "{$baseText}Your role got downgraded!"
stop
end
# funny cassie
if $effect is 7
SetPlayerData @evPlayer "coin locked" true
Cassie noJingle "pitch_0.7 warning . pitch_3 XMAS_JINGLEBELLS" ""
Broadcast @evPlayer 5s "{$baseText}Most useful cassie message sent!"
wait 7s
SetPlayerData @evPlayer "coin locked" false
stop
end
# change size
if $effect is 8
# set player size in every direction to a random number between 10% and 100%
SetSize @evPlayer {Random 0.1 1 real} {Random 0.1 1 real} {Random 0.1 1 real}
Broadcast @evPlayer 5s "{$baseText}Your size has changed a little!"
stop
end
# swap places
if $effect is 9
# cant swap places if there arent at least 2 players
if {AmountOf @alivePlayers} < 2
Explode @evPlayer
stop
end
# gets a random alive player that is not @evPlayer
@swapPlayer = Take {Except @alivePlayers @evPlayer} 1
$swapX = @swapPlayer -> posX
$swapY = @swapPlayer -> posY
$swapZ = @swapPlayer -> posZ
# we can teleport @swapPlayer directly to @evPlayer
TPPlayer @swapPlayer @evPlayer
Broadcast @swapPlayer 5s "{$baseText}You have swapped places with {@evPlayer -> name}"
# because @swapPlayer is in the same place as @evPlayer, we need to use the saved values to teleport
TPPosition @evPlayer $swapX $swapY $swapZ
Broadcast @evPlayer 5s "{$baseText}You have swapped places with {@swapPlayer -> name}"
stop
end
This file is compiled during the SER build and is safe to use as a current-syntax learning example.