Skip to content

Commit

Permalink
Merge pull request #213 from 1242509682/master
Browse files Browse the repository at this point in the history
修复:挑战者模式v1.1.2 fix 尝试修复空引用
  • Loading branch information
Controllerdestiny authored Jun 16, 2024
2 parents f58a7b7 + e490bd1 commit 51cbb15
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 127 deletions.
232 changes: 109 additions & 123 deletions Challenger/Challenger/Challenger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,17 @@ public override void Initialize()
LoadConfig();
GetDataHandlers.TileEdit += OnTileEdit!;
GeneralHooks.ReloadEvent += new GeneralHooks.ReloadEventD(LoadConfig);
ServerApi.Hooks.GameUpdate.Register((TerrariaPlugin)(object)this, OnGameUpdate);
ServerApi.Hooks.GameUpdate.Register(this, OnGameUpdate);
GetDataHandlers.PlayerDamage.Register(PlayerSufferDamage, (HandlerPriority)3, false);
GetDataHandlers.NewProjectile.Register(OnProjSpawn, (HandlerPriority)3, false);
ServerApi.Hooks.ProjectileAIUpdate.Register((TerrariaPlugin)(object)this, OnProjAIUpdate);
ServerApi.Hooks.ProjectileAIUpdate.Register(this, OnProjAIUpdate);
GetDataHandlers.ProjectileKill.Register(OnProjKilled, (HandlerPriority)3, false);
ServerApi.Hooks.NpcAIUpdate.Register((TerrariaPlugin)(object)this, OnNPCAI);
ServerApi.Hooks.NpcAIUpdate.Register(this, OnNPCAI);
Hooks.NPC.Killed += OnNPCKilled;
ServerApi.Hooks.NpcStrike.Register((TerrariaPlugin)(object)this, OnNpcStrike);
ServerApi.Hooks.NpcStrike.Register(this, OnNpcStrike);
GetDataHandlers.PlayerSlot.Register(OnHoldItem, (HandlerPriority)3, false);
ServerApi.Hooks.NetGreetPlayer.Register((TerrariaPlugin)(object)this, OnGreetPlayer);
ServerApi.Hooks.ServerLeave.Register((TerrariaPlugin)(object)this, OnServerLeave);
ServerApi.Hooks.NetGreetPlayer.Register(this, OnGreetPlayer);
ServerApi.Hooks.ServerLeave.Register(this, OnServerLeave);
Commands.ChatCommands.Add(new Command("challenger.enable", new CommandDelegate(EnableModel), new string[1] { "cenable" })
{
HelpText = "输入 /cenable 来启用挑战模式,再次使用取消"
Expand All @@ -78,16 +78,16 @@ protected override void Dispose(bool disposing)
{
GeneralHooks.ReloadEvent -= new ReloadEventD(LoadConfig);
GetDataHandlers.TileEdit -= OnTileEdit!;
ServerApi.Hooks.GameUpdate.Deregister((TerrariaPlugin)(object)this, OnGameUpdate);
ServerApi.Hooks.GameUpdate.Deregister(this, OnGameUpdate);
GetDataHandlers.PlayerDamage.UnRegister(PlayerSufferDamage);
ServerApi.Hooks.ProjectileAIUpdate.Deregister((TerrariaPlugin)(object)this, OnProjAIUpdate);
ServerApi.Hooks.ProjectileAIUpdate.Deregister(this, OnProjAIUpdate);
GetDataHandlers.ProjectileKill.UnRegister(OnProjKilled);
ServerApi.Hooks.NpcAIUpdate.Deregister((TerrariaPlugin)(object)this, OnNPCAI);
ServerApi.Hooks.NpcAIUpdate.Deregister(this, OnNPCAI);
Hooks.NPC.Killed -= OnNPCKilled;
ServerApi.Hooks.NpcStrike.Deregister((TerrariaPlugin)(object)this, OnNpcStrike);
ServerApi.Hooks.NpcStrike.Deregister(this, OnNpcStrike);
GetDataHandlers.PlayerSlot.UnRegister(OnHoldItem);
ServerApi.Hooks.NetGreetPlayer.Deregister((TerrariaPlugin)(object)this, OnGreetPlayer);
ServerApi.Hooks.ServerLeave.Deregister((TerrariaPlugin)(object)this, OnServerLeave);
ServerApi.Hooks.NetGreetPlayer.Deregister(this, OnGreetPlayer);
ServerApi.Hooks.ServerLeave.Deregister(this, OnServerLeave);
}
base.Dispose(disposing);
}
Expand Down Expand Up @@ -1171,6 +1171,7 @@ public void WormScarf(Player player, Config config)
{
if (config.EnableWormScarf)//是否关闭蠕虫围巾免疫
{
if (player == null || !config.EnableWormScarf) return;
var c = config.WormScarfImmuneList_2; //遍历前多少个数量
int[] List = config.WormScarfImmuneList; //免疫的BUFFID
bool flag = false;
Expand All @@ -1184,8 +1185,7 @@ public void WormScarf(Player player, Config config)
player.buffImmune[i] = true;
}
}
if (flag) { TShock.Players[player.whoAmI].SendData((PacketTypes)50, "", player.whoAmI, 0f, 0f, 0f, 0); }
}
if (flag) { TShock.Players[player.whoAmI].SendData((PacketTypes)50, "", player.whoAmI, 0f, 0f, 0f, 0); } }
foreach (var effect in config.WormScarfSetBuff) { TShock.Players[player.whoAmI].SetBuff(effect, 180, false); }
}

