O skrypcie
Skrypt bazuje na kodzie umieszczonym na forum dayz ale podobno tamten nie działa.
Kod należy wkleić do pliku init.c
w katalogu misji. Wklejamy go w zaznaczone miejsce:
class CustomMission: MissionServer { /* >>>>> w to miejsce wklej skrypt <<<<< */ void SetRandomHealth(EntityAI itemEnt) { if ( itemEnt ) { float rndHlt = Math.RandomFloat( 0.45, 0.65 ); itemEnt.SetHealth01( "", "", rndHlt ); } }
Kod skryptu
bool verify_admins = true // false - każdy może wywoływać polecenia // true - tylko gracze z listy admins mogą wywoływać polecenia string cmd_prefix = "/"; // znak początku polecenia // lista steamID64 lub BI UID użytkowników, którzy mogą wywoływac polecenia // lista może zawierać jedno lub wiele ID // steamID64 można znaleźć tutaj: steamid.io ref TStringArray admins = {"0000000000000"}; bool IsPlayerAnAdmin(PlayerBase player) { bool found = false; for ( int i = 0; i < admins.Count(); ++i ) { if(player.GetIdentity().GetId() == admins[i] || player.GetIdentity().GetPlainId() == admins[i]) { found=true; break; } } return found; } PlayerBase GetPlayer(string name) { PlayerBase p; array<Man> players = new array<Man>; GetGame().GetPlayers(players); for ( int i = 0; i < players.Count(); ++i ) { p = players.Get(i); if(p.GetIdentity().GetName() == name) return p; } return NULL; } void SendMessageToPlayer(PlayerBase player, string message) { Param1<string> param = new Param1<string>( message ); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, param, true, player.GetIdentity()); } void RefuelNearPlayer(PlayerBase player) { ref array<Object> nearest_objects = new array<Object>; ref array<CargoBase> proxy_cargos = new array<CargoBase>; Car toBeFilled; vector position = player.GetPosition(); GetGame().GetObjectsAtPosition ( position, 10, nearest_objects, proxy_cargos ); for (int i = 0; i < nearest_objects.Count(); i++) { if (nearest_objects[i].IsKindOf("CarScript")) { SendMessageToPlayer(player, "[Refuel] Found car: '"+nearest_objects[i]+"'"); toBeFilled = Car.Cast(nearest_objects[i]); float fuelReq = toBeFilled.GetFluidCapacity( CarFluid.FUEL ) - (toBeFilled.GetFluidCapacity( CarFluid.FUEL ) * toBeFilled.GetFluidFraction( CarFluid.FUEL )); float oilReq = toBeFilled.GetFluidCapacity( CarFluid.OIL ) - (toBeFilled.GetFluidCapacity( CarFluid.OIL ) * toBeFilled.GetFluidFraction( CarFluid.OIL )); float coolantReq = toBeFilled.GetFluidCapacity( CarFluid.COOLANT ) - (toBeFilled.GetFluidCapacity( CarFluid.COOLANT ) * toBeFilled.GetFluidFraction( CarFluid.COOLANT )); float brakeReq = toBeFilled.GetFluidCapacity( CarFluid.BRAKE ) - (toBeFilled.GetFluidCapacity( CarFluid.BRAKE ) * toBeFilled.GetFluidFraction( CarFluid.BRAKE )); toBeFilled.Fill( CarFluid.FUEL, fuelReq ); toBeFilled.Fill( CarFluid.OIL, oilReq ); toBeFilled.Fill( CarFluid.COOLANT, coolantReq ); toBeFilled.Fill( CarFluid.BRAKE, brakeReq ); SendMessageToPlayer(player, "[Refuel] "+fuelReq+"L added, all fluids maxed"); } } } override void OnEvent(EventType eventTypeId, Param params) { super.OnEvent(eventTypeId,params); int i; PlayerBase player, temp_player; array<Man> players = new array<Man>; GetGame().GetPlayers(players); if(eventTypeId != ChatMessageEventTypeID) return; // Is chat message ChatMessageEventParams chat_params = ChatMessageEventParams.Cast( params ); if(chat_params.param1 != 0 || chat_params.param2 == "") return; player = GetPlayer(chat_params.param2); if(player == NULL) return; if(verify_admins && !IsPlayerAnAdmin(player)) { GetGame().AdminLog("[ADMCMD] (Unauthorized) " + player.GetIdentity().GetName() +" ("+player.GetIdentity().GetPlainId()+", "+player.GetIdentity().GetId()+") tried to execute "+ chat_params.param3); return; } string message = chat_params.param3, prefix, param0, command; TStringArray tokens = new TStringArray; message.Replace("` ", "&SPCESC!"); //Escape spaces before splitting message.Split(" ", tokens); int count = tokens.Count(); for ( i = 0; i < count; ++i ) { message = tokens[i]; message.Replace("&SPCESC!", " "); //.Replace doesn't work directly on TStringArray elements for some reason :( tokens[i] = message; } param0 = tokens.Get(0); param0.ParseStringEx(prefix); if(prefix != cmd_prefix) return; param0.ParseStringEx(command); GetGame().AdminLog("[ADMCMD] PLAYER: "+ player.GetIdentity().GetName() +" ("+player.GetIdentity().GetPlainId()+", "+player.GetIdentity().GetId()+") CMD: "+ command); switch(command) { case "spawn": { if(count != 2) { SendMessageToPlayer(player, "/spawn [object]"); return; } GetGame().CreateObject(tokens[1], player.GetPosition(), false, true ); SendMessageToPlayer(player, "[ObjectSpawn] Object spawned: " + tokens[1]); break; } case "inv": { if(count != 2) { SendMessageToPlayer(player, "/inv [object]"); return; } player.GetInventory().CreateInInventory(tokens[1]); SendMessageToPlayer(player, "[ObjectSpawn] Object spawned in inventory: " + tokens[1]); break; } case "weapon": { if(count != 2) { SendMessageToPlayer(player, "/weapon [weapon]"); return; } EntityAI weapon; switch(tokens[1]) { case "ump": { weapon = player.GetHumanInventory().CreateInHands("UMP45"); player.GetInventory().CreateInInventory("Mag_UMP_25Rnd"); break; } case "cz61": { weapon = player.GetHumanInventory().CreateInHands("CZ61"); player.GetInventory().CreateInInventory("Mag_CZ61_20Rnd"); break; } case "mp5": { weapon = player.GetHumanInventory().CreateInHands("MP5K"); weapon.GetInventory().CreateAttachment("MP5k_StockBttstck"); weapon.GetInventory().CreateAttachment("MP5_PRailHndgrd"); player.GetInventory().CreateInInventory("Mag_MP5_30Rnd"); break; } case "svd": { weapon = player.GetHumanInventory().CreateInHands("SVD"); weapon.GetInventory().CreateAttachment("PSO11Optic"); player.GetInventory().CreateInInventory("Mag_SVD_10Rnd"); break; } case "mp133": { weapon = player.GetHumanInventory().CreateInHands("Mp133Shotgun"); player.GetInventory().CreateInInventory("Ammo_12gaPellets"); break; } case "mosin": { weapon = player.GetHumanInventory().CreateInHands("Mosin9130"); weapon.GetInventory().CreateAttachment("PUScopeOptic"); player.GetInventory().CreateInInventory("Ammo_762x54"); break; } case "m4": { weapon = player.GetHumanInventory().CreateInHands("M4A1_Black"); weapon.GetInventory().CreateAttachment("M4_RISHndgrd_Black"); weapon.GetInventory().CreateAttachment("M4_MPBttstck_Black"); weapon.GetInventory().CreateAttachment("BUISOptic"); player.GetInventory().CreateInInventory("Mag_STANAGCoupled_30Rnd"); break; } case "akm": { weapon = player.GetHumanInventory().CreateInHands("AKM"); weapon.GetInventory().CreateAttachment("AK_RailHndgrd"); weapon.GetInventory().CreateAttachment("AK_PlasticBttstck"); player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); break; } case "izh18": { weapon = player.GetHumanInventory().CreateInHands("Izh18"); player.GetInventory().CreateInInventory("Ammo_762x39"); break; } case "fnx": { weapon = player.GetHumanInventory().CreateInHands("FNX45"); player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); break; } default: { SendMessageToPlayer(player, "[WeaponSpawner] " + tokens[1] + " not found"); break; } } break; } case "strip": { if(count != 2) { SendMessageToPlayer(player, "/strip [player]"); return; } temp_player = GetPlayer(tokens[1]); if(temp_player == NULL) { SendMessageToPlayer(player, "[Strip] Can't find player called: '"+tokens[1]+"'"); } else { temp_player.RemoveAllItems(); SendMessageToPlayer(player, "[Strip] You stripped " + temp_player.GetIdentity().GetName()); SendMessageToPlayer(temp_player, "You have been stripped by an admin"); } break; } case "slap": { if(count != 2) { SendMessageToPlayer(player, "/slap [player]"); return; } temp_player = GetPlayer(tokens[1]); if(temp_player == NULL) { SendMessageToPlayer(player, "[Slap] Can't find player called: '"+tokens[1]+"'"); } else { temp_player.SetPosition(temp_player.GetPosition() + "0 3 0"); SendMessageToPlayer(player, "[Slap] You stripped " + temp_player.GetIdentity().GetName()); SendMessageToPlayer(temp_player, "You have been slapped by an admin"); } break; } case "topos": { if (count < 3) { SendMessageToPlayer(player, "/topos [x] [y] (player)"); return; } float ATL_Z = GetGame().SurfaceY(tokens[1].ToFloat(), tokens[2].ToFloat()); vector reqpos = Vector(tokens[1].ToFloat(), ATL_Z, tokens[2].ToFloat()); temp_player = player; if (count == 4) { temp_player = GetPlayer(tokens[3]); if (temp_player == NULL) { SendMessageToPlayer(player, "[Teleport] Can't find player called: '"+tokens[3]+"'"); return; } else { SendMessageToPlayer(temp_player, "[Teleport] You've been teleported to " + reqpos + " by admin " + player.GetIdentity().GetName()); } } temp_player.SetPosition(reqpos); SendMessageToPlayer(player, "[Teleport] Target teleported to " + temp_player.GetPosition()); break; } case "goto": { if(count != 2) { SendMessageToPlayer(player, "/goto [player]"); return; } temp_player = GetPlayer(tokens[1]); if(temp_player == NULL) { SendMessageToPlayer(player, "[Teleport] Can't find player called: '"+tokens[1]+"'"); } else { player.SetPosition(temp_player.GetPosition()); SendMessageToPlayer(player, "[Teleport] You teleported to " + temp_player.GetIdentity().GetName()); } break; } case "allgoto": { PlayerBase allgoto_target; if(count != 2) { SendMessageToPlayer(player, "/allgoto [player]"); return; } allgoto_target = GetPlayer(tokens[1]); if(allgoto_target == NULL) { SendMessageToPlayer(player, "[Teleport] Can't find player called: '"+tokens[1]+"'"); } else { SendMessageToPlayer(player, "[Teleport] You teleported everyone to your location"); for (i = 0; i < players.Count(); i++) { temp_player = players.Get(i); SendMessageToPlayer(temp_player, "[Teleport] You have been teleported to player " + allgoto_target.GetIdentity().GetName()); temp_player.SetPosition(allgoto_target.GetPosition()); } } break; } case "here": { if(count != 2) { SendMessageToPlayer(player, "/here [player]"); return; } temp_player = GetPlayer(tokens[1]); if(temp_player == NULL) { SendMessageToPlayer(player, "[Teleport] Can't find player called: '"+tokens[1]+"'"); } else { temp_player.SetPosition(player.GetPosition()); SendMessageToPlayer(temp_player, "[Teleport] You have been teleported to admin " + player.GetIdentity().GetName()); SendMessageToPlayer(player, "[Teleport] You teleported " + temp_player.GetIdentity().GetName() + " to your location"); } break; } case "allhere": { SendMessageToPlayer(player, "[Teleport] You teleported everyone to your location"); for (i = 0; i < players.Count(); i++) { temp_player = players.Get(i); SendMessageToPlayer(temp_player, "[Teleport] You have been teleported to admin " + player.GetIdentity().GetName()); temp_player.SetPosition(player.GetPosition()); } break; } case "time": { if(count != 3) { SendMessageToPlayer(player, "/time [hour] [minute]"); return; } GetGame().GetWorld().SetDate( 2018, 7, 7, tokens[1].ToInt(), tokens[2].ToInt()); SendMessageToPlayer(player, "[Servertime] You have set the servertime to " + tokens[1] + ":"+tokens[2]); break; } case "day": { GetGame().GetWorld().SetDate( 2018, 7, 7, 12, 0); SendMessageToPlayer(player, "[Servertime] You have set the servertime to daytime"); break; } case "night": { GetGame().GetWorld().SetDate( 2018, 7, 7, 24, 0); SendMessageToPlayer(player, "[Servertime] You have set the servertime to daytime"); break; } case "rain": { if(count != 2) { SendMessageToPlayer(player, "/rain [value 0-100]"); return; } float rain = tokens[1].ToFloat() / 100; GetGame().GetWeather().GetRain().Set(rain, 2, 600); SendMessageToPlayer(player, "[Weather] You have set Rain to " + tokens[1] + "% ["+rain+"]"); break; } case "fog": { if(count != 2) { SendMessageToPlayer(player, "/fog [value 0-100]"); return; } float fog = tokens[1].ToFloat() / 100; GetGame().GetWeather().GetFog().Set(fog, 2, 600); SendMessageToPlayer(player, "[Weather] You have set Fog to " + tokens[1] + "% ["+fog+"]"); break; } case "overcast": { if(count != 2) { SendMessageToPlayer(player, "/overcast [value 0-100]"); return; } float overcast = tokens[1].ToFloat() / 100; GetGame().GetWeather().GetOvercast().Set(overcast, 2, 600); SendMessageToPlayer(player, "[Weather] You have set Overcast to " + tokens[1] + "% ["+overcast+"]"); break; } case "kill": { if(count == 2) { temp_player = GetPlayer(tokens[1]); if(temp_player == NULL) { SendMessageToPlayer(player, "[Kill] Can't find player called: '"+tokens[1]+"'"); } else { temp_player.SetHealth(0); SendMessageToPlayer(player, "[Kill] You killed " + temp_player.GetIdentity().GetName()); } } else { player.SetHealth(0); SendMessageToPlayer(player, "[Kill] You killed yourself"); } break; } case "killall": { SendMessageToPlayer(player, "[Kill] You killed everyone"); for (i = 0; i < players.Count(); i++) { temp_player = players.Get(i); if(temp_player.GetIdentity().GetId() == player.GetIdentity().GetId()) continue; temp_player.SetHealth(0); } break; } case "heal": { PlayerBase heal_target; if(count == 2) { heal_target = GetPlayer(tokens[1]); if(heal_target == NULL) { SendMessageToPlayer(player, "[Heal] Can't find player called: '"+tokens[1]+"'"); } else { SendMessageToPlayer(player, "[Heal] You healed " + heal_target.GetIdentity().GetName()); } } else { heal_target = player; SendMessageToPlayer(player, "[Heal] You healed yourself"); } if(heal_target != NULL) { heal_target.SetHealth(heal_target.GetMaxHealth("", "")); heal_target.SetHealth("", "Blood", heal_target.GetMaxHealth("", "Blood")); heal_target.GetStatStamina().Set(1000); heal_target.GetStatEnergy().Set(1000); heal_target.GetStatWater().Set(1000); } break; } case "offroad": { TStringArray attArr = { "HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel", "CarBattery","CarRadiator","EngineBelt","SparkPlug", "HatchbackHood","HatchbackTrunk","HatchbackDoors_Driver","HatchbackDoors_CoDriver", }; Car v; float playerAngle = MiscGameplayFunctions.GetHeadingAngle(player); vector posModifier = Vector(-(3 * Math.Sin(playerAngle)), 0, 3 * Math.Cos(playerAngle)); v = Car.Cast(GetGame().CreateObject( "OffroadHatchback", player.GetPosition() + posModifier)); v.SetAllowDamage( false ); EntityAI entity; for (int j = 0; j < attArr.Count(); j++) { entity = v.GetInventory().CreateAttachment( attArr.Get(j) ); entity.SetAllowDamage( false ); } RefuelNearPlayer(player); SendMessageToPlayer(player, "[Offroad] Vehicled spawned"); break; } case "refuel": { RefuelNearPlayer(player); break; } case "repair": { ref array<Object> nearest_objects = new array<Object>; ref array<CargoBase> proxy_cargos = new array<CargoBase>; vector position = player.GetPosition(); GetGame().GetObjectsAtPosition ( position, 10, nearest_objects, proxy_cargos ); for (i = 0; i < nearest_objects.Count(); i++) { entity = EntityAI.Cast(nearest_objects[i]); if (entity && !entity.IsInherited(PlayerBase)) { entity.SetHealth("", "", 1.0); SendMessageToPlayer(player, "[Repair] Repaired: '"+entity+"'"); } } break; } case "delete": { nearest_objects = new array<Object>; proxy_cargos = new array<CargoBase>; position = player.GetPosition(); GetGame().GetObjectsAtPosition ( position, 10, nearest_objects, proxy_cargos ); for (i = 0; i < nearest_objects.Count(); i++) { entity = EntityAI.Cast(nearest_objects[i]); if (entity && !entity.IsInherited(PlayerBase)) { if (entity.GetHierarchyParent() == null) { entity.Delete(); SendMessageToPlayer(player, "[Delete] Deleted: '"+entity+"'"); } } } break; } default: { SendMessageToPlayer(player, "Unknown command: " + command); break; } } }
Opis niektórych poleceń
/spawn <object>
– tworzy obiekt danego typu object, typy obiektów można znaleźć w plikutypes.xml
/inv <object>
– tworzy obiekt wewnątrz inwentarza admina (gracza, który wywołuje polecenie)/strip <player>
– rozbiera wybranego gracza/slap <player>
– daje klapsa wybranemu graczowi/topos <x> <y>
– teleportuje admina do podanych koordynat na mapie/topos <x> <y> <player>
– teleportuje wybranego gracza do podanych koordynat na mapie/goto <player>
– teleportuje admina na miejsce wybranego gracza/allgoto <player>
– teleportuje wszystkich graczy na miejsce wybranego gracza/here <player>
– teleportuje wybranego gracza na pozycję admina/allhere
– teleportuje wszystkich graczy na pozycję admina/time <hour> <minute>
– ustawia czas na serwerze na dzień 2018-07-07 i podaną godzinęhour
:minute
/day
– ustawia czas na serwerze na dzień 2018-07-07 i godzinę 12:00/night
– ustawia czas na serwerze na dzień 2018-07-07 i godzinę 00:00/rain <0-100>
– ustawia poziom deszczu na podaną wartość (%)/fog <0-100>
– ustawia poziom mgły na podaną wartość (%)/overcast <0-100>
– ustawia poziom zachmurzenia na podaną wartość (%)/kill <player>
– uśmierca wybranego gracza/kill
– uśmierca admina 😉/killall
– uśmierca wszystkich graczy poza adminem/heal
– ulecza admina/heal <player>
– ulecza wybranego gracza/offroad
– tworzy pojazd terenowy ze wszystkimi dodatkami (akumulator, koła, drzwi, …)/refuel
– tankuje pojazdy znajdujące się blisko (3m) admina/repair
– naprawia obiekty znajdujące się blisko (10m) admina (możliwe, że nie działa)/delete
– usuwa !!!wszystkie!!! obiekty w pobliżu (10m) admina!!!