[Разработка] SAMP UDF | Дорабатываем вместе! | От 04.02.2018
|
|
Abilka |
Дата: Четверг, 02.08.2018, 16:11 | Сообщение # 436
|
Новичок
Сообщений: 11
Статус: Offline
|
Цитата fiMa02 ( ) Хелпани пожалуйста. Смотри. делаю например команду :?:/name [id]:: Дальше в скрипте мне нужно вывести то что я написал на месте [id]. Команда показывает имя человека id которого я ввел. Знаю что такое можно Можешь?
Код #Include UDF.ahk
:?:/name:: SendInput,/name{space} input, dwId, V, {enter} again: Name := getPlayerNameById(dwId) if (Name != getPlayerNameById(dwId)) { goto again } else addChatMessage("Я ввел " dwID " ID игрока " Name) return Почему-то ник не всегда выводило, вставил if для этого, и так сойдет xD
Сообщение отредактировал Abilka - Четверг, 02.08.2018, 16:12 |
|
|
|
fiMa02 |
Дата: Четверг, 02.08.2018, 23:04 | Сообщение # 437
|
Новичок
Сообщений: 4
Статус: Offline
|
Цитата Abilka ( ) Код #Include UDF.ahk
:?:/name:: SendInput,/name{space} input, dwId, V, {enter} again: Name := getPlayerNameById(dwId) if (Name != getPlayerNameById(dwId)) { goto again } else addChatMessage("Я ввел " dwID " ID игрока " Name) return
Спасибо. Но можешь объяснить этот момент? input, dwId, V, {enter}
|
|
|
|
Abilka |
Дата: Пятница, 03.08.2018, 11:59 | Сообщение # 438
|
Новичок
Сообщений: 11
Статус: Offline
|
fiMa02, скрипт ожидает ввод значения и отправляет значение в перемененную нажатием Enter, dwID переменная с ID игрока.
|
|
|
|
|
MrGPro |
Дата: Воскресенье, 05.08.2018, 18:07 | Сообщение # 440
|
Боец
Сообщений: 202
Статус: Offline
|
RUStoGTA(string) ; перевод русских символов в GTA text при установленном русификаторе (Символы "ц", "ф" переводятся в верхний регистр, за неимением кодов в большинстве русификаторов.)
Код ; Работает нормально с руссификатором: http://galaxy-rpg.ru/files/190_sl-2-00-install.exe ; Перевода русских GameText, TextDraw символов в поддерживаемый GTA-русификаторами формат. ; Символы "ц", "ф" переводятся в верхний регистр, за неимением кодов в большинстве русификаторов. ; На основе https://autohotkey.com/board/topic/28714-transliteration-russian-to-english/ ; Ключи символов взяты http://cheat-master.ru/forum/117-273903-1 RUStoGTA(string) { strTokenRU = а,А,б,Б,в,В,г,Г,д,Д,е,Е,ё,Ё,ж,Ж,з,З,и,И,й,Й,к,К,л,Л,м,М,н,Н,о,О,п,П,р,Р,с,С,т,Т,у,У,ф,Ф,х,Х,ц,Ц,ч,Ч,ш,Ш,щ,Щ,ь,Ь,ъ,Ъ,ы,Ы,э,Э,ю,Ю,я,Я strTokenGT = a,A,—,Ђ,ў,‹,™,‚,љ,ѓ,e,E,e,E,›,„,џ,€,њ,…,ќ,…,k,K,ћ,‡,Ї,M,®,H,o,O,Ј,Њ,p,P,c,C,¦,Џ,y,Y,Ѓ,Ѓ,x,X,‰,‰,¤,Ќ,Ґ,Ћ,Ў,Љ,©,’,ђ,§,Ё,‘,Є,“,«,”,¬,• StringSplit tokenRU, strTokenRU, `, StringSplit tokenGT, strTokenGT, `, Loop Parse, string { token := A_LoopField isReplaced := false Loop %tokenRU0% { if ( token == tokenRU%A_Index% ) { isReplaced := true tokenReplace := tokenGT%A_Index% break } } if ( isReplaced ) strRes := strRes . tokenReplace else strRes := strRes . token } return strRes }
Тебе помогли не забывай про благодарность >> тыкни репутацию ---------------------------------------͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏͋͋' ͡ ͋̏̏̏̏̏̏̏̏̏ ----------------------------------------------------- Зам.Администратора на проекте "DayZ Epoсh SPN" сервер Arma 2OA DayZ Epoch пиратка и лицензия
|
|
|
|
yollee |
Дата: Четверг, 16.08.2018, 20:22 | Сообщение # 441
|
Новичок
Сообщений: 4
Статус: Offline
|
Код playAnimation(id){ sendChat("/anim") Sleep, 500 loop id{ Send, {NumpadDown} } Send, {Enter} } Проигрывает анимацию с помощью алгоритма, не на всех серверах такой алгоритм. by yollee
Yollee cheese!
Сообщение отредактировал yollee - Пятница, 17.08.2018, 14:19 |
|
|
|
МVДОННА |
Дата: Четверг, 23.08.2018, 00:17 | Сообщение # 442
|
Новичок
Сообщений: 2
Статус: Offline
|
Добавь описание к каждой строчке.
|
|
|
|
|
hutorupita |
Дата: Пятница, 24.08.2018, 12:07 | Сообщение # 444
|
Новичок
Сообщений: 14
Статус: Offline
|
Проверьте работает ли restartGameEx() и connect(IP) ? У меня и то и то вылетает с крашем. Другие некоторые функции работают. Серв 037 r2
|
|
|
|
JayscoreINC |
Дата: Вторник, 02.10.2018, 20:09 | Сообщение # 445
|
Любитель
Сообщений: 30
Статус: Offline
|
Есть ли функция, которая бы возвращала версию клиента? R1 или R2 ?
Некоторые люди наслаждаются дождём, другие просто промокают.
|
|
|
|
Rinat_Namazov |
Дата: Вторник, 02.10.2018, 21:58 | Сообщение # 446
|
Боец
Сообщений: 122
Статус: Offline
|
Цитата JayscoreINC ( ) Есть ли функция, которая бы возвращала версию клиента? R1 или R2 ? По адресу dwSAMP + 0x1036 и dwSAMP + 0xBABE можно определить версию.
|
|
|
|
FForest |
Дата: Четверг, 04.04.2019, 00:07 | Сообщение # 447
|
Местный Дурачок
Сообщений: 129
Статус: Offline
|
Вот функция, которая возвращает 1 если прицеп прицеплен, или 0 если прицеп отцеплен от фуры.
Код isTrailerAttached() { return !checkHandles() ? "" : readMem(hGTA, getModuleBaseAddress("gta_sa.exe", hGTA) + 0x76FC70) }
|
|
|
|
aknqkzxlcs_25 |
Дата: Вторник, 09.04.2019, 15:40 | Сообщение # 448
|
Новичок
Сообщений: 2
Статус: Offline
|
я хз живой ли еще этот сайт и обновляется ли здесь udf до сих пор, но всё равно скину эти функции писал очень давно и отдал на доработку тумкину, но походу позже он забил на это так же как и я в основном идея была для регистрации команд-пустышек, которые ничего не делают, но зато не отправляются серверу и это можно использовать с любым командным процессором вместо chat block input функции. делал когда еще не было 0.3.7 r2, поэтому это только для r1 (возможно, не проверял) привязывать команды нельзя к ahk функции, только по адресу к любой функции внутри gta_sa.exe которая выполняется без параметров (samp.dll / *.dll / *.asi / *.sf - все это тоже внутри gta_sa.exe , найти указатель на функцию можно при помощи отладчика)
Код ; addClientCommand("cmd") ; добавить пустую клиентскую команду /cmd, которая ничего не делает ; addClientCommand("cmd", 0x111111) ; добавить клиентскую команду и назначить на неё функцию ; renameClientCommand("q", "exit") ; переименовать клиентскую команду (на примере, /q в /exit) ; isClientCommand("fontsize") ; проверить клиентскую команду на существование ; setClientCommand("dl", 0x111111) ; назначить на клиентскую команду функцию (если команда существует) ; setClientCommand("fpslimit", dwClientQuit) ; заставить команду /fpslimit закрывать игру (как /q /quit) ; removeClientCommand("fpslimit") ; удалить клиентскую команду
addClientCommand(name, func := -1) { if !checkHandles() or !strlen(name) or strlen(name) > 32 return false if isClientCommand(name) { addChatMessageEx(0xdd0000, "the " name " command already exists") return false } if(func == -1) func := readDWORD(hGTA, dwSAMP + 0x65679) dwChatInfo := readDWORD(hGTA, dwSAMP + 0x21A0E8) dwNames := dwChatInfo + 0x24C dwPointers := dwChatInfo + 0xC dwCount := dwChatInfo + 0x14DC count := readMem(hGTA, dwCount, 1, "byte") loop 144 { cmd := readString(hGTA, dwNames + (0x21 * (A_Index - 1)), 32) if strlen(cmd) continue count++ writeString(hGTA, dwNames + (0x21 * (A_Index - 1)), name) writeMemory(hGTA, dwPointers + (4 * (A_Index - 1)), func, 4, "UInt") writeMemory(hGTA, dwCount, count, 1, "byte") return name } addChatMessageEx(0xdd0000, "CMDPROC is overloaded (too many commands)") return false }
isClientCommand(name) { if !checkHandles() or !strlen(name) or strlen(name) > 32 return false dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0E8) + 0x24C loop 144 { cmd := readString(hGTA, dwAddress + (0x21 * (A_Index - 1)), 0x21) if format("{:L}", name) == format("{:L}", cmd) return true } return false }
renameClientCommand(name, set) { if !checkHandles() or !strlen(name) or strlen(name) > 32 or !strlen(set) or strlen(set) > 32 return false dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0E8) + 0x24C loop 144 { dwAddr := dwAddress + (0x21 * (A_Index - 1)) cmd := readString(hGTA, dwAddr, 0x21) if format("{:L}", name) == format("{:L}", cmd) { writeString(hGTA, dwAddr, set) state := true } } return state }
setClientCommand(name, func := -1) { if !checkHandles() or !strlen(name) or strlen(name) > 32 return false dwChatInfo := readDWORD(hGTA, dwSAMP + 0x21A0E8) dwNames := dwChatInfo + 0x24C dwPointers := dwChatInfo + 0xC count := readMem(hGTA, dwCount, 1, "byte") loop 144 { cmd := readString(hGTA, dwNames + (0x21 * (A_Index - 1)), 0x21) if format("{:L}", name) == format("{:L}", cmd) { writeMemory(hGTA, dwPointers + (4 * (A_Index - 1)), 0, 4, "UInt") state := true } } return state }
removeClientCommand(name) { if !checkHandles() or !strlen(name) or strlen(name) > 32 return false dwChatInfo := readDWORD(hGTA, dwSAMP + 0x21A0E8) dwNames := dwChatInfo + 0x24C dwPointers := dwChatInfo + 0xC dwCount := dwChatInfo + 0x14DC count := readMem(hGTA, dwCount, 1, "byte") struct := {"names": [], "pointers": []} loop 144 { struct["names"].insert( readString(hGTA, dwNames + (0x21 * (A_Index - 1)), 0x21) ) struct["pointers"].insert( readDWORD(hGTA, dwPointers + (4 * (A_Index - 1))) ) } for k, v in struct["names"] { if format("{:L}", name) == format("{:L}", v) { count-- struct["names"].remove(k) struct["pointers"].remove(k) writeMemory(hGTA, dwCount, count, 1, "byte") ; пробовал --count, но ахк говно state := true } } for k, v in struct["names"] { if strlen(v) { writeString(hGTA, dwNames + (0x21 * (k - 1)), struct["names"][k]) writeMemory(hGTA, dwPointers + (4 * (k - 1)), struct["pointers"][k], 4, "UInt") } else { writeMemory(hGTA, dwNames + (0x21 * (k - 1)), 0, 0x21, "byte") writeMemory(hGTA, dwPointers + (4 * (k - 1)), 0, 4, "byte") } } return state }
* иногда багано (не помню в чем именно и как, при повторном тесте не смог найти баги)
|
|
|
|
|
FForest |
Дата: Вторник, 09.04.2019, 22:16 | Сообщение # 450
|
Местный Дурачок
Сообщений: 129
Статус: Offline
|
aknqkzxlcs_25, Как по мне бесполезно, можно продолжать использовать блокировку чата, ибо метод 100% рабочий.
|
|
|
|