Advertisement
Aled

Untitled

May 2nd, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.01 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using TShockAPI;
  6. using Terraria;
  7. using TerrariaApi.Server;
  8. using Newtonsoft.Json;
  9.  
  10. namespace TeamCommands {
  11. [ApiVersion(1, 16)]
  12. public class TeamCommands : TerrariaPlugin {
  13. public TeamCommands(Main game) : base(game) {
  14. }
  15.  
  16. public List<NetItem> StarterItems = new List<NetItem>();
  17. public int startHealth, startMana;
  18.  
  19. public override void Initialize() {
  20. Commands.ChatCommands.Add(new Command("", TeamDo, "team") {
  21. HelpText = "Runs a command to an entire team. Format: /team [command]. Any user-specific TShock command will work."
  22. });
  23.  
  24. if (Main.ServerSideCharacter)
  25. {
  26. StarterItems = TShock.ServerSideCharacterConfig.StartingInventory;
  27.  
  28. if (TShock.ServerSideCharacterConfig.StartingHealth > 500)
  29. startHealth = 500;
  30. else if (TShock.ServerSideCharacterConfig.StartingHealth < 100)
  31. startHealth = 100;
  32. else
  33. startHealth = TShock.ServerSideCharacterConfig.StartingHealth;
  34.  
  35. if (TShock.ServerSideCharacterConfig.StartingMana > 200)
  36. startMana = 200;
  37. else if (TShock.ServerSideCharacterConfig.StartingMana < 20)
  38. startMana = 20;
  39. else
  40. startMana = TShock.ServerSideCharacterConfig.StartingMana;
  41. }
  42. }
  43. public override Version Version {
  44. get { return new Version("1.0.1"); }
  45. }
  46. public override string Name {
  47. get { return "Team Commands"; }
  48. }
  49. public override string Author {
  50. get { return "GameRoom"; }
  51. }
  52. public override string Description {
  53. get { return "Runs commands to entire team."; }
  54. }
  55.  
  56. int TeamColorToID(string color, TSPlayer who) {
  57. switch (color.ToLower()) {
  58. case "none":
  59. case "white": return 0;
  60. case "red": return 1;
  61. case "green": return 2;
  62. case "blue": return 3;
  63. case "yellow": return 4;
  64. case "all": return 5;
  65. default: return who.Team;
  66. }
  67. }
  68.  
  69. string TeamIDToColor(int ID, bool capitalize = true) {
  70. string ret;
  71. switch (ID) {
  72. case 0: ret = "The white team";
  73. break;
  74. case 1: ret = "The red team";
  75. break;
  76. case 2: ret = "The green team";
  77. break;
  78. case 3: ret = "The blue team";
  79. break;
  80. case 4: ret = "The yellow team";
  81. break;
  82. case 5: ret = "Everyone";
  83. break;
  84. default: ret = "";
  85. break;
  86. }
  87. if (!capitalize) ret = ret.ToLower();
  88. return ret;
  89. }
  90.  
  91. void TeamDo(CommandArgs e) {
  92. if (e.Parameters.Count == 0) e.Player.SendErrorMessage("Invalid syntax! Proper syntax: /team <command>. Type /team help for all commands.");
  93. else switch (e.Parameters[0]) {
  94.  
  95. case "kick":
  96. if (CommandIsValid(e, Permissions.kick, 2, "kick <team> [reason]"))
  97. if (e.Parameters[1].Length == 0) e.Player.SendErrorMessage("Missing player name.");
  98. else {
  99. string reason = e.Parameters.Count > 2 ? String.Join(" ", e.Parameters.Skip(2)) : "Misbehavior.";
  100. var team = TeamColorToID(e.Parameters[1], e.Player);
  101. foreach (TSPlayer player in TShock.Players)
  102. if (player != null && (team == player.Team || team == 5))
  103. TShock.Utils.Kick(player, reason, !e.Player.RealPlayer, true, e.Player.Name);
  104. TShock.Utils.Broadcast(string.Format("{0} was kicked for '{1}'", TeamIDToColor(team), reason.ToLower()), Color.Green);
  105. }
  106. break;
  107.  
  108. case "ban":
  109. if (CommandIsValid(e, Permissions.ban, 2, "ban <team> [reason]")) {
  110. string reason = e.Parameters.Count > 2 ? String.Join(" ", e.Parameters.Skip(2)) : "Misbehavior.";
  111. var team = TeamColorToID(e.Parameters[1], e.Player);
  112. foreach (TSPlayer player in TShock.Players)
  113. if (player != null && (team == player.Team || team == 5) && (!player.Group.HasPermission(Permissions.immunetoban) || e.Player.RealPlayer)) {
  114. var user = TShock.Users.GetUserByID(player.Index);
  115. var knownIps = JsonConvert.DeserializeObject<List<string>>(user.KnownIps);
  116. TShock.Bans.AddBan(knownIps.Last(), user.Name, user.UUID, reason, false, e.Player.UserAccountName);
  117. }
  118. TShock.Utils.Broadcast(string.Format("{0} was banned for '{1}'", TeamIDToColor(team), reason.ToLower()), Color.Green);
  119. }
  120. break;
  121.  
  122. case "tempban":
  123. if (CommandIsValid(e, Permissions.ban, 3, "tempban <team> <time> [reason]")) {
  124. int time;
  125. if (!TShock.Utils.TryParseTime(e.Parameters[2], out time)) {
  126. e.Player.SendErrorMessage("Invalid time string! Proper format: _d_h_m_s, with at least one time specifier.");
  127. e.Player.SendErrorMessage("For example, 1d and 10h-30m+2m are both valid time strings, but 2 is not.");
  128. return;
  129. }
  130. string reason = e.Parameters.Count > 3 ? String.Join(" ", e.Parameters.Skip(3)) : "Misbehavior.";
  131. var team = TeamColorToID(e.Parameters[1], e.Player);
  132. foreach (TSPlayer player in TShock.Players)
  133. if (player != null && (team == player.Team || team == 5) && (!player.Group.HasPermission(Permissions.immunetoban) || e.Player.RealPlayer))
  134. if (TShock.Bans.AddBan(player.IP, player.Name, player.UUID, reason, false, e.Player.Name, DateTime.UtcNow.AddSeconds(time).ToString("s")))
  135. player.Disconnect(String.Format("Banned: {0}", reason));
  136. TShock.Utils.Broadcast(string.Format("{0} was banned for '{1}'", TeamIDToColor(team), reason.ToLower()), Color.Green);
  137. }
  138. break;
  139.  
  140. case "mute":
  141. if (CommandIsValid(e, Permissions.mute, 2, "mute <team> [reason]")) {
  142. string reason = e.Parameters.Count > 3 ? String.Join(" ", e.Parameters.Skip(3)) : "Misbehavior.";
  143. var team = TeamColorToID(e.Parameters[1], e.Player);
  144. foreach (TSPlayer player in TShock.Players)
  145. if (player != null && (team == player.Team || team == 5) && !player.Group.HasPermission(Permissions.mute))
  146. player.mute = true;
  147. TShock.Utils.Broadcast(string.Format("{0} was muted for '{1}'", TeamIDToColor(team), reason.ToLower()), Color.Green);
  148. }
  149. break;
  150.  
  151. case "unmute":
  152. if (CommandIsValid(e, Permissions.mute, 2, "mute <team>")) {
  153. var team = TeamColorToID(e.Parameters[1], e.Player);
  154. foreach (TSPlayer player in TShock.Players)
  155. if (player != null && (team == player.Team || team == 5))
  156. player.mute = false;
  157. TShock.Utils.Broadcast(string.Format("{0} was unmuted by {1}.", TeamIDToColor(team), e.Player.Name), Color.Green);
  158. }
  159. break;
  160.  
  161. case "tempgroup":
  162. if (CommandIsValid(e, Permissions.settempgroup, 3, "tempgroup <team> <new group>")) {
  163. var team = TeamColorToID(e.Parameters[1], e.Player);
  164. if (!TShock.Groups.GroupExists(e.Parameters[2]))
  165. e.Player.SendErrorMessage(string.Format("Could not find group {0}", e.Parameters[2]));
  166. else {
  167. var g = TShock.Utils.GetGroup(e.Parameters[2]);
  168. foreach (TSPlayer player in TShock.Players)
  169. if (player != null && (team == player.Team || team == 5)) {
  170. player.tempGroup = g;
  171. player.SendSuccessMessage(string.Format("Your group has temporarily been changed to {0}", g.Name));
  172. }
  173. e.Player.SendSuccessMessage(string.Format("You have changed {0}'s group to {1}", TeamIDToColor(team, false), g.Name));
  174. }
  175. }
  176. break;
  177.  
  178. case "usergroup":
  179. if (CommandIsValid(e, Permissions.managegroup, 3, "usergroup <team> <new group>")) {
  180. var team = TeamColorToID(e.Parameters[1], e.Player);
  181. if (!TShock.Groups.GroupExists(e.Parameters[2]))
  182. e.Player.SendErrorMessage(string.Format("Could not find group {0}", e.Parameters[2]));
  183. else {
  184. var g = TShock.Utils.GetGroup(e.Parameters[2]);
  185. foreach (TSPlayer player in TShock.Players)
  186. if (player != null && (team == player.Team || team == 5)) {
  187. player.Group = g;
  188. player.SendSuccessMessage(string.Format("Your group has been changed to {0}", g.Name));
  189. }
  190. e.Player.SendSuccessMessage(string.Format("You have changed {0}'s group to {1}", TeamIDToColor(team, false), g.Name));
  191. }
  192. }
  193. break;
  194.  
  195. case "give":
  196. case "g":
  197. if (CommandIsValid(e, Permissions.item, 3, "give <item type/id> <team> [item amount] [prefix id/name]"))
  198. if (e.Parameters[1].Length == 0) e.Player.SendErrorMessage("Missing item name/id.");
  199. else if (e.Parameters[2].Length == 0) e.Player.SendErrorMessage("Missing team name.");
  200. else {
  201. int itemAmount = 0;
  202. int prefix = 0;
  203. var items = TShock.Utils.GetItemByIdOrName(e.Parameters[1]);
  204. string plStr = e.Parameters[2];
  205. if (e.Parameters.Count == 4)
  206. int.TryParse(e.Parameters[3], out itemAmount);
  207. else if (e.Parameters.Count == 5) {
  208. int.TryParse(e.Parameters[3], out itemAmount);
  209. var prefixIds = TShock.Utils.GetPrefixByIdOrName(e.Parameters[4]);
  210. if (items[0].accessory && prefixIds.Contains(42)) {
  211. prefixIds.Remove(42);
  212. prefixIds.Remove(76);
  213. prefixIds.Add(76);
  214. }
  215. else if (!items[0].accessory && prefixIds.Contains(42))
  216. prefixIds.Remove(76);
  217. if (prefixIds.Count == 1)
  218. prefix = prefixIds[0];
  219. }
  220.  
  221. if (items.Count == 0)
  222. e.Player.SendErrorMessage("Invalid item type!");
  223. else if (items.Count > 1)
  224. TShock.Utils.SendMultipleMatchError(e.Player, items.Select(i => i.name));
  225. else {
  226. var item = items[0];
  227. if (item.type >= 1 && item.type < Main.maxItemTypes) {
  228. var team = TeamColorToID(e.Parameters[2], e.Player);
  229. foreach (TSPlayer player in TShock.Players)
  230. if (player != null && (team == player.Team || team == 5) && (player.InventorySlotAvailable || (item.type > 70 && item.type < 75) || item.ammo > 0 || item.type == 58 || item.type == 184)) {
  231. if (itemAmount == 0 || itemAmount > item.maxStack)
  232. itemAmount = item.maxStack;
  233. player.GiveItem(item.type, item.name, item.width, item.height, itemAmount, prefix);
  234. if (player != e.Player)
  235. player.SendSuccessMessage(string.Format("{0} gave you {1} {2}(s).", e.Player.Name, itemAmount, item.name));
  236. }
  237. e.Player.SendSuccessMessage(string.Format("Gave {0} {1} {2}(s).", TeamIDToColor(team, false), itemAmount, item.name));
  238. } else e.Player.SendErrorMessage("Invalid item type!");
  239. }
  240. }
  241. break;
  242.  
  243. case "tphere":
  244. if (CommandIsValid(e, Permissions.tpothers, 2, "tphere <team>")) {
  245. var team = TeamColorToID(e.Parameters[1], e.Player);
  246. foreach (TSPlayer player in TShock.Players)
  247. if (player != null && player.Active && !player.Dead && player.Team == team && player != e.Player) {
  248. player.Teleport(e.TPlayer.position.X, e.TPlayer.position.Y);
  249. player.SendSuccessMessage(String.Format("You were teleported to {0}.", e.Player.Name));
  250. }
  251. e.Player.SendSuccessMessage("Teleported {0} to yourself.", TeamIDToColor(team, false));
  252. }
  253. break;
  254.  
  255. case "reset":
  256. if (CommandIsValid(e, Permissions.tpothers, 2, "tphere <team>"))
  257. {
  258. var team = TeamColorToID(e.Parameters[1], e.Player);
  259. foreach (TSPlayer player in TShock.Players)
  260. if (player != null && player.Active && !player.Dead && player.Team == team && player != e.Player)
  261. {
  262. ResetStats(player);
  263. ResetInventory(player);
  264. player.SendSuccessMessage(String.Format("Your character was reset to default!"));
  265. }
  266. e.Player.SendSuccessMessage("You have reset {0}.", TeamIDToColor(team, false));
  267. }
  268. break;
  269.  
  270.  
  271. case "gbuff":
  272. case "buffplayer":
  273. if (CommandIsValid(e, Permissions.buffplayer, 3, "gbuff <team> <buff id/name> [time(seconds)]")) {
  274. var team = TeamColorToID(e.Parameters[1], e.Player);
  275. int id = 0;
  276. int time = 60;
  277. if (!int.TryParse(e.Parameters[2], out id)) {
  278. var found = TShock.Utils.GetBuffByName(e.Parameters[2]);
  279. if (found.Count == 0)
  280. e.Player.SendErrorMessage("Invalid buff name!");
  281. else if (found.Count > 1)
  282. TShock.Utils.SendMultipleMatchError(e.Player, found.Select(b => Main.buffName[b]));
  283. else id = found[0];
  284. }
  285. if (e.Parameters.Count == 4)
  286. int.TryParse(e.Parameters[3], out time);
  287. if (id > 0 && id < Main.maxBuffTypes) {
  288. if (time < 0 || time > short.MaxValue)
  289. time = 60;
  290. foreach (TSPlayer player in TShock.Players)
  291. if (player != null && player.Active && !player.Dead && player.Team == team) {
  292. player.SetBuff(id, time * 60);
  293. if (player != e.Player)
  294. player.SendSuccessMessage(string.Format("{0} has buffed you with {1}({2}) for {3} seconds!",
  295. e.Player.Name, TShock.Utils.GetBuffName(id),
  296. TShock.Utils.GetBuffDescription(id), (time)));
  297. }
  298. e.Player.SendSuccessMessage(string.Format("You have buffed {0} with {1}({2}) for {3} seconds!",
  299. TeamIDToColor(team, false), TShock.Utils.GetBuffName(id),
  300. TShock.Utils.GetBuffDescription(id), (time)));
  301. } else e.Player.SendErrorMessage("Invalid buff ID!");
  302. }
  303. break;
  304.  
  305. case "heal":
  306. if (CommandIsValid(e, Permissions.heal, 2, "heal <team>")) {
  307. var team = TeamColorToID(e.Parameters[1], e.Player);
  308. foreach (TSPlayer player in TShock.Players)
  309. if (player != null && player.Active && !player.Dead && player.Team == team) {
  310. player.Heal();
  311. if (player != e.Player)
  312. player.SendSuccessMessage(string.Format("{0} just healed you!", e.Player.Name));
  313. }
  314. e.Player.SendSuccessMessage(String.Format("You just healed {0}.", TeamIDToColor(team, false)));
  315. }
  316. break;
  317.  
  318. case "kill":
  319. if (CommandIsValid(e, Permissions.kill, 2, "kill <team>")) {
  320. var team = TeamColorToID(e.Parameters[1], e.Player);
  321. foreach (TSPlayer player in TShock.Players)
  322. if (player != null && player.Active && !player.Dead && player.Team == team)
  323. player.DamagePlayer(999999);
  324. TSPlayer.All.SendInfoMessage("{0} killed {1}.", e.Player.Name, TeamIDToColor(team, false));
  325. }
  326. break;
  327.  
  328. case "slap":
  329. if (CommandIsValid(e, Permissions.slap, 2, "slap <team> [damage]")) {
  330. var team = TeamColorToID(e.Parameters[1], e.Player);
  331. int damage = 5;
  332. if (e.Parameters.Count == 3)
  333. int.TryParse(e.Parameters[2], out damage);
  334. if (!e.Player.Group.HasPermission(Permissions.kill))
  335. damage = TShock.Utils.Clamp(damage, 15, 0);
  336. foreach (TSPlayer player in TShock.Players)
  337. if (player != null && player.Active && !player.Dead && player.Team == team)
  338. player.DamagePlayer(damage);
  339. TSPlayer.All.SendInfoMessage("{0} slapped {1} for {2} damage.", e.Player.Name, TeamIDToColor(team, false), damage);
  340. }
  341. break;
  342.  
  343. case "playing":
  344. case "online":
  345. case "who":
  346. if (CommandIsValid(e, "", 2, "who <team> [pagenumber]")) {
  347. var team = TeamColorToID(e.Parameters[1], e.Player);
  348. int pageNumber = 1;
  349. if (e.Parameters.Count > 2)
  350. int.TryParse(e.Parameters[2], out pageNumber);
  351. var plrs = new List<string>();
  352. foreach (TSPlayer player in TShock.Players)
  353. if (player != null && player.Active && player.Team == team)
  354. plrs.Add(player.Name);
  355. e.Player.SendSuccessMessage("Online Players ({0}/{1})", plrs.Count, TShock.Config.MaxSlots);
  356. PaginationTools.SendPage(e.Player, pageNumber, plrs,
  357. new PaginationTools.Settings {
  358. IncludeHeader = false,
  359. FooterFormat = string.Format("Type /team who {0} {{0}} for more.", TeamIDToColor(team))
  360. }
  361. );
  362. }
  363. break;
  364.  
  365. case "sendwarp":
  366. if (CommandIsValid(e, Permissions.tpothers, 3, "sendwarp <team> <warpname>")) {
  367. var team = TeamColorToID(e.Parameters[1], e.Player);
  368. var warp = TShock.Warps.Find(e.Parameters[2]);
  369. if (warp.Position != Point.Zero) {
  370. foreach (TSPlayer player in TShock.Players)
  371. if (player != null && player.Active && !player.Dead && player.Team == team)
  372. if (player.Teleport(warp.Position.X * 16, warp.Position.Y * 16) && player != e.Player)
  373. player.SendSuccessMessage(String.Format("{0} warped you to {1}.", e.Player.Name, e.Parameters[2]));
  374. e.Player.SendSuccessMessage(String.Format("You warped {0} to {1}.", TeamIDToColor(team, false), e.Parameters[2]));
  375. }
  376. else e.Player.SendErrorMessage("Specified warp not found.");
  377. }
  378. break;
  379.  
  380. /*
  381. case "annoy":
  382. break;
  383. *
  384. case "confuse":
  385. break;
  386. *
  387. case "rocket":
  388. break;
  389. *
  390. case "firework":
  391. break;
  392.  
  393. case "overridessc":
  394. case "ossc":
  395. break;*/
  396.  
  397. case "help": {
  398. int pageNumber;
  399. if (!PaginationTools.TryParsePageNumber(e.Parameters, 1, e.Player, out pageNumber))
  400. return;
  401. var commands = new List<string> { "kick", "ban", "tempban", "usergroup", "tempgroup", "give", "tphere", "mute", "unmute", "sendwarp", "gbuff", "heal",
  402. "kill", "slap", "playing" };
  403. PaginationTools.SendPage(e.Player, pageNumber, PaginationTools.BuildLinesFromTerms(commands),
  404. new PaginationTools.Settings {
  405. HeaderFormat = "Team Commands ({0}/{1}):",
  406. FooterFormat = "Type /team help {0} for more commands."
  407. }
  408. );
  409. }
  410. break;
  411. }
  412. }
  413.  
  414. bool CommandIsValid(CommandArgs e, string permission, int argumentCount, string correctSyntax) {
  415. if (permission != "" && !e.Player.Group.HasPermission(permission)) {
  416. e.Player.SendErrorMessage("You don't have permission to use that command.");
  417. return false;
  418. }
  419. if (e.Parameters.Count < argumentCount) {
  420. e.Player.SendErrorMessage(String.Concat("Invalid syntax! Proper syntax : /team ", correctSyntax));
  421. return false;
  422. }
  423. return true;
  424. }
  425.  
  426. public void ResetStats(TSPlayer player)
  427. {
  428. player.TPlayer.statLife = startHealth;
  429. player.TPlayer.statLifeMax = startHealth;
  430. player.TPlayer.statMana = startMana;
  431. player.TPlayer.statManaMax = startMana;
  432.  
  433. NetMessage.SendData(4, -1, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
  434. NetMessage.SendData(42, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  435. NetMessage.SendData(16, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  436. NetMessage.SendData(50, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  437.  
  438. NetMessage.SendData(4, player.Index, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
  439. NetMessage.SendData(42, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  440. NetMessage.SendData(16, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  441. NetMessage.SendData(50, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  442. }
  443.  
  444. public void ResetInventory(TSPlayer player)
  445. {
  446. ClearInventory(player);
  447.  
  448. int slot = 0;
  449. Item give;
  450. foreach (NetItem item in StarterItems)
  451. {
  452. give = TShock.Utils.GetItemById(item.netID);
  453. give.stack = item.stack;
  454. give.prefix = (byte)item.prefix;
  455.  
  456. if (player.InventorySlotAvailable)
  457. {
  458. player.TPlayer.inventory[slot] = give;
  459. NetMessage.SendData((int)PacketTypes.PlayerSlot, -1, -1, string.Empty, player.Index, slot);
  460. slot++;
  461. }
  462. }
  463. }
  464.  
  465. private void ClearInventory(TSPlayer player) //The inventory clearing method from ClearInvSSC
  466. {
  467. for (int i = 0; i < NetItem.maxNetInventory; i++)
  468. {
  469. if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)) //main inventory excluding the special slots
  470. {
  471. player.TPlayer.inventory[i].netDefaults(0);
  472. }
  473. else if (i < NetItem.maxNetInventory - NetItem.dyeSlots)
  474. {
  475. var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
  476. player.TPlayer.armor[index].netDefaults(0);
  477. }
  478. else
  479. {
  480. var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
  481. player.TPlayer.dye[index].netDefaults(0);
  482. }
  483. }
  484.  
  485. for (int k = 0; k < NetItem.maxNetInventory; k++)
  486. {
  487. NetMessage.SendData(5, -1, -1, "", player.Index, (float)k, 0f, 0f, 0);
  488. }
  489.  
  490. for (int k = 0; k < Player.maxBuffs; k++)
  491. {
  492. player.TPlayer.buffType[k] = 0;
  493. }
  494.  
  495. NetMessage.SendData(4, -1, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
  496. NetMessage.SendData(42, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  497. NetMessage.SendData(16, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  498. NetMessage.SendData(50, -1, -1, "", player.Index, 0f, 0f, 0f, 0);
  499.  
  500. for (int k = 0; k < NetItem.maxNetInventory; k++)
  501. {
  502. NetMessage.SendData(5, player.Index, -1, "", player.Index, (float)k, 0f, 0f, 0);
  503. }
  504.  
  505. for (int k = 0; k < Player.maxBuffs; k++)
  506. {
  507. player.TPlayer.buffType[k] = 0;
  508. }
  509.  
  510. NetMessage.SendData(4, player.Index, -1, player.Name, player.Index, 0f, 0f, 0f, 0);
  511. NetMessage.SendData(42, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  512. NetMessage.SendData(16, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  513. NetMessage.SendData(50, player.Index, -1, "", player.Index, 0f, 0f, 0f, 0);
  514. }
  515.  
  516. }
  517. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement