-
Notifications
You must be signed in to change notification settings - Fork 2
/
ShorterRespawnPlayer.cs
52 lines (49 loc) · 1.54 KB
/
ShorterRespawnPlayer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using Terraria.ModLoader;
using Terraria;
using System;
using Terraria.DataStructures;
namespace ShorterRespawn
{
// This class is the actual mod code that reduces the respawn timer when the player dies.
public class ShorterRespawnPlayer : ModPlayer
{
public override void Kill(double damage, int hitDirection, bool pvp, PlayerDeathReason damageSource)
{
// If we are cheating
if (ShorterRespawn.Instance.instantRespawn)
{
Player.respawnTimer = 0;
return;
}
// otherwise, if we just want the time reduced to a more typical level
//if (Main.expertMode)
//{
// player.respawnTimer = (int)(player.respawnTimer * .75);
//}
ShorterRespawnConfig config = ModContent.GetInstance<ShorterRespawnConfig>();
// Reimplement vanilla respawnTimer logic
Player.respawnTimer = ShorterRespawnConfig.RegularRespawnTimer;
bool bossAlive = false;
if (Main.netMode != 0 && !pvp)
{
for (int k = 0; k < 200; k++)
{
if (Main.npc[k].active && (Main.npc[k].boss || Main.npc[k].type == 13 || Main.npc[k].type == 14 || Main.npc[k].type == 15) && Math.Abs(Player.Center.X - Main.npc[k].Center.X) + Math.Abs(Player.Center.Y - Main.npc[k].Center.Y) < 4000f)
{
bossAlive = true;
break;
}
}
}
if (bossAlive)
{
Player.respawnTimer = (int)(Player.respawnTimer * config.BossPenaltyScale);
}
if (Main.expertMode)
{
Player.respawnTimer = (int)(Player.respawnTimer * config.ExpertPenaltyScale);
}
Player.respawnTimer = (int)(Player.respawnTimer * config.GlobalRespawnScale);
}
}
}