Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #7  
Old 10-12-2011, 09:40 PM
Ataros Ataros is offline
Approved Member
 
Join Date: Jun 2010
Location: USSR
Posts: 2,439
Default

It looks I am in trouble with my script here too.

Again it works for hosted server killing my engine when required but does not work on dedicated server.

First I used this line as you can see above in my message
Code:
 (actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
It did not work online on a dedicated server.

Then I tried to modify actor-damaging script to destroy player plane. The same thing happens. On a dedicated server this script damages abondoned aircrat but my modified methods do not work. But work on hosted server (when I am the server).

OnPlaceEnter check where damagePlayerGroup((actor as AiAircraft)) does not work on a dedi.
Code:
        //checks limited aircraft

        showTestMsg(player);

        if (actor != null && actor is AiAircraft)
        {
            windowOfOp = 10;
            switch ((actor as AiAircraft).InternalTypeName())
            {
                case "bob:Aircraft.Bf-109E-4":
                    {
                        current109s++;
                        showTestMsg(player);

                        // !!! test !!!
                        if (current109s > allowed109s) // || current109s > 1) //  !!! test !!!
                        {
                            damagePlayerGroup((actor as AiAircraft));
                            Timeout(12, () =>
                            {
                                msgTooManyAircraft(player);
                                showTestMsg(player);
                            });  

                        }                    
                            break;
                    }
Methods (my methods are in the end)
Code:
 #region Destroy Actors Methods
    // by TheEnlightenedFlorist http://www.airwarfare.com/sow/index.php?option=com_kunena&func=view&catid=43&id=539&Itemid=54
        
    private bool isAiControlledPlane(AiAircraft aircraft)
    {
        if (aircraft == null)
            return false;
 
        //check if a player is in any of the "places"
        for (int i = 0; i < aircraft.Places(); i++)
            if (aircraft.Player(i) != null)
                return false;
 
        return true;
    }
 
    private void destroyPlane(AiAircraft aircraft)
    {
        if (aircraft != null && isAiControlledPlane(aircraft))
            aircraft.Destroy();
    }
 
    private void damageAiControlledPlane(AiActor actorMain)
    {
        foreach (AiActor actor in actorMain.Group().GetItems())
        {
            if (actor == null || !(actor is AiAircraft))
                return;
 
            AiAircraft aircraft = (actor as AiAircraft);
 
            if (!isAiControlledPlane(aircraft))
                return;
 
            if (aircraft == null)
                return;
 
            aircraft.hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
            aircraft.hitNamed(part.NamedDamageTypes.FuelPumpFailure);
            int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
            for (int i = 0; i < iNumOfEngines; i++)
            {
                aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
            }
 
 
            Timeout(240, () =>
            { destroyPlane(aircraft); }
                );
        }
    }
    // Ataros method
    private void destroyPlayerPlane(AiAircraft aircraft)
    {
        if (aircraft != null)
            aircraft.Destroy();
    }

    private void damagePlayerGroup(AiActor actorMain)
    {
        foreach (AiActor actor in actorMain.Group().GetItems())
        {
            if (actor == null ) // || !(actor is AiAircraft))
                return;

            AiAircraft aircraft = (actor as AiAircraft);

            if (!isAiControlledPlane(aircraft))
            {
                if (aircraft != null)
                {
                    aircraft.hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
                    aircraft.hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
                    aircraft.hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
                    aircraft.hitNamed(part.NamedDamageTypes.FuelPumpFailure);
                    int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
                    for (int i = 0; i < iNumOfEngines; i++)
                    {
                        aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
                    }

                    //Timeout(60, () =>
                    //     { destroyPlayerPlane(aircraft); }
                    //    );
                }
            }
        }
    }

    #endregion
Sure it must be something basic that I can not see with my eyes. Attached a complete script.
Attached Files
File Type: zip r_steppe1.4.zip (5.9 KB, 1 views)

Last edited by Ataros; 10-12-2011 at 09:43 PM.
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:46 PM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.