Jump to content

philippj

Members
  • Content Count

    253
  • Joined

  • Last visited

Everything posted by philippj

  1. This is a server admin tool only. It does not offer ingame functionality like spawning of items, spectating etc. Most features are listed on the flyer in the left lower corner. To acquire a service you have to log in to the CFNetwork, go to "Products", go to "Omega" and click "Acquire".
  2. OmegaManager The OmegaManager is a software to automate your DayZ server experience. It automatically deploys, runs, watches, restarts and updates your server. More information including setup instructions can be found at https://wiki.cftools.de/display/CFTOOL/OmegaManager
  3. philippj

    Better Airdrops (improved version)

    class BetterAirdropLocation { float x, y; string name; bool disclose, send_proximity; ref TStringArray items; void BetterAirdropLocation(float x, float y, string name, bool disclose = false, bool send_proximity = false) { this.x = x; this.y = y; this.name = name; this.disclose = disclose; this.send_proximity = send_proximity; } }; class BetterAirdrop { /* philipj */ /* * Config */ bool debug_mode = false; // display d2t & port to target float interval = 60.0; // Interval in minutes float initial = 5.0; float plane_height = 200; // relative to ground float proximity_warning_distance = 750.0; float speed = 1.0; bool display_basic_information = true; bool display_coordinates = true; bool smoke_signal = true; // not working int infected_count = 40; int items_to_be_spawned = 3; int number_of_drops = 1; // number of drops must match the number amount of airdrop locations ref BetterAirdropLocation airdrop_locations[] = { new BetterAirdropLocation(2760.0, 5527.0, "Zelenogorsk Church", true, true), //new BetterAirdropLocation(4451.0, 10220.0, "NWAF", true, true), }; /* * internals */ int interval_ms = 0; int motionless_ticks = 0; Object plane; vector plane_pos; vector spawn_pos; vector drop_pos; vector orientation; float drop_sim_height_diff = -1; Object airdrop_obj; Object tmp_airdrop_obj; EntityAI airdrop_physics; Particle signal; Particle explosion; Particle smoke; bool active = false; bool dropped = false; bool sent_proximity_warning = false; ref BetterAirdropLocation active_drop; void BetterAirdrop() { GetGame().AdminLog("<BetterAirdrop> plugin init"); interval_ms = interval * 60 * 1000; ResetPlane(); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(InitiateAirdrop, initial*60*1000, false); } void InitiateAirdrop() { ResetPlane(); Cleanup(); Spawn(); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(InitiateAirdrop, interval*60*1000, false); } void Cleanup() { GetGame().ObjectDelete(airdrop_obj); } void ResetPlane() { GetGame().ObjectDelete(plane); plane = GetGame().CreateObject( "Land_Wreck_C130J", "0 0 0", false, true, false ); smoke = Particle.Play(ParticleList.SMOKING_HELI_WRECK, plane, Vector(0, 0, -1.0)); // not working plane_pos[0] = 0; plane_pos[1] = 0; plane_pos[2] = 0; plane.SetPosition(plane_pos); dropped = false; active = false; sent_proximity_warning = false; if(active_drop.send_proximity) SendMessageToPlayers("The plane has vanished"); } void MovePlane() { float angle = Math.Atan2(drop_pos[1]-spawn_pos[1], drop_pos[0]-spawn_pos[0]); float fixed_angle = angle*Math.RAD2DEG; plane_pos[0] = Math.Cos(angle); plane_pos[2] = Math.Sin(angle); vector advanced_plane_pos = plane.GetPosition() + (plane_pos*speed); advanced_plane_pos[1] = GetGame().SurfaceY(advanced_plane_pos[0], advanced_plane_pos[2]) + plane_height; plane.SetPosition( advanced_plane_pos ); //TeleportPlayers(advanced_plane_pos + "10 10 10"); if(!dropped) { float distance = Math.Sqrt(Math.Pow(drop_pos[0] - advanced_plane_pos[0], 2) + Math.Pow(drop_pos[1] - advanced_plane_pos[2], 2)); if(debug_mode) SendMessageToPlayers("DISTANCE2TARGET: "+distance); if(distance <= 10.0) { dropped = true; Drop(); GetGame().AdminLog("<BetterAirdrop> dropped airdrop"); if(active_drop.send_proximity) SendMessageToPlayers("<BetterAirdrop> The airdrop has been dropped at " + active_drop.name); } else if(distance <= proximity_warning_distance && !sent_proximity_warning) { sent_proximity_warning = true; GetGame().AdminLog("<BetterAirdrop> nearing target"); if(active_drop.send_proximity) SendMessageToPlayers("<BetterAirdrop> The airdrop is closing in on its target location (" + active_drop.name + ")"); } } else { if(!IsInRect(advanced_plane_pos[0], advanced_plane_pos[1], -10.0, 15470.0, -10.0, 1570.0)) { GetGame().AdminLog("<BetterAirdrop> cleaning up"); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(MovePlane); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ResetPlane, 1000, false); } } } void DropSimulation() { float ground = GetGame().SurfaceY(airdrop_obj.GetPosition()[0], airdrop_obj.GetPosition()[2]); drop_sim_height_diff = airdrop_obj.GetPosition()[1]-airdrop_physics.GetPosition()[1]; //GetGame().AdminLog("GROUND: "+ground+"; HEIGHT: "+airdrop_physics.GetPosition()[1]+"; DIFF: "+drop_sim_height_diff); if(drop_sim_height_diff <= 0.0001) motionless_ticks += 1; else motionless_ticks = 0; if (airdrop_physics.GetPosition()[1] <= (ground+3) || motionless_ticks >= 25) { // force drop if stuck for more then 500ms GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(DropSimulation); vector tmp_pos = airdrop_obj.GetPosition(); tmp_pos[1] = ground; GetGame().ObjectDelete(airdrop_physics); airdrop_obj.SetPosition(tmp_pos); airdrop_obj.PlaceOnSurface(); Particle.Play(ParticleList.RDG2, tmp_pos); // not working Particle.Play(ParticleList.ROADFLARE_BURNING_MAIN, tmp_pos); // not working AfterDrop(); } else { vector airdrop_obj_pos; airdrop_obj_pos[0] = drop_pos[0]; airdrop_obj_pos[1] = airdrop_physics.GetPosition()[1]; airdrop_obj_pos[2] = drop_pos[1]; airdrop_obj.SetPosition(airdrop_obj_pos); airdrop_obj.SetOrientation(airdrop_physics.GetOrientation()); } } void AfterDrop() { vector base_pos = airdrop_obj.GetPosition(), dynamic_pos; for(int i = 0; i < items_to_be_spawned; i++) { float a = Math.RandomFloat(0.4, 1.0) * 2 * Math.PI; float r = 5.0 * Math.Sqrt(Math.RandomFloat(0.4, 1.0)); dynamic_pos = base_pos; dynamic_pos[0] = dynamic_pos[0]+(r * Math.Cos(a)); dynamic_pos[2] = dynamic_pos[2]+(r * Math.Sin(a)); dynamic_pos[1] = GetGame().SurfaceY(dynamic_pos[0], dynamic_pos[2]) + 0.3; string item = GetRandomItem(); GetGame().CreateObject(item, dynamic_pos, false, true); } for ( int inf = 0; inf < infected_count; inf++ ) { dynamic_pos = base_pos; dynamic_pos[0] = dynamic_pos[0]+Math.RandomFloat(-20.0, 20.0); dynamic_pos[2] = dynamic_pos[2]+Math.RandomFloat(-20.0, 20.0); GetGame().CreateObject( WorkingZombieClasses().GetRandomElement(), dynamic_pos, false, true ); } } void Drop() { motionless_ticks = 0; GetGame().AdminLog("<BetterAirdrop> initiated drop physics"); airdrop_physics = EntityAI.Cast(GetGame().CreateObject( "CivilianSedan", plane.GetPosition(), true, true )); airdrop_physics.SetAllowDamage(false); airdrop_obj = GetGame().CreateObject( "Land_Container_1Bo", plane.GetPosition(), false, true ); SetVelocity(airdrop_physics, "10 0 0"); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(DropSimulation, 10, true); } void Spawn() { GetGame().CreateSoundOnObject(plane, "powerGeneratorLoop", 2000.0, false); // not working plane.PlaySoundLoop("powerGeneratorLoop", 2000.0, false); // not working GetGame().AdminLog("<BetterAirdrop> airdrop init"); int side = Math.RandomInt(0,4); switch(side) { case 0: { spawn_pos[0] = 0.0; spawn_pos[1] = Math.RandomFloat(0.0, 15360.0); break; } case 1: { spawn_pos[0] = 15360.0; spawn_pos[1] = Math.RandomFloat(0.0, 15360.0); break; } case 2: { spawn_pos[0] = Math.RandomFloat(0.0, 15360.0); spawn_pos[1] = 0.0; break; } case 3: { spawn_pos[0] = Math.RandomFloat(0.0, 15360.0); spawn_pos[1] = 15360.0; break; } } vector plane_start_pos; plane_start_pos[0] = spawn_pos[0]; plane_start_pos[2] = spawn_pos[1]; plane.SetPosition(plane_start_pos); plane.SetOrigin(plane_start_pos); BetterAirdropLocation default_drop = new BetterAirdropLocation(2760.0, 5527.0, "ravioli ravioli gib mir die formeloli", true, true); if(number_of_drops < 1) { GetGame().AdminLog("<BetterAirdrop> No random locations defined, using fallback"); active_drop = default_drop; } else { active_drop = airdrop_locations[Math.RandomInt(0, number_of_drops - 1)]; } vector tmp_pos; tmp_pos[0] = active_drop.x; tmp_pos[1] = GetGame().SurfaceY(active_drop.x, active_drop.y)+1.0; tmp_pos[2] = active_drop.y; Particle.Play(ParticleList.SMOKING_HELI_WRECK, tmp_pos); // Does not work on client side if(debug_mode) TeleportPlayers(tmp_pos); if(active_drop.disclose) SendMessageToPlayers("<BetterAirdrop> An airdrop has been spotted heading towards " + active_drop.name); drop_pos[0] = active_drop.x; drop_pos[1] = active_drop.y; float angle = Math.Atan2(drop_pos[1]-spawn_pos[1], drop_pos[0]-spawn_pos[0]); float fixed_angle = angle*Math.RAD2DEG; vector direction = drop_pos-spawn_pos; vector normalized = direction.Normalized(); float distance = direction.Length(); GetGame().AdminLog("<BetterAirdrop> INBOUND " + active_drop.name + " AT [X: "+active_drop.x+"; Y: "+active_drop.y+"] START [X: "+spawn_pos[0]+"; Y: "+spawn_pos[1]+"] DISTANCE2TARGET: "+distance + "; PLANEANGLE: "+fixed_angle +"; V2Y: "); GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(MovePlane, 20, true); } void SendMessageToPlayers(string message) { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); for ( int i = 0; i < players.Count(); i++ ) { PlayerBase player = players.Get(i); Param1<string> message_param = new Param1<string>(message); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message_param, true, player.GetIdentity()); } } void TeleportPlayers(vector pos) { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); for ( int i = 0; i < players.Count(); i++ ) { Man player = players.Get(i); player.SetPosition(pos); } } bool IsInRect(float x, float y, float min_x, float max_x, float min_y, float max_y) { if(x > min_x && x < max_x && y > min_y && y < max_y) return true; return false; } string GetRandomItem() { TStringArray loot = { "GhillieSuit_Mossy", }; return loot.GetRandomElement(); } TStringArray WorkingZombieClasses() { return { "ZmbM_HermitSkinny_Base","ZmbM_HermitSkinny_Beige","ZmbM_HermitSkinny_Black","ZmbM_HermitSkinny_Green", "ZmbM_HermitSkinny_Red","ZmbM_FarmerFat_Base","ZmbM_FarmerFat_Beige","ZmbM_FarmerFat_Blue","ZmbM_FarmerFat_Brown", "ZmbM_FarmerFat_Green","ZmbF_CitizenANormal_Base","ZmbF_CitizenANormal_Beige","ZmbF_CitizenANormal_Brown", "ZmbF_CitizenANormal_Blue","ZmbM_CitizenASkinny_Base","ZmbM_CitizenASkinny_Blue","ZmbM_CitizenASkinny_Brown", "ZmbM_CitizenASkinny_Grey","ZmbM_CitizenASkinny_Red","ZmbM_CitizenBFat_Base","ZmbM_CitizenBFat_Blue","ZmbM_CitizenBFat_Red", "ZmbM_CitizenBFat_Green","ZmbF_CitizenBSkinny_Base","ZmbF_CitizenBSkinny","ZmbM_PrisonerSkinny_Base","ZmbM_PrisonerSkinny", "ZmbM_FirefighterNormal_Base","ZmbM_FirefighterNormal","ZmbM_FishermanOld_Base","ZmbM_FishermanOld_Blue","ZmbM_FishermanOld_Green", "ZmbM_FishermanOld_Grey","ZmbM_FishermanOld_Red","ZmbM_JournalistSkinny_Base","ZmbM_JournalistSkinny","ZmbF_JournalistNormal_Base", "ZmbF_JournalistNormal_Blue","ZmbF_JournalistNormal_Green","ZmbF_JournalistNormal_Red","ZmbF_JournalistNormal_White", "ZmbM_ParamedicNormal_Base","ZmbM_ParamedicNormal_Blue","ZmbM_ParamedicNormal_Green","ZmbM_ParamedicNormal_Red", "ZmbM_ParamedicNormal_Black","ZmbF_ParamedicNormal_Base","ZmbF_ParamedicNormal_Blue","ZmbF_ParamedicNormal_Green", "ZmbF_ParamedicNormal_Red","ZmbM_HikerSkinny_Base","ZmbM_HikerSkinny_Blue","ZmbM_HikerSkinny_Green","ZmbM_HikerSkinny_Yellow", "ZmbF_HikerSkinny_Base","ZmbF_HikerSkinny_Blue","ZmbF_HikerSkinny_Grey","ZmbF_HikerSkinny_Green","ZmbF_HikerSkinny_Red", "ZmbM_HunterOld_Base","ZmbM_HunterOld_Autumn","ZmbM_HunterOld_Spring","ZmbM_HunterOld_Summer","ZmbM_HunterOld_Winter", "ZmbF_SurvivorNormal_Base","ZmbF_SurvivorNormal_Blue","ZmbF_SurvivorNormal_Orange","ZmbF_SurvivorNormal_Red", "ZmbF_SurvivorNormal_White","ZmbM_SurvivorDean_Base","ZmbM_SurvivorDean_Black","ZmbM_SurvivorDean_Blue","ZmbM_SurvivorDean_Grey", "ZmbM_PolicemanFat_Base","ZmbM_PolicemanFat","ZmbF_PoliceWomanNormal_Base","ZmbF_PoliceWomanNormal","ZmbM_PolicemanSpecForce_Base", "ZmbM_PolicemanSpecForce","ZmbM_SoldierNormal_Base","ZmbM_SoldierNormal","ZmbM_usSoldier_normal_Base", "ZmbM_usSoldier_normal_Woodland","ZmbM_usSoldier_normal_Desert","ZmbM_CommercialPilotOld_Base","ZmbM_CommercialPilotOld_Blue", "ZmbM_CommercialPilotOld_Olive","ZmbM_CommercialPilotOld_Brown","ZmbM_CommercialPilotOld_Grey","ZmbM_PatrolNormal_Base", "ZmbM_PatrolNormal_PautRev","ZmbM_PatrolNormal_Autumn","ZmbM_PatrolNormal_Flat","ZmbM_PatrolNormal_Summer","ZmbM_JoggerSkinny_Base", "ZmbM_JoggerSkinny_Blue","ZmbM_JoggerSkinny_Green","ZmbM_JoggerSkinny_Red","ZmbF_JoggerSkinny_Base","ZmbF_JoggerSkinny_Blue", "ZmbF_JoggerSkinny_Brown","ZmbF_JoggerSkinny_Green","ZmbF_JoggerSkinny_Red","ZmbM_MotobikerFat_Base","ZmbM_MotobikerFat_Beige", "ZmbM_MotobikerFat_Black","ZmbM_MotobikerFat_Blue","ZmbM_VillagerOld_Base","ZmbM_VillagerOld_Blue","ZmbM_VillagerOld_Green", "ZmbM_VillagerOld_White","ZmbM_SkaterYoung_Base","ZmbM_SkaterYoung_Blue","ZmbM_SkaterYoung_Brown","ZmbM_SkaterYoung_Green", "ZmbM_SkaterYoung_Grey","ZmbF_SkaterYoung_Base","ZmbF_SkaterYoung_Brown","ZmbF_SkaterYoung_Striped","ZmbF_SkaterYoung_Violet", "ZmbF_DoctorSkinny_Base","ZmbF_DoctorSkinny","ZmbF_BlueCollarFat_Base","ZmbF_BlueCollarFat_Blue","ZmbF_BlueCollarFat_Green", "ZmbF_BlueCollarFat_Red","ZmbF_BlueCollarFat_White","ZmbF_MechanicNormal_Base","ZmbF_MechanicNormal_Beige","ZmbF_MechanicNormal_Green", "ZmbF_MechanicNormal_Grey","ZmbF_MechanicNormal_Orange","ZmbM_MechanicSkinny_Base","ZmbM_MechanicSkinny_Blue","ZmbM_MechanicSkinny_Grey", "ZmbM_MechanicSkinny_Green","ZmbM_MechanicSkinny_Red","ZmbM_ConstrWorkerNormal_Base","ZmbM_ConstrWorkerNormal_Beige", "ZmbM_ConstrWorkerNormal_Black","ZmbM_ConstrWorkerNormal_Green","ZmbM_ConstrWorkerNormal_Grey","ZmbM_HeavyIndustryWorker_Base", "ZmbM_HeavyIndustryWorker","ZmbM_OffshoreWorker_Base","ZmbM_OffshoreWorker_Green","ZmbM_OffshoreWorker_Orange","ZmbM_OffshoreWorker_Red", "ZmbM_OffshoreWorker_Yellow","ZmbF_NurseFat_Base","ZmbF_NurseFat","ZmbM_HandymanNormal_Base","ZmbM_HandymanNormal_Beige", "ZmbM_HandymanNormal_Blue","ZmbM_HandymanNormal_Green","ZmbM_HandymanNormal_Grey","ZmbM_HandymanNormal_White","ZmbM_DoctorFat_Base", "ZmbM_DoctorFat","ZmbM_Jacket_Base","ZmbM_Jacket_beige","ZmbM_Jacket_black","ZmbM_Jacket_blue","ZmbM_Jacket_bluechecks", "ZmbM_Jacket_brown","ZmbM_Jacket_greenchecks","ZmbM_Jacket_grey","ZmbM_Jacket_khaki","ZmbM_Jacket_magenta","ZmbM_Jacket_stripes", "ZmbF_PatientOld_Base","ZmbF_PatientOld","ZmbM_PatientSkinny_Base","ZmbM_PatientSkinny","ZmbF_ShortSkirt_Base","ZmbF_ShortSkirt_beige", "ZmbF_ShortSkirt_black","ZmbF_ShortSkirt_brown","ZmbF_ShortSkirt_green","ZmbF_ShortSkirt_grey","ZmbF_ShortSkirt_checks", "ZmbF_ShortSkirt_red","ZmbF_ShortSkirt_stripes","ZmbF_ShortSkirt_white","ZmbF_ShortSkirt_yellow","ZmbF_VillagerOld_Base", "ZmbF_VillagerOld_Blue","ZmbF_VillagerOld_Green","ZmbF_VillagerOld_Red","ZmbF_VillagerOld_White","ZmbM_Soldier","ZmbM_SoldierAlice", "ZmbM_SoldierHelmet","ZmbM_SoldierVest","ZmbM_SoldierAliceHelmet","ZmbM_SoldierVestHelmet","ZmbF_MilkMaidOld_Base", "ZmbF_MilkMaidOld_Beige","ZmbF_MilkMaidOld_Black","ZmbF_MilkMaidOld_Green","ZmbF_MilkMaidOld_Grey","ZmbM_priestPopSkinny_Base", "ZmbM_priestPopSkinny","ZmbM_ClerkFat_Base","ZmbM_ClerkFat_Brown","ZmbM_ClerkFat_Grey","ZmbM_ClerkFat_Khaki","ZmbM_ClerkFat_White", "ZmbF_Clerk_Normal_Base","ZmbF_Clerk_Normal_Blue","ZmbF_Clerk_Normal_White","ZmbF_Clerk_Normal_Green","ZmbF_Clerk_Normal_Red", }; } } Never had any issues/crashes whatsoever, maybe check your crashlog
  4. philippj

    Better Airdrops (improved version)

    The scripts/plugins in the video and the one posted on dayzmodz are different. I can post the latest BetterAirdrop.c here since dayzmodz got taken offline
  5. philippj

    Admin / Server Control Panel | Need your help!

    Love what you are doing. To clarify you can restrict FTP user access & permissions easily so I don't get your first point. Also that's some fine slander right there, I am not doing anything shady, my legal information is public, if you have any issues with CFTools in general or Omega (the actual software) you can message me privately.
  6. philippj

    increasing loot position chance for buildings.

    Did you wipe your persistence files?
  7. philippj

    increasing loot position chance for buildings.

    I dont think having multiple containers of the same category works. Just up the number in lootmax and wipe your persistence.
  8. philippj

    Player Database access?

    Python 2.7: https://gist.github.com/philippj/8d6473ca544b78b6b701c816d4d9e0bb Input: 76561198227028860 Output: GHe+2LuKcWsM4PMs9rYJma7JT3AE5e2qDcjMRqAqG9w=
  9. philippj

    How to know BattlEye GUID from .ADM

    The only actually viable option right now is the one which you were already using.
  10. philippj

    How to know BattlEye GUID from .ADM

    Thats the BI UID Base64(Sha256(Steam64))
  11. philippj

    Team assignment based on GUID.

    You can retrieve a players BI UID by string uid = player.GetIdentity().GetId();
  12. philippj

    Player deathmessages

    The logfiles must be reachable from the FTP user home directory and the users needs to have certain permissions. (Location of ADM files are being set via the -profiles server startup parameter) You can test your setup unser Configuration -> FTP -> Connection test
  13. philippj

    delete dis

    Param1<string> message = new Param1<string>("i bims"); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity()); I think you are looking for something like this
  14. philippj

    How do you get player Steam ID?

    If you are refering to the IDs in the Server logfiles those are not BattlEye GUIDs so you wont be able to reverse it using that website or infistar for that matter.
  15. philippj

    Standard Query Port

    27016
  16. philippj

    Player deathmessages

    FTP needs to be properly configured for that feature
  17. philippj

    BEC Plugins

    There is ton of real-world applications using Python. It just isnt used for the typical end-user applications
  18. philippj

    How can I turn on Deathmessage?

    Thats SQF, very outdated and most likely not working. You have to wait for the EnScript(?) solution or dig up some files yourself
  19. philippj

    Player Database access?

    ID = Auto-Increment UID = Bohemia Interactive UID => Base64(SHA256(SteamID64)) BattlEye GUID => MD5(BE+SteamID64) BI probably wants internal UIDs but dunno why they changed it. And ingame names are currently useless as well because the majority of players are not using the -name startup param. There is no easy solution to match up all the different IDs except the one you are already using ;)
  20. philippj

    BEC Plugins

    Have you any experience with Python? You just created some decorators without using them and additionally your naming conventions are fucked. Put this in your class (&fix the indention). Afterwards you get at least something :) @Be_PlayerConnected def connected(self, data): self.org_func_connected(data) @Be_PlayerDisconnected def disconnected(self, data): self.org_func_disconnected(data)
  21. philippj

    Player Database access?

    You don't require a password for the player database
  22. philippj

    The server is often raining, how to cancel

    This should disable rain weather.GetRain().SetLimits(0.0, 0.0); weather.GetRain().SetForecastChangeLimits(0.0, 0.0);
  23. philippj

    The server is often raining, how to cancel

    init.c And dont just copy paste some random stuff like weather.GetRain().Set( Math.RandomFloatInclusive(1.0, 1.0), 0, 0) because Math.RandomFloatInclusive(1.0, 1.0) would mean to create a random float from 1.0 to 1.0 which makes zero sense. Methods with docstring: /* Sets limits of this phenomenon. (Intensity) Default values are: Min = 0 Max = 1 Min Function minimum (in range <0, 1>). Max Function maximum (in range <0, 1>). */ weather.GetRain().SetLimits(float min, float max); /* Sets limits of change when forecast is computed. These limits govern how much the forecast value can change when it is computed by weather controller. Default values are: Min = 0 Max = 1 Min Forecast change minimum (in range <0, 1>). Max Forecast change maximum (in range <0, 1>). */ weather.GetRain().SetForecastChangeLimits( float min, float max ); /* Sets time range in which next forecast can be computed. Default values are: Min = 300 (5 minutes) Max = 3600 (1 hour) Min Minimal number of seconds. Max Maximal number of seconds. */ weather.GetRain().SetForecastTimeLimits( float min, float max ); /* Sets the forecast. forecast Desired forecast value that should be met in given time. time A time of the next change (how long it takes in seconds to interpolate to given value). minDuration A minimal time in seconds the change will last. */ weather.GetRain().Set( float forecast, float time = 0, float minDuration = 0);
  24. philippj

    How much Ram do you need?

    Idling PVP without Zombies or Loot ~3.2GB Idling PVE with Barrels ~4.1GB 60 player PVP ~3.9GB
  25. philippj

    How to display player count on your server

    Param1<string> empty = new Param1<string>(" "); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, empty, true, player.GetIdentity()); Thats how you send a message to a single player. you have to place that in the loop
×