You are not logged in.
Подскажите как реализовать последовательность нажатия подряд комбинации клавиш, как например когда вводишь читы? Я видел нечто подобное в скриптах Portal gun и Black Phoenix, там это реализованно буквально 5-6-ю опкодами, а мне приходится делать 750(образно) проверок и создавать кучу лэйблов. И то не всегда работает.
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Если вопрос не совсем понятен то вот пример:
03A4: name_thread 'PORTAL' :PORTAL_11 0001: wait 0 ms 0006: 30@ = -229907 008B: 30@ = &0(30@,1i) // (int) 0085: 31@ = 30@ // (int) 0016: 31@ /= 65536 0012: 31@ *= 65536 0062: 30@ -= 31@ // (int) 00D6: if 0039: 30@ == 20559 004D: jump_if_false @PORTAL_11 0006: 30@ = -229908 00D6: if 0038: &0(30@,1i) == 1381253452 004D: jump_if_false @PORTAL_11 0004: &0(30@,1i) = 1381253376 03E5: show_text_box 'CHEAT1' // Cheat activated 0006: 9@ = 0 0247: load_model #TEC9 038B: load_requested_models
Когда в игре введешь Portal то мод активируется. Как это сделать?
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
И еще про клавиши. Есть ли такой опкод который как бы "физически" нажимал нужную кнопку? ну например
:thread wait 0 if 00EC: actor $PLAYER_ACTOR 0 near_point $x $y radius 80.0 80.0 jf @thread wait 100 ????: press key 0x13 end_thread
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
1) Не вижу смысла в опкоде, который как бы "физически" "нажимал" нужную кнопку.
00EC: actor $PLAYER_ACTOR 0 near_point $x $y radius 80.0 80.0 Если игрок, находится в этом квадрате, то не нужно, виртально нажимать клавишу с помощью опкода, и в это же время, проверять, не нажата ли клавиша, виртуальным опкодом. Это Г.Л.У.П.О.. Надо делать какое либо действие.
2) После :thread надо хотябы wait 500 , иначе, если игрок не будет находится в указаном квадрате - то игра зависнет.
GTA SA CrashKiller by MadniX , Virtual_Key_Codes for opcode 0AB0
Offline
Касательно темы нажатия клвиш.
В файле memoryhandling.txt нет примера на @s или s$ переменных, может кто то знает по какому адресу прочитать такой набор клавиш. Т.е чтоб было не 16 последних символов а 8. И такой вопрос если нажать enter или там shift, то какой символ будет отображаться?
I know everything and nothing...
Offline
XotaBi4b я Н.Е. С.П.Р.А.Ш.И.В.А.Ю. глупо это или нет! Я спосил: возможно ли такое? И насчет 00EC: actor $PLAYER_ACTOR 0 near_point $x $y radius 80.0 80.0- я взял этот опкод ПРОСТО ТАК! ОТ НЕГО НИЧЕГО НЕ ЗАВИСИТ! Так же как и WAIT- если поставить 0 игра не зависнет: перед if нужно поставить WAIT, не спорю, но чему оно равно не имеет значения. Попробуй.
P.S.: и в моём скрипте нет поверки нажатия клавиши.
Last edited by Gyr (13-02-2009 12:38)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
mfisto,
И такой вопрос если нажать enter или там shift, то какой символ будет отображаться?
ничего, учитываются только буквы и цифры
Gyr,
возможно ли такое?
зависит от того, для чего тебе нужно. Отдельного опкода нет. Но теоретически можно записать по определенному адресу нужное число, и игра будет считать, что была нажата клавиша.
Offline
может сюда записывать надо?
0@ = -229908 008B: 1@ = &0(0@,1i) div(1@,0x100) mul(1@,0x100) 1@ += 0x41 //virtual key code нужной клавиши &0(0@,1i) = 1@
Offline
может сюда записывать надо?
0@ = -229908 008B: 1@ = &0(0@,1i) div(1@,0x100) mul(1@,0x100) 1@ += 0x41 //virtual key code нужной клавиши &0(0@,1i) = 1@
Нет, не подходит
P.S.: Нужно это для создания более реалистичных роликов(а то заставить персонажа перелезть через забор - целая проблема)
Last edited by Gyr (16-02-2009 14:59)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Извините что не в тему, сам вопрос:
у меня есть два актёра, у них в кач-ве оружия коктейль молотова. как заставить их швырять в меня молотовы?
Offline
Лови
05E2: AS_actor 65@ kill_actor $PLAYER_ACTOR
или
0634: AS_actor 65@ attack_using_weapon_actor $PLAYER_ACTOR unknown 4 unknown 2000 unknown 100
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Offline
Извините, но я так и не поняд как создаются скрипты с активацией, подобной читам. Объясните пожалйста подробно и на примере слова "weap".
Offline
Вот:
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
03A4: name_thread 'WEAP'
:WEAP_11
0006: 0@ = -229908
0002: jump @WEAP_28
:WEAP_28
00D6: if
0038: &0(0@,1i) == 0x57454150 //
004D: jump_if_false @WEAP_71
03E5: show_text_box 'CHEAT1' // Cheat activated
0002: jump @WEAP_83
:WEAP_71
0001: wait 1000 ms
0002: jump @WEAP_28
:WEAP_83
0001: wait 60000 ms
0002: jump @WEAP_11
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
вот тебе примеры:
//cheat '1234567890' 0@ = -229906 008B: 1@ = &0(0@,1i) 0085: 2@ = 1@ div(1@, 0x10000) mul(1@, 0x10000) 0062: 2@ -= 1@ if 2@ == 0x3132 then 0@ = -229907 if &0(0@,1i) == 0x33343536 then 0@ = -229908 if &0(0@,1i) == 0x37383930 then //то, что должно быть выполнено при наборе чита 03E5: text_box 'CHEAT1' // Cheat activated while &0(0@,1i) == 0x37383930 wait 0 end end end end
//cheat 'cheat' 0@ = -229907 008B: 1@ = &0(0@,1i) 0085: 2@ = 1@ div(1@, 0x100) mul(1@, 0x100) 0062: 2@ -= 1@ if 2@ == 0x43 then 0@ = -229908 if &0(0@,1i) == 0x48454154 then //то, что должно быть выполнено при наборе чита 03E5: text_box 'CHEAT1' // Cheat activated while &0(0@,1i) == 0x48454154 wait 0 end end end
//cheat 'give a lot of money' 0@ = -229904 008B: 1@ = &0(0@,1i) 0085: 2@ = 1@ div(1@, 0x1000000) mul(1@, 0x1000000) 0062: 2@ -= 1@ if 2@ == 0x474956 then 0@ = -229905 if &0(0@,1i) == 0x45204120 then 0@ = -229906 if &0(0@,1i) == 0x4C4F5420 then 0@ = -229907 if &0(0@,1i) == 0x4F46204D then 0@ = -229908 if &0(0@,1i) == 0x4F4E4559 then //то, что должно быть выполнено при наборе чита 03E5: text_box 'CHEAT1' // Cheat activated while &0(0@,1i) == 0x4F4E4559 wait 0 end end end end end end
//cheat 'hello world' 0@ = -229906 008B: 1@ = &0(0@,1i) 0085: 2@ = 1@ div(1@, 0x1000000) mul(1@, 0x1000000) 0062: 2@ -= 1@ if 2@ == 0x48454C then 0@ = -229907 if &0(0@,1i) == 0x4C4F2057 then 0@ = -229908 if &0(0@,1i) == 0x4F524C44 then //то, что должно быть выполнено при наборе чита 03E5: text_box 'CHEAT1' // Cheat activated while &0(0@,1i) == 0x4F524C44 wait 0 end end end end
Вот как я понимаю (не факт, что правильно):
Коды нажимаемых клавиш записываются в память в обратном порядке начиная со смещения -229908 относительно начала scm. Мы можем считать эту память
0006: 0@ = -229908 &0(0@,1i) == 0x57454150
Считываются первые 4 байта. 1 клавиша - один байт.
w - 0x57
e - 0x45
a - 0x41
p - 0x50
предпоследняя четверка нажатых клавиш - по адресу относительно начала scm -229907. Принцип тот же самый. Когда нужно прочесть n клавиш не кратное 4, нужно разделить значение по адресу на (0x100 *n) при помощи div. При этом отбросится дробная часть. Умножив (mul) на то же самое 0x100 *n и вычев полученное значение из начального, получим нужное количество младших байт. Это первые нажатые клавиши в текущей четверке. Смотри параллельно с примерами.
Приаттачиваю прогу. Написал, для одного скрипта, потом переделал под общий случай.
Last edited by Alien (20-02-2009 15:10)
Offline
Приаттачиваю прогу. Написал, для одного скрипта, потом переделал под общий случай.
Attachments:
Cheat_generator.zip
Не работает. Пишет что rtl70.bpl не найден
Last edited by Gyr (19-02-2009 18:15)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
сори, забыл. Щас перекомпилирую.=)
-----------------------------------------
готово, теперь должно работать. ссылка в посте выше.
Last edited by Alien (19-02-2009 18:31)
Offline
Читал вдумчиво и внимательно, но не понял ничего 
Наверное, я просто тупой, вы уж извините. Буду пользоваться программой. Спасибо за нее!
Посмотрите, я правильно вставил? Оно почему-то не работает:
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
wait 0
0@ = 304526
:NONAME_16
wait 0
if and
not Actor.Dead($PLAYER_ACTOR)
0@ = -229908
008B: 1@ = &0(0@,1i)
0085: 2@ = 1@
div(1@, 0x1000000)
mul(1@, 0x1000000)
0062: 2@ -= 1@
if
2@ == 0x574541
then
//то, что должно быть выполнено при наборе чита
03E5: text_box 'CHEAT1' // Cheat activated
while &0(0@,1i) == 0x574541
wait 0
end
end
else_jump @NONAME_16
Player.CanMove($PLAYER_CHAR) = False
08D4: 1@ = create_panel_with_title 'FES_WEA' position 31.0 110.0 width 80.0 columns 2 interactive 1 background 1 alignment 0 // ’“ K
08DB: set_panel 1@ column 0 header 'DUMMY' data 'M4' 'AK' 'SHOTGN1' 'SHOTGN3' 'SHOTGN2' 'STWE003' 'STWE002' 'STWE001' 'GUN3' 'MP5' 'STWE011' 'RIFLE' // M4 // ak47 // ЂPO…OB K // PA‡PѓBHO B HT4ECTEP // …OEBO ЂPO…OB K // ’“CTѓHHѓ OPE‚ // T X ’ CTO‚ET // ’ CTO‚ET // M KPO ’O‚“-ABTOMATѓ // CM† // TEK9 // B HTOBKA
08D6: set_panel 1@ column 0 alignment 1
08D6: set_panel 1@ column 1 alignment 2
09DB: set_panel 1@ column 0 width 140
09DB: set_panel 1@ column 1 width 46
090E: set_panel 1@ active_row 0
:NONAME_256
wait 0
if
0AB0: key_pressed 13
else_jump @NONAME_300
03E6: remove_text_box
08DA: remove_panel 1@
Player.CanMove($PLAYER_CHAR) = False
wait 10
jump @NONAME_16
:NONAME_300
wait 0
if
0AB0: key_pressed 16
else_jump @NONAME_256
03E6: remove_text_box
08D7: 2@ = panel 1@ active_row
Player.CanMove($PLAYER_CHAR) = True
08DA: remove_panel 1@
:NONAME_341
wait 0
if
2@ == 0
else_jump @NONAME_423
Model.Load(#M4)
038B: load_requested_models
:NONAME_370
wait 0
if and
Model.Available(#M4)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_370
01B2: give_actor $PLAYER_ACTOR weapon 31 ammo 3800 // Load the weapon model before using this
Model.Destroy(#M4)
wait 10
jump @NONAME_16
:NONAME_423
wait 0
if
2@ == 1
else_jump @NONAME_505
Model.Load(#AK47)
038B: load_requested_models
:NONAME_452
wait 0
if and
Model.Available(#AK47)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_452
01B2: give_actor $PLAYER_ACTOR weapon 30 ammo 3800 // Load the weapon model before using this
Model.Destroy(#AK47)
wait 10
jump @NONAME_16
:NONAME_505
wait 0
if
2@ == 2
else_jump @NONAME_587
Model.Load(#CHROMEGUN)
038B: load_requested_models
:NONAME_534
wait 0
if and
Model.Available(#CHROMEGUN)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_534
01B2: give_actor $PLAYER_ACTOR weapon 25 ammo 4000 // Load the weapon model before using this
Model.Destroy(#CHROMEGUN)
wait 10
jump @NONAME_16
:NONAME_587
wait 10
if
2@ == 3
else_jump @NONAME_669
Model.Load(#SHOTGSPA)
038B: load_requested_models
:NONAME_616
wait 0
if and
Model.Available(#SHOTGSPA)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_616
01B2: give_actor $PLAYER_ACTOR weapon 27 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SHOTGSPA)
wait 10
jump @NONAME_16
:NONAME_669
wait 10
if
2@ == 4
else_jump @NONAME_751
Model.Load(#SAWNOFF)
038B: load_requested_models
:NONAME_698
wait 0
if and
Model.Available(#SAWNOFF)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_698
01B2: give_actor $PLAYER_ACTOR weapon 26 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SAWNOFF)
wait 10
jump @NONAME_16
:NONAME_751
wait 0
if
2@ == 5
else_jump @NONAME_833
Model.Load(#DESERT_EAGLE)
038B: load_requested_models
:NONAME_780
wait 0
if and
Model.Available(#DESERT_EAGLE)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_780
01B2: give_actor $PLAYER_ACTOR weapon 24 ammo 4000 // Load the weapon model before using this
Model.Destroy(#DESERT_EAGLE)
wait 10
jump @NONAME_16
:NONAME_833
wait 0
if
2@ == 6
else_jump @NONAME_915
Model.Load(#SILENCED)
038B: load_requested_models
:NONAME_862
wait 0
if and
Model.Available(#SILENCED)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_862
01B2: give_actor $PLAYER_ACTOR weapon 23 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SILENCED)
wait 10
jump @NONAME_16
:NONAME_915
wait 0
if
2@ == 7
else_jump @NONAME_997
Model.Load(#COLT45)
038B: load_requested_models
:NONAME_944
wait 0
if and
Model.Available(#COLT45)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_944
01B2: give_actor $PLAYER_ACTOR weapon 22 ammo 4000 // Load the weapon model before using this
Model.Destroy(#COLT45)
wait 10
jump @NONAME_16
:NONAME_997
wait 0
if
2@ == 8
else_jump @NONAME_1079
Model.Load(#MICRO_UZI)
038B: load_requested_models
:NONAME_1026
wait 0
if and
Model.Available(#MICRO_UZI)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1026
01B2: give_actor $PLAYER_ACTOR weapon 28 ammo 7000 // Load the weapon model before using this
Model.Destroy(#MICRO_UZI)
wait 10
jump @NONAME_16
:NONAME_1079
wait 0
if
2@ == 9
else_jump @NONAME_1161
Model.Load(#MP5LNG)
038B: load_requested_models
:NONAME_1108
wait 0
if and
Model.Available(#MP5LNG)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1108
01B2: give_actor $PLAYER_ACTOR weapon 29 ammo 7000 // Load the weapon model before using this
Model.Destroy(#MP5LNG)
wait 10
jump @NONAME_16
:NONAME_1161
wait 0
if
2@ == 10
else_jump @NONAME_1161
Model.Load(#TEC9)
038B: load_requested_models
:NONAME_1190
wait 0
if and
Model.Available(#TEC9)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1190
01B2: give_actor $PLAYER_ACTOR weapon 32 ammo 7000 // Load the weapon model before using this
Model.Destroy(#TEC9)
wait 10
jump @NONAME_16
wait 0
if
2@ == 11
else_jump @NONAME_1325
Model.Load(#CUNTGUN)
038B: load_requested_models
:NONAME_1272
wait 0
if and
Model.Available(#CUNTGUN)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1272
01B2: give_actor $PLAYER_ACTOR weapon 33 ammo 3000 // Load the weapon model before using this
Model.Destroy(#CUNTGUN)
wait 10
jump @NONAME_16
:NONAME_1325
wait 0
if
2@ == 12
else_jump @NONAME_341
Model.Load(#SNIPER)
038B: load_requested_models
:NONAME_1354
wait 0
if and
Model.Available(#SNIPER)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1354
01B2: give_actor $PLAYER_ACTOR weapon 34 ammo 3000 // Load the weapon model before using this
Model.Destroy(#SNIPER)
wait 10
jump @NONAME_16
Last edited by GTASA (19-02-2009 21:36)
Offline
Нашел баг в своей проге. Когда чит состоит из 3 (или 2 или 1) буковок, это работать не будет.
while &0(0@,1i) == 0x574541 wait 0 end
это надо, чтобы исполнение не возвращалось на новую проверку набора, пока не нажата любая клавиша. Иначе проверка будет всегда возвращать true.
А вообще, вот так надо:
:0 wait 0 0@ = -229908 008B: 1@ = &0(0@,1i) 0085: 2@ = 1@ div(1@, 0x1000000) mul(1@, 0x1000000) 0062: 2@ -= 1@ if 2@ == 0x574541 //Если последние нажатые клавиши wea jf @0 //Иначе - вернуться назад на проверку 03E5: text_box 'CHEAT1' // Cheat activated :1 //И здесь идет твой код.
Прогой-то пользуйся, но с умом.
Offline
Способ, который вы используете, уже давно устарел. В наши дни, когда есть CLEO, читать адреса памяти через массивы уже не комильфо. 
Какое-то время назад я написал код, который должен облегчить процесс создания читов. Он еще нигде не публиковался, так что перед вами эксклюзив.
:TestCheat
if
0AA9: is_game_version_original
then
10@ = 0x969110 // keypresses buffer 1.0
11@ = 0xA48960 // mission locals 1.0
else
10@ = 0x96B790 // keypresses buffer 1.01
11@ = 0xA4AFE0 // mission locals 1.01
end
// get 0@'s offset
0A9F: 4@ = current_thread_pointer
0A8E: 5@ = 4@ + 0xDC // mission Flag
0A8D: 5@ = read_memory 5@ size 1 virtual_protect 0
if
5@ == 1
then
0085: 4@ = 11@
else
4@ += 0x3C
end
// get cheat string length
6@ = 0
while true
0A8D: 5@ = read_memory 4@ size 1 virtual_protect 0
if and
5@ > 0
6@ < 16
then
inc(4@)
inc(6@)
else
Break
end
end
0085: 8@ = 10@
while 6@ > 0
dec(4@)
dec(6@)
0A8D: 5@ = read_memory 4@ size 1 virtual_protect 0 // last cheat char
// lowercase to uppercase (a->A)
if
5@ > 90
then
5@ -= 32
end
0A8D: 7@ = read_memory 8@ size 1 virtual_protect 0 // last pressed key
inc(8@)
if
803B: 5@ <> 7@ // (int)
then
059A: return_false
0AB2: ret 0
end
end
0A8C: write_memory 10@ size 1 value 0 virtual_protect 0
0485: return_true
0AB2: ret 0Вставьте предложенный код без изменений в код скрипта (или миссии) и используйте его следующим образом:
{$CLEO}
0000:
while true
wait 250 ms
0@s = 'nocops'
if
0AB1: call_scm_func @TestCheat 2 0@ 1@
then
0110: clear_player $PLAYER_CHAR wanted_level
end
endпеременная 0@s содержит строку чита, которую нужно напечатать в игре (NOCOPS). Строки можно писать в любом регистре. Использовать можно только буквы и цифры.
0AB1: call_scm_func @TestCheat вызывает код проверки чита, который приведен выше. В функцию по частям передается строка для проверки. О том, почему так сделано, читайте здесь.
Если в игре был введен чит, и он совпал с переданной в функцию строкой, проверка вернет true, и выполнится условие, и соответственно те действия, которые вы захотите (в данном примере, будут убраны звезды розыска).
В функцию для проверки можно передавать строку длиной от 1 до 16 символов. Учтите, что если строка превышает 8 символов, то в качестве параметров будут задействованы не 2 переменные (0@ 1@ в примере), а 4 (0@ 1@ 2@ 3@). Например:
{$CLEO}
0000:
while true
wait 250 ms
0@v = "leavemealone"
if
0AB1: call_scm_func @TestCheat 4 0@ 1@ 2@ 3@
then
0110: clear_player $PLAYER_CHAR wanted_level
end
endОбратите внимание на измененный опкод 0AB1 по сравнению с первым примером, там передается 4 параметра. И переменная не 0@s а 0@v.
Если вы записали строку не в переменную 0@ в другую, например 22@v, тогда вызов функции будет выглядеть так
0AB1: call_scm_func @TestCheat 4 22@ 23@ 24@ 25@
Напоследок, для удобства, можно функцию сохранить во внешний файл и подключать ее к скрипту директивой $E. Например, сохраните аттач в папку с файлом скрипта, и подключите его командой
{$I TestCheat.inc}в конце файла.
Вот весь скрипт:
{$CLEO}
0000:
while true
wait 250 ms
22@v = "leavemealone"
if
0AB1: call_scm_func @TestCheat 4 22@ 23@ 24@ 25@
then
0110: clear_player $PLAYER_CHAR wanted_level
end
end
{$I TestCheat.inc}
Offline
хз, мне старый способ удобнее кажется и читать можно не только цифры и буквы, а любые клавиши. Да и ограничение на длину там побольше.=)
А я вот подумал... Можно ведь наверно передавать в функцию не строку, а также - integer
0x61626364 - это будет эквивалентно строке 'abcd'. Или я ошибаюсь?
И что будет если передать, скажем, символ пробела - 0x20?
Offline
Да, можно в функцию передать число (0x61626364 - abcd). Но со строкой удобнее, не нужно возиться с ASCII-кодами.
Я не помню учитывает ли игра пробел при вводе чита, возможно что и его можно использовать. Буквы и цифры точно можно.
Ограничение в 16 символов - это максимальная длина строки, очень сомневаюсь, что кому-то потребуется большая длина... Тут больше восьми символов уже запаришься печатать, не говоря про 16.
Offline
Извините, вы так и не ответили никто. Вот я хочу, чтобы скрипт запускался при написании weapon, но почему он не работает? Надо может после end что-то написать?
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
wait 0
0@ = 304526
:NONAME_16
wait 0
if and
not Actor.Dead($PLAYER_ACTOR)
//cheat 'weapon'
0@ = -229907
008B: 1@ = &0(0@,1i)
0085: 2@ = 1@
div(1@, 0x10000)
mul(1@, 0x10000)
0062: 2@ -= 1@
if
2@ == 0x5745
then
0@ = -229908
if
&0(0@,1i) == 0x41504F4E
then
//то, что должно быть выполнено при наборе чита
03E5: text_box 'CHEAT1' // Cheat activated
while &0(0@,1i) == 0x41504F4E
wait 0
end
end
end
else_jump @NONAME_16
Player.CanMove($PLAYER_CHAR) = False
08D4: 1@ = create_panel_with_title 'FES_WEA' position 31.0 110.0 width 80.0 columns 2 interactive 1 background 1 alignment 0 // ’“ K
08DB: set_panel 1@ column 0 header 'DUMMY' data 'M4' 'AK' 'SHOTGN1' 'SHOTGN3' 'SHOTGN2' 'STWE003' 'STWE002' 'STWE001' 'GUN3' 'MP5' 'STWE011' 'RIFLE' // M4 // ak47 // ЂPO…OB K // PA‡PѓBHO B HT4ECTEP // …OEBO ЂPO…OB K // ’“CTѓHHѓ OPE‚ // T X ’ CTO‚ET // ’ CTO‚ET // M KPO ’O‚“-ABTOMATѓ // CM† // TEK9 // B HTOBKA
08D6: set_panel 1@ column 0 alignment 1
08D6: set_panel 1@ column 1 alignment 2
09DB: set_panel 1@ column 0 width 140
09DB: set_panel 1@ column 1 width 46
090E: set_panel 1@ active_row 0
:NONAME_256
wait 0
if
0AB0: key_pressed 13
else_jump @NONAME_300
03E6: remove_text_box
08DA: remove_panel 1@
Player.CanMove($PLAYER_CHAR) = False
wait 10
jump @NONAME_16
:NONAME_300
wait 0
if
0AB0: key_pressed 16
else_jump @NONAME_256
03E6: remove_text_box
08D7: 2@ = panel 1@ active_row
Player.CanMove($PLAYER_CHAR) = True
08DA: remove_panel 1@
:NONAME_341
wait 0
if
2@ == 0
else_jump @NONAME_423
Model.Load(#M4)
038B: load_requested_models
:NONAME_370
wait 0
if and
Model.Available(#M4)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_370
01B2: give_actor $PLAYER_ACTOR weapon 31 ammo 3800 // Load the weapon model before using this
Model.Destroy(#M4)
wait 10
jump @NONAME_16
:NONAME_423
wait 0
if
2@ == 1
else_jump @NONAME_505
Model.Load(#AK47)
038B: load_requested_models
:NONAME_452
wait 0
if and
Model.Available(#AK47)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_452
01B2: give_actor $PLAYER_ACTOR weapon 30 ammo 3800 // Load the weapon model before using this
Model.Destroy(#AK47)
wait 10
jump @NONAME_16
:NONAME_505
wait 0
if
2@ == 2
else_jump @NONAME_587
Model.Load(#CHROMEGUN)
038B: load_requested_models
:NONAME_534
wait 0
if and
Model.Available(#CHROMEGUN)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_534
01B2: give_actor $PLAYER_ACTOR weapon 25 ammo 4000 // Load the weapon model before using this
Model.Destroy(#CHROMEGUN)
wait 10
jump @NONAME_16
:NONAME_587
wait 10
if
2@ == 3
else_jump @NONAME_669
Model.Load(#SHOTGSPA)
038B: load_requested_models
:NONAME_616
wait 0
if and
Model.Available(#SHOTGSPA)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_616
01B2: give_actor $PLAYER_ACTOR weapon 27 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SHOTGSPA)
wait 10
jump @NONAME_16
:NONAME_669
wait 10
if
2@ == 4
else_jump @NONAME_751
Model.Load(#SAWNOFF)
038B: load_requested_models
:NONAME_698
wait 0
if and
Model.Available(#SAWNOFF)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_698
01B2: give_actor $PLAYER_ACTOR weapon 26 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SAWNOFF)
wait 10
jump @NONAME_16
:NONAME_751
wait 0
if
2@ == 5
else_jump @NONAME_833
Model.Load(#DESERT_EAGLE)
038B: load_requested_models
:NONAME_780
wait 0
if and
Model.Available(#DESERT_EAGLE)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_780
01B2: give_actor $PLAYER_ACTOR weapon 24 ammo 4000 // Load the weapon model before using this
Model.Destroy(#DESERT_EAGLE)
wait 10
jump @NONAME_16
:NONAME_833
wait 0
if
2@ == 6
else_jump @NONAME_915
Model.Load(#SILENCED)
038B: load_requested_models
:NONAME_862
wait 0
if and
Model.Available(#SILENCED)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_862
01B2: give_actor $PLAYER_ACTOR weapon 23 ammo 4000 // Load the weapon model before using this
Model.Destroy(#SILENCED)
wait 10
jump @NONAME_16
:NONAME_915
wait 0
if
2@ == 7
else_jump @NONAME_997
Model.Load(#COLT45)
038B: load_requested_models
:NONAME_944
wait 0
if and
Model.Available(#COLT45)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_944
01B2: give_actor $PLAYER_ACTOR weapon 22 ammo 4000 // Load the weapon model before using this
Model.Destroy(#COLT45)
wait 10
jump @NONAME_16
:NONAME_997
wait 0
if
2@ == 8
else_jump @NONAME_1079
Model.Load(#MICRO_UZI)
038B: load_requested_models
:NONAME_1026
wait 0
if and
Model.Available(#MICRO_UZI)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1026
01B2: give_actor $PLAYER_ACTOR weapon 28 ammo 7000 // Load the weapon model before using this
Model.Destroy(#MICRO_UZI)
wait 10
jump @NONAME_16
:NONAME_1079
wait 0
if
2@ == 9
else_jump @NONAME_1161
Model.Load(#MP5LNG)
038B: load_requested_models
:NONAME_1108
wait 0
if and
Model.Available(#MP5LNG)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1108
01B2: give_actor $PLAYER_ACTOR weapon 29 ammo 7000 // Load the weapon model before using this
Model.Destroy(#MP5LNG)
wait 10
jump @NONAME_16
:NONAME_1161
wait 0
if
2@ == 10
else_jump @NONAME_1161
Model.Load(#TEC9)
038B: load_requested_models
:NONAME_1190
wait 0
if and
Model.Available(#TEC9)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1190
01B2: give_actor $PLAYER_ACTOR weapon 32 ammo 7000 // Load the weapon model before using this
Model.Destroy(#TEC9)
wait 10
jump @NONAME_16
wait 0
if
2@ == 11
else_jump @NONAME_1325
Model.Load(#CUNTGUN)
038B: load_requested_models
:NONAME_1272
wait 0
if and
Model.Available(#CUNTGUN)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1272
01B2: give_actor $PLAYER_ACTOR weapon 33 ammo 3000 // Load the weapon model before using this
Model.Destroy(#CUNTGUN)
wait 10
jump @NONAME_16
:NONAME_1325
wait 0
if
2@ == 12
else_jump @NONAME_341
Model.Load(#SNIPER)
038B: load_requested_models
:NONAME_1354
wait 0
if and
Model.Available(#SNIPER)
Player.Defined($PLAYER_CHAR)
not wasted_or_busted
else_jump @NONAME_1354
01B2: give_actor $PLAYER_ACTOR weapon 34 ammo 3000 // Load the weapon model before using this
Model.Destroy(#SNIPER)
wait 10
jump @NONAME_16
Offline