Expand Down Expand Up @@ -1408,38 +1408,27 @@ private void OnServerLeave(LeaveEventArgs args)
{
return;
}

try
{
var playerData = Collect.cplayers[args.Who];
if (playerData != null)
if (Collect.cplayers[args.Who] != null)
{
if (playerData.ExtraLife > 0)
if (Collect.cplayers[args.Who].ExtraLife > 0)
{
var player = Main.player[args.Who];
if (player != null)
{
player.statLifeMax -= playerData.ExtraLife;
NetMessage.SendData(16, -1, -1, NetworkText.Empty, args.Who, 0f, 0f, 0f, 0, 0, 0);
}
Player obj = Main.player[args.Who];
obj.statLifeMax -= Collect.cplayers[args.Who].ExtraLife;
NetMessage.SendData(16, -1, -1, NetworkText.Empty, args.Who, 0f, 0f, 0f, 0, 0, 0);
}

if (playerData.ExtraMana > 0)
if (Collect.cplayers[args.Who].ExtraMana > 0)
{
var player2 = Main.player[args.Who];
if (player2 != null)
{
player2.statManaMax -= playerData.ExtraMana;
NetMessage.SendData(42, -1, -1, NetworkText.Empty, args.Who, 0f, 0f, 0f, 0, 0, 0);
}
Player obj2 = Main.player[args.Who];
obj2.statManaMax -= Collect.cplayers[args.Who].ExtraMana;
NetMessage.SendData(42, -1, -1, NetworkText.Empty, args.Who, 0f, 0f, 0f, 0, 0, 0);
}

for (int i = 0; i < 1000; i++)
{
var proj = Collect.cprojs[i];
if (proj != null && proj.isActive)
if (Collect.cprojs[i] != null && Collect.cprojs[i].isActive)
{
proj.CKill();
Collect.cprojs[i].CKill();
}
}
}
Expand All @@ -1455,10 +1444,7 @@ private void OnServerLeave(LeaveEventArgs args)
private void OnGameUpdate(EventArgs args)
{
Timer++;
if (!config.enableChallenge)
{
return;
}
if (!config.enableChallenge) { return; }
if (Collect.worldevent != 0)
{
switch (Collect.worldevent)
Expand Down Expand Up @@ -1502,99 +1488,99 @@ private void OnGameUpdate(EventArgs args)
}
}
TSPlayer[] players = TShock.Players;
foreach (TSPlayer val in players)
{
if (val == null || Collect.cplayers[val.Index] == null || !Collect.cplayers[val.Index].isActive)
{
continue;
}
Player tPlayer = val.TPlayer;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(tPlayer.armor[0].type).Append(tPlayer.armor[1].type).Append(tPlayer.armor[2].type);
switch (stringBuilder.ToString())
{
case "228229230":
case "960961962":
case "228961230":
case "228229962":
case "960229230":
case "960961230":
case "960229962":
case "228961962":
JungleArmorEffect(tPlayer);
break;
case "231232233":
MoltenArmor(tPlayer, config);
break;
case "236723682369":
AnglerArmorEffect(tPlayer);
break;
case "236123622363":
BeeArmorEffect(tPlayer);
break;
case "123124125":
MeteorArmorEffect(null, tPlayer);
break;
case "237023712372":
SpiderArmorEffect(null, tPlayer);
break;
case "377637773778":
ForbiddenArmorEffect(tPlayer);
break;
case "498249834984":
CrystalAssassinArmorEffect(tPlayer, null);
break;
case "684685686":
FrostArmorEffect(tPlayer);
break;
default:
if (Timer % 5 == 0)
{
MiningArmor(tPlayer, config);
FossilArmorEffect(tPlayer);
ChlorophyteArmorEffect(tPlayer);
TurtleArmorEffect(tPlayer);
TikiArmorEffect(tPlayer, null);
BeetleArmorEffect(tPlayer, null, null);
SpectreArmorEffect(tPlayer);
}
break;
}
if (Timer % 4 != 0)
{
continue;
}
Item[] armor = tPlayer.armor;
for (int j = 3; j < 10; j++)
if (players != null)
{
foreach (TSPlayer val in players)
{
switch (armor[j].type)
if (val == null || Collect.cplayers[val.Index] == null || !Collect.cplayers[val.Index].isActive)
{
continue;
}
Player tPlayer = val.TPlayer;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(tPlayer.armor[0].type).Append(tPlayer.armor[1].type).Append(tPlayer.armor[2].type);
switch (stringBuilder.ToString())
{
case 1321:
case 4002:
case 4006:
RefillArrow(tPlayer);
case "228229230":
case "960961962":
case "228961230":
case "228229962":
case "960229230":
case "960961230":
case "960229962":
case "228961962":
JungleArmorEffect(tPlayer);
break;
case 3333:
HivePack(tPlayer);
case "231232233":
MoltenArmor(tPlayer, config);
break;
case 3090:
RoyalGel(tPlayer);
case "236723682369":
AnglerArmorEffect(tPlayer);
break;
case 3224:
WormScarf(tPlayer, config);
case "236123622363":
BeeArmorEffect(tPlayer);
break;
case 3097:
case 977:
case 984:
CthulhuShield(tPlayer);
case "123124125":
MeteorArmorEffect(null, tPlayer);
break;
case "237023712372":
SpiderArmorEffect(null, tPlayer);
break;
case "377637773778":
ForbiddenArmorEffect(tPlayer);
break;
case "498249834984":
CrystalAssassinArmorEffect(tPlayer, null);
break;
case "684685686":
FrostArmorEffect(tPlayer);
break;
default:
if (Timer % 5 == 0)
{
MiningArmor(tPlayer, config);
FossilArmorEffect(tPlayer);
ChlorophyteArmorEffect(tPlayer);
TurtleArmorEffect(tPlayer);
TikiArmorEffect(tPlayer, null);
BeetleArmorEffect(tPlayer, null, null);
SpectreArmorEffect(tPlayer);
}
break;
}
if (Timer % 4 != 0)
{
continue;
}
Item[] armor = tPlayer.armor;
for (int j = 3; j < 10; j++)
{
switch (armor[j].type)
{
case 1321:
case 4002:
case 4006:
RefillArrow(tPlayer);
break;
case 3333:
HivePack(tPlayer);
break;
case 3090:
RoyalGel(tPlayer);
break;
case 3224:
WormScarf(tPlayer, config);
break;
case 3097:
case 977:
case 984:
CthulhuShield(tPlayer);
break;
}
}
}
}
if (honey.Count == 0)
{
return;
}
if (honey.Count == 0) { return; }
foreach (KeyValuePair<int, int> item in honey)
{
if (item.Value < 4)
Expand Down
4 changes: 2 additions & 2 deletions Challenger/Challenger/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -311,11 +311,11 @@ public class Config
public int[] Tile { get; set; } = new int[] { 6, 7, 8, 9, 166, 167, 168, 169, 22, 221, 222, 223, 224, 232, 37, 404, 408, 48, 481, 482, 483, 56, 571, 58, 63, 64, 65, 66, 67, 68, 107, 108, 111, 123, 178, 204, 211, 229, 230 };

[JsonProperty("蠕虫围巾免疫buff是否开启", Order = 7)]
public bool EnableWormScarf = false;
public bool EnableWormScarf = true;
[JsonProperty("蠕虫围巾遍历前几个buff", Order = 7)]
public int WormScarfImmuneList_2 = 22;
[JsonProperty("蠕虫围巾免疫DeBuff列表/遇到会清空所有BUFF", Order = 7)]
public int[] WormScarfImmuneList { get; set; } = new int[] { 39, 69, 44, 46 };
public int[] WormScarfImmuneList { get; set; } = new int[] {};
[JsonProperty("蠕虫围巾给什么永久BUFF", Order = 7)]
public int[] WormScarfSetBuff { get; set; } = new int[] { 5, 114, 215 };

Expand Down
5 changes: 3 additions & 2 deletions Challenger/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@

```
更新日志
1.1.2
修复玩家退出服务器时空引用
1.1.2 fix
尝试修复以下三个方法引起的空引用
OnGameUpdate/WormScarf/OnServerLeave
1.1.1
给【皇家凝胶】加了随机生成概率与间隔
Expand Down

0 comments on commit 51cbb15

Please sign in to comment.