Script:Files:script/teams/base.script

From Mod Wiki
Revision as of 17:55, 2 November 2007 by Wizz (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
#define ON_UPGRADE( LEVEL ) if ( oldLevel < LEVEL && newLevel >= LEVEL )

#define MAX_HEALTH_BOOST    20.f
#define HEALTH_BOOST        5.f

object team_base {
    void    preinit();
    void    syncFields();
    void    init();
    void    destroy();

    void    OnPlayerDied( entity p );
    void    OnPlayerTapOut( entity p );
    void    OnPlayerJoined( entity p );
    void    OnMapStart();
    void    OnMapStart_Base();

    void    OnNextRespawnTimeChanged() {}

    boolean    SelectActionItem( entity p, float code );
    boolean    HasActionItem( entity p, float code );
    string    GetActionItem( entity p, float code );
    string    GetActionIcon( entity p, float code );

    void    UpdateStealth( entity p ) { ; }

    void    OnProficiencyUpgrade( entity p, float type, float oldLevel, float newLevel ) { ; }

    void    RegenPulse( entity p ) { ; }

    void    GiveSpottingProficiency( entity p );
    void    GiveRadarSpottingProficiency( entity p );
    void    GiveRepairProficiency( entity p, task t, float scale );
    void    GiveReviveProficiency( entity p );
    void    GiveReviveWaitProficiency( entity p );
    void    GiveBackstabProficiency( entity p );

    float    CountPlayersOfClass( float playerClass );

    float    GetMaxReviveCount() { return 0.f; }

    void    UpgradeClip( entity p, float clip, float clipCount );
    void    UpgradeAmmo( entity p, float clip, float clipCount );

    void    PlayIntelRepairedMessage();
    void    PlayIntelDamagedMessage();

    float    GetNextVehicleSpawnTime();

    float    GetHealthBoost( entity p ) { return 0.f; }
    void    GiveSpawnItems( entity p ) { ; }

    boolean    HasConstructionBonus( entity p ) { return false; }
    boolean    HasChargeArmBonus( entity p ) { return false; }
    boolean    HasSelfArmingMines( entity p ) { return false; }
    boolean    HasRepairBonus( entity p ) { return false; }
    boolean    HasDisarmBonus( entity p ) { return false; }
    boolean    HasFastFireSupportLock( entity p ) { return false; }
    boolean    HasFastFireSupportRecharge( entity p ) { return false; }
    boolean    HasFastHackBonus( entity p ) { return false; }
    boolean    HasVehicleArmorBonus( entity p ) { return false; }
    boolean    CanTransferStroyent( entity p ) { return false; }
    boolean    HasEnhancedRadar( entity p ) { return false; }
    boolean    HasPersonalJammer( entity p ) { return false; }
    boolean    CanRequestVehicle( entity p ) { return false; }
    boolean    HasEfficientDecoys( entity p ) { return false; }
    boolean    HasFastRevive( entity p ) { return false; }
    boolean    HasFastDisguise( entity p ) { return false; }
    boolean    HasFastTargetLock( entity p ) { return false; }
    boolean    CanStab( entity p ) { return false; }
    boolean    HasSpreadBonus( entity p ) { return false; }
    float    GetMaxSupplies( entity p ) { return 1.f; }

    void    CreatePersonnelAuras( entity p ) { ; }

    float    GetWeaponSpeedBonus( entity p ) { return 0.f; }

    void    ResetVehicleCredit( entity p );

    void    SetRespawnWait( float time ) { ; }
    float    GetRespawnWait();


    void    MarkWaitingPlayers();

    string    repairItem;
    string    hackItem;
    string    chargeArmItem;
    string    chargeDisarmItem;
    string    armItem;
    string    constructItem;
    string    disguiseItem;
    string    spawnHostItem;
    string    spawnHostDisarmItem;
    string    reviveItem;
    string    stabItem;
    string    disguisedStabItem;
    string    plantItem;
    string    flyerDroneItem;

    string    repairIcon;
    string    hackIcon;
    string    chargeArmIcon;
    string    chargeDisarmIcon;
    string    armIcon;
    string    constructIcon;
    string    disguiseIcon;
    string    spawnHostIcon;
    string    disarmSpawnHostIcon;
    string    reviveIcon;
    string    spawnCapIcon;
    string    stabIcon;
    string    useIcon;
    string    plantIcon;
    string    useVehicleIcon;
    string    flyerDroneIcon;

    float    spottingProficiency;
    float    radarSpottingProficiency;
    float    repairProficiency;
    float    reviveProficiency;
    float    reviveWaitProficiency;
    float    backstabDisguisedProficiency;

    float    reviveMeToolTip1;
    float    reviveMeToolTip2;
    float    spawnHostMeToolTip1;
    float    spawnHostMeToolTip2;
    float    parachuteToolTip;

    float    vehicleRepairTask;
    float    captureSpawnTask;
    float    liberateSpawnTaskCovertOnly;
    float    liberateSpawnTask;

    float    nextDisableTime;
    float    nextVehicleSpawnTime;

    handle    structureName;

    float    GetMineLimit();

    float    respawnWait;
}

void team_base::preinit() {
    spottingProficiency            = -1;
    radarSpottingProficiency    = -1;
    repairProficiency            = -1;
    reviveProficiency            = -1;
    reviveWaitProficiency        = -1;
    backstabDisguisedProficiency= -1;

    reviveMeToolTip1            = -1;
    reviveMeToolTip2            = -1;
    spawnHostMeToolTip1            = -1;
    spawnHostMeToolTip2            = -1;
    parachuteToolTip            = -1;

    vehicleRepairTask            = -1;

    captureSpawnTask            = -1;
    liberateSpawnTask            = -1;

    nextDisableTime                = 0.f;
    nextVehicleSpawnTime        = 0.f;

    respawnWait                    = -1;

    // TODO: Expose these to the defs?
    repairItem = "";
    hackItem = "";
    chargeArmItem = "";
    chargeDisarmItem = "";
    armItem = "";
    constructItem = "";
    disguiseItem = "";
    spawnHostItem = "";
    spawnHostDisarmItem = "";
    reviveItem = "";
    stabItem = "";
    disguisedStabItem = "";
    plantItem = "";
    flyerDroneItem = "";

    repairIcon = getKey( "mtr_repair_icon" );
    hackIcon =    getKey( "mtr_hack_icon" );
    chargeArmIcon = getKey( "mtr_chargearm_icon" );
    chargeDisarmIcon = getKey( "mtr_chargearm_icon" );
    armIcon = getKey( "mtr_arm_icon" );
    constructIcon = getKey( "mtr_construct_icon" );
    disguiseIcon = getKey( "mtr_disguise_icon" );
    spawnHostIcon = getKey( "mtr_spawnhost_icon" );
    disarmSpawnHostIcon = getKey( "mtr_disarm_spawnhost_icon" );
    reviveIcon = getKey( "mtr_revive_icon" );
    spawnCapIcon = getKey( "mtr_spawncap_icon" );
    stabIcon = getKey( "mtr_stab_icon" );
    useIcon = getKey( "mtr_use_icon" );
    plantIcon = getKey( "mtr_plant_icon" );
    useVehicleIcon = getKey( "mtr_usevehicle_icon" );
    flyerDroneIcon = getKey( "mtr_flyerdrone_icon" );
}

void team_base::init() {
}

void team_base::syncFields() {
    syncBroadcast( "nextDisableTime" );
}

void team_base::destroy() {
}

void team_base::OnPlayerDied( entity p ) {
}

void team_base::OnPlayerTapOut( entity p ) {
}

void team_base::OnPlayerJoined( entity p ) {
    // reset the player's vehicle request credit
    ResetVehicleCredit( p );
}

void team_base::ResetVehicleCredit( entity p ) {
    p.vUseVehicleCredit( 1.f );
}

void team_base::OnMapStart() {
    OnMapStart_Base();
}

void team_base::OnMapStart_Base() {
    nextDisableTime            = 0.f;
    nextVehicleSpawnTime    = 0.f;

    // reset the vehicle credit of all players
    float maxClients = sys.getMaxClients();
    float index;
    for ( index = 0; index < maxClients; index++ ) {
        entity p = sys.getClient( index );
        if ( p == $null_entity ) {
            continue;
        }

        team_base team = p.getGameTeam();
        if ( team != self ) {
            continue;
        }

        ResetVehicleCredit( p );
    }
}

float team_base::GetMineLimit() {
    return 0.f;
}

boolean team_base::SelectActionItem( entity p, float code ) {
    string item = GetActionItem( p, code );
    if ( item != "" ) {
        if ( !p.hasWeapon( item ) ) {
            return false;
        }
        p.setWeapon( item, 0 );
        return true;
    }

    return false;
}

boolean team_base::HasActionItem( entity p, float code ) {
    if ( code == AK_USE || code == AK_USEVEHICLE ) {
        return true;
    }


    string item = GetActionItem( p, code );
    if ( item != "" ) {
        return p.hasWeapon( item );
    }
    return false;
}

string team_base::GetActionItem( entity p, float code ) {
    if ( code == AK_REPAIR ) {
        return repairItem;
    } else if ( code == AK_HACK ) {
        return hackItem;
    } else if ( code == AK_CHARGEARM ) {
        return chargeArmItem;
    } else if ( code == AK_CHARGEDISARM ) {    
        return chargeDisarmItem;
    } else if ( code == AK_ARM ) {
        return armItem;
    } else if ( code == AK_CONSTRUCT ) {
        return constructItem;
    } else if ( code == AK_DISGUISE ) {
        return disguiseItem;
    } else if ( code == AK_SPAWNHOST ) {
        return spawnHostItem;
    } else if ( code == AK_DISARM_SPAWNHOST ) {
        return spawnHostDisarmItem;
    } else if ( code == AK_REVIVE ) {
        return reviveItem;
    } else if ( code == AK_STAB ) {
        if ( p.isDisguised() ) {
            return disguisedStabItem;
        }
        return stabItem;
    } else if ( code == AK_PLANT ) {
        return plantItem;
    } else if ( code == AK_FLYERDRONE ) {
        return flyerDroneItem;
    }

    return "";
}

string team_base::GetActionIcon( entity p, float code ) {
    if ( code == AK_REPAIR ) {
        return repairIcon;
    } else if ( code == AK_HACK ) {
        return hackIcon;
    } else if ( code == AK_CHARGEARM ) {
        return chargeArmIcon;
    } else if ( code == AK_CHARGEDISARM ) {
        return chargeDisarmIcon;
    } else if ( code == AK_ARM ) {
        return armIcon;
    } else if ( code == AK_CONSTRUCT ) {
        return constructIcon;
    } else if ( code == AK_DISGUISE ) {
        return disguiseIcon;
    } else if ( code == AK_SPAWNHOST ) {
        return spawnHostIcon;
    } else if ( code == AK_DISARM_SPAWNHOST ) {
        return disarmSpawnHostIcon;
    } else if ( code == AK_REVIVE ) {
        return reviveIcon;
    } else if ( code == AK_SPAWNCAP ) {
        return spawnCapIcon;
    } else if ( code == AK_STAB ) {
        return stabIcon;
    } else if ( code == AK_USE ) {
        return useIcon;
    } else if ( code == AK_PLANT ) {
        return plantIcon;
    } else if ( code == AK_USEVEHICLE ) {
        return useVehicleIcon;
    } else if ( code == AK_FLYERDRONE ) {
        return flyerDroneIcon;
    }

    return "";
}

void team_base::GiveSpottingProficiency( entity p ) {
    string statName = getName() + "_spotting_success";    
    sys.increaseStatInt( sys.allocStatInt( statName ), p.getEntityNumber(), 1 );

    if ( spottingProficiency != -1 ) {
        p.giveProficiency( spottingProficiency, 1.f, $null, "spotting success" );
    }
}

void team_base::GiveRadarSpottingProficiency( entity p ) {
    string statName = getName() + "_spotting_success";    
    sys.increaseStatInt( sys.allocStatInt( statName ), p.getEntityNumber(), 1 );

    if ( radarSpottingProficiency != -1 ) {
        p.giveProficiency( radarSpottingProficiency, 1.f, $null, "radar spotting success" );
    }
}

void team_base::GiveRepairProficiency( entity p, task t, float scale ) {
    if ( repairProficiency != -1 ) {
        p.giveProficiency( repairProficiency, scale, t, "repairing" );
    }
}

void team_base::GiveReviveProficiency( entity p ) {
    if ( reviveProficiency != -1 ) {
        p.giveProficiency( reviveProficiency, 1.f, $null, "revive success" );
    }
}

void team_base::GiveReviveWaitProficiency( entity p ) {
    if ( reviveWaitProficiency != -1 ) {
        p.giveProficiency( reviveWaitProficiency, 1.f, $null, "waited for revive" );
    }
}

void team_base::GiveBackstabProficiency( entity p ) {
    if ( p.isDisguised() ) {
        if ( backstabDisguisedProficiency != -1 ) {
            p.giveProficiency( backstabDisguisedProficiency, 1.f, $null, "backstab disguised bonus" );
        }
    }
}

float team_base::GetNextVehicleSpawnTime() {
    return nextVehicleSpawnTime;
}

void team_base::UpgradeClip( entity p, float clip, float clipCount ) {
    float maxAmmo = p.getMaxAmmo( clip );
    if ( maxAmmo > 0 ) {
        p.setMaxAmmo( clip, maxAmmo + clipCount );
    }
}

void team_base::UpgradeAmmo( entity p, float clip, float clipCount ) {
    p.setAmmo( clip, p.getAmmo( clip ) + clipCount );
}

void team_base::MarkWaitingPlayers() {
    float count = sys.getMaxClients();
    float index;
    for ( index = 0; index < count; index++ ) {
        entity p = sys.getClient( index );
        if ( p == $null_entity ) {
            continue;
        }

        if ( !p.needsRevive() ) {
            continue;
        }

        if ( p.getGameTeam() != self ) {
            continue;
        }

        p.vOnSpawnWavePassed();
    }
}

float team_base::CountPlayersOfClass( float playerClass ) {
    float classCount;

    float count = sys.getMaxClients();
    float index;
    for ( index = 0; index < count; index++ ) {
        entity p = sys.getClient( index );
        if ( p == $null_entity ) {
            continue;
        }

        if ( p.getPlayerClass() == playerClass ) {
            classCount++;
        }
    }

    return classCount;
}

float team_base::GetRespawnWait() {
    return respawnWait;
}