Komisch trotzdem, dass in der UDF die ModelID-Funktion anscheinend nicht funktioniert. Schau am besten mal, ob du die aktuellste hast, also R16, für die 0.3.7, nicht R1 oder R2.
Ich weiß noch, dass ich mich mit der Fahrzeug-ID schon einmal beschäftigt hatte, weil die vehicleID in der RemotePlayerData-Struktur nicht zurückgesetzt wird und daher auch wenn der Spieler zu Fuß unterwegs war, eine Fahrzeug-ID ausgegeben wurde. Es gab glaube ich eine einfachere Lösung, ich hab sie auf die schnelle aber nicht wiedergefunden, daher kannst du auch einfach erstmal diese Kombination verwenden:
PHP
getVehiclePassengers(vehicleID) {
if (vehicleID < 1 || vehicleID > 2000 || !checkHandles() || !updateOScoreboardData())
return ""
dwAddress := readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET) + 0x1C) + 0x4FB4 + vehicleID * 0x4)
if (dwAddress == 0x0 || dwAddress == "")
return ""
dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
passengers := []
Loop, 10 {
if ((dwPED := readDWORD(hGTA, dwAddress + 0x45C + 4 * A_Index)) == 0x0)
continue
if (dwCPedPtr == dwPED)
passengers.Push(Object("SEAT", A_Index - 1, "PED", dwPED, "ID", getPlayerID(), "NAME", getPlayerName()))
else
passengers.Push(Object("SEAT", A_Index - 1, "PED", dwPED, "ID", 0xFFFF, "NAME", ""))
}
for i, o in oScoreboardData {
for j, k in passengers {
if (o.PED != k.PED)
continue
k.ID := o.ID
k.NAME := o.NAME
}
}
return passengers
}
getPlayerVehicleID(playerID) {
if (playerID < 0 || playerID >= SAMP_PLAYER_MAX || !checkHandles())
return 0
dwAddress := readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_PPOOLS_OFFSET)
dwPlayer := readDWORD(hGTA, readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET) + SAMP_PREMOTEPLAYER_OFFSET + playerID * 4)
vehID := readMem(hGTA, readDWORD(hGTA, dwPlayer + 0x0) + 0xAD, 2, "UShort")
if (vehID < 1 || vehID > 2000)
return 0
passengers := getVehiclePassengers(vehID)
for i, o in passengers {
if (o.ID == playerID)
return vehID
}
return 0
}
Alles anzeigen