Skip to content

Commit e083c26

Browse files
committed
Various changes to get basic scripts running
* Implement Set/GetPVarInt to get rivershell running * Vehicle IDs now start from 1 instead of 0 (SA-MP behaviour) * Fix (?) left-right and up-down keys to match what SA-MP scripts expect * Ignore weaponid -1 in spawninfo (triggers an error otherwise) * Properly emulate PLAYER_STATE_SPECTATING * Finish implementing IsPlayerInRangeOfPoint * Add a pair of stubs to get some basic scripts running On a side note, grandlarc and rivershell now run unchanged with these changes!
1 parent 388d7a1 commit e083c26

File tree

4 files changed

+60
-4
lines changed

4 files changed

+60
-4
lines changed

amx/server/defines.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ g_KeyMapping = setmetatable({
9999
}, controlMappingMT)
100100

101101
g_LeftRightMapping = setmetatable({
102-
[65408] = { 'left', 'vehicle_left' },
102+
[-128] = { 'left', 'vehicle_left' },
103103
[128] = { 'right', 'vehicle_right' }
104104
}, controlMappingMT)
105105

106106
g_UpDownMapping = setmetatable({
107-
[65408] = { 'forwards', 'accelerate' },
107+
[-128] = { 'forwards', 'accelerate' },
108108
[128] = { 'backwards', 'brake_reverse' }
109109
}, controlMappingMT)
110110

amx/server/events.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ function joinHandler(player)
8383
end
8484
g_Players[playerID].updatetimer = setTimer(procCallOnAll, 100, 0, 'OnPlayerUpdate', playerID)
8585

86+
g_Players[playerID].pvars = {}
87+
8688

8789
if playerJoined then
8890
if getRunningGameMode() then
@@ -233,7 +235,9 @@ function spawnPlayerBySelectedClass(player, x, y, z, r)
233235
end
234236
spawnPlayer(player, unpack(spawninfo))
235237
for i,weapon in ipairs(spawninfo.weapons) do
236-
giveWeapon(player, weapon[1], weapon[2], true)
238+
if weapon[1] ~= -1 then
239+
giveWeapon(player, weapon[1], weapon[2], true)
240+
end
237241
end
238242
clientCall(player, 'destroyClassSelGUI')
239243
if playerdata.blip then

amx/server/syscalls.lua

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,38 @@ function GetPlayerWeapon(amx, player)
748748
return getPedWeapon(player)
749749
end
750750

751+
function GetPVarInt(amx, player, varname)
752+
local playerdata = g_Players[getElemID(player)]
753+
if playerdata then
754+
if not playerdata.pvars then
755+
playerdata.pvars = {}
756+
end
757+
return playerdata.pvars[varname] or 0
758+
end
759+
return 0
760+
end
761+
762+
function SetPVarInt(amx, player, varname, value)
763+
local playerdata = g_Players[getElemID(player)]
764+
if playerdata then
765+
if not playerdata.pvars then
766+
playerdata.pvars = {}
767+
end
768+
playerdata.pvars[varname] = value
769+
return 1
770+
end
771+
return 0
772+
end
773+
774+
-- dummy todo
775+
function RemoveBuildingForPlayer(amx)
776+
return 1;
777+
end
778+
779+
function EnableVehicleFriendlyFire(amx)
780+
return 1;
781+
end
782+
751783
function GetPlayerWeaponData(amx, player, slot, refWeapon, refAmmo)
752784
local playerdata = g_Players[getElemID(player)]
753785
local weapon = playerdata.weapons and playerdata.weapons[slot]
@@ -1478,12 +1510,20 @@ function TogglePlayerSpectating(amx, player, enable)
14781510
fadeCamera(player, true)
14791511
setCameraMatrix(player, 75.461357116699, 64.600051879883, 51.685581207275, 149.75857543945, 131.53228759766, 40.597320556641)
14801512
setPlayerHudComponentVisible(player, 'radar', false)
1513+
setPlayerState(player, PLAYER_STATE_SPECTATING)
14811514
else
1515+
local playerdata = g_Players[getElemID(player)]
1516+
local spawninfo = playerdata.spawninfo or (g_PlayerClasses and g_PlayerClasses[playerdata.selectedclass])
1517+
if not spawninfo then
1518+
putPlayerInClassSelection(player)
1519+
return
1520+
end
14821521
if isPedDead(player) then
14831522
spawnPlayerBySelectedClass(player)
14841523
end
14851524
setCameraTarget(player, player)
14861525
setPlayerHudComponentVisible(player, 'radar', true)
1526+
setPlayerState(player, PLAYER_STATE_ONFOOT)
14871527
end
14881528
end
14891529

@@ -2293,7 +2333,7 @@ end
22932333

22942334
function IsPlayerInRangeOfPoint(amx, player, range, pX, pY, pZ)
22952335
x, y, z = getElementPosition(player)
2296-
return true
2336+
return getDistanceBetweenPoints3D(pX, pY, pZ, getElementPosition(player)) <= range
22972337
end
22982338

22992339
function GetPlayerSurfingVehicleID(amx, player)
@@ -2437,6 +2477,8 @@ g_SAMPSyscallPrototypes = {
24372477
GivePlayerMoney = {'p', 'i'},
24382478
GivePlayerWeapon = {'p', 'i', 'i'},
24392479

2480+
GetPVarInt = {'p', 's'},
2481+
24402482
HideMenuForPlayer = {'m', 'p'},
24412483

24422484
IsPlayerAdmin = {'p'},
@@ -2541,6 +2583,8 @@ g_SAMPSyscallPrototypes = {
25412583
StopObject = {'o'},
25422584
StopPlayerObject = {'p', 'i'},
25432585

2586+
SetPVarInt = {'p', 's', 'i'},
2587+
25442588
TextDrawAlignment = {'x', 'i'},
25452589
TextDrawBackgroundColor = {'x', 'c'},
25462590
TextDrawBoxColor = {'x', 'c'},
@@ -2782,4 +2826,8 @@ g_SAMPSyscallPrototypes = {
27822826
format = {'r', 'i', 's'},
27832827

27842828
memcpy = {'r', 'r', 'i', 'i', 'i'},
2829+
2830+
-- more dummies
2831+
EnableVehicleFriendlyFire = {},
2832+
RemoveBuildingForPlayer = {},
27852833
}

amx/server/util.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,10 @@ function addElem(amx, listname, elem)
346346
globList = _G['g_' .. listname:sub(1, 1):upper() .. listname:sub(2)]
347347
if globList then
348348
id = 0
349+
-- vehicles in sa-mp start at ID 1
350+
if listname == 'vehicles' then
351+
id = 1
352+
end
349353
while globList[id] do
350354
id = id + 1
351355
end

0 commit comments

Comments
 (0)