Дата: Вторник, 01.08.2017, 16:42 | Сообщение # 256
Боец
Сообщений: 69
Статус: Offline
Отличный UDF. Но есть проблемы с функцией getLastDamagePed(ByRef Ped := "", ByRef Weapon := ""). Как она работает и что возвращает? В описании описано что возвращает id и посмотрев код видно, что возвращает ID, но мне непонятно какие аргументы указывать..
Дата: Вторник, 01.08.2017, 23:36 | Сообщение # 257
Czar Of Scripts
Сообщений: 1373
Статус: Offline
belyankin12, Можешь не чего не указывать. Покажет роде кто кого убил или что-то такое.
Добавлено (01.08.2017, 23:36) --------------------------------------------- Вот новая функа для чека в зоне стрима, раньше я ее выкладывал под названием isPlayerStreamebyid(id, dist), но она не всегда определяла, теперь выкладываю новую функу называется она isPlayerInStreamById(player_id [, dist]), которая имеет больше преимуществ над старой. Дабы сохранить всю табуляцию я залил весь код на сайт, где она сохраняется. Объясню как пользоваться. Например нам нужно проверить есть ли в указанном радиусе(по стандарту радиус равен 150) ид 30 мы делаем код:
Код
!1:: ; бинд на alt + 1 check := isPlayerInStreamById(30) if (check) ; Если функция выдала 1 addChatMessage("Ид 30 находится в зоне стрима") else if (!check) ; Если выдала 0 addChatMessage("Ид 30 НЕ находится в зоне стрима") return
А теперь представим что нужно узнать кто в строю по финду, в этом на поможет массив и представим что в диалоге пишет вот по такой форме: Ник[ИД] `t #Ранг Код:
Код
!2:: ; бинд на alt + 2 SendChat("/find") Time := A_TickCount while(!isDialogOpen()) ; ждем открытия диалога ровно 2 секунды, иначе пишем ошибку { if(A_TickCount - Time > 2000) { addChatMessageEx("00FF00", "Диалог не открылся за 2 секунды `;( Повторите попытку!") return } } di := getDialogLines() ; берем все строки в массив di Send, {ESC} ; Закроем диалог
ids := [] ; обнуляем массив с идами for k, v in di ; начнем проверять каждую строку в диалоге { if (RegExMatch(v, ".*\[([0-9]{1,3})\]\s+(\d+)", out)) ; Проверяем строку регуляркой { ids[A_Index] := out1 ; заносим в массив ид из диалога } }
number := isPlayerInStreamById(ids) ; указываем наш массив как ид
if (!number) ; Если не кого в радиусе 150 нету, то показываем сообщение { addChatMessageEx("00FF00", "Не кого в указанном радиусе нету!") } else { for k, v in number ; поверяем полученный массив { ; k (ид) | v (0 - Не в радиусе, 1 - В радиусе) if (v) addChatMessageEx("00FF00", getplayernamebyid(k) "[" k "] Находиться в указанном радиусе") else addChatMessageEx("00FF00", getplayernamebyid(k) "[" k "] Не находиться в указанном радиусе") } } return
Phoenixxx_Czar, привет. Неплохо. Для более удобного процесса лучше ретурнить расстояние между игроком и актером или добавить необязательный параметр ByRef возвращающий расстояние между игроками. Себе сам реализую, а вы подумайте)
Дата: Пятница, 04.08.2017, 13:17 | Сообщение # 263
Coder
Сообщений: 189
Статус: Offline
Неплохой плагин, еще бы командный движок, и вообще было бы офигенно. ► Оптимизация SCM / SMTA (pawn): http://cheat-master.ru/forum/117-706531-1 ► CM Smiles - Mini Chat (v1.0): http://cheat-master.ru/forum/2-706062-1 ► [Evolve-RP] - Баг на деньги (история тестера): http://cheat-master.ru/forum/282-709301-1 ► Накрутка сообщений в ВКонтакте (new): http://cheat-master.ru/forum/199-709369-1
Дата: Пятница, 04.08.2017, 14:50 | Сообщение # 264
Боец
Сообщений: 69
Статус: Offline
[CM]DonHomka, про ByRef полезная информация, как раз одну из моих проблем решила, спасибо. А функция не работает. По мне сделал один выстрел с дигла персонаж (повредил броню мне), функция возвращает пустые значения. Думал что из-за брони дело, снял броню, теперь выстрелом мне сняло ХП, все равно пустота.
Примечание:строка чата начинается с нуля, параметр line может быть от 0 до 99 getChatLineColor(line, isHex)// возвращает цвет строки setChatLineColor(color, line)// установить цвет строки getChatLineTimestamp(line, isUnixtime)// возвращает временную отметку строки чата setChatLineTimestamp(timestamp, line)// установить время для строки чата (только в формате unixtime, также можно использовать инкремент и декремент)
Примеры использования:
getChatLineColor(); вернет цвет первой строки в шестнадцатеричном виде (напр. 0xffffff) getChatLineColor(1); вернет цвет второй(1+1) строки в шестнадцатеричном виде (напр. 0xffffff) getChatLineColor(3, false); вернет цвет четвертой(3+1) строки в десятичном виде (напр. 16777215)
setChatLineColor(0xFFFFFF); установит белый цвет строке чата setChatLineColor(0xFF0000, 3); установит красный цвет четвертой строке чата
getChatLineTimestamp(0); вернет unix timestamp строки чата (напр. 1502273732) getChatLineTimestamp(0, false); вернет таймстамп строки чата в виде массива ; [HH,MM,SS,DAY,MONTH,YEAR]
setChatLineTimestamp(1502273732, 0); установит время первой строке чата по указанному таймстампу setChatLineTimestamp("+1"); прибавит одну секунду первой строке чата setChatLineTimestamp("-60", 1); убавит минуту второй строки чата setChatLineTimestamp("+120", 5); прибавит две минуты шестой строке чата
Код
getChatLineColor(line := 0, isHex := true) { ; 0x152 - offset for first message ; 0xFC - size of a full message ; 0xD4 - size of a string message ; 99 - max count of a messages if(!checkHandles()) return -1 dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR) if ErrorLevel return -1 clAddress := dwAddress + 0x152 + ((99-line) * 0xFC) + 0xD4 if ErrorLevel return -1 color := readMem(hGTA, clAddress, 3, "byte") if ErrorLevel return -1 if isHex return inttohex(color) return color }
setChatLineColor(color, line := 0) { if(!checkHandles()) return false if color is not integer { while(substr(color, 1, 1) == "0") color := substr(color, 2) color := "0x" color if strlen(color) != 8 return false ; разрешено 3 байта (6 символов + 2 это 0x) } else if(color > 16777215) return false ; цвет не может превышать 3 байта dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR) if ErrorLevel return false clAddress := dwAddress + 0x152 + ((99-line) * 0xFC) + 0xD4 if ErrorLevel return false writeMemory(hGTA, clAddress, color, 3, "byte") if ErrorLevel return false sendinput {f7 3} ; 3 - без соба, 4 - есть собейт return true }
getChatLineTimestamp(line := 0, unixtime := true) { ; 0x152 - offset for first message ; 0xFC - size of a full message ; 0x20 - offset from timestamp to message ; 99 - max count of a messages if(!checkHandles()) return -1 dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR) if ErrorLevel return -1 tsAddress := dwAddress + 0x152 + ((99-line) * 0xFC) - 0x20 if ErrorLevel return -1 timestamp := readMem(hGTA, tsAddress, 4, "int") if ErrorLevel return -1 ; timestamp += (A_Now - A_NowUTC) if unixtime return timestamp s = 1970 s += timestamp,s ; return [ substr(s, 1, 4), substr(s, 5, 2), substr(s, 7, 2), substr(s, 9, 2), substr(s, 11, 2), substr(s, 13, 2) ] ; [Y,M,D,HH,MM,SS] return [ substr(s, 9, 2) , substr(s, 11, 2) , substr(s, 13, 2) , substr(s, 7, 2) , substr(s, 5, 2) , substr(s, 1, 4) ] ; [HH,MM,SS,D,M,Y] }
setChatLineTimestamp(timestamp, line := 0) { if(!checkHandles()) return false if timestamp is float timestamp := floor(timestamp) if substr(timestamp, 1, 1) == "+" or substr(timestamp, 1, 1) == "-" timestamp := getChatLineTimestamp(line) + timestamp if timestamp is not integer return false dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR) if ErrorLevel return false tsAddress := dwAddress + 0x152 + ((99-line) * 0xFC) - 0x20 if ErrorLevel return false writeMemory(hGTA, tsAddress, timestamp, 4, "int") if ErrorLevel return -1 sendinput {f7 3} ; 3 - без соба, 4 - есть собейт return true }
Сообщение отредактировал aknqkzxlcs_21 - Четверг, 10.08.2017, 00:11