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