Jump to content

sawagorohov

Members
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutral

About sawagorohov

  • Rank
    On the Coast
  1. sawagorohov

    Problem with my init.c

    I added the sinipelto admin script to my init.c. This script works fine only until the first server restart. After restarting the server, the script does not work. After the third restart, it works. It turns out that the script is working or not. I can't figure out what the problem is? Please help! my init.c void main() { //INIT WEATHER BEFORE ECONOMY INIT------------------------ Weather weather = g_Game.GetWeather(); weather.MissionWeather(false); // false = use weather controller from Weather.c weather.GetOvercast().Set( Math.RandomFloatInclusive(0.4, 0.6), 1, 0); weather.GetRain().Set( 0, 0, 1); weather.GetFog().Set( Math.RandomFloatInclusive(0.05, 0.1), 1, 0); //INIT ECONOMY-------------------------------------- Hive ce = CreateHive(); if ( ce ) ce.InitOffline(); //DATE RESET AFTER ECONOMY INIT------------------------- int year, month, day, hour, minute; int reset_month = 9, reset_day = 20; GetGame().GetWorld().GetDate(year, month, day, hour, minute); if ((month == reset_month) && (day < reset_day)) { GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute); } else { if ((month == reset_month + 1) && (day > reset_day)) { GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute); } else { if ((month < reset_month) || (month > reset_month + 1)) { GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute); } } } } class CustomMission: MissionServer { // SteamIDs of all admin players stored here private ref TStringArray m_admins; // Players that have God Mode enabled, listed here private ref TIntArray m_gods; override void OnInit() { super.OnInit(); // Initialize needed arrays here m_admins = new TStringArray; m_gods = new TIntArray; LoadAdmins(); } void LoadAdmins() { string path = "$profile:admins.txt"; FileHandle file = OpenFile(path, FileMode.READ); // If file doesnt exist, create it if ( file == 0 ) { file = OpenFile(path, FileMode.WRITE); FPrintln(file, "// This file contains SteamID64 of all server admins. Add them below."); FPrintln(file, "// Line starting with // means a comment line."); CloseFile(file); return; } string line; while ( FGets( file, line ) > 0 ) { if (line.Length() < 2) continue; if (line.Get(0) + line.Get(1) == "//") continue; m_admins.Insert(line); } CloseFile(file); } bool Command(PlayerBase player, string command) { const string helpMsg = "Available commands: /help /car /warp /kill /give /gear /ammo /say /info /heal /god /suicide /here /there"; // Split command message into args TStringArray args = new TStringArray; MySplit(command, " ", args); string arg; PlayerBase target; int dist; switch (args[0]) { case "/car": if ( args.Count() != 2 ) { SendPlayerMessage(player, "Syntax: /car [TYPE] - Spawn a vehicle"); SpawnCar(player, "help"); return false; } SpawnCar(player, args[1]); break; case "/warp": if ( args.Count() < 3 ) { SendPlayerMessage(player, "Syntax: /warp [X] [Z] - Teleport to [X, Z]"); return false; } string pos = args[1] + " " + "0" + " " + args[2]; SafeSetPos(player, pos); SendPlayerMessage(player, "Teleported to: " + pos); break; case "/heal": if ( args.Count() != 1 ) { SendPlayerMessage(player, "Syntax: /heal - Set all health statuses to max"); return false; } RestoreHealth(player); break; case "/gear": if ( args.Count() != 2 ) { SendPlayerMessage(player, "Syntax: /gear [TYPE] - Spawn item loadout to self"); SpawnGear(player, "help"); return false; } if (SpawnGear(player, args[1])) { SendPlayerMessage(player, "Gear spawned."); } break; case "/ammo": // Args count: 2 <= x <= 3 if ( args.Count() < 2 || args.Count() > 3 ) { SendPlayerMessage(player, "Syntax: /ammo [FOR_WEAPON] (AMOUNT) - Spawn mags and ammo for weapon"); SpawnAmmo(player, "help"); return false; } if ( args.Count() == 3 && SpawnAmmo(player, args[1], args[2].ToInt()) ) { SendPlayerMessage(player, "Ammo spawned."); } else if ( args.Count() == 2 && SpawnAmmo(player, args[1]) ) { SendPlayerMessage(player, "Ammo spawned."); } break; case "/info": if ( args.Count() < 1 || args.Count() > 2 ) { SendPlayerMessage(player, "Syntax: /info (0/1) - Get information about players on the server or set continuous info on/off"); return false; } if (args.Count() == 2) { arg = args[1]; arg.ToLower(); if (arg.ToInt() == 1) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.PlayerInfo, 20000, true, player); SendPlayerMessage(player, "Continuous info mode enabled."); break; } else if (arg.ToInt() == 0) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.PlayerInfo); SendPlayerMessage(player, "Continuous info mode disabled."); } } else { PlayerInfo(player); } break; case "/say": if ( args.Count() < 2 ) { SendPlayerMessage(player, "Syntax: /say [MESSAGE] - Global announcement to all players"); return false; } // Form the message string from the command text and send to all players string msg = command.Substring( 5, command.Length() - 5 ); SendGlobalMessage(msg); break; case "/spawn": return false; case "/god": if ( args.Count() != 2 ) { SendPlayerMessage(player, "Syntax: /god [0-1] - Enable or disable semi-god mode"); return false; } int setGod = args[1].ToInt(); // Add player to gods, call godmode function every 1 sec if (setGod == 1) { int pId = player.GetID(); if ( m_gods.Find(pId) != -1 ) { SendPlayerMessage(player, "Player is already god."); return false; } m_gods.Insert(pId); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GodMode, 1000, true, player); SendPlayerMessage(player, "Godmode enabled."); } // Do vice versa except for other gods else if (setGod == 0) { // Remove player id from gods list if found int godIdx = m_gods.Find( player.GetID() ); if (godIdx == -1) { SendPlayerMessage(player, "Player not found in gods."); return false; } else { m_gods.Remove(godIdx); } // Remove godmode function from call queue but add again for remaining gods GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GodMode); foreach (int pid : m_gods) { PlayerBase godPlayer = GetPlayer(pid.ToString(), Identity.PID); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GodMode, 1000, true, godPlayer); } SendPlayerMessage(player, "Godmode disabled."); } else { SendPlayerMessage(player, "ERROR: Invalid argument given. Argument: 0-1"); return false; } break; case "/give": if ( args.Count() < 2 || args.Count() > 3 ) { SendPlayerMessage(player, "Syntax: /give [ITEM_NAME] (AMOUNT) - Spawn item on ground, default amount is 1"); return false; } EntityAI item = player.SpawnEntityOnGroundPos(args[1], player.GetPosition()); if (!item) { SendPlayerMessage(player, "ERROR: Could not create item."); return false; } if ( args.Count() == 3 ) { int itemCount = args[2].ToInt(); if (itemCount <= 0) { SendPlayerMessage(player, "ERROR: Invalid count."); return false; } // Spawn the rest of the items if count was specified and valid for (int i = 0; i < itemCount - 1; i++) { player.SpawnEntityOnGroundPos(args[1], player.GetPosition()); } } SendPlayerMessage(player, "Item(s) spawned."); break; case "/here": if ( args.Count() < 2 ) { SendPlayerMessage(player, "Syntax: /here '[PLAYER IDENTITY]' (DISTANCE) - Moves a player to self, remember to use single quotes around identity"); return false; } PrepareTeleport(command, args, target, dist); if (!target) { SendPlayerMessage(player, "Could not found target player."); return false; } if (dist < 1) { SendPlayerMessage(player, "Invalid distance."); return false; } TeleportPlayer(target, player, dist); break; case "/there": if ( args.Count() < 2 ) { SendPlayerMessage(player, "Syntax: /there '[PLAYER IDENTITY]' (DISTANCE) - Moves self to a player"); return false; } PrepareTeleport(command, args, target, dist); if (!target) { SendPlayerMessage(player, "Could not found target player."); return false; } if (dist < 1) { SendPlayerMessage(player, "Invalid distance."); return false; } TeleportPlayer(player, target, dist); break; case "/suicide": if ( args.Count() != 1 ) { SendPlayerMessage(player, "Syntax: /suicide - Commit a suicide"); return false; } // Use SteamID here for sake of certainty if (!KillPlayer( player.GetIdentity().GetPlainId() )) { SendPlayerMessage(player, "Could not commit suicide."); } break; case "/kill": if ( args.Count() < 2 ) { SendPlayerMessage(player, "Syntax: /kill '[PLAYER IDENTITY]' - Kills a player by given identity, use single quotes around"); return false; } arg = MyTrim(command, "'"); if (!KillPlayer(arg)) { SendPlayerMessage(player, "Error: Could not kill player."); } break; case "/help": SendPlayerMessage(player, helpMsg); return false; default: SendPlayerMessage(player, "Unknown command!"); SendPlayerMessage(player, helpMsg); return false; } return true; } void PrepareTeleport(string cmd, TStringArray args, out PlayerBase target, out int distance) { // Parse target player name: "...stuff 'input' stuff..." -> "input" string name = MyTrim(cmd, "'"); distance = args[args.Count() - 1].ToInt(); target = GetPlayer(name, Identity.ANY); } bool SpawnAmmo(PlayerBase player, string type, int amount = 1) { type.ToLower(); const string helpMsg = "Available ammo types: svd, m4, akm, fx45"; vector pos = player.GetPosition(); pos[0] = pos[0] + 1; pos[1] = pos[1] + 1; pos[2] = pos[2] + 1; string mag; string ammo; switch (type) { case "svd": mag = "Mag_SVD_10Rnd"; ammo = "AmmoBox_762x54Tracer_20Rnd"; break; case "m4": mag = "Mag_STANAG_30Rnd"; ammo = "AmmoBox_556x45Tracer_20Rnd"; break; case "akm": mag = "Mag_AKM_30Rnd"; ammo = "AmmoBox_762x39Tracer_20Rnd"; break; case "fx45": mag = "Mag_FNX45_15Rnd"; ammo = "AmmoBox_45ACP_25rnd"; break; case "help": SendPlayerMessage(player, helpMsg); return false; default: SendPlayerMessage(player, "Invalid ammo type."); SendPlayerMessage(player, helpMsg); return false; } for (int i = 0; i < amount; i++) { player.SpawnEntityOnGroundPos(mag, pos); player.SpawnEntityOnGroundPos(ammo, pos); } return true; } void GodMode(PlayerBase player) { if (!player || player.GetHealth("", "") <= 0.0) { m_gods.Remove( player.GetID() ); return; } // If player is not god, do nothing if (m_gods.Find( player.GetID() ) == -1) { return; } // Set all health statuses to maximum RestoreHealth(player); } void RestoreHealth(PlayerBase player) { if (!player) return; player.SetHealth("GlobalHealth", "Blood", player.GetMaxHealth("GlobalHealth", "Blood")); player.SetHealth("GlobalHealth", "Health", player.GetMaxHealth("GlobalHealth", "Health")); player.SetHealth("GlobalHealth", "Shock", player.GetMaxHealth("GlobalHealth", "Shock")); } bool SpawnCar(PlayerBase player, string type) { type.ToLower(); const string helpMsg = "Available types: offroad, olga, olgablack, sarka, gunter"; // Set car pos near player vector pos = player.GetPosition(); pos[0] = pos[0] + 3; pos[1] = pos[1] + 3; pos[2] = pos[2] + 3; Car car; switch (type) { case "offroad": // Spawn and build the car car = GetGame().CreateObject("OffroadHatchback", pos); car.GetInventory().CreateAttachment("HatchbackTrunk"); car.GetInventory().CreateAttachment("HatchbackHood"); car.GetInventory().CreateAttachment("HatchbackDoors_CoDriver"); car.GetInventory().CreateAttachment("HatchbackDoors_Driver"); car.GetInventory().CreateAttachment("HatchbackWheel"); car.GetInventory().CreateAttachment("HatchbackWheel"); car.GetInventory().CreateAttachment("HatchbackWheel"); car.GetInventory().CreateAttachment("HatchbackWheel"); SendPlayerMessage(player, "OffroadHatchback spawned."); break; case "olga": // Spawn and build the car car = GetGame().CreateObject("CivilianSedan", pos); car.GetInventory().CreateAttachment("CivSedanHood"); car.GetInventory().CreateAttachment("CivSedanTrunk"); car.GetInventory().CreateAttachment("CivSedanDoors_Driver"); car.GetInventory().CreateAttachment("CivSedanDoors_CoDriver"); car.GetInventory().CreateAttachment("CivSedanDoors_BackLeft"); car.GetInventory().CreateAttachment("CivSedanDoors_BackRight"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); SendPlayerMessage(player, "CivSedan spawned."); break; case "olgablack": // Spawn and build the car car = GetGame().CreateObject("CivilianSedan_Black", pos); car.GetInventory().CreateAttachment("CivSedanHood_Black"); car.GetInventory().CreateAttachment("CivSedanTrunk_Black"); car.GetInventory().CreateAttachment("CivSedanDoors_Driver_Black"); car.GetInventory().CreateAttachment("CivSedanDoors_CoDriver_Black"); car.GetInventory().CreateAttachment("CivSedanDoors_BackLeft_Black"); car.GetInventory().CreateAttachment("CivSedanDoors_BackRight_Black"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); car.GetInventory().CreateAttachment("CivSedanWheel"); SendPlayerMessage(player, "CivSedan_Black spawned."); break; case "sarka": // Spawn and build the car car = GetGame().CreateObject("Sedan_02", pos); car.GetInventory().CreateAttachment("Sedan_02_Hood"); car.GetInventory().CreateAttachment("Sedan_02_Trunk"); car.GetInventory().CreateAttachment("Sedan_02_Door_1_1"); car.GetInventory().CreateAttachment("Sedan_02_Door_1_2"); car.GetInventory().CreateAttachment("Sedan_02_Door_2_1"); car.GetInventory().CreateAttachment("Sedan_02_Door_2_2"); car.GetInventory().CreateAttachment("Sedan_02_Wheel"); car.GetInventory().CreateAttachment("Sedan_02_Wheel"); car.GetInventory().CreateAttachment("Sedan_02_Wheel"); car.GetInventory().CreateAttachment("Sedan_02_Wheel"); SendPlayerMessage(player, "Sedan_02 spawned."); break; case "gunter": // Spawn and build the car car = GetGame().CreateObject("Hatchback_02", pos); car.GetInventory().CreateAttachment("Hatchback_02_Hood"); car.GetInventory().CreateAttachment("Hatchback_02_Trunk"); car.GetInventory().CreateAttachment("Hatchback_02_Door_1_1"); car.GetInventory().CreateAttachment("Hatchback_02_Door_1_2"); car.GetInventory().CreateAttachment("Hatchback_02_Door_2_1"); car.GetInventory().CreateAttachment("Hatchback_02_Door_2_2"); car.GetInventory().CreateAttachment("Hatchback_02_Wheel"); car.GetInventory().CreateAttachment("Hatchback_02_Wheel"); car.GetInventory().CreateAttachment("Hatchback_02_Wheel"); car.GetInventory().CreateAttachment("Hatchback_02_Wheel"); SendPlayerMessage(player, "Hatchback_02 spawned."); break; case "help": SendPlayerMessage(player, helpMsg); return false; default: SendPlayerMessage(player, "ERROR: Car type invalid."); SendPlayerMessage(player, helpMsg); return false; } // A car was spawned, so we do some common car configuration // Do general car building matching all car types car.GetInventory().CreateAttachment("CarRadiator"); car.GetInventory().CreateAttachment("CarBattery"); car.GetInventory().CreateAttachment("SparkPlug"); car.GetInventory().CreateAttachment("HeadlightH7"); car.GetInventory().CreateAttachment("HeadlightH7"); // Fill all the fluids car.Fill(CarFluid.FUEL, car.GetFluidCapacity(CarFluid.FUEL)); car.Fill(CarFluid.OIL, car.GetFluidCapacity(CarFluid.OIL)); car.Fill(CarFluid.BRAKE, car.GetFluidCapacity(CarFluid.BRAKE)); car.Fill(CarFluid.COOLANT, car.GetFluidCapacity(CarFluid.COOLANT)); // Set neutral gear car.GetController().ShiftTo(CarGear.NEUTRAL); return true; } void SafeSetPos(PlayerBase player, string pos) { // Safe conversion vector p = pos.ToVector(); // Check that position is a valid coordinate // 0 0 0 wont be accepted even though valid if (p) { // Get safe surface value for Y coordinate in that position p[1] = GetGame().SurfaceY(p[0], p[2]); player.SetPosition(p); return; } SendPlayerMessage(player, "Invalid coordinates."); } void PlayerInfo(PlayerBase player) { if (!player) { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.PlayerInfo); return; } // Clear chat history first for (int x = 0; x < 15; x++) { SendPlayerMessage(player, " "); } ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); // Send player count SendPlayerMessage(player, "Players on server: " + players.Count()); // Maximum amount of single line entries that fit in the chat history: 12 int max = 10; if ( players.Count() < max ) max = players.Count(); PlayerBase p; for ( int i = 0; i < max; ++i ) { //if (i > 0) // SendPlayerMessage(player, "*"); Class.CastTo(p, players.Get(i)); string info = "Player {" + string.ToString(i, false, false, false) + "}"; info = info + " " + "Name: " + p.GetIdentity().GetName(); info = info + " " + "Pos: " + p.GetPosition().ToString(); info = info + " " + "Health: " + p.GetHealth("GlobalHealth", "Health"); info = info + " " + "Blood: " + p.GetHealth("GlobalHealth", "Blood"); info = info + " " + "Shock: " + p.GetHealth("GlobalHealth", "Shock"); info = info + " " + "PlayerID: " + p.GetID(); info = info + " " + "SteamID64: " + p.GetIdentity().GetPlainId(); SendPlayerMessage(player, info); } SendPlayerMessage(player, " "); } bool SpawnGear(PlayerBase player, string type) { type.ToLower(); const string helpMsg = "Available types: mil, ghillie, medic, nv, svd, m4, akm, fx45"; vector pos = player.GetPosition(); pos[0] = pos[0] + 1; pos[1] = pos[1] + 1; pos[2] = pos[2] + 1; // DONT spawn a mag as attachment, is buggy ingame, spawn mags in ground instead EntityAI item; EntityAI subItem; switch (type) { case "mil": // Head item = player.SpawnEntityOnGroundPos("Mich2001Helmet", pos); subItem = item.GetInventory().CreateAttachment("NVGoggles"); subItem.GetInventory().CreateAttachment("Battery9V"); subItem = item.GetInventory().CreateAttachment("UniversalLight"); subItem.GetInventory().CreateAttachment("Battery9V"); player.SpawnEntityOnGroundPos("GP5GasMask", pos); // Vest item = player.SpawnEntityOnGroundPos("SmershVest", pos); item.GetInventory().CreateAttachment("SmershBag"); // Body player.SpawnEntityOnGroundPos("TTsKOJacket_Camo", pos); player.SpawnEntityOnGroundPos("TTSKOPants", pos); player.SpawnEntityOnGroundPos("OMNOGloves_Gray", pos); // Waist item = player.SpawnEntityOnGroundPos("MilitaryBelt", pos); item.GetInventory().CreateAttachment("Canteen"); item.GetInventory().CreateAttachment("PlateCarrierHolster"); subItem = item.GetInventory().CreateAttachment("NylonKnifeSheath"); subItem.GetInventory().CreateAttachment("CombatKnife"); // Legs item = player.SpawnEntityOnGroundPos("MilitaryBoots_Black", pos); item.GetInventory().CreateAttachment("CombatKnife"); // Back player.SpawnEntityOnGroundPos("AliceBag_Camo", pos); break; case "ghillie": player.SpawnEntityOnGroundPos("GhillieAtt_Woodland", pos); player.SpawnEntityOnGroundPos("GhillieAtt_Woodland", pos); player.SpawnEntityOnGroundPos("GhillieBushrag_Woodland", pos); player.SpawnEntityOnGroundPos("GhillieHood_Woodland", pos); player.SpawnEntityOnGroundPos("GhillieSuit_Woodland", pos); player.SpawnEntityOnGroundPos("GhillieTop_Woodland", pos); break; case "svd": item = player.SpawnEntityOnGroundPos("SVD", pos); item.GetInventory().CreateAttachment("AK_Suppressor"); subItem = item.GetInventory().CreateAttachment("PSO1Optic"); subItem.GetInventory().CreateAttachment("Battery9V"); item = player.SpawnEntityOnGroundPos("KazuarOptic", pos); item.GetInventory().CreateAttachment("Battery9V"); player.SpawnEntityOnGroundPos("Mag_SVD_10Rnd", pos); player.SpawnEntityOnGroundPos("Mag_SVD_10Rnd", pos); player.SpawnEntityOnGroundPos("Mag_SVD_10Rnd", pos); player.SpawnEntityOnGroundPos("Mag_SVD_10Rnd", pos); break; case "m4": item = player.SpawnEntityOnGroundPos("M4A1", pos); item.GetInventory().CreateAttachment("M4_Suppressor"); item.GetInventory().CreateAttachment("M4_OEBttstck"); item.GetInventory().CreateAttachment("M4_RISHndgrd"); subItem = item.GetInventory().CreateAttachment("ReflexOptic"); subItem.GetInventory().CreateAttachment("Battery9V"); subItem = item.GetInventory().CreateAttachment("UniversalLight"); subItem.GetInventory().CreateAttachment("Battery9V"); player.SpawnEntityOnGroundPos("Mag_STANAG_30Rnd", pos); player.SpawnEntityOnGroundPos("Mag_STANAG_30Rnd", pos); player.SpawnEntityOnGroundPos("Mag_STANAG_30Rnd", pos); player.SpawnEntityOnGroundPos("ACOGOptic", pos); break; case "akm": item = player.SpawnEntityOnGroundPos("AKM", pos); item.GetInventory().CreateAttachment("AK_Suppressor"); item.GetInventory().CreateAttachment("AK_WoodBttstck"); item.GetInventory().CreateAttachment("AK_RailHndgrd"); subItem = item.GetInventory().CreateAttachment("KobraOptic"); subItem.GetInventory().CreateAttachment("Battery9V"); subItem = item.GetInventory().CreateAttachment("UniversalLight"); subItem.GetInventory().CreateAttachment("Battery9V"); item = player.SpawnEntityOnGroundPos("PSO1Optic", pos); item.GetInventory().CreateAttachment("Battery9V"); player.SpawnEntityOnGroundPos("Mag_AKM_30Rnd", pos); player.SpawnEntityOnGroundPos("Mag_AKM_30Rnd", pos); player.SpawnEntityOnGroundPos("Mag_AKM_Drum75Rnd", pos); break; case "fx45": item = player.SpawnEntityOnGroundPos("FNX45", pos); item.GetInventory().CreateAttachment("PistolSuppressor"); subItem = item.GetInventory().CreateAttachment("FNP45_MRDSOptic"); subItem.GetInventory().CreateAttachment("Battery9V"); subItem = item.GetInventory().CreateAttachment("TLRLight"); subItem.GetInventory().CreateAttachment("Battery9V"); player.SpawnEntityOnGroundPos("Mag_FNX45_15Rnd", pos); player.SpawnEntityOnGroundPos("Mag_FNX45_15Rnd", pos); player.SpawnEntityOnGroundPos("Mag_FNX45_15Rnd", pos); break; case "nv": item = player.SpawnEntityOnGroundPos("NVGHeadstrap", pos); subItem = item.GetInventory().CreateAttachment("NVGoggles"); subItem.GetInventory().CreateAttachment("Battery9V"); break; case "medic": player.SpawnEntityOnGroundPos("BandageDressing", pos); player.SpawnEntityOnGroundPos("BandageDressing", pos); player.SpawnEntityOnGroundPos("BandageDressing", pos); player.SpawnEntityOnGroundPos("BandageDressing", pos); player.SpawnEntityOnGroundPos("SalineBagIV", pos); player.SpawnEntityOnGroundPos("Morphine", pos); player.SpawnEntityOnGroundPos("Epinephrine", pos); break; case "mosin": break; case "sks": break; case "help": SendPlayerMessage(player, helpMsg); return false; default: SendPlayerMessage(player, "Invalid gear type."); SendPlayerMessage(player, helpMsg); return false; } return true; } void TeleportPlayer(PlayerBase from, PlayerBase to, int distance) { if (!from) return; if (!to) return; vector toPos = to.GetPosition(); float pos_x = toPos[0] + distance; float pos_z = toPos[2] + distance; float pos_y = GetGame().SurfaceY(pos_x, pos_z); vector pos = Vector(pos_x, pos_y, pos_z); from.SetPosition(pos); } bool KillPlayer(string tag) { PlayerBase p = GetPlayer(tag, Identity.ANY); if (!p) return false; p.SetHealth("", "", -1); return true; } override void OnEvent(EventType eventTypeId, Param params) { switch(eventTypeId) { // Handle user command case ChatMessageEventTypeID: ChatMessageEventParams chatParams; Class.CastTo(chatParams, params); // Remove those stupid ' ' => Substring: x, false, false, quotes = false // Check that input was a command (contains forward slash) string cmd = string.ToString(chatParams.param3, false, false, false); // command format: /abc def ghi // if not command, is normal chat message if ( cmd.Get(0) != "/" ) break; // Get sender player name as string string senderName = string.ToString(chatParams.param2, false, false, false); // Get sender player object PlayerBase sender = GetPlayer(senderName, Identity.NAME); // If fails to get the message sender, stop if (!sender) { return; } // Check that player has sufficient privileges to execute commands if ( !IsAdmin(sender) ) { SendPlayerMessage(sender, "Sorry, you are not an admin!"); return; } // Execute specified command Command(sender, cmd); // Return after execution instead of breaking to prevent normal event handling return; } // Unless chat command was executed, operate normally // Call super class event handler to handle other events super.OnEvent(eventTypeId, params); } bool IsAdmin(PlayerBase player) { return m_admins.Find( player.GetIdentity().GetPlainId() ) != -1; } PlayerBase GetPlayer(string tag, Identity type) { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); PlayerBase p; bool nameMatch; bool steamIdMatch; bool pidMatch; for ( int i = 0; i < players.Count(); ++i ) { Class.CastTo(p, players.Get(i)); // Store matches from different checks nameMatch = p.GetIdentity().GetName() == tag; steamIdMatch = p.GetIdentity().GetPlainId() == tag; pidMatch = p.GetID() == tag.ToInt(); if ( type == Identity.ANY ) { if ( nameMatch || steamIdMatch || pidMatch ) return p; } else if ( type == Identity.NAME ) { if ( nameMatch ) return p; } else if ( type == Identity.STEAMID ) { if ( steamIdMatch ) return p; } else if ( type == Identity.PID ) { if ( pidMatch ) return p; } } // Player with given parameter not found return NULL; } void SendGlobalMessage(string message) { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); for ( int i = 0; i < players.Count(); ++i ) { Man player = players.Get(i); if ( player ) SendPlayerMessage(player, message); } } void SendPlayerMessage(PlayerBase player, string message) { Param1<string> Msgparam; Msgparam = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, player.GetIdentity()); } string MyTrim(string text, string c) { if (text.Length() < 3) return ""; int count = 0; int start = 0; int end = 0; for (int i = 0; i < text.Length(); i++) { if (text.Get(i) == c) { count++; start = i + 1; break; } } for (int j = text.Length() - 1; j >= 0; j--) { if (text.Get(j) == c) { count++; end = j - 1; break; } } // Return substring only if trimmed by c from both sides. if (count == 2) return text.Substring(start, end - start + 1); return ""; } void MySplit(string text, string delim, out TStringArray list) { string temp = text + delim; string word = ""; for (int i = 0; i < temp.Length(); i++ ) { string x = temp.Get(i); if ( x != delim ) { word = word + x; } else { list.Insert(word); word = ""; } } } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { Entity playerEnt; playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player Class.CastTo(m_player, playerEnt); GetGame().SelectPlayer(identity, m_player); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { EntityAI itemTop; EntityAI itemEnt; ItemBase itemBs; itemTop = player.FindAttachmentBySlotName("Body"); if ( itemTop ) { itemEnt = itemTop.GetInventory().CreateInInventory("Rag"); if ( Class.CastTo(itemBs, itemEnt ) ) itemBs.SetQuantity(6); itemEnt = player.GetInventory().CreateInInventory("TunaCan"); itemEnt = itemTop.GetInventory().CreateInInventory("VitaminBottle"); itemEnt = itemTop.GetInventory().CreateInInventory("TetracyclineAntibiotics"); } } }; enum Identity { ANY, NAME, STEAMID, PID }; Mission CreateCustomMission(string path) { return new CustomMission(); }
×