Прошу помочь с функцией

Статус
В этой теме нельзя размещать новые ответы.

Nika23830

Новичок
Автор темы
11
3
Добрый день всем, в SAMP UDF есть функция установки маркера RedMarker
Я же хочу создать Маркер над головой (конус)
В cleo это реализовано очень просто
CLEO:
0187: 1@ = create_marker_above_actor $PLAYER_ACTOR
И у нас над головой висит маркер в виде конуса

Почитав адреса я решила проверить:
Не создавая конуса ввожу в AHK:
Код:
AddChatMessage(readDWORD(hGTA,0xC7DD58 + 82))
0xC7DD58 - Начало блока маркеров. Количество элементов - 32. Размер одного элемента - 160 байт.
+82 [dword] Статус наличия в поточном фрейме

Мне выдает "0"
Далее я с помощью Cleo создаю маркер(конус) у себя над головой и...
Код:
AddChatMessage(readDWORD(hGTA,0xC7DD58 + 82))
Выдает 1
Далее я пыталась работать с записью в память:
Код:
writeMemory(hGTA, 0xC7DD58 + 82, 0, 1, "byte")
Но это не имело результата
так же я пыталась через AHK изменять след. значения:
  • +88 = [byte] R
  • +89 = [byte] G
  • +90 = [byte] B
  • +91 = [byte] A
Тоже без результата, кто знает помогите :)
 
  • Нравится
Реакции: eiuhuth

#Rin

Известный
Всефорумный модератор
1,214
1,036
AutoHotKey:
writeMemory(hGTA, 0xC7DD58 + 82, 0, 1, "byte")
Это лишь статус наличия маркера над головой игрока и изменять его не имеет смысл.
Тебе нужно записывать все параметры необходимые для создания маркера.
 
  • Нравится
Реакции: eiuhuth

Nika23830

Новичок
Автор темы
11
3
NumPut*
Адрес функции либо ищи, либо попытайся найти в интернете.
Если смогу найти, сможете помочь? Меня надо только направить, дальше сама)
Если чесно, никогда не работала с этими функциями
PutNum + writeRaw + createRemoteThread + waitForSingleObject
Но попробую найти

Я нашла эти адреса:
Скажите как протестить их и я найду нужный)
  1. 00583820 244 CreateMarker
  2. 00583cc0 83 _setMarkerRadarMode
  3. 00583d20 76 _setMarkerRadarModeB
  4. 00583eb0 71 _setMarkerType
  5. 00583f00 60 _createInteriorMarker
  6. 00720fd0 181 _opCreateEntranceMarker

Вообщем я попыталась вызвать эти функции... но результата ноль...

Код:
VarSetCapacity(enablecp, 4, 0)
NumPut(0,enablecp,1,"Int")
writeRaw(hGTA,00583820, enablecp, 4)

Тоже самое проделала и с
Код:
00583820 244 CreateMarker
00583cc0 83 _setMarkerRadarMode
00583d20 76 _setMarkerRadarModeB
00583eb0 71 _setMarkerType
00583f00 60 _createInteriorMarker
00720fd0 181 _opCreateEntranceMarker
 
Последнее редактирование модератором:
  • Нравится
Реакции: eiuhuth

Nika23830

Новичок
Автор темы
11
3
не то, есть же встроенная ф-ция
AutoHotKey:
callWithParams(hProcess, dwFunc, aParams, bCleanupStack = true)
А как указать параметры?)
Брать из адресов память?
  • +48 = [float] Позиция X
  • +52 = [float] Позиция Y
  • +56 = [float] Позиция Z
Типа:
VarSetCapacity(Params, 4, 0)
NumPut(0x48,Params,[тут значение X],"Int")
NumPut(0x52,Params,[тут значение Y],"Int")
NumPut(0x56,Params,[тут значение Z],"Int")
и CallWithParams ?

Чтож, я попробовала:
Создала через cleo на 10 секунд (wait 10000)
В это время я через АХК прочла все данные из 0xC7DD58(взято отсюда)
Получила:

Код:
48: 1099.551025
52: 1601.496948
56: 11.555000
64: 451934168
68: 0
72: 299223724
76: 298698476
80: 
82: 1
84: 131072
88: 255
89: 0
90: 0
91: 76
92:
94: 
96: 820
100: 0.200000
104: 2.000000
108: 2.000000
112: 1.000000
116: 3709.831543
120: 0.000000
124: 0.000000
128: 0.000000
132: 0u
134:
136: 0.000000
140: 65535.000000
144: 0.000000
148: 0.000000
152: 0.000000
156: 820

