Jump to content
dayzdanz

Better Airdrops (improved version)

Recommended Posts

Airdrops are great. Everybody loves airdrops! That’s why we’ve improved and stabilised (no crashes on our testing server) the existing AirDrop mod!

Better Airdrops takes the idea of airdrops a bit further by using dynamic flight paths, enhanced location interface, performance and expandability.

This is the first implementation, so constructive criticism is greatly appreciated.

- Dynamic plane flight paths

- Easier control of airdrop locations

- ADM file logging

- Doesnt causes crashes

- Adds item to loot economy (rather unintended but dont tell anyone)

 

Known Bugs (aka. Help wanted):

- Plane facing is off in some instances

- Sounds do not work

- Particle effects do not work

 

Full tutorial, support and discussion at
https://dayzmodz.com/forum/index.php?thread/25-betterairdrop-dayz-modz-exclusive/&postID=62#post62

 

4-20181012171028-1-jpg

  • Like 1
  • Thanks 1
  • Beans 1

Share this post


Link to post
Share on other sites
On 10/14/2018 at 2:23 AM, danZ_nuts said:

Airdrops are great. Everybody loves airdrops! That’s why we’ve improved and stabilised (no crashes on our testing server) the existing AirDrop mod!

Better Airdrops takes the idea of airdrops a bit further by using dynamic flight paths, enhanced location interface, performance and expandability.

This is the first implementation, so constructive criticism is greatly appreciated.

- Dynamic plane flight paths

- Easier control of airdrop locations

- ADM file logging

- Doesnt causes crashes

- Adds item to loot economy (rather unintended but dont tell anyone)

 

Known Bugs (aka. Help wanted):

- Plane facing is off in some instances

- Sounds do not work

- Particle effects do not work

 

Full tutorial, support and discussion at
https://dayzmodz.com/forum/index.php?thread/25-betterairdrop-dayz-modz-exclusive/&postID=62#post62

 

4-20181012171028-1-jpg

A better explanation of where exactly to put the code in the init.c file is needed as the current instructions are not clearly pointed out eg,...

1. edit your init.c

Code: init.c

// Add on top of your file<--------------------------------------------------------------------------------------------------------------------right at the top of the init.c file above  void main () or under void main () but above the Hive ce = CreateHive(); ????

#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c"

// Add within your CustomMission<--------------------------------------------------------------------------------------------------Does this go in the init.c with the above code?? or where is custom mission line???

ref BetterAirdrop Airdrop;

void CustomMission() {

Airdrop = new BetterAirdrop();

}

Clarity here on this is needed for those who are learning, please and thankyou.

 

Found this to help anyone who has issues....

 

Edited by ICEMAN-FMCS
UPDATED

Share this post


Link to post
Share on other sites
12 hours ago, ICEMAN-FMCS said:

Currently crashing server randomly, has errors regarding reset plane in script.

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

Share this post


Link to post
Share on other sites
7 hours ago, philippj said:

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

I am using the betterairdrops.c script of yours is it? not the one from mov3ax, i just posted his vid as a guide as there was no understanding in OP post on where to insert it.

Crashes randomly when I have 3 locations listed will try today with 2 see how it goes.

Edited by ICEMAN-FMCS

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

In crash log using the above script it states;

NULL pointer to instance. variable 'send_proximity'

class:  'BetterAirdrop'

function: 'resetplane'

stack trace:

$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c :81

$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c :59

----------------------------------------------------------

NULL pointer to instance.

class:  'BetterAirdrop'

function: 'dropsimulation'

stack trace:

$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c :114

--------------------------------------------------------

NULL pointer to instance. variable 'send_proximity'

class:  'BetterAirdrop'

function: 'resetplane'

stack trace:

$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c :81

$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c :63

------------------------------------------------

Definately to do with the script, and Im only using 1 drop point.

Let me know what it could be.

Share this post


Link to post
Share on other sites

Line 104:

if(active_drop.send_proximity) SendMessageToPlayers("The plane has vanished");

Replace it by :

if(active_drop !=NULL && active_drop.send_proximity) SendMessageToPlayers("The plane has vanished");

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×