diff --git a/addons/sourcemod/configs/zombie_riot/downloads.cfg b/addons/sourcemod/configs/zombie_riot/downloads.cfg index 469e6c3fb..3c85dd955 100644 --- a/addons/sourcemod/configs/zombie_riot/downloads.cfg +++ b/addons/sourcemod/configs/zombie_riot/downloads.cfg @@ -4,7 +4,8 @@ { "base" "" "zombieriot" "" - "rogue" "" + //"rogue" "" + //"construction" "" "panzer" "" "sawrunner" "" "l4dtank" "" @@ -849,5 +850,100 @@ "materials/models/zombie_riot/hl2/mini_skin_exponent.vtf" "" "materials/models/zombie_riot/hl2/mini_skin_normal.vtf" "" } + "construction" + { + "models/vehicles/ambulance.dx80.vtx" "" + "models/vehicles/ambulance.dx90.vtx" "" + "models/vehicles/ambulance.mdl" "" + "models/vehicles/ambulance.phy" "" + "models/vehicles/ambulance.vvd" "" + "models/vehicles/bus001.dx80.vtx" "" + "models/vehicles/bus001.dx90.vtx" "" + "models/vehicles/bus001.mdl" "" + "models/vehicles/bus001.phy" "" + "models/vehicles/bus001.vvd" "" + "models/vehicles/camper.dx80.vtx" "" + "models/vehicles/camper.dx90.vtx" "" + "models/vehicles/camper.mdl" "" + "models/vehicles/camper.phy" "" + "models/vehicles/camper.vvd" "" + "models/vehicles/dumptruck.dx80.vtx" "" + "models/vehicles/dumptruck.dx90.vtx" "" + "models/vehicles/dumptruck.mdl" "" + "models/vehicles/dumptruck.phy" "" + "models/vehicles/dumptruck.vvd" "" + "models/vehicles/dumptruck_empty_v2.dx80.vtx" "" + "models/vehicles/dumptruck_empty_v2.dx90.vtx" "" + "models/vehicles/dumptruck_empty_v2.mdl" "" + "models/vehicles/dumptruck_empty_v2.phy" "" + "models/vehicles/dumptruck_empty_v2.vvd" "" + "models/vehicles/landrover.dx80.vtx" "" + "models/vehicles/landrover.dx90.vtx" "" + "models/vehicles/landrover.mdl" "" + "models/vehicles/landrover.phy" "" + "models/vehicles/landrover.vvd" "" + "models/vehicles/pickup03.dx80.vtx" "" + "models/vehicles/pickup03.dx90.vtx" "" + "models/vehicles/pickup03.mdl" "" + "models/vehicles/pickup03.phy" "" + "models/vehicles/pickup03.vvd" "" + "materials/models/vehicles/amb_blu.vmt" "" + "materials/models/vehicles/amb_blu.vtf" "" + "materials/models/vehicles/amb_red.vmt" "" + "materials/models/vehicles/amb_red.vtf" "" + "materials/models/vehicles/amb_spec.vtf" "" + "materials/models/vehicles/body.vmt" "" + "materials/models/vehicles/body.vtf" "" + "materials/models/vehicles/body_exp.vtf" "" + "materials/models/vehicles/body_height.vtf" "" + "materials/models/vehicles/body_normal.vtf" "" + "materials/models/vehicles/bus_skin1.vmt" "" + "materials/models/vehicles/bus_skin1.vtf" "" + "materials/models/vehicles/bus_skin2.vmt" "" + "materials/models/vehicles/bus_skin2.vtf" "" + "materials/models/vehicles/camper.vmt" "" + "materials/models/vehicles/camper.vtf" "" + "materials/models/vehicles/camper_exp.vtf" "" + "materials/models/vehicles/camper_normal.vtf" "" + "materials/models/vehicles/citizen_body.vmt" "" + "materials/models/vehicles/citizen_body.vtf" "" + "materials/models/vehicles/citizen_head.vmt" "" + "materials/models/vehicles/citizen_head.vtf" "" + "materials/models/vehicles/details.vmt" "" + "materials/models/vehicles/details.vtf" "" + "materials/models/vehicles/dumptruck.vmt" "" + "materials/models/vehicles/dumptruck.vtf" "" + "materials/models/vehicles/dumptruck_normal.vtf" "" + "materials/models/vehicles/hand_lightwarp.vtf" "" + "materials/models/vehicles/interior.vmt" "" + "materials/models/vehicles/interior.vtf" "" + "materials/models/vehicles/interior_exp.vtf" "" + "materials/models/vehicles/interior_normal.vtf" "" + "materials/models/vehicles/landrover.vmt" "" + "materials/models/vehicles/landrover.vtf" "" + "materials/models/vehicles/landrover_normal.vtf" "" + "materials/models/vehicles/landrover2.vmt" "" + "materials/models/vehicles/landrover2.vtf" "" + "materials/models/vehicles/landrover3.vmt" "" + "materials/models/vehicles/landrover3.vtf" "" + "materials/models/vehicles/pickup_lightwarp.vtf" "" + "materials/models/vehicles/pickup03.vmt" "" + "materials/models/vehicles/pickup03.vtf" "" + "materials/models/vehicles/pickup04.vmt" "" + "materials/models/vehicles/pickup04.vtf" "" + "materials/models/vehicles/rear_sticker.vmt" "" + "materials/models/vehicles/rear_sticker.vtf" "" + "materials/models/vehicles/w_sniperrifle_normal.vtf" "" + "materials/models/vehicles/w_sniperrifle01.vmt" "" + "materials/models/vehicles/w_sniperrifle01.vtf" "" + "materials/models/vehicles/weapon_lightwarp.vtf" "" + "materials/models/vehicles/wheels.vmt" "" + "materials/models/vehicles/wheels.vtf" "" + "materials/models/vehicles/wheels_exp.vtf" "" + "materials/models/vehicles/wheels_normal.vtf" "" + "materials/models/vehicles/windshield.vmt" "" + "materials/models/vehicles/windshield.vtf" "" + "materials/models/vehicles/windshield_normal.vtf" "" + } } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/core.sp b/addons/sourcemod/scripting/shared/core.sp index e8fdafccf..3a3276ef7 100644 --- a/addons/sourcemod/scripting/shared/core.sp +++ b/addons/sourcemod/scripting/shared/core.sp @@ -1146,6 +1146,7 @@ public void OnMapEnd() OnRoundEnd(null, NULL_STRING, false); Waves_MapEnd(); Spawns_MapEnd(); + Vehicle_MapEnd(); #endif #if defined RPG @@ -2193,11 +2194,7 @@ public void OnEntityCreated(int entity, const char[] classname) StatusEffectReset(entity); f_InBattleDelay[entity] = 0.0; b_AllowCollideWithSelfTeam[entity] = false; - func_NPCDeath[entity] = INVALID_FUNCTION; - func_NPCOnTakeDamage[entity] = INVALID_FUNCTION; - func_NPCThink[entity] = INVALID_FUNCTION; - func_NPCDeathForward[entity] = INVALID_FUNCTION; - func_NPCFuncWin[entity] = INVALID_FUNCTION; + NPCStats_SetFuncsToZero(entity); f3_VecTeleportBackSave_OutOfBounds[entity][0] = 0.0; f3_VecTeleportBackSave_OutOfBounds[entity][1] = 0.0; f3_VecTeleportBackSave_OutOfBounds[entity][2] = 0.0; @@ -3070,7 +3067,7 @@ stock bool InteractKey(int client, int weapon, bool Is_Reload_Button = false) #endif #if defined ZR - if(Vehicle_Interact(client, entity)) + if(Vehicle_Interact(client, weapon, entity)) return true; static char buffer[64]; @@ -3133,7 +3130,7 @@ stock bool InteractKey(int client, int weapon, bool Is_Reload_Button = false) { #if defined ZR - if(GetEntityMoveType(client) == MOVETYPE_NONE && Vehicle_Interact(client, entity)) + if(GetEntityMoveType(client) == MOVETYPE_NONE && Vehicle_Interact(client, weapon, entity)) return true; #endif diff --git a/addons/sourcemod/scripting/shared/damage.sp b/addons/sourcemod/scripting/shared/damage.sp index 8d4559504..a29a559a5 100644 --- a/addons/sourcemod/scripting/shared/damage.sp +++ b/addons/sourcemod/scripting/shared/damage.sp @@ -280,6 +280,21 @@ stock bool Damage_PlayerVictim(int victim, int &attacker, int &inflictor, float damage *= percentage; } } + + { + int vehicle = Vehicle_Driver(victim); + if(vehicle != -1) + { + // Driver + damage *= 0.5; + + if(!(damagetype & DMG_TRUEDAMAGE) && Vehicle_Driver(vehicle) != victim) + { + // Passenger + damage *= 0.2; + } + } + } #endif // ZR #if defined RPG diff --git a/addons/sourcemod/scripting/shared/npc_stats.sp b/addons/sourcemod/scripting/shared/npc_stats.sp index 9ef72cb6d..aa93db277 100644 --- a/addons/sourcemod/scripting/shared/npc_stats.sp +++ b/addons/sourcemod/scripting/shared/npc_stats.sp @@ -85,6 +85,7 @@ Function func_NPCFuncWin[MAXENTITIES]; Function func_NPCAnimEvent[MAXENTITIES]; Function func_NPCActorEmoted[MAXENTITIES]; Function func_NPCInteract[MAXENTITIES]; +Function FuncShowInteractHud[MAXENTITIES]; #define PARTICLE_ROCKET_MODEL "models/weapons/w_models/w_drg_ball.mdl" //This will accept particles and also hide itself. @@ -2520,6 +2521,12 @@ methodmap CClotBody < CBaseCombatCharacter } } + if(i_IsVehicle[target]) + { + // Vehicle hitboxes + return this.DoAimbotTrace(trace, target, vecSwingMaxs, vecSwingMins, vecSwingStartOffset); + } + float eyePitch[3]; GetEntPropVector(this.index, Prop_Data, "m_angRotation", eyePitch); @@ -2528,7 +2535,7 @@ methodmap CClotBody < CBaseCombatCharacter WorldSpaceCenter(target, vecTarget); if(target <= MaxClients) vecTarget[2] += 10.0; //abit extra as they will most likely always shoot upwards more then downwards - + WorldSpaceCenter(this.index, vecForward); MakeVectorFromPoints(vecForward, vecTarget, vecForward); GetVectorAngles(vecForward, vecForward); @@ -8386,6 +8393,7 @@ public void NPCStats_SetFuncsToZero(int entity) func_NPCAnimEvent[entity] = INVALID_FUNCTION; func_NPCActorEmoted[entity] = INVALID_FUNCTION; func_NPCInteract[entity] = INVALID_FUNCTION; + FuncShowInteractHud[entity] = INVALID_FUNCTION; } public void SetDefaultValuesToZeroNPC(int entity) { diff --git a/addons/sourcemod/scripting/shared/vehicles/vehicle_fulljeep.sp b/addons/sourcemod/scripting/shared/vehicles/vehicle_fulljeep.sp deleted file mode 100644 index be185a00d..000000000 --- a/addons/sourcemod/scripting/shared/vehicles/vehicle_fulljeep.sp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma semicolon 1 -#pragma newdecls required - -void VehicleFullJeep_Setup() -{ - NPCData data; - strcopy(data.Name, sizeof(data.Name), "ATV"); - strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_fulljeep"); - data.Category = Type_Hidden; - data.Func = ClotSummon; - data.Precache = ClotPrecache; - NPC_Add(data); -} - -static void ClotPrecache() -{ - PrecacheModel("models/buggy.mdl"); - - if(LibraryExists("LoadSoundscript")) - { - char soundname[256]; - SoundScript soundscript = LoadSoundScript("scripts/game_sounds_vehicles.txt"); - for(int i = 0; i < soundscript.Count; i++) - { - SoundEntry entry = soundscript.GetSound(i); - entry.GetName(soundname, sizeof(soundname)); - PrecacheScriptSound(soundname); - } - } -} - -static any ClotSummon(int client, float vecPos[3], float vecAng[3]) -{ - return VehicleFullJeep(vecPos, vecAng); -} - -methodmap VehicleFullJeep < VehicleGeneric -{ - public VehicleFullJeep(const float vecPos[3], const float vecAng[3]) - { - VehicleFullJeep npc = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/jeep_test.txt")); - - npc.m_bNoAttack = true; - SetEntPropVector(npc.index, Prop_Data, "m_vecSeatPos", {22.0, -42.0, 12.0}, 0); - SetEntPropVector(npc.index, Prop_Data, "m_vecSeatPos", {2.0, -90.0, 34.0}, 1); - - return npc; - } -} diff --git a/addons/sourcemod/scripting/shared/vehicles/vehicle_hl2.sp b/addons/sourcemod/scripting/shared/vehicles/vehicle_hl2.sp index 24c412819..5fa45616b 100644 --- a/addons/sourcemod/scripting/shared/vehicles/vehicle_hl2.sp +++ b/addons/sourcemod/scripting/shared/vehicles/vehicle_hl2.sp @@ -23,18 +23,7 @@ static void ClotPrecache() { PrecacheModel("models/buggy.mdl"); PrecacheModel("models/airboat.mdl"); - - if(LibraryExists("LoadSoundscript")) - { - char soundname[256]; - SoundScript soundscript = LoadSoundScript("scripts/game_sounds_vehicles.txt"); - for(int i = 0; i < soundscript.Count; i++) - { - SoundEntry entry = soundscript.GetSound(i); - entry.GetName(soundname, sizeof(soundname)); - PrecacheScriptSound(soundname); - } - } + Vehicle_PrecacheSounds(); } static any ClotSummonJeep(int client, float vecPos[3], float vecAng[3]) @@ -46,9 +35,9 @@ methodmap VehicleJeep < VehicleGeneric { public VehicleJeep(const float vecPos[3], const float vecAng[3]) { - VehicleJeep npc = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/jeep_test.txt")); + VehicleJeep obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/jeep_test.txt")); - return npc; + return obj; } } @@ -61,8 +50,8 @@ methodmap VehicleAirboat < VehicleGeneric { public VehicleAirboat(const float vecPos[3], const float vecAng[3]) { - VehicleAirboat npc = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_AIRBOAT_RAYCAST, "models/airboat.mdl", "scripts/vehicles/airboat.txt")); + VehicleAirboat obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_AIRBOAT_RAYCAST, "models/airboat.mdl", "scripts/vehicles/airboat.txt")); - return npc; + return obj; } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp b/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp index 8d7cc9b9c..db3d819c1 100644 --- a/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp +++ b/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp @@ -4,7 +4,7 @@ // https://github.com/Mikusch/source-vehicles // https://github.com/ficool2/vscript_vehicle -#define VEHICLE_MAX_SEATS 8 +#define VEHICLE_MAX_SEATS 9 enum VehicleType { @@ -30,8 +30,7 @@ methodmap VehicleGeneric < CClotBody DispatchSpawn(obj); i_IsVehicle[obj] = 2; - //view_as(obj).bCantCollidieAlly = true; - //b_IsAProjectile[obj] = true; + NPCStats_SetFuncsToZero(obj); SDKHook(obj, SDKHook_Think, VehicleThink); SDKHook(obj, SDKHook_OnTakeDamage, VehicleTakeDamage); @@ -62,6 +61,8 @@ methodmap VehicleGeneric < CClotBody } } +static bool DoneSoundScript; + void Vehicle_PluginStart() { CEntityFactory factory = new CEntityFactory("obj_vehicle", _, OnDestroy); @@ -75,6 +76,31 @@ void Vehicle_PluginStart() factory.Install(); RegAdminCmd("sm_remove_vehicles", RemoveVehicleCmd, ADMFLAG_RCON, "Deletes all obj_vehicle entities"); + RegAdminCmd("sm_seat_offset", SeatOffsetCmd, ADMFLAG_RCON, "Set the offset of your vehicle seat"); +} + +void Vehicle_MapEnd() +{ + DoneSoundScript = false; +} + +void Vehicle_PrecacheSounds() +{ + if(DoneSoundScript) + return; + + DoneSoundScript = true; + if(LibraryExists("LoadSoundscript")) + { + char soundname[256]; + SoundScript soundscript = LoadSoundScript("scripts/game_sounds_vehicles.txt"); + for(int i = 0; i < soundscript.Count; i++) + { + SoundEntry entry = soundscript.GetSound(i); + entry.GetName(soundname, sizeof(soundname)); + PrecacheScriptSound(soundname); + } + } } static Action RemoveVehicleCmd(int client, int args) @@ -88,6 +114,38 @@ static Action RemoveVehicleCmd(int client, int args) return Plugin_Handled; } +static Action SeatOffsetCmd(int client, int args) +{ + if(args != 3) + { + ReplyToCommand(client, "[SM] Usage: sm_seat_offset "); + } + else + { + int vehicle = Vehicle_Driver(client); + if(vehicle == -1) + { + ReplyToCommand(client, "[SM] Enter a vehicle first"); + } + else + { + float pos1[3], pos2[3]; + GetEntPropVector(vehicle, Prop_Data, "m_vecOrigin", pos1); + pos2[0] = GetCmdArgFloat(1); + pos2[1] = GetCmdArgFloat(2); + pos2[2] = GetCmdArgFloat(3); + + AcceptEntityInput(client, "ClearParent"); + TeleportEntity(client, pos1, _, {0.0, 0.0, 0.0}); + SetParent(vehicle, client, "root", pos2); + + ReplyToCommand(client, "%f %f %f", pos2[0], pos2[1], pos2[2]); + } + } + + return Plugin_Handled; +} + void Vehicle_PlayerSpawn(int client) { Vehicle_Exit(client, false, false); @@ -116,15 +174,13 @@ static void OnDestroy(int entity) // If target is a vehicle, returns the driver or passenger with the higher priority, -1 if none // If target is a user, returns the vehicle currently on, -1 if none -int Vehicle_Driver(int target, bool &isDriver = false) +int Vehicle_Driver(int target) { if(i_IsVehicle[target] == 2) { int driver = view_as(target).m_hDriver; if(driver == -1) { - isDriver = false; - for(int i; i < VEHICLE_MAX_SEATS; i++) { int passenger = GetEntPropEnt(target, Prop_Data, "m_hSeatEntity", i); @@ -132,31 +188,20 @@ int Vehicle_Driver(int target, bool &isDriver = false) return passenger; } } - else - { - isDriver = true; - } return driver; } if(i_IsVehicle[target]) - { - isDriver = true; return GetEntPropEnt(target, Prop_Data, "m_hPlayer"); - } - isDriver = false; for(int entity = MaxClients + 1; entity < sizeof(i_IsVehicle); entity++) { - if(i_IsVehicle[entity]) + if(i_IsVehicle[entity] && IsValidEntity(entity)) { int driver = view_as(entity).m_hDriver; if(driver == target) - { - isDriver = true; return entity; - } for(int i; i < VEHICLE_MAX_SEATS; i++) { @@ -197,27 +242,41 @@ bool Vehicle_ShowInteractHud(int client, int entity) if(!space) return false; + Function func = FuncShowInteractHud[entity]; + if(func && func != INVALID_FUNCTION) + { + bool result; + + Call_StartFunction(null, FuncShowInteractHud[entity]); + Call_PushCell(entity); + Call_PushCell(client); + Call_Finish(result); + + if(result) + return true; + } + SetGlobalTransTarget(client); PrintCenterText(client, "%t", "Enter this vehicle"); return space; } -bool Vehicle_Interact(int client, int entity) +bool Vehicle_Interact(int client, int weapon, int entity) { - bool driver; - int vehicle = Vehicle_Driver(client, driver); + int vehicle = Vehicle_Driver(client); if(vehicle != -1) { static float forceOutTime[MAXTF2PLAYERS]; - if(!driver && view_as(vehicle).m_hDriver == -1) + if(view_as(vehicle).m_hDriver == -1) { // Driver is out, I'll take the wheel! + AcceptEntityInput(client, "ClearParent"); SwitchToDriver(view_as(vehicle), client); } else if(fabs(forceOutTime[client] - GetGameTime()) < 0.4 || CanExit(vehicle)) { - Vehicle_Exit(vehicle, false); + Vehicle_Exit(client, false); } else { @@ -230,6 +289,21 @@ bool Vehicle_Interact(int client, int entity) if(TeutonType[client] != TEUTON_NONE || dieingstate[client] || entity == -1 || i_IsVehicle[entity] != 2) return false; + Function func = func_NPCInteract[entity]; + if(func && func != INVALID_FUNCTION) + { + bool result; + + Call_StartFunction(null, func); + Call_PushCell(client); + Call_PushCell(weapon); + Call_PushCell(entity); + Call_Finish(result); + + if(result) + return true; + } + return Vehicle_Enter(entity, client); } @@ -268,8 +342,6 @@ bool Vehicle_Enter(int vehicle, int target) if(index == -1) { SwitchToDriver(obj, target); - - SetParent(obj.index, target); } else { @@ -278,7 +350,7 @@ bool Vehicle_Enter(int vehicle, int target) GetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", pos2, index); TeleportEntity(target, pos1, _, {0.0, 0.0, 0.0}); - SetParent(obj.index, target, _, pos2); + SetParent(obj.index, target, "root", pos2); SetEntPropEnt(obj.index, Prop_Data, "m_hSeatEntity", target, index); } @@ -297,12 +369,10 @@ bool Vehicle_Enter(int vehicle, int target) static void SwitchToDriver(VehicleGeneric obj, int target) { - float pos[3], ang[3]; - if(!obj.GetAttachment("vehicle_driver_eyes", pos, ang)) - GetEntPropVector(obj.index, Prop_Data, "m_vecOrigin", pos); - - pos[2] -= 36.0;//64.0; + float pos[3]; + GetEntPropVector(obj.index, Prop_Data, "m_vecOrigin", pos); TeleportEntity(target, pos, _, {0.0, 0.0, 0.0}); + SetParent(obj.index, target, "vehicle_driver_eyes", {0.0, 0.0, -36.0}); AcceptEntityInput(obj.index, "TurnOn"); obj.m_hDriver = target; @@ -468,7 +538,7 @@ static Action VehicleTakeDamage(int victim, int &attacker, int &inflictor, float { if(damagetype & DMG_CRUSH) return Plugin_Continue; - + int driver = Vehicle_Driver(victim); if(driver != -1) { diff --git a/addons/sourcemod/scripting/zombie_riot/npc.sp b/addons/sourcemod/scripting/zombie_riot/npc.sp index 3126b8999..914d2bae6 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc.sp @@ -87,6 +87,12 @@ void NPC_ConfigSetup() // Vehicles VehicleHL2_Setup(); VehicleFullJeep_Setup(); + VehicleAmbulance_Setup(); + VehicleBus_Setup(); + VehicleCamper_Setup(); + VehicleDumpTruck_Setup(); + VehicleLandrover_Setup(); + VehiclePickup_Setup(); // Vehicles Combine_Police_Pistol_OnMapStart_NPC(); @@ -1185,7 +1191,13 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float // VEHICLES #include "shared/vehicles/vehicle_shared.sp" #include "shared/vehicles/vehicle_hl2.sp" -#include "shared/vehicles/vehicle_fulljeep.sp" +#include "zombie_riot/vehicles/vehicle_fulljeep.sp" +#include "zombie_riot/vehicles/vehicle_ambulance.sp" +#include "zombie_riot/vehicles/vehicle_bus.sp" +#include "zombie_riot/vehicles/vehicle_camper.sp" +#include "zombie_riot/vehicles/vehicle_dumptruck.sp" +#include "zombie_riot/vehicles/vehicle_landrover.sp" +#include "zombie_riot/vehicles/vehicle_pickup.sp" //NORMAL #include "zombie_riot/npc/normal/npc_headcrabzombie.sp" diff --git a/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp b/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp index cb92584db..1b7ee893f 100644 --- a/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp +++ b/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp @@ -26,7 +26,7 @@ static Function FuncCanBuild[MAXENTITIES]; * @param client Client * @noreturn */ -static Function FuncShowInteractHud[MAXENTITIES]; +//static Function FuncShowInteractHud[MAXENTITIES]; static int Building_Max_Health[MAXENTITIES]={0, ...}; static bool CanUseBuilding[MAXENTITIES][MAXTF2PLAYERS]; diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp new file mode 100644 index 000000000..0c7d99627 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp @@ -0,0 +1,163 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleAmbulance_Setup() +{ + if(!IsFileInDownloads("models/vehicles/ambulance.mdl")) + return; + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Ambulance"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_ambulance"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/ambulance.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleAmbulance(vecPos, vecAng); +} + +methodmap VehicleAmbulance < VehicleGeneric +{ + public VehicleAmbulance(const float vecPos[3], const float vecAng[3]) + { + VehicleAmbulance obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/vehicles/ambulance.mdl", "scripts/vehicles/tf2_ambulance.txt")); + + SetEntProp(obj.index, Prop_Send, "m_nSkin", GetURandomInt() % 2); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {16.0, 6.0, 12.0}, 0); // Side Seat + + // Back Seats + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-25.0, -60.0, 22.0}, 1); // Left Center + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {25.0, -30.0, 22.0}, 2); // Right Front + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {25.0, -88.0, 22.0}, 3); // Right Back + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-25.0, -30.0, 22.0}, 4); // Left Front + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-25.0, -88.0, 22.0}, 5); // Left Back + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {25.0, -60.0, 22.0}, 6); // Right Center + + FuncShowInteractHud[obj.index] = ClotShowInteractHud; + func_NPCInteract[obj.index] = ClotInteract; + func_NPCThink[obj.index] = ClotThink; + + obj.m_flNextThinkTime = 0.0; + obj.m_flNextMeleeAttack = 0.0; + + return obj; + } +} + +static bool ClotShowInteractHud(VehicleFullJeep obj, int client) +{ + if(obj.m_hDriver == -1) + return false; + + float ang1[3], ang2[3]; + GetEntPropVector(obj.index, Prop_Data, "m_angRotation", ang1); + GetClientEyeAngles(client, ang2); + + if(fabs(fabs(ang1[1]) - fabs(ang2[1])) > 15.0) + return false; + + SetGlobalTransTarget(client); + + if(Building_Collect_Cooldown[obj.index][client] > GetGameTime()) + { + PrintCenterText(client, "%t", "Object Cooldown", Building_Collect_Cooldown[obj.index][client] - GetGameTime()); + } + else + { + PrintCenterText(client, "%t", "Healing Station Tooltip"); + } + return true; +} + +static bool ClotInteract(int client, int weapon, VehicleFullJeep obj) +{ + int owner = obj.m_hDriver; + if(owner == -1) + return false; + + float ang1[3], ang2[3]; + GetEntPropVector(obj.index, Prop_Data, "m_angRotation", ang1); + GetClientEyeAngles(client, ang2); + + if(fabs(fabs(ang1[1]) - fabs(ang2[1])) > 15.0) + return false; + + if(Building_Collect_Cooldown[obj.index][client] > GetGameTime()) + return true; + + ApplyBuildingCollectCooldown(obj.index, client, 90.0); + ClientCommand(client, "playgamesound items/smallmedkit1.wav"); + float HealAmmount = 30.0; + if(IsValidClient(owner)) + HealAmmount *= Attributes_GetOnPlayer(owner, 8, true); + + Building_GiveRewardsUse(client, owner, 15, true, 0.4, true); + HealEntityGlobal(owner, client, HealAmmount, _, 3.0); + return true; +} + +static void ClotThink(VehicleFullJeep obj) +{ + float gameTime = GetGameTime(obj.index); + if(obj.m_flNextThinkTime > gameTime) + return; + + obj.m_flNextThinkTime = gameTime + 0.5; + + int owner = obj.m_hDriver; + if(owner == -1) + return; + + // Search for downed players, then pick them up + float pos1[3], pos2[3]; + GetEntPropVector(obj.index, Prop_Data, "m_vecAbsOrigin", pos1); + for(int target = 1; target <= MaxClients; target++) + { + if(IsClientInGame(target) && IsPlayerAlive(target) && TeutonType[target] != TEUTON_NONE && dieingstate[target] && Vehicle_Driver(target) == -1) + { + GetClientAbsOrigin(target, pos2); + + float distance = GetVectorDistance(pos1, pos2, true); + if(distance < 40000.0) // 200 HU + { + if(Vehicle_Enter(obj.index, target)) + b_LeftForDead[target] = true; + } + } + } + + // Heal the driver and all passengers + if(obj.m_flNextMeleeAttack < gameTime) + { + obj.m_flNextMeleeAttack = gameTime + 2.9; + + float HealAmmount = 1.0; + if(IsValidClient(owner)) + HealAmmount *= Attributes_GetOnPlayer(owner, 8, true); + + float selfHeal = 2.0; + for(int i; i < VEHICLE_MAX_SEATS; i++) + { + int passenger = GetEntPropEnt(obj.index, Prop_Data, "m_hSeatEntity", i); + if(passenger != -1) + { + HealEntityGlobal(owner, passenger, HealAmmount, _, 3.0); + selfHeal += 1.0; + } + } + + HealEntityGlobal(owner, owner, HealAmmount * selfHeal, _, 3.0); + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_bus.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_bus.sp new file mode 100644 index 000000000..04cf0bb35 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_bus.sp @@ -0,0 +1,50 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleBus_Setup() +{ + if(!IsFileInDownloads("models/vehicles/bus001.mdl")) + return; + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Bus"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_bus"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/bus001.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleBus(vecPos, vecAng); +} + +methodmap VehicleBus < VehicleGeneric +{ + public VehicleBus(const float vecPos[3], const float vecAng[3]) + { + VehicleBus obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/vehicles/bus001.mdl", "scripts/vehicles/tf2_bus.txt")); + + SetEntProp(obj.index, Prop_Send, "m_nSkin", GetURandomInt() % 2); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-44.0, 108.0, 32.0}, 0); // Front Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {44.0, 110.0, 32.0}, 1); // Front Right + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-44.0, -82.0, 32.0}, 2); // 1 Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {44.0, -82.0, 32.0}, 3); // 1 Right + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-44.0, -146.0, 32.0}, 4); // 2 Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {44.0, -146.0, 32.0}, 5); // 2 Right + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-44.0, -196.0, 32.0}, 6); // 3 Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {44.0, -196.0, 32.0}, 7); // 3 Right + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {0.0, -196.0, 32.0}, 8); // 3 Center + + return obj; + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_camper.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_camper.sp new file mode 100644 index 000000000..bc6160df6 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_camper.sp @@ -0,0 +1,45 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleCamper_Setup() +{ + if(!IsFileInDownloads("models/vehicles/camper.mdl")) + return; + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Camper Van"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_camper"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/camper.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleCamper(vecPos, vecAng); +} + +methodmap VehicleCamper < VehicleGeneric +{ + public VehicleCamper(const float vecPos[3], const float vecAng[3]) + { + VehicleCamper obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/vehicles/camper.mdl", "scripts/vehicles/tf2_camper.txt")); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {14.0, 0.0, 26.0}, 0); // Side Seat + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {0.0, -94.0, 118.0}, 1); // Back Roof + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {0.0, 0.0, 130.0}, 2); // Front Roof + + FuncShowInteractHud[obj.index] = VehicleFullJeep_ClotShowInteractHud; + func_NPCInteract[obj.index] = VehicleFullJeep_ClotInteract; + + return obj; + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_dumptruck.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_dumptruck.sp new file mode 100644 index 000000000..59369c5d4 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_dumptruck.sp @@ -0,0 +1,69 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleDumpTruck_Setup() +{ + if(IsFileInDownloads("models/vehicles/dumptruck.mdl")) + { + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Dump Truck"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_dumptruck"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); + } + + if(IsFileInDownloads("models/vehicles/dumptruck_empty.mdl")) + { + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Dump Truck"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_dumptruck_empty"); + data.Category = Type_Hidden; + data.Func = ClotSummonEmpty; + data.Precache = ClotPrecache; + NPC_Add(data); + } +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/dumptruck.mdl"); + PrecacheModel("models/vehicles/dumptruck_empty.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleDumpTruck(vecPos, vecAng, ""); +} + +static any ClotSummonEmpty(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleDumpTruck(vecPos, vecAng, "empty"); +} + +methodmap VehicleDumpTruck < VehicleGeneric +{ + public VehicleDumpTruck(const float vecPos[3], const float vecAng[3], const char[] data) + { + VehicleDumpTruck obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, data[0] ? "models/vehicles/dumptruck_empty.mdl" : "models/vehicles/dumptruck.mdl", "scripts/vehicles/tf2_dumptruck.txt")); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {18.0, -26.0, 54.0}, 0); // Side Seat + + if(data[0]) + { + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-32.0, -102.0, 62.0}, 1); // Left Back + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {26.0, -158.0, 62.0}, 2); // Right Back + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-32.0, -158.0, 62.0}, 3); // Left Front + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {26.0, -102.0, 62.0}, 4); // Right Front + } + else + { + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {0.0, -122.0, 108.0}, 1); // Back + } + + return obj; + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp new file mode 100644 index 000000000..71a15a9cb --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp @@ -0,0 +1,94 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleFullJeep_Setup() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "ATV"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_fulljeep"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/buggy.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleFullJeep(vecPos, vecAng); +} + +methodmap VehicleFullJeep < VehicleGeneric +{ + public VehicleFullJeep(const float vecPos[3], const float vecAng[3]) + { + VehicleFullJeep obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/jeep_test.txt")); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {22.0, -42.0, 12.0}, 0); + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {2.0, -90.0, 34.0}, 1); + + FuncShowInteractHud[obj.index] = VehicleFullJeep_ClotShowInteractHud; + func_NPCInteract[obj.index] = VehicleFullJeep_ClotInteract; + + return obj; + } +} + +bool VehicleFullJeep_ClotShowInteractHud(VehicleFullJeep obj, int client) +{ + float ang1[3], ang2[3]; + GetEntPropVector(obj.index, Prop_Data, "m_angRotation", ang1); + GetClientEyeAngles(client, ang2); + + if(fabs(fabs(ang1[1]) - fabs(ang2[1])) > 15.0) + return false; + + SetGlobalTransTarget(client); + + if(Building_Collect_Cooldown[obj.index][client] > GetGameTime()) + { + PrintCenterText(client, "%t", "Object Cooldown", Building_Collect_Cooldown[obj.index][client] - GetGameTime()); + } + else + { + PrintCenterText(client, "%t", "Ammobox Tooltip", Ammo_Count_Ready - Ammo_Count_Used[client]); + } + return true; +} + +bool VehicleFullJeep_ClotInteract(int client, int weapon, VehicleFullJeep obj) +{ + float ang1[3], ang2[3]; + GetEntPropVector(obj.index, Prop_Data, "m_angRotation", ang1); + GetClientEyeAngles(client, ang2); + + if(fabs(fabs(ang1[1]) - fabs(ang2[1])) > 15.0) + return false; + + if(Building_Collect_Cooldown[obj.index][client] > GetGameTime()) + return true; + + int UsedBoxLogic = AmmoboxUsed(client, obj.index); + if(UsedBoxLogic >= 1) + { + int owner = obj.m_hDriver; + if(owner == -1) + owner = client; + + if(UsedBoxLogic >= 2) + { + Building_GiveRewardsUse(client, owner, 10, true, 0.35, true); + Barracks_TryRegenIfBuilding(client); + } + + Building_GiveRewardsUse(client, owner, 10, true, 0.35, true); + Barracks_TryRegenIfBuilding(client); + } + return true; +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_landrover.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_landrover.sp new file mode 100644 index 000000000..5c00cc855 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_landrover.sp @@ -0,0 +1,42 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehicleLandrover_Setup() +{ + if(!IsFileInDownloads("models/vehicles/landrover.mdl")) + return; + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Landrover"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_landrover"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/landrover.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehicleLandrover(vecPos, vecAng); +} + +methodmap VehicleLandrover < VehicleGeneric +{ + public VehicleLandrover(const float vecPos[3], const float vecAng[3]) + { + VehicleLandrover obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/vehicles/landrover.mdl", "scripts/vehicles/tf2_landrover.txt")); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {18.0, -14.0, 34.0}, 0); // Side Seat + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-22.0, -68.0, 28.0}, 1); // Back Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {22.0, -68.0, 28.0}, 2); // Back Right + + return obj; + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_pickup.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_pickup.sp new file mode 100644 index 000000000..4691396e0 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_pickup.sp @@ -0,0 +1,46 @@ +#pragma semicolon 1 +#pragma newdecls required + +void VehiclePickup_Setup() +{ + if(!IsFileInDownloads("models/vehicles/pickup03.mdl")) + return; + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Pickup Truck"); + strcopy(data.Plugin, sizeof(data.Plugin), "vehicle_pickup"); + data.Category = Type_Hidden; + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheModel("models/vehicles/pickup03.mdl"); + Vehicle_PrecacheSounds(); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return VehiclePickup(vecPos, vecAng); +} + +methodmap VehiclePickup < VehicleGeneric +{ + public VehiclePickup(const float vecPos[3], const float vecAng[3]) + { + VehiclePickup obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/vehicles/pickup03.mdl", "scripts/vehicles/tf2_pickup.txt")); + + SetEntProp(obj.index, Prop_Send, "m_nSkin", GetURandomInt() % 2); + + obj.m_bNoAttack = true; + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {12.0, 12.0, 30.0}, 0); // Side Seat + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {20.0, -96.0, 40.0}, 1); // Back Right + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-20.0, -44.0, 40.0}, 2);// Front Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {20.0, -44.0, 40.0}, 3); // Back Left + SetEntPropVector(obj.index, Prop_Data, "m_vecSeatPos", {-20.0, -96.0, 40.0}, 4);// Front Right + + return obj; + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/waves.sp b/addons/sourcemod/scripting/zombie_riot/waves.sp index 435f53692..99565a5b8 100644 --- a/addons/sourcemod/scripting/zombie_riot/waves.sp +++ b/addons/sourcemod/scripting/zombie_riot/waves.sp @@ -283,7 +283,7 @@ bool Waves_CallVote(int client, int force = 0) } else { - menu.AddItem(NULL_STRING, vote.Name, ITEMDRAW_DISABLED); + menu.AddItem(NULL_STRING, vote.Name, ITEMDRAW_SPACER); } bool levels = CvarLeveling.BoolValue; @@ -1260,17 +1260,14 @@ public Action Waves_EndVote(Handle timer, float time) } } - if(high2 != -1 && votes[high1]) + if(high2 != -1 && votes[high2]) { - if(high2 != -1) + high1 = votes[high2]; + for(int i = length - 1; i >= 0; i--) { - high1 = votes[high2]; - for(int i = length - 1; i >= 0; i--) + if(votes[i] < high1) { - if(votes[i] < high1) - { - list.Erase(i); - } + list.Erase(i); } } diff --git a/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt b/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt index 897db8317..d58e4a5b7 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt @@ -3999,4 +3999,28 @@ { "en" "Airboat" } + "Ambulance" + { + "en" "Ambulance" + } + "Bus" + { + "en" "Bus" + } + "Camper Van" + { + "en" "Camper Van" + } + "Dump Truck" + { + "en" "Dump Truck" + } + "Landrover" + { + "en" "Landrover" + } + "Pickup Truck" + { + "en" "Pickup Truck" + } } diff --git a/scripts/vehicles/tf2_ambulance.txt b/scripts/vehicles/tf2_ambulance.txt new file mode 100644 index 000000000..e0cf31dc3 --- /dev/null +++ b/scripts/vehicles/tf2_ambulance.txt @@ -0,0 +1,281 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 -0.01 0" + "massoverride" "800" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "17" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "17" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "ATV_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "ATV_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "ATV_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "ATV_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "ATV_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "ATV_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "ATV_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "ATV_firstgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "ATV_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "ATV_secondgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "ATV_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "ATV_thirdgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "ATV_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "ATV_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "ATV_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "ATV_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "ATV_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "ATV_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "ATV_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_heavy" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +} diff --git a/scripts/vehicles/tf2_bus.txt b/scripts/vehicles/tf2_bus.txt new file mode 100644 index 000000000..eadcfff88 --- /dev/null +++ b/scripts/vehicles/tf2_bus.txt @@ -0,0 +1,282 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 0 0" + "massoverride" "2000" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "22" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "22" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "truck_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "truck_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "truck_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "truck_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "truck_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "truck_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "truck_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "truck_firstgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "truck_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "truck_secondgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "truck_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "truck_thirdgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "truck_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "truck_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "truck_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "truck_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "truck_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "truck_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "truck_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_medium" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +} +} \ No newline at end of file diff --git a/scripts/vehicles/tf2_camper.txt b/scripts/vehicles/tf2_camper.txt new file mode 100644 index 000000000..d42154e47 --- /dev/null +++ b/scripts/vehicles/tf2_camper.txt @@ -0,0 +1,281 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 -0.01 0" + "massoverride" "1500" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "17" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "17" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "ATV_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "ATV_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "ATV_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "ATV_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "ATV_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "ATV_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "ATV_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "ATV_firstgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "ATV_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "ATV_secondgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "ATV_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "ATV_thirdgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "ATV_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "ATV_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "ATV_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "ATV_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "ATV_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "ATV_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "ATV_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_heavy" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +} diff --git a/scripts/vehicles/tf2_dumptruck.txt b/scripts/vehicles/tf2_dumptruck.txt new file mode 100644 index 000000000..632d501b5 --- /dev/null +++ b/scripts/vehicles/tf2_dumptruck.txt @@ -0,0 +1,282 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 -0.01 0" + "massoverride" "800" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "23.5" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "24" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "truck_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "truck_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "truck_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "truck_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "truck_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "truck_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "truck_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "truck_firstgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "truck_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "truck_secondgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "truck_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "truck_thirdgear" + "min_time" "0.25" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "truck_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "truck_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "truck_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "truck_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "truck_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "truck_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "truck_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_medium" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +} +} \ No newline at end of file diff --git a/scripts/vehicles/tf2_landrover.txt b/scripts/vehicles/tf2_landrover.txt new file mode 100644 index 000000000..45486b3bc --- /dev/null +++ b/scripts/vehicles/tf2_landrover.txt @@ -0,0 +1,281 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 -0.01 0" + "massoverride" "800" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "20.5" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "20.5" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "ATV_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "ATV_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "ATV_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "ATV_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "ATV_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "ATV_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "ATV_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "ATV_firstgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "ATV_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "ATV_secondgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "ATV_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "ATV_thirdgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "ATV_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "ATV_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "ATV_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "ATV_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "ATV_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "ATV_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "ATV_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_heavy" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +} diff --git a/scripts/vehicles/tf2_pickup.txt b/scripts/vehicles/tf2_pickup.txt new file mode 100644 index 000000000..0aa9207b4 --- /dev/null +++ b/scripts/vehicles/tf2_pickup.txt @@ -0,0 +1,281 @@ +// This is a test Trabant P60 type vehicle for the wasteland + +"vehicle" +{ + "wheelsperaxle" "2" + "body" + { + "countertorquefactor" "1" + "massCenterOverride" "0 -0.01 0" + "massoverride" "800" // kg + "addgravity" "0.33" + } + "engine" + { + "horsepower" "350" + "maxrpm" "3000" + "maxspeed" "35" // mph + "maxReverseSpeed" "20" // mph + "autobrakeSpeedGain" "1.1" // 10% speed gain while coasting, put on the brakes after that + "autobrakeSpeedFactor" "3.0" // Brake is this times the speed gain + "autotransmission" "1" + "axleratio" "4.56" + "gear" "1.86" // 1st gear + "gear" "1.59" // 2nd gear + "gear" "1.17" // 3rd gear + "gear" "1.0" // 4th gear + "gear" "0.84" // 5th gear + "shiftuprpm" "1500" + "shiftdownrpm" "300" + + "boost" + { +// "force" "1.5" // 1.5 car body mass * gravity * inches / second ^ 2 + "duration" "1.0" // 1 second of boost + "delay" "15" // 15 seconds before you can use it again + "torqueboost" "1" // enable "sprint" mode of vehicle, not force type booster + "maxspeed" "50" // maximum turbo speed + } + } + "steering" + { + "degreesSlow" "50" // steering cone at zero to slow speed + "degreesFast" "18" // steering cone at fast speed to max speed + "degreesBoost" "11" // steering cone at max boost speed (blend toward this after max speed) + "steeringExponent" "1.4" // steering function is linear, then raised to this power to be slower at the beginning of the curve, faster at the end + "slowcarspeed" "14" + "fastcarspeed" "20" + "slowSteeringRate" "4.0" + "fastSteeringRate" "2.0" + "steeringRestRateSlow" "4.0" + "steeringRestRateFast" "2.0" + "turnThrottleReduceSlow" "0.01" + "turnThrottleReduceFast" "2.0" + "brakeSteeringRateFactor" "6" + "throttleSteeringRestRateFactor" "2" + "boostSteeringRestRateFactor" "1.7" + "boostSteeringRateFactor" "1.7" + + "powerSlideAccel" "250" + + "skidallowed" "1" + "dustcloud" "1" + + } + + // front axle + "axle" + { + "wheel" + { + "radius" "18" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + + "torquefactor" "0.2" + "brakefactor" "0.6" + } + + // rear axle + "axle" + { + "wheel" + { + "radius" "18" + "mass" "100" + "inertia" "1.5" // steady the car (fixes the oscillation of the axles about z) + "damping" "0" + "rotdamping" "0.0" + "material" "jeeptire" + "skidmaterial" "slidingrubbertire" + "brakematerial" "brakingrubbertire" + } + "suspension" + { + "springConstant" "80" + "springDamping" "4" + "stabilizerConstant" "110" + "springDampingCompression" "4" + "maxBodyForce" "250" + } + "torquefactor" "0.8" + "brakefactor" "0.4" + } +} + +"vehicle_sounds" +{ + // List gears in order from lowest speed to highest speed + + "gear" + { + "max_speed" "0.3" + "speed_approach_factor" "1.0" + } + + "gear" + { + "max_speed" "0.5" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.75" + "speed_approach_factor" "0.07" + } + "gear" + { + "max_speed" "0.90" + "speed_approach_factor" "0.035" + } + "gear" + { + "max_speed" "0.95" + "speed_approach_factor" "0.015" + } + "gear" + { + "max_speed" "2.0" + "speed_approach_factor" "0.03" + } + "state" + { + "name" "SS_START_WATER" + "sound" "ATV_start_in_water" + } + + "state" + { + "name" "SS_START_IDLE" + "sound" "ATV_engine_start" + } + "state" + { + "name" "SS_SHUTDOWN_WATER" + "sound" "ATV_stall_in_water" + } + "state" + { + "name" "SS_IDLE" + "sound" "ATV_engine_idle" + } + "state" + { + "name" "SS_REVERSE" + "sound" "ATV_reverse" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_0" + "sound" "ATV_rev" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_0_RESUME" + "sound" "ATV_engine_idle" + "min_time" "0.75" + } + "state" + { + "name" "SS_GEAR_1" + "sound" "ATV_firstgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_1_RESUME" + "sound" "ATV_firstgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2" + "sound" "ATV_secondgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_2_RESUME" + "sound" "ATV_secondgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3" + "sound" "ATV_thirdgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_3_RESUME" + "sound" "ATV_thirdgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4" + "sound" "ATV_fourthgear" + "min_time" "0.5" + } + "state" + { + "name" "SS_GEAR_4_RESUME" + "sound" "ATV_fourthgear_noshift" + "min_time" "0.5" + } + "state" + { + "name" "SS_SLOWDOWN_HIGHSPEED" + "sound" "ATV_throttleoff_fastspeed" + } + "state" + { + "name" "SS_SLOWDOWN" + "sound" "ATV_throttleoff_slowspeed" + } + "state" + { + "name" "SS_TURBO" + "sound" "ATV_turbo_on" + "min_time" "2.5" + } + "state" + { + "name" "SS_SHUTDOWN" + "sound" "ATV_engine_stop" + } + "crashsound" + { + "min_speed" "350" + "min_speed_change" "250" + "sound" "ATV_impact_heavy" + "gear_limit" "1" + } + "crashsound" + { + "min_speed" "450" + "min_speed_change" "350" + "sound" "ATV_impact_heavy" + } + + + "skid_lowfriction" "ATV_skid_lowfriction" + "skid_normalfriction" "ATV_skid_normalfriction" + "skid_highfriction" "ATV_skid_highfriction" +}