combatNspawn.sk

Created by BanditEagle

Just so you know, we don't know the file format for every file. If it's just a bunch of random characters, it's probably a .zip or .jar.

#————————————————————————————————DO NOT REMOVE THIS SECTION————————————————————————————————#
# MADE BY: BANDITEAGLE
# DISCORD: @BanditEagl3#4375
# GUILDED.GG: @BanditEagle
# MINEHUT FORUMS PROFILE: https://forums.minehut.com/profile/276950-banditeagle/
# SPIGOT PROFILE: https://www.spigotmc.org/members/banditeagle.935281/
# SKUNITY PROFILE: https://forums.skunity.com/members/banditeagle.16100/
# You are allowed to share this skript, but please mention that this is made by me.
# combatNspawn.sk v.1.0
#————————————————————————————————DO NOT REMOVE THIS SECTION————————————————————————————————#

options:
    combatTagTime: 15 #The time needed until combat tag is removed (in seconds)
    spawnCountdown: 100 #The time needed until you can teleport to spawn (in ticks, 100 ticks = 5 seconds)
    spawnCountdownMsg: "&6You will be teleported to spawn in <number> second(s)." #Message players receive when using /spawn
    tagMsg: "&6You are now in combat" #Message players receive when they get in combat
    noTagMsg: "&6You are no longer in combat" #Message players receive when they aren't in combat
    killMsg: "&6<victim> has been killed by <attacker>" #Broadcasted message when a player kills another player
    killstreakMsg: "&6<player> has a <number> kill streak!" #Broadcasted message every 5 killstreaks
    killCountMsg: "&6<player> has <number> number of kills!" #Message used with the command /kills
    skRayFallON: false #When this is set to true, boss bar and action bar will be used, but requires SkRayFall. If this is set to false, does not need the SkRayFall plugin.
    onlyPlayersCanTag: true #When this is set to true, combat tag will only activate if both the attacker and the victim are players. If this is set to false, damage from other entities will activate combat tag as well.

on unload:
    clear {combatTag::*}
    clear {newTag::*}
    clear {noMsg::*}
    clear {lastCombat::*}
    clear {killStreak::*}
    clear {deathStatus::*}
    clear {deathList::*}

on load:
    clear {combatTag::*}
    clear {newTag::*}
    clear {noMsg::*}
    clear {lastCombat::*}
    clear {killStreak::*}
    clear {deathStatus::*}
    clear {deathList::*}
    set {_int} to 100
    loop 100 times:
        add {_int} to {deathList::*}
        remove 1 from {_int}

on first join:
    teleport player to {spawn}

on join:
    clear {combatTag::%player%}
    clear {newTag::%player%}
    clear {noMsg::%player%}
    clear {lastCombat::%player%}
    clear {killStreak::%player%}
    clear {deathStatus::%player%}
    teleport player to {spawn}

on leave:
    clear {combatTag::%player%}
    clear {newTag::%player%}
    clear {noMsg::%player%}
    clear {lastCombat::%player%}
    clear {killStreak::%player%}
    clear {deathStatus::%player%}

on damage of player:
    if {@onlyPlayersCanTag} is true:
        attacker is a player

    #For victim
    if {combatTag::%victim%} is not set:
        set {combatTag::%victim%} to true
        clear {newTag::%victim%}
        set {lastCombat::%victim%} to attacker
        if {noMsg::%victim%} is not set:
            send {@tagMsg} to victim
        InCombat(victim, "first")
    else if {combatTag::%victim%} is set:
        set {noMsg::%victim%} to true
        clear {combatTag::%victim%}
        set {newTag::%victim%} to true
        InCombat(victim, "new")

    #For attacker
    if {@onlyPlayersCanTag} is true:
        if {combatTag::%attacker%} is not set:
            set {combatTag::%attacker%} to true
            clear {newTag::%attacker%}
            if {noMsg::%attacker%} is not set:
                send {@tagMsg} to attacker
            InCombat(attacker, "first")
        else if {combatTag::%attacker%} is set:
            set {noMsg::%attacker%} to true
            clear {combatTag::%attacker%}
            set {newTag::%attacker%} to true
            InCombat(attacker, "new")

