You are not logged in.
Ээээ...
Начнём с того, что такое
... r) false
False это результат, если ты хотел сделать проверку на ложность условия, то лучше использую else
if actor.dead($MyCounter) else
только then уже не нужен будет.
Делаю скрипт для ввода символов с клав-ры. Пока что, без вывода текста на экран, но столкнулся с проблемой.
Вот этот код вылетает:
:CRFND_1 wait 0 ms if 0ab0: 0x41 // кнопочко "A" jf @CRFND_2 if not 0@ == 8 // если набрано не более 8-и символов jf @CRFND_A 0@ += 1 v$btnA = "A" 098B: v$model1 = v$model + v$btnA v$model = v$model1 jump @CRFND_1
Мне кажется, что проблема в присвоении v$model1 результат сложения переменных v$model и v$btnA.
А аттач чем не ладен?
Во археолог-то!
Перебор скриптовых путей случайным образом. Для выяснения нужного.
зы. и вообще я забыл про то что такой скрипт делал...
не опять, а снова!! все уж давно его поставили, один ты тупишь))
Я уже говорил почему не хочу ставить клео4. Пока в версии не будут отлавлены все баги, то ставить не буду.
У меня нету таких опкодов...
Опять клео4?!
Всё что я нашёл это 05AA. Да и то, это не то что нужно.
05AA: 5@s = s$ACTOR_SPEECH_GXT_REFERENCE
ATTENTION! CLEO3 ONLY!
Допустим, я делаю проверку на нажатие каких-либо клавиш, и если клавиша нажата, то записываю её в переменную (v0@ = "A"). Так вот, допустим нажато несколько клавиш, как можно все получившиеся результаты переменных, объединить и записать в одну единую переменную? Я знаю что на си и дельфи есть функции по объединению строк, но как можно это реализовать на скриптовом уровне. Быть может есть какая-то ф-ция которая этим занимается?
Нельзя на клео4. Не в обиду алиену, но я не хочу связываться с клео4 пока она не будет полноценной и безбаговой версией.
Have you try to subtract this offset from the pickup? Or get the struct of pickup as object struct?
Юзай поиск по форуму, где-то уже писали.
Следующие оффесты являются типа Float, как позиции дверей и других частей машины которые могут отвалиться в следствии повреждений. Нам нужно перерасчитать их и установить им позиции, если мы перенесём машину в другое место. Otherwise the car spins uncontrollably:
* +1828 = Detachables1 Pos X
* +1832 = Detachables1 Pos Y
* +1836 = Detachables1 Pos Z
* +1872 = Detachables2 Pos X
* +1876 = Detachables2 Pos Y
* +1880 = Detachables2 Pos Z
* +1916 = Detachables3 Pos X
* +1920 = Detachables3 Pos Y
* +1924 = Detachables3 Pos Z
* +1960 = Detachables4 Pos X
* +1964 = Detachables4 Pos Y
* +1968 = Detachables4 Pos ZОффсеты для частей:
* +1828 = CarDetachPosAdr(0)
* +1872 = CarDetachPosAdr(1)
* +1916 = CarDetachPosAdr(2)
* +1960 = CarDetachPosAdr(3)
Both in the real and gaming worlds.
LOL
Зачем адрес в 10-ричной системе считаешь?
{$CLEO .cs}
//-------------MAIN---------------
thread "GRAVITY"
:GRAVITY_11
wait 0
if and
Player.Defined($PLAYER_CHAR)
00E1: key_pressed 0 11
else_jump @GRAVITY_11
0A8D: 2@ = read_memory 0x863984 size 4 virtual_protect 0
2@ += 50.0
wait 2000
:GRAVITY_12
wait 0
if
00E1: key_pressed 0 11
jf @GRAVITY_12
2@ -= 50.0
jump @GRAVITY_11
@listener - блин, и столько работы зря. Я уж начал думать как туда всунуть своё чего-нибудь
.
Спасибо что вовремя остановил!
Мне просто нужно сделать инжект в эту ф-цию, и "якобы" посадить на сидение игрока, не трогая его при этом. Это можно реализовать?
Каким образом ты это узнал?
2) Как управлять всеми сразу? Например дать оружие всем одним кодом.
Или придётся поотдельности, типа так
Вроде можно обратиться просто к переменной, без указания индекса массива. Тогда применится ко всем акторам в массиве.
UPDATE:
По поводу моего вопроса с _vehicleAddPassenger
Я разобрал код (прокомментировал) но никак не пойму, за что отвечают аргументы arg_0 и arg_4.
Полный код:
.text:0064F190 ; =============== S U B R O U T I N E ======================================= .text:0064F190 .text:0064F190 .text:0064F190 _vehicleAddPassenger proc near ; CODE XREF: _opcode_handler_18+B3Cp .text:0064F190 ; _opcode_handler_04+75Cp .text:0064F190 ; _opcode_handler_10+917p .text:0064F190 ; _opcode_handler_14+190Bp ... .text:0064F190 .text:0064F190 arg_0 = dword ptr 4 ; аргумент типа dword (4 байта) .text:0064F190 arg_4 = dword ptr 8 ; аргумент типa dword (8 байт) (?) .text:0064F190 .text:0064F190 000 mov edx, [esp+arg_0] ; пишем в edx адрес esp со смещением в 4 байта .text:0064F194 000 mov cl, [edx+429h] ; пишем в cl адрес edx со смещением в 0x429 байт .text:0064F19A 000 or eax, 0FFFFFFFFh ; либо в eax 0FFFFFFFFh либо false (?) .text:0064F19D 000 test cl, 2 ; если cl равен 2 байта .text:0064F1A0 000 jz short loc_64F1A8 ; если нет - идём на 64F1A8 .text:0064F1A2 .text:0064F1A2 loc_64F1A2: ; CODE XREF: _vehicleAddPassenger+48j .text:0064F1A2 000 mov eax, 8 ; пишем в eax 8 байт .text:0064F1A7 000 retn ; возвращение на операнд-вызов .text:0064F1A8 ; -------------------------------------------------------------------------------------------------------- .text:0064F1A8 .text:0064F1A8 loc_64F1A8: ; CODE XREF: _vehicleAddPassenger+10j .text:0064F1A8 000 mov ecx, [esp+arg_4] ; пишем в ecx адрес esp со смещением в 8 байт .text:0064F1AC 000 sub ecx, 0 ; вычитаем из ecx нолик .text:0064F1AF 000 jz short loc_64F1BD ; если нет - идём на 64F1BD .text:0064F1B1 000 dec ecx ; если да - уменьшаем ecx на единицу .text:0064F1B2 000 jz short loc_64F1DA ; если опять нет - идём на 64F1DA .text:0064F1B4 000 dec ecx ; уменьшаем ecx на единицу .text:0064F1B5 000 jnz short locret_64F1DF ; если так - идём на .text:0064F1B7 000 mov eax, 9 ; пишем в eax циферку 9 .text:0064F1BC 000 retn ; возврат .text:0064F1BD ; --------------------------------------------------------------------------------------------------------- .text:0064F1BD .text:0064F1BD loc_64F1BD: ; CODE XREF: _vehicleAddPassenger+1Fj .text:0064F1BD 000 cmp dword ptr [edx+590h], 9 ; сравниваем адрес edx (4 байта) со смещением в 0x590 байт с цифрой 9 .text:0064F1C4 000 jz short loc_64F1DA ; если нет - идём на 64F1DA .text:0064F1C6 000 mov eax, [edx+384h] ; если да - пишем в eax адрес edx со смещением 0x384 байт .text:0064F1CC 000 mov ecx, [eax+0CCh] ; пишем в ecx адрес eax со смещением в 0x0CC байт .text:0064F1D2 000 shr ecx, 9 ; сдвиг всех битов регистра ecx на 9 разрядов вправо .text:0064F1D5 000 test cl, 1 ; если cl равен одному .text:0064F1D8 000 jz short loc_64F1A2 ; если нет - идём на 64F1A2 .text:0064F1DA .text:0064F1DA loc_64F1DA: ; CODE XREF: _vehicleAddPassenger+22j .text:0064F1DA ; _vehicleAddPassenger+34j .text:0064F1DA 000 mov eax, 0Bh ; пишем в eax 0x0B .text:0064F1DF .text:0064F1DF locret_64F1DF: ; CODE XREF: _vehicleAddPassenger+25j .text:0064F1DF 000 retn ; возврат .text:0064F1DF _vehicleAddPassenger endp
Если ты про мультивыбор педов, то возможно в след. версии сделаю.
[img align=c]http://sweet-ru.at.ua/pedsfun.jpg[/img]
Моя первая версия скриптика для развлечения с педами.
На самом деле, тестировалось мною как уникально новый скрипт "слежения за игроками", но увы, вылилось в сиё творение.
Как работает:
Если видим пешехода (желательно рядом, но недалеко тоже можно, в машине тоже можно) и тыкаем на "Разговоры Yes" (заметьте, что под разговоры да подразумевается кнопка Y, у вас она может быть другой). Для ручного отключения режима - Разговоры No.
Включается режим слежки за педом. Если отойти / сам отойдёт на 30 метров и дальше - режим вырубится сам.
Пока вы в режиме слежки можно сделать следующее:
Y + пкм - отправить педа полетать (обязательно посмотрите как он приземлится)
Y + C - хедшот! (работает с педами в машине)
Y + Спринт - поделится своим оружием (кулаки не принимаются
)
Y + V - пед становится неубиваемым
Y + Прыжок - режим rage для педа (даёт миниган и ярость на всех проходящих рядом)
Вроде всё, сильно не пинайте, и не говорите что скрипт гамно. Спасибо за внимание 
PS. В сампе не работает.
[large]И в догонку...[/large]
[img align=c]http://sweet-ru.at.ua/cars-fun.jpg[/img]
В след за предыдущим скриптом "Peds fun!" незаметно выходит этот. Carz fun! хоть и не полный "кар контролёр", но ему надо отдать должное.
Скрипт позволяет вам контролировать выбранную машину. Включение скрипта - car (набрать). Для отключения - car (набрать) 
Далее, бежим к ближайшей дороге и начинаем "веселье" выбираю случайную машину кнопкой Tab.
Сразу говорю, что выбор машины немного глючный, по этому тыкайте сильнее и пока не...
После того как выбрали машину, время останавливается и вам даётся шанс подумать, чего бы натворить с машиной.
Вот что можно сделать:
Tab + A - сесть в машину пассажиром (если машина полная (мест нету) то вы тупо останетесь на месте)
Tab + S - отправить машину в облака (пока что она тупо приземляется, дальше - больше)
Tab + Y - машина ВНЕЗАПНО взрывается (песду не дают)
Tab + C - беспалевно взять машину (в 99% случаев, хозяин захочет забрать её назад, мгновенно)
Tab + Z - дурдом для машины, сменить цвет на случайный
Tab + X - моя любимая опция, отшвырнуть машину с глаз долой (если машина останется на месте после активации данной опции - просто легонько коснитесь её)
Когда вы в режиме действий над машиной, набирайте car что бы выключить скрипт.
PS. В сампе не работает!
Скачать carz fun! | Скачать peds fun!
ВНИМАНИЕ! Для работы скриптов необходима библиотека клео3 (не 4, а 3)!
Sw[ee]t wrote:У меня такого опкода вообще нету! :wow:
Это для клео 4? А для клео 3?Хм, и правда нет. Но наверное он аналогичен коду
0A96: $ActorStruct = actor $PLAYER_ACTOR structЭтот точно для CLEO 3
Ну ты читал что мне нужно? Превратить из указателя в хендл.
В любом случае, я нашёл альтернативное решение.
Вопросик опять: нашёл ф-цию 0x64F190 которая добавляет в машину пассажира. Можно-ли как то поддельно пихнуть игрока на пассажирское сидение (хотя бы на секунд пять) и тутже его оттуда убрать. Это мне опять для мп.
У меня такого опкода вообще нету! :wow:
Это для клео 4? А для клео 3?
Указатель на адрес в памяти по которому содержится пед. Я о том как этот адрес прочитать и получить готовый хендл актора.
Опять вопрос по мультиплееру.
Можно-ли как-то оперировать другими игроками (при помощи памяти разумеется)?
То есть сменить им координаты / здоровье / интерьер и тому подобное.
UPDATE:
Ещё вопросец. Допустим я получил указатель на педа, как его преобразовать в хендл? Где-то об этом говорилось, но я абсолютно ничего не нашёл дельного.
.text:00491863 call sub_4CEA80 ; set animation progress
Это вроде вызов самой функции. Адрес самого опкода - 0x491802.
Наверняка я неправ, и меня поправят 