Junior Spellweaver
- Joined
- Sep 5, 2014
- Messages
- 119
- Reaction score
- 8
Found this and thought some people would enjoy it, For 0.63, Not my work just sourced from DayZ forums and other forums Hope you enjoy.
This is a killfeed code I found Ive not tested yet but apparently is working.
Extract scripts.pbo
Then follow instructions from the above i've quoted.
Playerbase.c is in scripts\4_World\Entities\ManBase
Survivorbase.c is in scripts\4_World\Entities\ManBase\PlayerBase
Repack scripts.pbo
I will test and reply soon and edit this post accordingly.
Air drop works well for me.
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
Installing:
1. edit your init.c
Code: init.c
- // Add on top of your file
- #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\plugins\\betterairdrop.c"
- // Add within your CustomMission
- ref BetterAirdrop Airdrop;
- void CustomMission() {
- Airdrop = new BetterAirdrop();
- }
2. create directory called "plugins" within your missions folder (default: dayzOffline.chernarusplus)
3. create file called "betterairdrop.c" in your newly created plugins directory
4. place following code inside the file you just created
Code
- class BetterAirdropLocation {
- float x, y;
- string name;
- bool disclose, send_proximity;
- 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 {
- /*
- * DayZ 0.63 BetterAirdrop by philippj
- * inspired by AirDrop from mov3ax
- */
- /*
- * Config
- */
- bool debug_mode = false; // display d2t & port to target
- float interval = 60.0; // Interval in minutes
- float initial = 0.5;
- float plane_height = 500; // Height in units
- float proximity_warning_distance = 750.0;
- bool display_basic_information = true;
- bool display_coordinates = true;
- bool smoke_signal = true;
- int infected_count = 20;
- int items_to_be_spawned = 10;
- int number_of_drops = 1; // number of drops must match the number amount of airdrop locations
- ref BetterAirdropLocation airdrop_locations[1] = {
- new BetterAirdropLocation(2760.0, 5527.0, "Zelenogorsk Church", true, true),
- //new BetterAirdropLocation(4451.0, 10220.0, "NWAF", true, true),
- };
- /*
- * internals
- */
- Object plane;
- vector plane_pos;
- vector spawn_pos;
- vector drop_pos;
- float drop_sim_height_diff = -1;
- Object airdrop_obj;
- Object tmp_airdrop_obj;
- EntityAI airdrop_physics;
- Particle signal;
- Particle explosion;
- bool active = false;
- bool dropped = false;
- bool sent_proximity_warning = false;
- ref BetterAirdropLocation active_drop;
- void BetterAirdrop() {
- GetGame().AdminLog("<BetterAirdrop> plugin init");
- 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 );
- 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);
- if(plane.GetPosition()[1] < plane_height) plane_pos[1] = plane_height-plane.GetPosition()[1];
- else plane_pos[1] = 0;
- vector advanced_plane_pos = plane.GetPosition() + (plane_pos*1);
- plane.SetPosition( advanced_plane_pos );
- 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]);
- //GetGame().AdminLog("GROUND: "+ground+"; HEIGHT: "+airdrop_physics.GetPosition()[1]+"; DIFF: "+drop_sim_height_diff);
- if (airdrop_physics.GetPosition()[1] <= (ground+3) ) { // || (drop_sim_height_diff != -1 && X)
- 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);
- AfterDrop();
- } else {
- drop_sim_height_diff = airdrop_obj.GetPosition()[1]-airdrop_physics.GetPosition()[1];
- 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() {
- float ground = GetGame().SurfaceY(airdrop_obj.GetPosition()[0], airdrop_obj.GetPosition()[2]);
- vector base_pos = airdrop_obj.GetPosition(), dynamic_pos;
- base_pos[1] = ground + 0.2;
- /*
- // TODO: #fix | Returns random strings for some reason
- for ( int i = 0; i < active_drop.items.Count(); i++ ) {
- string item = active_drop.items.Get(i);
- GetGame().AdminLog("" + item);
- }
- */
- for(int i = 0; i < items_to_be_spawned; i++) {
- dynamic_pos = base_pos;
- dynamic_pos[0] = dynamic_pos[0]+Math.RandomFloat(2.0, 3.0);
- dynamic_pos[2] = dynamic_pos[2]+Math.RandomFloat(2.0, 3.0);
- 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() {
- 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", 10000.0, true); // not working
- plane.PlaySoundLoop("powerGeneratorLoop", 10000.0, true); // not working
- GetGame().AdminLog("<BetterAirdrop> airdrop init");
- // TODO: dynamic plane spawns
- 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);
- // select random drop
- 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)];
- }
- if(debug_mode) {
- 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;
- 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 plane_orientation;
- plane_orientation[0] = 90+fixed_angle;
- if(plane_orientation[0] > 360.0) {
- plane_orientation[0] = plane_orientation[0] - 360.0;
- }
- plane_orientation[1] = 0.0;
- plane_orientation[2] = 0.0;
- plane.SetOrientation(plane_orientation);
- float distance = Math.Sqrt(Math.Pow(spawn_pos[0] - drop_pos[0], 2) + Math.Pow(spawn_pos[1] - drop_pos[2], 2));
- 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 + "; FACINGANGLE:"+fixed_angle);
- 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 = {
- "LandMineTrap",
- "M4A1",
- };
- 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",
- };
- }
- }
You can add Airdrop locations by adding lines under "airdrop_locations" in following format
Code
- new BetterAirdropLocation(X, Y, NAME, true, true),
the last "," is important. Aswell when adding airdrops you have to set "number_of_drops" to the amount of airdrops defined and update the array length (number betwenn "[]" behind "airdrop_locations") to the same number
To customize loot you can edit "GetRandomItem" and add/remove items from the loot table. It is advised to not use weapons as they spawn without any attachments.
How To Video Here from Original Author.....
[video=youtube;kYgzQY_wy94]https://www.youtube.com/watch?feature=player_embedded&v=kYgzQY_wy94[/video]
This is a killfeed code I found Ive not tested yet but apparently is working.
Mod the SurvivorBase with this in line 3
private string PlayerIdentityName = "empty";
string GetPlayerIdentityName()
{
return this.PlayerIdentityName;
}
void SetPlayerIdentityName(string name)
{
this.PlayerIdentityName = name;
}
Then added in PlayerBase -> EEKilled line 306
SurvivorBase sbKilled = this;
if (killer.IsMan()) {
Man manKiller = Man.Cast(killer);
GetGame().ChatPlayer( 0, sbKilled.GetPlayerIdentityName() + " Killed By " + manKiller.GetIdentity().GetName());
} else {
GetGame().ChatPlayer( 0, sbKilled.GetPlayerIdentityName() + " Killed by zombie/bleedout/fall?");
}
and added in PlayerBase -> OnConnect line 3313
SurvivorBase sb = this;
sb.SetPlayerIdentityName(this.GetIdentity().GetName());
Extract scripts.pbo
Then follow instructions from the above i've quoted.
Playerbase.c is in scripts\4_World\Entities\ManBase
Survivorbase.c is in scripts\4_World\Entities\ManBase\PlayerBase
Repack scripts.pbo
I will test and reply soon and edit this post accordingly.
Air drop works well for me.
Last edited: