From 3fddc49afc8803453f68ae6144b3aabd4830f8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20Eren=20=C3=96ymez?= Date: Sun, 1 Oct 2023 10:21:50 +0300 Subject: [PATCH] New Effect: Pepega Traffic --- ChaosMod/CMakeLists.txt | 2 +- .../Effects/db/Vehs/VehsPepegaTraffic.cpp | 85 +++++++++++++++++++ ConfigApp/Effects.cs | 1 + 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 ChaosMod/Effects/db/Vehs/VehsPepegaTraffic.cpp diff --git a/ChaosMod/CMakeLists.txt b/ChaosMod/CMakeLists.txt index 306c3176c..75e1ac6d1 100644 --- a/ChaosMod/CMakeLists.txt +++ b/ChaosMod/CMakeLists.txt @@ -13,7 +13,7 @@ file(GLOB ROOT_SRC ${PROJECT_SOURCE_DIR}/*.cpp) file(GLOB_RECURSE SRC ${PROJECT_SOURCE_DIR}/Components/*.cpp ${PROJECT_SOURCE_DIR}/Effects/*.cpp ${PROJECT_SOURCE_DIR}/Memory/*.cpp ${PROJECT_SOURCE_DIR}/Util/*.cpp) file(GLOB PATTERNS_SRC ${PROJECT_SOURCE_DIR}/../vendor/Patterns/Patterns.cpp) -add_library(ChaosMod MODULE ${ROOT_SRC} ${SRC} ${PATTERNS_SRC} ChaosMod.rc) +add_library(ChaosMod MODULE ${ROOT_SRC} ${SRC} ${PATTERNS_SRC} ChaosMod.rc "Effects/db/Vehs/VehsPepegaTraffic.cpp") set_property(TARGET ChaosMod PROPERTY CXX_STANDARD 20) diff --git a/ChaosMod/Effects/db/Vehs/VehsPepegaTraffic.cpp b/ChaosMod/Effects/db/Vehs/VehsPepegaTraffic.cpp new file mode 100644 index 000000000..72f157733 --- /dev/null +++ b/ChaosMod/Effects/db/Vehs/VehsPepegaTraffic.cpp @@ -0,0 +1,85 @@ +/* + Effect by Bad Koa +*/ + +#include + +enum DriveTasks +{ + BRAKE, // 1 + BRAKE_REVERSE, // 3 + LEFT_90_BRAKE, // 4 + RIGHT_90_BRAKE, // 5 + BRAKE_STRONG, // 6 + LEFT_ACCEL, // 7 + RIGHT_ACCEL, // 8 + LEFT_RESTORE_WHELL, // 10 + RIGTH_RESTORE_WHELL, // 11 + LEFT_GO_REVERSE, // 13 + RIGTH_GO_REVERSE, // 14 + STRONGBRAKE_TURN, // 19 + WEAKBRAKE_TURN_LEFTRIGHT, // 20 + WEAKBRAKE_TURN_RIGHTLEFT, // 21 + ACCEL_FAST, // 23 + BRAKE_TURNLEFT_MORELEFT, // 25 + BRAKE_TURNIGHT_MORERIGHT, // 26 + BRAKE_TILLSTOP, // 27 + BRAKE_REVERSEACCEL, // 28 + BURNOUT, // 30 + ACCEL_HANDBRAKE, // 31 + ACCEL_HARD // 32 +}; + +struct DriveTaskData +{ + DriveTasks task; + int taskValue; +}; + +static std::vector validTasks = { { LEFT_ACCEL, 7 }, + { RIGHT_ACCEL, 8 }, + { LEFT_RESTORE_WHELL, 10 }, + { RIGTH_RESTORE_WHELL, 11 }, + { LEFT_GO_REVERSE, 13 }, + { RIGTH_GO_REVERSE, 14 }, + { WEAKBRAKE_TURN_LEFTRIGHT, 20 }, + { WEAKBRAKE_TURN_RIGHTLEFT, 21 }, + { ACCEL_FAST, 23 }, + { BRAKE_REVERSEACCEL, 28 }, + { BURNOUT, 30 }, + { ACCEL_HANDBRAKE, 31 }, + { ACCEL_HARD, 32 } }; + +static void OnTick() +{ + static DWORD64 lastTick = 0; + DWORD64 curTick = GET_GAME_TIMER(); + + DWORD64 taskPeriod = g_Random.GetRandomInt(1000, 1500); + + // Check if the task period has passed + if (curTick - lastTick >= taskPeriod) + { + lastTick = curTick; + + for (Ped ped : GetAllPeds()) + { + if (DOES_ENTITY_EXIST(ped) && !IS_PED_A_PLAYER(ped) && IS_PED_IN_ANY_VEHICLE(ped, false)) + { + DriveTaskData task = validTasks.at(g_Random.GetRandomInt(0, validTasks.size() - 1)); + Vehicle veh = GET_VEHICLE_PED_IS_IN(ped, false); + TASK_VEHICLE_TEMP_ACTION(ped, veh, task.taskValue, taskPeriod); + } + } + } +} + +// clang-format off +REGISTER_EFFECT(nullptr, nullptr, OnTick, EffectInfo +{ + .Name = "Pepega Traffic", + .Id = "pepega_traffic", + .IsTimed = true, + .IncompatibleWith = { "notraffic" , "playerveh_killengine" } +} +); \ No newline at end of file diff --git a/ConfigApp/Effects.cs b/ConfigApp/Effects.cs index 5d1796c91..716447390 100644 --- a/ConfigApp/Effects.cs +++ b/ConfigApp/Effects.cs @@ -413,6 +413,7 @@ public enum EffectTimedType { "veh_boostbrake", new EffectInfo("Boost Braking", EffectCategory.Vehicle, true) }, { "cocktail_shaker", new EffectInfo("Cocktail Shaker", EffectCategory.Misc, true, true) }, { "screen_realfp", new EffectInfo("Real First Person", EffectCategory.Screen, true) }, + { "pepega_traffic", new EffectInfo("Pepega Traffic", EffectCategory.Vehicle, true) }, }; } }