Использовала:

Код:
VarSetCapacity(Par, 158, 0)
NumPut(48,Par,1099.551025,"Float")
NumPut(52,Par,1601.496948,"Float")
NumPut(56,Par,11.555000,"Float")
NumPut(64,Par,451934168,"DWORD")
NumPut(68,Par,0,"DWORD")
NumPut(72,Par,299223724,"DWORD")
NumPut(76,Par,298698476,"DWORD")
NumPut(80,Par,,"WORD")
NumPut(82,Par,1,"DWORD")
NumPut(84,Par,131072,"DWORD")
NumPut(88,Par,255,"Byte")
NumPut(89,Par,0,"Byte")
NumPut(90,Par,0,"Byte")
NumPut(91,Par,76,"Byte")
NumPut(92,Par,,"WORD")
NumPut(94,Par,,"WORD")
NumPut(96,Par,820,"DWORD")
NumPut(100,Par,0.200000,"Float")
NumPut(104,Par,2.000000,"Float")
NumPut(108,Par,2.000000,"Float")
NumPut(112,Par,1.000000,"Float")
NumPut(116,Par,3709.831543,"Float")
NumPut(120,Par,0.000000,"Float")
NumPut(124,Par,0.000000,"Float")
NumPut(128,Par,0.000000,"Float")
NumPut(132,Par,"0u","WORD")
NumPut(134,Par,"","WORD")
NumPut(136,Par,0.000000,"Float")
NumPut(140,Par,65535.000000,"Float")
NumPut(144,Par,0.000000,"Float")
NumPut(148,Par,0.000000,"Float")
NumPut(152,Par,0.000000,"Float")
NumPut(156,Par,820,"DWORD")
callWithParams(hGTA, 00720fd0, Par, true)
return

Результат: краша не произошло, но произошел игнор по всем функциям:

Код:
00583820 244 CreateMarker
00583cc0 83 _setMarkerRadarMode
00583d20 76 _setMarkerRadarModeB
00583eb0 71 _setMarkerType
00583f00 60 _createInteriorMarker
00720fd0 181 _opCreateEntranceMarker
 
Последнее редактирование модератором:

#Rin

Известный
Всефорумный модератор
1,214
1,036
Вот например функция установки маркера на карте с определенным радиусом, и сравни со своим.
AutoHotKey:
setCheckpoint(fX, fY, fZ, fSize ) {
    if(!checkHandles())
        return false
    dwFunc := dwSAMP + 0x9D340
    dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
    if(ErrorLevel || dwAddress==0) {
        ErrorLevel := ERROR_READ_MEMORY
        return false
    }
    VarSetCapacity(buf, 16, 0)
    NumPut(fX, buf, 0, "Float")
    NumPut(fY, buf, 4, "Float")
    NumPut(fZ, buf, 8, "Float")
    NumPut(fSize, buf, 12, "Float")
    writeRaw(hGTA, pParam1, &buf, 16)
    dwLen := 31
    VarSetCapacity(injectData, dwLen, 0)
    NumPut(0xB9, injectData, 0, "UChar")
    NumPut(dwAddress, injectData, 1, "UInt")
    NumPut(0x68, injectData, 5, "UChar")
    NumPut(pParam1+12, injectData, 6, "UInt")
    NumPut(0x68, injectData, 10, "UChar")
    NumPut(pParam1, injectData, 11, "UInt")
    NumPut(0xE8, injectData, 15, "UChar")
    offset := dwFunc - (pInjectFunc + 20)
    NumPut(offset, injectData, 16, "Int")
    NumPut(0x05C7, injectData, 20, "UShort")
    NumPut(dwAddress+0x24, injectData, 22, "UInt")
    NumPut(1, injectData, 26, "UInt")
    NumPut(0xC3, injectData, 30, "UChar")
    writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
    if(ErrorLevel)
        return false
    hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
    if(ErrorLevel)
        return false
    waitForSingleObject(hThread, 0xFFFFFFFF)
    closeProcess(hThread)
    ErrorLevel := ERROR_OK
    return true
}
 

Nika23830

Новичок
Автор темы
11
3
Вот например функция установки маркера на карте с определенным радиусом, и сравни со своим.
Я понимаю, но я говорю же я новичек :С
Я просто прошу помочь с созданием... Постепенно сама изучая
Ранее я никогда не вызывала функцию....

Лучше бы вы просто подсказали, мол пропустила где-то что-то и надо вставить что-то куда-то
 
Статус
В этой теме нельзя размещать новые ответы.