From 05657962a9cbd233944a560c8dc37f61afe1a38e Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 16:53:23 +0300 Subject: [PATCH 01/14] Update unused skin IDs --- amx/server/natives/a_samp.lua | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/amx/server/natives/a_samp.lua b/amx/server/natives/a_samp.lua index 5ecc972..b68cb57 100644 --- a/amx/server/natives/a_samp.lua +++ b/amx/server/natives/a_samp.lua @@ -3,19 +3,9 @@ skinReplace = { -- invalid skins - [3] = 0, - [4] = 0, - [5] = 0, - [6] = 0, - [8] = 0, - [42] = 0, - [65] = 0, [74] = 0, - [86] = 0, - [119] = 0, [149] = 0, - [208] = 0, - [273] = 0, + [208] = 0 } -- replace colors function colorizeString(string) From 72f6628be997aecc02740ffe97fd11ffe24ed50e Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 17:03:57 +0300 Subject: [PATCH 02/14] Move dummy NetStats_ into dummies section --- amx/server/syscalls.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/amx/server/syscalls.lua b/amx/server/syscalls.lua index b610f6f..865ac38 100644 --- a/amx/server/syscalls.lua +++ b/amx/server/syscalls.lua @@ -790,12 +790,8 @@ g_SAMPSyscallPrototypes = { -- network stats NetStats_BytesReceived = {'p'}, NetStats_BytesSent = {'p'}, - NetStats_ConnectionStatus = {'p'}, NetStats_GetConnectedTime = {'p'}, NetStats_GetIpPort = {'p', 'r', 'i'}, - NetStats_MessagesReceived = {'p'}, - NetStats_MessagesRecvPerSecond = {'p'}, - NetStats_MessagesSent = {'p'}, NetStats_PacketLossPercent = {'p'}, -- dummy (unimplemented) @@ -855,6 +851,10 @@ g_SAMPSyscallPrototypes = { GetPlayerCameraTargetActor = {'p'}, BlockIpAddress = {'s', 'i'}, UnBlockIpAddress = {'s'}, + NetStats_ConnectionStatus = {'p'}, + NetStats_MessagesReceived = {'p'}, + NetStats_MessagesRecvPerSecond = {'p'}, + NetStats_MessagesSent = {'p'}, GetServerTickRate = {}, UsePlayerPedAnims = {}, From b34b3ebc564774c54ada5450ea771196937767e4 Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 17:12:36 +0300 Subject: [PATCH 03/14] Add GetPlayerIdleTime function since there is no true AFK concept in MTA like in SA-MP --- amx-test/pawno/include/a_amx.inc | 1 + amx/server/natives/a_mta.lua | 4 ++++ amx/server/syscalls.lua | 1 + 3 files changed, 6 insertions(+) diff --git a/amx-test/pawno/include/a_amx.inc b/amx-test/pawno/include/a_amx.inc index bdbcdbd..73185b1 100644 --- a/amx-test/pawno/include/a_amx.inc +++ b/amx-test/pawno/include/a_amx.inc @@ -122,6 +122,7 @@ native SetPlayerCanBeKnockedOffBike(playerid, bool:knockOff); native GetPlayerWeaponSlot(playerid); native SetPlayerWeaponSlot(playerid, slotid); native GetPlayerAmmoInClip(playerid); +native GetPlayerIdleTime(playerid); native IsPlayerHeadless(playerid); native SetPlayerHeadless(playerid, bool:headless); native GetPlayerBlurLevel(playerid); diff --git a/amx/server/natives/a_mta.lua b/amx/server/natives/a_mta.lua index 6957f70..cbc5e2b 100644 --- a/amx/server/natives/a_mta.lua +++ b/amx/server/natives/a_mta.lua @@ -118,6 +118,10 @@ function GetPlayerAmmoInClip(amx, player) return getPedAmmoInClip(player) end +function GetPlayerIdleTime(amx, player) + return getPlayerIdleTime(player) +end + function IsPlayerHeadless(amx, player) return isPedHeadless(player) end diff --git a/amx/server/syscalls.lua b/amx/server/syscalls.lua index 865ac38..d7dcf6e 100644 --- a/amx/server/syscalls.lua +++ b/amx/server/syscalls.lua @@ -580,6 +580,7 @@ g_SAMPSyscallPrototypes = { GetPlayerWeaponSlot = {'p'}, SetPlayerWeaponSlot = {'p', 'i'}, GetPlayerAmmoInClip = {'p'}, + GetPlayerIdleTime = {'p'}, IsPlayerHeadless = {'p'}, SetPlayerHeadless = {'p', 'b'}, GetPlayerBlurLevel = {'p'}, From 7961c4ff7d3a5c14738a072b81bb1405500b648b Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 17:18:18 +0300 Subject: [PATCH 04/14] Remove some needless stuff --- amx-test/file.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 amx-test/file.txt diff --git a/amx-test/file.txt b/amx-test/file.txt deleted file mode 100644 index e13d619..0000000 --- a/amx-test/file.txt +++ /dev/null @@ -1 +0,0 @@ -This is the content of an external file - it is in the gamemode's folder, not in a central "scriptfiles" folder between the files of all other gamemodes. From b4edd2e38087c30c6633946c016d78ddf02f12d9 Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 18:22:06 +0300 Subject: [PATCH 05/14] More universal func instead of GetVehicleDriver --- amx-test/pawno/include/a_amx.inc | 2 +- amx/server/natives/a_mta.lua | 4 ++-- amx/server/syscalls.lua | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/amx-test/pawno/include/a_amx.inc b/amx-test/pawno/include/a_amx.inc index 73185b1..e93bfb6 100644 --- a/amx-test/pawno/include/a_amx.inc +++ b/amx-test/pawno/include/a_amx.inc @@ -169,7 +169,7 @@ native GetTrainDirection(vehicleid); native SetTrainDirection(vehicleid, bool:clockwise); native GetTrainSpeed(vehicleid, &Float:speed); native SetTrainSpeed(vehicleid, Float:speed); -native GetVehicleDriver(vehicleid); +native GetVehicleOccupant(vehicleid, seatid); native GetVehicleNumberPlate(vehicleid, plate[], len = sizeof(plate)); native GetVehicleColor(vehicleid, &color1, &color2); native GetVehiclePaintjob(vehicleid); diff --git a/amx/server/natives/a_mta.lua b/amx/server/natives/a_mta.lua index cbc5e2b..61814e1 100644 --- a/amx/server/natives/a_mta.lua +++ b/amx/server/natives/a_mta.lua @@ -570,8 +570,8 @@ function SetTrainSpeed(amx, train, speed) return setTrainSpeed(train, speed) end -function GetVehicleDriver(amx, vehicle) - local player = getVehicleOccupant(vehicle) +function GetVehicleOccupant(amx, vehicle, seat) + local player = getVehicleOccupant(vehicle, seat) if not player then return INVALID_PLAYER_ID end diff --git a/amx/server/syscalls.lua b/amx/server/syscalls.lua index d7dcf6e..bc6bc0a 100644 --- a/amx/server/syscalls.lua +++ b/amx/server/syscalls.lua @@ -627,7 +627,7 @@ g_SAMPSyscallPrototypes = { SetTrainDirection = {'v', 'b'}, GetTrainSpeed = {'v', 'r'}, SetTrainSpeed = {'v', 'f'}, - GetVehicleDriver = {'v'}, + GetVehicleOccupant = {'v', 'i'}, GetVehicleNumberPlate = {'v', 'r', 'i'}, GetVehicleColor = {'v', 'r', 'r'}, GetVehiclePaintjob = {'v'}, From 2b9a514f06b2c8e3150014f28208e323faf3f81a Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 18:57:50 +0300 Subject: [PATCH 06/14] Add `const` keyword everywhere it should be --- amx-test/pawno/include/a_amx.inc | 50 ++++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/amx-test/pawno/include/a_amx.inc b/amx-test/pawno/include/a_amx.inc index e93bfb6..445eef6 100644 --- a/amx-test/pawno/include/a_amx.inc +++ b/amx-test/pawno/include/a_amx.inc @@ -43,8 +43,8 @@ native GetInteriorSoundsEnabled(); native SetInteriorSoundsEnabled(bool:enable); native IsGarageOpen(garageid); native SetGarageOpen(garageid, bool:open); -native IsGlitchEnabled(name[]); -native SetGlitchEnabled(name[], bool:enable); +native IsGlitchEnabled(const name[]); +native SetGlitchEnabled(const name[], bool:enable); native Float:GetAircraftMaxVelocity(); native SetAircraftMaxVelocity(Float:velocity); native Float:GetAircraftMaxHeight(); @@ -69,7 +69,7 @@ native GetPickupWeapon(pickupid); native GetPickupAmmo(pickupid); // Native Markers -native CreateMarker(Float:X, Float:Y, Float:Z, type[], Float:size, red, green, blue, alpha); +native CreateMarker(Float:X, Float:Y, Float:Z, const type[], Float:size, red, green, blue, alpha); native DestroyMarker(markerid); native GetMarkerColor(markerid, colorid); // Color IDs: 0 = Red, 1 = Green, 2 = Blue, 3 = Alpha native GetMarkerIcon(markerid); // 0 = No icon, 1 = Arrow, 2 = Race finish @@ -86,10 +86,10 @@ native IsBotInMarker(markerid, botid); native IsVehicleInMarker(markerid, vehicleid); // Rules -native IsValidServerRule(name[]); -native GetServerRule(name[], buf[], bufsize = sizeof(buf)); -native SetServerRule(name[], value[]); -native RemoveServerRule(name[]); +native IsValidServerRule(const name[]); +native GetServerRule(const name[], buf[], bufsize = sizeof(buf)); +native SetServerRule(const name[], const value[]); +native RemoveServerRule(const name[]); // Objects native IsObjectBreakable(objectid); @@ -128,7 +128,7 @@ native SetPlayerHeadless(playerid, bool:headless); native GetPlayerBlurLevel(playerid); native SetPlayerBlurLevel(playerid, level); native FadePlayerCamera(playerid, bool:fadeIn, Float:timeToFade = 1.0, red = 0, green = 0, blue = 0); -native SetPlayerControlState(playerid, control[], bool:controlState); +native SetPlayerControlState(playerid, const control[], bool:controlState); native IsPlayerCursorShowing(playerid); native ShowPlayerCursor(playerid, bool:show, bool:controls); native GetPlayerAlpha(playerid); @@ -176,7 +176,7 @@ native GetVehiclePaintjob(vehicleid); native GetVehicleInterior(vehicleid); // Bots -native CreateBot(modelid, Float:x, Float:y, Float:z, name[] = "Bot"); +native CreateBot(modelid, Float:x, Float:y, Float:z, const name[] = "Bot"); native DestroyBot(botid); native AddBotClothes(botid, type, index); native GetBotClothes(botid, type); @@ -219,7 +219,7 @@ native GetBotVehicleID(botid); native GetBotVehicleSeat(botid); native IsBotInVehicle(botid, vehicleid); native IsBotInAnyVehicle(botid); -native SetBotControlState(botid, control[], bool:controlState); +native SetBotControlState(botid, const control[], bool:controlState); native SetBotAimTarget(botid, Float:X, Float:Y, Float:Z); native GetBotDoingDriveBy(botid); native SetBotDoingDriveBy(botid, bool:driveBy); @@ -240,22 +240,22 @@ native GetBotAlpha(botid); native SetBotAlpha(botid, alpha); // Scoreboard -native AddScoreBoardColumn(column[]); -native SetPlayerScoreBoardData(playerid, column[], data[]); -native RemoveScoreBoardColumn(column[]); +native AddScoreBoardColumn(const column[]); +native SetPlayerScoreBoardData(playerid, const column[], const data[]); +native RemoveScoreBoardColumn(const column[]); // Player Data -native SetPlayerIntData(playerid, key[], value); -native GetPlayerIntData(playerid, key[]); -native SetPlayerFloatData(playerid, key[], Float:value); -native Float:GetPlayerFloatData(playerid, key[]); -native SetPlayerBoolData(playerid, key[], bool:value); -native GetPlayerBoolData(playerid, key[]); -native SetPlayerStringData(playerid, key[], value[]); -native GetPlayerStringData(playerid, key[], buf[], bufsize = sizeof(buf)); -native ResetPlayerData(playerid, key[]); +native SetPlayerIntData(playerid, const key[], value); +native GetPlayerIntData(playerid, const key[]); +native SetPlayerFloatData(playerid, const key[], Float:value); +native Float:GetPlayerFloatData(playerid, const key[]); +native SetPlayerBoolData(playerid, const key[], bool:value); +native GetPlayerBoolData(playerid, const key[]); +native SetPlayerStringData(playerid, const key[], const value[]); +native GetPlayerStringData(playerid, const key[], buf[], bufsize = sizeof(buf)); +native ResetPlayerData(playerid, const key[]); // Misc -native AddEventHandler(event[], func[]); -native RemoveEventHandler(func[]); -native IsPluginLoaded(plugin[]); +native AddEventHandler(const event[], const func[]); +native RemoveEventHandler(const func[]); +native IsPluginLoaded(const plugin[]); From c24fdb23b6486e793e80411b0acdb35e7a3cae40 Mon Sep 17 00:00:00 2001 From: Nexius Date: Tue, 6 May 2025 23:13:54 +0300 Subject: [PATCH 07/14] Complete skin replacement list --- amx/server/natives/a_samp.lua | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/amx/server/natives/a_samp.lua b/amx/server/natives/a_samp.lua index b68cb57..44a9b16 100644 --- a/amx/server/natives/a_samp.lua +++ b/amx/server/natives/a_samp.lua @@ -2,11 +2,33 @@ -- Start of SA-MP API implementation skinReplace = { - -- invalid skins - [74] = 0, - [149] = 0, - [208] = 0 + [3] = 303, -- andre + [4] = 310, -- bbthin + [6] = 302, -- emmet + [8] = 309, -- janitor + [42] = 305, -- jethro + [65] = 304, -- kendl + [74] = 0, -- unused + [86] = 301, -- ryder3 + [119] = 308, -- sindaco + [149] = 311, -- smokev + [208] = 42, -- suzie + [273] = 307, -- tbone + [289] = 306, -- zero + [300] = 280, -- lapd1 + [301] = 281, -- sfpd1 + [302] = 282, -- lvpd1 + [303] = 60, -- omyst + [304] = 250, -- swmycr + [305] = 170, -- somyst + [306] = 284, -- lapdm1 + [307] = 4, -- sfpdm1 + [308] = 276, -- sfemt1 + [309] = 119, -- lvpdm1 + [310] = 283, -- csher + [311] = 288 -- dsher } + -- replace colors function colorizeString(string) return string:gsub("(=?{[0-9A-Fa-f]*})", From 67f145d86f45c7d5c6895a982a5776ef3d4985f2 Mon Sep 17 00:00:00 2001 From: Nexius Date: Wed, 7 May 2025 09:21:48 +0300 Subject: [PATCH 08/14] More correct skin aliases now it finds a replacement with the same gender and walking style (basically it's now literally an original skin based on which there were added extra ones) --- amx/server/natives/a_samp.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/amx/server/natives/a_samp.lua b/amx/server/natives/a_samp.lua index 44a9b16..72b1ec7 100644 --- a/amx/server/natives/a_samp.lua +++ b/amx/server/natives/a_samp.lua @@ -18,13 +18,13 @@ skinReplace = { [300] = 280, -- lapd1 [301] = 281, -- sfpd1 [302] = 282, -- lvpd1 - [303] = 60, -- omyst - [304] = 250, -- swmycr - [305] = 170, -- somyst - [306] = 284, -- lapdm1 - [307] = 4, -- sfpdm1 - [308] = 276, -- sfemt1 - [309] = 119, -- lvpdm1 + [303] = 280, -- lapd1 + [304] = 280, -- lapd1 + [305] = 282, -- lvpd1 + [306] = 211, -- wfyclot + [307] = 11, -- vbfycrp + [308] = 211, -- wfyclot + [309] = 211, -- wfyclot [310] = 283, -- csher [311] = 288 -- dsher } From 5f516472123158fa6f19521b27e358a26f857ab1 Mon Sep 17 00:00:00 2001 From: Nexius Date: Wed, 7 May 2025 09:22:59 +0300 Subject: [PATCH 09/14] Use skinReplace for bots and actors too --- amx/server/natives/a_actors.lua | 2 +- amx/server/natives/a_mta.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/amx/server/natives/a_actors.lua b/amx/server/natives/a_actors.lua index ffd77c7..8bffb95 100644 --- a/amx/server/natives/a_actors.lua +++ b/amx/server/natives/a_actors.lua @@ -1,5 +1,5 @@ function CreateActor(amx, model, x, y, z, rotation) - local actor = createPed(model, x, y, z, rotation, false) + local actor = createPed(skinReplace[model] or model, x, y, z, rotation, false) setElementData(actor, 'ActorPed', true) setElementData(actor, 'Invulnerable', true) return addElem(g_Actors, actor) diff --git a/amx/server/natives/a_mta.lua b/amx/server/natives/a_mta.lua index 61814e1..6884abd 100644 --- a/amx/server/natives/a_mta.lua +++ b/amx/server/natives/a_mta.lua @@ -173,7 +173,7 @@ end -- Bots function CreateBot(amx, model, x, y, z, name) - local bot = createPed(model, x, y, z) + local bot = createPed(skinReplace[model] or model, x, y, z) setElementData(bot, 'ShowNameTag', true) setElementData(bot, 'BotName', name) local botId = addElem(g_Bots, bot) From 6dcebc63f98ef282d20d2109c2fea0bb5f6889e6 Mon Sep 17 00:00:00 2001 From: Nexius Date: Wed, 7 May 2025 10:15:43 +0300 Subject: [PATCH 10/14] Implemented UsePlayerPedAnims function --- amx/meta.xml | 1 + amx/server/amx.lua | 1 + amx/server/defines.lua | 28 +++ amx/server/events.lua | 5 + amx/server/natives/a_actors.lua | 2 +- amx/server/natives/a_mta.lua | 8 +- amx/server/natives/a_players.lua | 7 +- amx/server/natives/a_samp.lua | 34 +--- amx/server/syscalls.lua | 2 +- amx/shared/ped_anim.lua | 311 +++++++++++++++++++++++++++++++ 10 files changed, 366 insertions(+), 33 deletions(-) create mode 100644 amx/shared/ped_anim.lua diff --git a/amx/meta.xml b/amx/meta.xml index 6d91c00..35e33e1 100644 --- a/amx/meta.xml +++ b/amx/meta.xml @@ -4,6 +4,7 @@