on death of player:
    if {skRayFallON} is true:
        remove bossbar "cTagTimer.%{_p}%"
    clear {killStreak::%victim%}
    set {deathStatus::%victim%} to true
    if {combatTag::%victim%} is set:
        set {_killer} to {lastCombat::%victim%}
        clear {combatTag::%victim%}
        clear {lastCombat::%victim%}
        add 1 to {killCount::%{_killer}'s uuid%}
        add 1 to {killStreak::%{_killer}%}
        if {killStreak::%{_killer}%} >= 5:
            set {_ksamount} to floor(({killStreak::%{_killer}%})/5)
            if {deathList::%{_ksamount}%::%{_killer}%} is not set:
                set {deathList::%{_ksamount}%::%{_killer}%} to true
                set {_killstreak} to 5*{_ksamount}
                set {_broadcast} to {@killstreakMsg}
                replace "<player>" in {_broadcast} with "%{_killer}%"
                replace "<number>" in {_broadcast} with "%{_ksamount}%"
                broadcast "%{_broadcast}%"

on respawn:
    clear {deathStatus::%player%}

function InCombat(p: player, state: text):
    set {_seconds} to 10*{@combatTagTime}
    if {@skRayFallON} is true:
        remove bossbar "cTagTimer.%{_p}%"
        set {_bossbartimer} to 100
        set {_timerremover} to ({_bossbartimer}/{_seconds})
        create bossbar titled "Combat Tag Timer" and id "cTagTimer.%{_p}%" for {_p} with progress {_bossbartimer} with colors red
    if {_state} is "first":
        while {_seconds} > 0:
            if {newTag::%{_p}%} is set:
                stop
            wait 2 ticks
            if {@skRayFallON} is true:
                remove {_timerremover} from {_bossbartimer}
                set bossbar "cTagTimer.%{_p}%" value to {_bossbartimer}
            remove 1 from {_seconds}
        if {@skRayFallON} is true:
            remove bossbar "cTagTimer.%{_p}%"
        clear {combatTag::%{_p}%}
        clear {newTag::%{_p}%}
        clear {noMsg::%{_p}%}
        send {@noTagMsg} to {_p}

    if {_state} is "new":
        while {_seconds} > 0:
            if {combatTag::%{_p}%} is set:
                stop
            wait 2 ticks
            if {@skRayFallON} is true:
                remove {_timerremover} from {_bossbartimer}
                set bossbar "cTagTimer.%{_p}%" value to {_bossbartimer}
            remove 1 from {_seconds}
        if {@skRayFallON} is true:
            remove bossbar "cTagTimer.%{_p}%"
        clear {combatTag::%{_p}%}
        clear {newTag::%{_p}%}
        clear {noMsg::%{_p}%}
        send {@noTagMsg} to {_p}

command /setspawn:
    permission: spawn.set
    permission message: &cYou do not have access to this command"
    trigger:
        set {spawn} to player's location
        send "&aSpawn has been set to: &2%{spawn}%"

command /spawn:
    trigger:
        set {_countdown} to {@spawnCountdown}
        set {_loc} to location of player
        set {_seconds} to floor(({_countdown})/20)
        set {_int} to {_seconds}
        loop {_seconds} times:
            add {_int} to {_list::*}
            remove 1 from {_int}
        while {_countdown} is not 0:
            if distance between {_loc} and player is not 0:
                loop {_seconds} times:
                    if {@skRayFallON} is true:
                        send action bar "&cCanceling teleport to spawn: Cannot teleport when moving." to player
                    else:
                        send "&cCanceling teleport to spawn: Cannot teleport when moving."
                stop
            if {combatTag::%player%} is set:
                loop {_seconds} times:
                    send action bar "&cCanceling teleport to spawn: Cannot teleport when in combat." to player
                stop
            if {newTag::%player%} is set:
                loop {_seconds} times:
                    if {@skRayFallON} is true:
                        send action bar "&cCanceling teleport to spawn: Cannot teleport when in combat." to player
                    else:
                        send "&cCanceling teleport to spawn: Cannot teleport when in combat."
                stop
            if {deathStatus::%player%} is set:
                loop {_seconds} times:
                    if {@skRayFallON} is true:
                        send action bar "&cCanceling teleport to spawn: Cannot teleport when respawning." to player
                    else:
                        send "&cCanceling teleport to spawn: Cannot teleport when respawning."
                stop
            set {_int} to ({_countdown}/20)
            if {_list::*} contains {_int}:
                set {_msg} to {@spawnCountdownMsg}
                replace "<number>" in {_msg} with "%{_int}%"
                if {@skRayFallON} is true:
                    send action bar "%{_msg}%" to player
                else:
                    send "%{_msg}%"
            remove 1 from {_countdown}
            wait a tick
        send "&6Teleporting you to spawn, please be patient."
        teleport player to {spawn}

command /kills [<offlineplayer>]:
    trigger:
        set {_msg} to {@killCountMsg}
        if arg-1 is set:
            set {_p} to arg-1
        else:
            set {_p} to player
        set {_kills} to size of {killCount::%{_p}'s uuid%}
        replace "<player>" in {_msg} with "%{_p}%"
        replace "<number>" in {_msg} with "%{_kills}%"
        send "%{_msg}%"