// 0.3.7
updateTextDraws() {
if (!checkHandles())
return false
if (textDrawTick + 1000 > A_TickCount)
return true
oTextDraws := []
if (!(dwTextDraws := __DWORD(hGTA, dwSAMP, [SAMP_INFO_PTR, SAMP_POOLS, SAMP_POOL_TEXTDRAW])))
return false
Loop, % SAMP_MAX_TEXTDRAWS {
if (!__DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4]) || !(dwAddress := __DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS))])))
continue
oTextDraws.Push(Object("TYPE", "Global", "ID", A_Index - 1, "TEXT", __READSTRING(hGTA, dwAddress, [0x0], 800)))
}
Loop, % SAMP_MAX_PLAYERTEXTDRAWS {
if (!__DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + SAMP_MAX_TEXTDRAWS * 4]) || !(dwAddress := __DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS * 2))])))
continue
oTextDraws.Push(Object("TYPE", "Player", "ID", A_Index - 1, "TEXT", __READSTRING(hGTA, dwAddress, [0x0], 800)))
}
textDrawTick := A_TickCount
return true
}
// 0.3.7
updateTextLabels() {
if (!checkHandles())
return false
if (textLabelTick + 200 > A_TickCount)
return true
oTextLabels := []
dwTextLabels := __DWORD(hGTA, dwSAMP, [SAMP_INFO_PTR, SAMP_POOLS, SAMP_POOL_TEXTLABEL])
if (!dwTextLabels)
return false
Loop, % SAMP_MAX_TEXTLABELS {
i := A_Index - 1
if (!__DWORD(hGTA, dwTextLabels, [0xE800 + i * 4]))
continue
dwAddress := __DWORD(hGTA, dwTextLabels, [i * 0x1D])
if (!dwAddress)
continue
string := __READSTRING(hGTA, dwAddress, [0x0], 256)
if (string == "")
string := __READSTRING(hGTA, dwAddress, [0x0], getDialogTextSize(dwAddress))
if (string == "")
continue
fX := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x8], "Float")
fY := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0xC], "Float")
fZ := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x10], "Float")
wVehicleID := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x1B], "UShort")
wPlayerID := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x19], "UShort")
oTextLabels.Push(Object("ID", i, "TEXT", string, "XPOS", fX, "YPOS", fY, "ZPOS", fZ, "VEHICLEID", wVehicleID, "PLAYERID"
, wPlayerID, "VISIBLE", __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x18], "UChar"), "DISTANCE", __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x14], "Float")))
}
textLabelTick := A_TickCount
return true
}
Привет. Пожалуйста, поймите, что я пишу с помощью переводчика.
Приведенные ниже функции были найдены на сайте выше. https://github.com/Icii2q/SAMP_API/blob/master/API.ahk
Две указанные выше функции предназначены для версии 0.3.7.
Прежде всего, я попытался преобразовать updateTextDraws() в 0.3.DL.
Прежде всего, адрес 0.3.DL SAMP_INFO_PTR = 0x21A0F8 / SAMP_INFO_PTR = 0x3DE
Вам необходимо знать адрес 0.3.DL SAMP_POOL_TEXTDRAW. Но искал, но не нашел.
Теперь давайте объясним updateTextLabels().
На этот раз не удалось найти адрес SAMP_POOL_TEXTLABEL.
Can someone provide me with a nicely converted script to use the above two functions in 0.3.DL ?
updateTextDraws() {
if (!checkHandles())
return false
if (textDrawTick + 1000 > A_TickCount)
return true
oTextDraws := []
if (!(dwTextDraws := __DWORD(hGTA, dwSAMP, [SAMP_INFO_PTR, SAMP_POOLS, SAMP_POOL_TEXTDRAW])))
return false
Loop, % SAMP_MAX_TEXTDRAWS {
if (!__DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4]) || !(dwAddress := __DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS))])))
continue
oTextDraws.Push(Object("TYPE", "Global", "ID", A_Index - 1, "TEXT", __READSTRING(hGTA, dwAddress, [0x0], 800)))
}
Loop, % SAMP_MAX_PLAYERTEXTDRAWS {
if (!__DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + SAMP_MAX_TEXTDRAWS * 4]) || !(dwAddress := __DWORD(hGTA, dwTextDraws, [(A_Index - 1) * 4 + (4 * (SAMP_MAX_PLAYERTEXTDRAWS + SAMP_MAX_TEXTDRAWS * 2))])))
continue
oTextDraws.Push(Object("TYPE", "Player", "ID", A_Index - 1, "TEXT", __READSTRING(hGTA, dwAddress, [0x0], 800)))
}
textDrawTick := A_TickCount
return true
}
// 0.3.7
updateTextLabels() {
if (!checkHandles())
return false
if (textLabelTick + 200 > A_TickCount)
return true
oTextLabels := []
dwTextLabels := __DWORD(hGTA, dwSAMP, [SAMP_INFO_PTR, SAMP_POOLS, SAMP_POOL_TEXTLABEL])
if (!dwTextLabels)
return false
Loop, % SAMP_MAX_TEXTLABELS {
i := A_Index - 1
if (!__DWORD(hGTA, dwTextLabels, [0xE800 + i * 4]))
continue
dwAddress := __DWORD(hGTA, dwTextLabels, [i * 0x1D])
if (!dwAddress)
continue
string := __READSTRING(hGTA, dwAddress, [0x0], 256)
if (string == "")
string := __READSTRING(hGTA, dwAddress, [0x0], getDialogTextSize(dwAddress))
if (string == "")
continue
fX := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x8], "Float")
fY := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0xC], "Float")
fZ := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x10], "Float")
wVehicleID := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x1B], "UShort")
wPlayerID := __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x19], "UShort")
oTextLabels.Push(Object("ID", i, "TEXT", string, "XPOS", fX, "YPOS", fY, "ZPOS", fZ, "VEHICLEID", wVehicleID, "PLAYERID"
, wPlayerID, "VISIBLE", __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x18], "UChar"), "DISTANCE", __READMEM(hGTA, dwTextLabels, [i * 0x1D + 0x14], "Float")))
}
textLabelTick := A_TickCount
return true
}
Привет. Пожалуйста, поймите, что я пишу с помощью переводчика.
Приведенные ниже функции были найдены на сайте выше. https://github.com/Icii2q/SAMP_API/blob/master/API.ahk
Две указанные выше функции предназначены для версии 0.3.7.
Прежде всего, я попытался преобразовать updateTextDraws() в 0.3.DL.
Прежде всего, адрес 0.3.DL SAMP_INFO_PTR = 0x21A0F8 / SAMP_INFO_PTR = 0x3DE
Вам необходимо знать адрес 0.3.DL SAMP_POOL_TEXTDRAW. Но искал, но не нашел.
Теперь давайте объясним updateTextLabels().
На этот раз не удалось найти адрес SAMP_POOL_TEXTLABEL.
Can someone provide me with a nicely converted script to use the above two functions in 0.3.DL ?