Kristyan
Известный
- 165
- 16
ну и чо
Установи опкоды SAMPFUNCS.
Жру, не могу)
SAMP.Available() и не надо там ничего ставить в цикле когда ждёшь загрузку SAMP'а, то будет краш.
ну и чо
Установи опкоды SAMPFUNCS.
Вроде установлены, а почему так, хзУстанови опкоды SAMPFUNCS.
Тебе выше написали.Вроде установлены, а почему так, хз
[/B]
{$CLEO}
thread "FastScrollWeap | Legko9uh"[/B]
0AF1: write_int 49 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF2: 0@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol"
0AF1: write_int 50 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF2: 1@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main"
0AF1: write_int 51 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF2: 2@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun"
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
[B]:Pistol_1
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @Pistol_1
if
key_down 0@
jf @Main_1
if
Actor.HasWeapon($PLAYER_ACTOR, 22)
jf @Pistol_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 22
:Pistol_2
if
Actor.HasWeapon($PLAYER_ACTOR, 23)
jf @Pistol_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 23
:Pistol_3
if
Actor.HasWeapon($PLAYER_ACTOR, 24)
jf @Main_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 24
:Main_1
if
key_down 1@
jf @Shotgun_1
if
Actor.HasWeapon($PLAYER_ACTOR, 30)
jf @Main_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 30
:Main_2
if
Actor.HasWeapon($PLAYER_ACTOR, 31)
jf @Shotgun_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 31
:Shotgun_1
if
key_down 2@
jf @Rifle_1
if
Actor.HasWeapon($PLAYER_ACTOR, 25)
jf @Shotgun_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 25
:Shotgun_2
if
Actor.HasWeapon($PLAYER_ACTOR, 26)
jf @Shotgun_3
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 26
:Shotgun_3
if
Actor.HasWeapon($PLAYER_ACTOR, 27)
jf @Rifle_1
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 27
:Rifle_1
if
key_down 3@
jf @Pistol_1
if
Actor.HasWeapon($PLAYER_ACTOR, 33)
jf @Rifle_2
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 33
:Rifle_2
if
Actor.HasWeapon($PLAYER_ACTOR, 34)
jf @goto
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 34
:goto
goto @Pistol_1
[B]
так может для кодов клавиш ты будешь использовать опкод для считывания целых чисел с ини, а не дробных? вдруг именно в этом причина)Обычное клео на скрол оружия на цифры, не работает. Помогите, хочу через ини файл все это сделать (смену активации)
CLEO:[/B] {$CLEO} thread "FastScrollWeap | Legko9uh"[/B] 0AF1: write_int 49 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol" 0AF2: 0@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Pistol" 0AF1: write_int 50 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main" 0AF2: 1@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Main" 0AF1: write_int 51 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun" 0AF2: 2@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "ShotGun" 0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle" 0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle" [B]:Pistol_1 wait 0 if Player.Defined($PLAYER_CHAR) jf @Pistol_1 if key_down 0@ jf @Main_1 if Actor.HasWeapon($PLAYER_ACTOR, 22) jf @Pistol_2 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 22 :Pistol_2 if Actor.HasWeapon($PLAYER_ACTOR, 23) jf @Pistol_3 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 23 :Pistol_3 if Actor.HasWeapon($PLAYER_ACTOR, 24) jf @Main_1 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 24 :Main_1 if key_down 1@ jf @Shotgun_1 if Actor.HasWeapon($PLAYER_ACTOR, 30) jf @Main_2 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 30 :Main_2 if Actor.HasWeapon($PLAYER_ACTOR, 31) jf @Shotgun_1 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 31 :Shotgun_1 if key_down 2@ jf @Rifle_1 if Actor.HasWeapon($PLAYER_ACTOR, 25) jf @Shotgun_2 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 25 :Shotgun_2 if Actor.HasWeapon($PLAYER_ACTOR, 26) jf @Shotgun_3 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 26 :Shotgun_3 if Actor.HasWeapon($PLAYER_ACTOR, 27) jf @Rifle_1 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 27 :Rifle_1 if key_down 3@ jf @Pistol_1 if Actor.HasWeapon($PLAYER_ACTOR, 33) jf @Rifle_2 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 33 :Rifle_2 if Actor.HasWeapon($PLAYER_ACTOR, 34) jf @goto 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 34 :goto goto @Pistol_1 [B]
Ты имеешь введу поставить "test cheat" вместо key_down? кст key_down = key pressed, в этом может быть ошибка?так может для кодов клавиш ты будешь использовать опкод для считывания целых чисел с ини, а не дробных? вдруг именно в этом причина)
блэтТы имеешь введу поставить "test cheat" вместо key_down? кст key_down = key pressed, в этом может быть ошибка?
{$CLEO .cs}
0000: NOP
:0
wait 0
SAMP.Available
else_jump @0
0@ = Render.CreateFont("Tahoma", 34, 4)
:1
wait 0
0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
free 1@
alloc 1@ 64
format 1@ "TEXT2"
Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF)
free 1@
alloc 2@ 64
format 2@ "TEXT3"
Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF)
free 2@
alloc 3@ 64
format 3@ "TEXT4"
Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF)
free 3@
alloc 4@ 64
format 4@ "TEXT5"
Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF)
free 4@
alloc 5@ 64
format 5@ "TEXT6"
Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF)
free 5@
alloc 6@ 64
format 6@ "TEXT7"
Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF)
free 6@
alloc 7@ 64
format 7@ "TEXT8"
Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF)
free 7@
alloc 8@ 64
format 8@ "TEXT9"
Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF)
free 8@
alloc 9@ 64
format 9@ "TEXT10"
Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF)
free 9@
alloc 10@ 64
format 10@ "TEXT11"
Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF)
free 10@
alloc 11@ 64
format 11@ "TEXT12"
Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF)
free 11@
alloc 12@ 64
format 12@ "TEXT13"
Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF)
free 12@
alloc 13@ 64
format 13@ "TEXT14"
Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF)
free 13@
alloc 14@ 64
format 14@ "TEXT15"
Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF)
free 14@
alloc 15@ 64
format 15@ "TEXT16"
Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF)
free 15@
alloc 16@ 64
format 16@ "TEXT17"
Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF)
free 16@
alloc 17@ 64
format 17@ "TEXT18"
Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF)
free 17@
alloc 18@ 64
format 18@ "TEXT19"
Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 19@ 64
format 19@ "TEXT20"
Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF)
free 19@
alloc 20@ 64
format 20@ "TEXT21"
Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF)
free 20@
alloc 21@ 64
format 21@ "TEXT22"
Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF)
free 21@
alloc 22@ 64
format 22@ "TEXT23"
Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF)
free 22@
alloc 23@ 64
format 23@ "TEXT24"
Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF)
free 23@
alloc 24@ 64
format 24@ "TEXT25"
Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF)
free 24@
alloc 25@ 64
format 25@ "TEXT26"
Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF)
free 25@
alloc 26@ 64
format 26@ "TEXT27"
Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF)
free 26@
alloc 27@ 64
format 27@ "TEXT28"
Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF)
free 27@
alloc 28@ 64
format 28@ "TEXT29"
Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF)
free 28@
alloc 29@ 64
format 29@ "TEXT29"
Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF)
free 29@
jump @1
xdПомогите
{$CLEO}
:entry_point
03A4: -$set_thread_name "FastScrollWeap | Legko9uh"
jump @main_thread
:_config_manager_get_names_holder
ret 1 0x00872CEC
:_config_manager_get_names_iterator
call @_config_manager_get_names_holder 0 0@
ret 1 0@
:_config_manager_iterator_next
const
_config_manager_iterator_MAX_PTR_SHIFT 0x1A8
end
call @_config_manager_get_names_holder 0 1@
while true
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
if 8039: not 2@ == 0
then
0A8F: 2@ = 0@ - 1@
if 0029: 2@ >= _config_manager_iterator_MAX_PTR_SHIFT
then
059A: return_false
ret 2 0@ 0@
end
0085: 3@ = 0@
0C17: 2@ = strlen 0@
000A: 0@ += 2@
0485: return_true
ret 2 0@ 3@
end
inc(0@)
end
:_config_manager_check_integrity
call @_config_manager_get_names_iterator 0 1@
2@ = 1
while call @_config_manager_iterator_next 1 1@ 1@ 3@
0af8: "[%2i]: Weapon %s" -1 2@ 3@
inc(2@)
end
0af8: "Found %d weapons" -1 2@
ret 1 2@
:config_manager_find_name_by_index
call @_config_manager_get_names_iterator 0 1@
2@ = 1
while call @_config_manager_iterator_next 1 1@ 1@ 3@
if 003B: 2@ == 0@
then
return_true
ret 1 3@
end
inc(2@)
end
return_false
ret 1 3@
:config_manager_init
call @_config_manager_check_integrity 0 1@
0012: 1@ *= 4
0AC8: 2@ = allocate_memory_size 1@
0C11: memset destination 2@ value 0x0 size 1@
ret 2 2@ 1@
:config_manager_update
0012: 1@ *= 4
005A: 0@ += 1@
0A8C: write_memory 0@ size 4 value 2@ virtual_protect 0
ret 0
:config_manager_get
000E: 2@ -= 4
for 4@ = 0 to 2@ step 4
0A8E: 3@ = 4@ + 0@
0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0
if 003B: 3@ == 1@
then
0016: 4@ /= 4
return_true
ret 1 4@
end
end
return_false
ret 1 4@
:virtual_protect
const
PAGE_EXECUTE_READWRITE = 0x40
end
0AA2: 3@ = load_library "kernel32.dll"
0AA4: 4@ = get_proc_address "VirtualProtect" library 3@
0AA7: call_function 4@ num_params 4 pop 0 5@v 2@ 1@ 0@ 10@
ret 1 5@
:_config_manager_inject_opcode_bytecode
const
__config_manager_INJECTPOINT1 "12345678901234567890" // tbh, 16 is enough
__config_manager_INJECTPOINT1_LEN = 20
_config_manager_inject_opcode_bytecode_MAXSCANAREA = 255
end
0AC6: 2@ = label @__config_manager_key_inject_point offset
if 0039: 0@ == 0
then
for 3@ = 0 to _config_manager_inject_opcode_bytecode_MAXSCANAREA
0A8E: 4@ = 2@ + 3@
if 0C25: strncmp string1 4@ string2 __config_manager_INJECTPOINT1 size __config_manager_INJECTPOINT1_LEN
then
0085: 0@ = 4@
jump @_config_manager_inject_opcode_bytecode_setter
end
end
return_false
ret 1 0@
end
:_config_manager_inject_opcode_bytecode_setter
0C17: 2@ = strlen 1@
call @virtual_protect 3 0@ __config_manager_INJECTPOINT1_LEN PAGE_EXECUTE_READWRITE 10@
0C13: strcpy destination 0@ source 1@
call @virtual_protect 3 0@ __config_manager_INJECTPOINT1_LEN 10@ 10@
return_true
ret 1 0@
:config_manager_update_from_file
const
_config_manager_INI_SECTION "FastScrollWeap"
_config_manager_INI_FILE_PATH "Cleo\FastScrollWeap.ini"
end
call @_config_manager_get_names_iterator 0 2@
3@ = 1
while call @_config_manager_iterator_next 1 2@ 2@ 5@
if call @_config_manager_inject_opcode_bytecode 2 10@ 5@ 10@
then
:__config_manager_key_inject_point
if 0AF0: 4@ = get_int_from_ini_file _config_manager_INI_FILE_PATH section _config_manager_INI_SECTION key __config_manager_INJECTPOINT1
then
call @config_manager_update 3 0@ 3@ 4@
end
end
inc(3@)
end
ret 0
:config_manager_index_to_weapon_type
0AA7: call_function 0x00743D10 num_params 1 pop 1 0@ 1@
ret 1 1@
:config_manager_debug_print
call @_config_manager_get_names_iterator 0 1@
2@ = 1
while call @_config_manager_iterator_next 1 1@ 1@ 3@
0085: 4@ = 2@
0012: 4@ *= 4
005A: 4@ += 0@
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
0af8: "[%2i]: %s -> %d" -1 2@ 3@ 4@
inc(2@)
end
ret 0
:config_manager_get_button_bind
if and
call @config_manager_get 3 0@ 2@ 1@ 3@
call @config_manager_find_name_by_index 1 3@ 5@
then
call @config_manager_index_to_weapon_type 1 5@ 7@
return_true
ret 1 7@
end
return_false
ret 1 0
:utils_get_current_pressed_key
0AA5: call_function_noreturn 0x00541490 num_params 1 pop 1 0@v
ret 1 0@
:main_thread
// due to shadow constants, main_thread has to always be last function
while true
wait 40
if and
0AFA: is_samp_available
0256: player $PLAYER_CHAR defined
then
break
end
end
call @config_manager_init 0 0@ 1@
call @config_manager_update_from_file 1 0@
call @config_manager_debug_print 1 0@
while true
wait 0
call @utils_get_current_pressed_key 0 2@
if and
call @config_manager_get_button_bind 3 0@ 1@ 2@ 3@
02D8: actor $PLAYER_ACTOR current_weapon == 3@
then
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0
wait 10
01B9: set_actor $PLAYER_ACTOR armed_weapon_to 3@
end
end
free 0@
Зависит от конкретной задачинаверно один из часто задаваемых вопросов..
*(arr+i) == arr[i]
, когда на cleo это строк 10), да и понятие динамических массивов, выделения памяти и подобного там - одно из ключевых при использовании языка. Да и презентаций с красивыми рисунками того, как представляются данные в памяти компьютера тоже большое количествоблэт
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
у тебя в INI целые числа, целые, INTEGER которые, типа 1, 2, 3, 53, а считываешь ты дробные, с плавающей точкой, FLOAT которые, типа 0.002, 3.006, 14.88 и тд., но у тебя там нет таких, ты же туда целые записал. Фирштейн?
а, и ещё: в чём профит считывать из ini, если ты тупо прям перед считыванием записываешь туда свои данные? не так делается
ебашишь проверку на существование этого ini-ка, если его нет в природе, тогда создаёшь путём записывания этих циферок и потом читаешь; если же он всё-таки существует уже, то есть скрипт раньше запускался, то тогда делаешь просто считывание данных
надеюсь доходчиво объяснил, я на таком уровне давно ни с кем не общался, пардон, в моём королевстве все умные
Спасибоблэт
0AF1: write_int 52 to_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
0AF2: 3@ = get_float_from_ini_file "cleo\FastScrollWeap.ini" section "FastScrollWeap" key "Rifle"
у тебя в INI целые числа, целые, INTEGER которые, типа 1, 2, 3, 53, а считываешь ты дробные, с плавающей точкой, FLOAT которые, типа 0.002, 3.006, 14.88 и тд., но у тебя там нет таких, ты же туда целые записал. Фирштейн?
а, и ещё: в чём профит считывать из ini, если ты тупо прям перед считыванием записываешь туда свои данные? не так делается
ебашишь проверку на существование этого ini-ка, если его нет в природе, тогда создаёшь путём записывания этих циферок и потом читаешь; если же он всё-таки существует уже, то есть скрипт раньше запускался, то тогда делаешь просто считывание данных
надеюсь доходчиво объяснил, я на таком уровне давно ни с кем не общался, пардон, в моём королевстве все умные
Не знаю ответили ли тебе, но можешь создавать custom_thread и так ты за 1 переменную в основном потоке получаешь 30 в custom_thread , или не 30,и мне всегда хватаетнаверно один из часто задаваемых вопросов..
В общем, забил скрипт всеми доступными переменными и понадобились еще, поскольку я не не знаю как создавать
( и вообще в принципе что такое ) массивы, я побежал их изучать в интернете, ниче не понял толком и пришел сюда.
Предположим я хочу забить экран текстом, я создаю кучу разного рендер текста по экрану и мне нехватает переменных для того что бы создать еще. ( просто как пример, я где то вычитывал что переменные можно использовать по нескольку раз, но сейчас меня интересует как создать новые переменные или что то подобное )
Код:{$CLEO .cs} 0000: NOP :0 wait 0 SAMP.Available else_jump @0 0@ = Render.CreateFont("Tahoma", 34, 4) :1 wait 0 0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@ free 1@ alloc 1@ 64 format 1@ "TEXT2" Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF) free 1@ alloc 2@ 64 format 2@ "TEXT3" Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF) free 2@ alloc 3@ 64 format 3@ "TEXT4" Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF) free 3@ alloc 4@ 64 format 4@ "TEXT5" Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF) free 4@ alloc 5@ 64 format 5@ "TEXT6" Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF) free 5@ alloc 6@ 64 format 6@ "TEXT7" Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF) free 6@ alloc 7@ 64 format 7@ "TEXT8" Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF) free 7@ alloc 8@ 64 format 8@ "TEXT9" Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF) free 8@ alloc 9@ 64 format 9@ "TEXT10" Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF) free 9@ alloc 10@ 64 format 10@ "TEXT11" Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF) free 10@ alloc 11@ 64 format 11@ "TEXT12" Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF) free 11@ alloc 12@ 64 format 12@ "TEXT13" Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF) free 12@ alloc 13@ 64 format 13@ "TEXT14" Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF) free 13@ alloc 14@ 64 format 14@ "TEXT15" Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF) free 14@ alloc 15@ 64 format 15@ "TEXT16" Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF) free 15@ alloc 16@ 64 format 16@ "TEXT17" Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF) free 16@ alloc 17@ 64 format 17@ "TEXT18" Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF) free 17@ alloc 18@ 64 format 18@ "TEXT19" Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF) free 19@ alloc 19@ 64 format 19@ "TEXT20" Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF) free 19@ alloc 20@ 64 format 20@ "TEXT21" Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF) free 20@ alloc 21@ 64 format 21@ "TEXT22" Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF) free 21@ alloc 22@ 64 format 22@ "TEXT23" Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF) free 22@ alloc 23@ 64 format 23@ "TEXT24" Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF) free 23@ alloc 24@ 64 format 24@ "TEXT25" Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF) free 24@ alloc 25@ 64 format 25@ "TEXT26" Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF) free 25@ alloc 26@ 64 format 26@ "TEXT27" Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF) free 26@ alloc 27@ 64 format 27@ "TEXT28" Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF) free 27@ alloc 28@ 64 format 28@ "TEXT29" Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF) free 28@ alloc 29@ 64 format 29@ "TEXT29" Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF) free 29@ jump @1
в говнокод можете не всматриваться, черканул просто как пример)
наверно один из часто задаваемых вопросов..
В общем, забил скрипт всеми доступными переменными и понадобились еще, поскольку я не не знаю как создавать
( и вообще в принципе что такое ) массивы, я побежал их изучать в интернете, ниче не понял толком и пришел сюда.
Предположим я хочу забить экран текстом, я создаю кучу разного рендер текста по экрану и мне нехватает переменных для того что бы создать еще. ( просто как пример, я где то вычитывал что переменные можно использовать по нескольку раз, но сейчас меня интересует как создать новые переменные или что то подобное )
Код:{$CLEO .cs} 0000: NOP :0 wait 0 SAMP.Available else_jump @0 0@ = Render.CreateFont("Tahoma", 34, 4) :1 wait 0 0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@ free 1@ alloc 1@ 64 format 1@ "TEXT2" Render.DrawText(0@, 1@, 30@, 31@, 0xFFFFFFFF) free 1@ alloc 2@ 64 format 2@ "TEXT3" Render.DrawText(0@, 2@, 30@, 31@, 0xFFFFFFFF) free 2@ alloc 3@ 64 format 3@ "TEXT4" Render.DrawText(0@, 3@, 30@, 31@, 0xFFFFFFFF) free 3@ alloc 4@ 64 format 4@ "TEXT5" Render.DrawText(0@, 4@, 30@, 31@, 0xFFFFFFFF) free 4@ alloc 5@ 64 format 5@ "TEXT6" Render.DrawText(0@, 5@, 30@, 31@, 0xFFFFFFFF) free 5@ alloc 6@ 64 format 6@ "TEXT7" Render.DrawText(0@, 6@, 30@, 31@, 0xFFFFFFFF) free 6@ alloc 7@ 64 format 7@ "TEXT8" Render.DrawText(0@, 7@, 30@, 31@, 0xFFFFFFFF) free 7@ alloc 8@ 64 format 8@ "TEXT9" Render.DrawText(0@, 8@, 30@, 31@, 0xFFFFFFFF) free 8@ alloc 9@ 64 format 9@ "TEXT10" Render.DrawText(0@, 9@, 30@, 31@, 0xFFFFFFFF) free 9@ alloc 10@ 64 format 10@ "TEXT11" Render.DrawText(0@, 10@, 30@, 31@, 0xFFFFFFFF) free 10@ alloc 11@ 64 format 11@ "TEXT12" Render.DrawText(0@, 11@, 30@, 31@, 0xFFFFFFFF) free 11@ alloc 12@ 64 format 12@ "TEXT13" Render.DrawText(0@, 12@, 30@, 31@, 0xFFFFFFFF) free 12@ alloc 13@ 64 format 13@ "TEXT14" Render.DrawText(0@, 13@, 30@, 31@, 0xFFFFFFFF) free 13@ alloc 14@ 64 format 14@ "TEXT15" Render.DrawText(0@, 14@, 30@, 31@, 0xFFFFFFFF) free 14@ alloc 15@ 64 format 15@ "TEXT16" Render.DrawText(0@, 15@, 30@, 31@, 0xFFFFFFFF) free 15@ alloc 16@ 64 format 16@ "TEXT17" Render.DrawText(0@, 16@, 30@, 31@, 0xFFFFFFFF) free 16@ alloc 17@ 64 format 17@ "TEXT18" Render.DrawText(0@, 17@, 30@, 31@, 0xFFFFFFFF) free 17@ alloc 18@ 64 format 18@ "TEXT19" Render.DrawText(0@, 18@, 30@, 31@, 0xFFFFFFFF) free 19@ alloc 19@ 64 format 19@ "TEXT20" Render.DrawText(0@, 19@, 30@, 31@, 0xFFFFFFFF) free 19@ alloc 20@ 64 format 20@ "TEXT21" Render.DrawText(0@, 20@, 30@, 31@, 0xFFFFFFFF) free 20@ alloc 21@ 64 format 21@ "TEXT22" Render.DrawText(0@, 21@, 30@, 31@, 0xFFFFFFFF) free 21@ alloc 22@ 64 format 22@ "TEXT23" Render.DrawText(0@, 22@, 30@, 31@, 0xFFFFFFFF) free 22@ alloc 23@ 64 format 23@ "TEXT24" Render.DrawText(0@, 23@, 30@, 31@, 0xFFFFFFFF) free 23@ alloc 24@ 64 format 24@ "TEXT25" Render.DrawText(0@, 24@, 30@, 31@, 0xFFFFFFFF) free 24@ alloc 25@ 64 format 25@ "TEXT26" Render.DrawText(0@, 25@, 30@, 31@, 0xFFFFFFFF) free 25@ alloc 26@ 64 format 26@ "TEXT27" Render.DrawText(0@, 26@, 30@, 31@, 0xFFFFFFFF) free 26@ alloc 27@ 64 format 27@ "TEXT28" Render.DrawText(0@, 27@, 30@, 31@, 0xFFFFFFFF) free 27@ alloc 28@ 64 format 28@ "TEXT29" Render.DrawText(0@, 28@, 30@, 31@, 0xFFFFFFFF) free 28@ alloc 29@ 64 format 29@ "TEXT29" Render.DrawText(0@, 29@, 30@, 31@, 0xFFFFFFFF) free 29@ jump @1
в говнокод можете не всматриваться, черканул просто как пример)
{$CLEO}
0000:
repeat
wait 0
until SAMP.Available()
2@ = Render.CreateFont("Tahoma", 15, 4)
0b34: "blast" @restart
while true
wait 0
if 0B61: samp is_local_player_spawned
then
0B60: convert_game_screen_coords 315.0 315.0 to_window_screen_coords 30@ 31@
for 0@ = 0 to 30
alloc 1@ 128
format 1@ "Text%d" 0@
Render.DrawText(2@, 1@, 30@, 31@, -1)
31@ -= 20
free 1@
end
end
END
:restart
0A92: create_custom_thread "blasthk.cs"
0A93: end_custom_thread
SAMP.CmdRet()
// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}
//-------------MAIN---------------
thread "p1cador"
0000: NOP
:p1cador_13
not SAMP.Available
else_jump @p1cador_33
wait 100
jump @p1cador_13
:p1cador_33
if
14@ = Audiostream.Load("CLEO\headshot.mp3")
else_jump @p1cador_121
log "{ff0000}[p1cador] {00ff00}> headshot.mp3!"
jump @p1cador_169
:p1cador_121
log "{ff0000}[p1cador] {ff0000}> headshot.mp3 -1"
:p1cador_169
if
15@ = Audiostream.Load("CLEO\p1_bell.mp3")
else_jump @p1cador_255
log "{ff0000}[p1cador] {00ff00}> p1_bell.mp3!"
jump @p1cador_302
:p1cador_255
log "{ff0000}[p1cador] {ff0000}> p1_bell.mp3 -1"
:p1cador_302
31@ = -1
30@ = Render.CreateFont("Tahoma", 8, 13)
alloc 29@ 64
0B34: samp register_client_command "training" to_label @p1cador_579
0B34: samp register_client_command "troff" to_label @p1cador_610
call @p1cador_1400 0 12@ 13@
:p1cador_380
wait 0
if
not 31@ == -1
else_jump @p1cador_572
call @p1cador_717 2 31@ 29@ 0@ 24@
:p1cador_424
not 1@ == 1
else_jump @p1cador_553
wait 0
call @p1cador_935 3 0@ 10@ 14@ 1@ 10@
if
02E0: actor $PLAYER_ACTOR firing_weapon
else_jump @p1cador_490
2@ += 1
:p1cador_490
if
051A: actor 0@ damaged_by_actor $PLAYER_ACTOR
else_jump @p1cador_521
3@ += 1
054E: clear_actor 0@ damage
:p1cador_521
call @p1cador_1467 5 2@ 3@ 30@ 29@ 10@
jump @p1cador_424
:p1cador_553
1@ = 0
SAMP.Destroy3DText(24@)
Audiostream.PerformAction(15@, PLAY)
:p1cador_572
jump @p1cador_380
:p1cador_579
SAMP.IsCommandTyped(31@)
0C1B: 31@ = atof 31@
call @p1cador_1029 1 31@ 31@
SAMP.CmdRet
:p1cador_610
31@ = -1
2@ = 0
3@ = 0
4@ = 0
10@ = 0
Actor.DestroyInstantly(0@)
SAMP.Destroy3DText(24@)
chatmsg "p1cador: {ffffff}тренировочный режим {ff0000}выкл." 16711680
SAMP.CmdRet
:p1cador_717
if
0@ == 0
else_jump @p1cador_750
0208: 0@ = random_float_in_ranges 5.0 30.0
:p1cador_750
0087: 10@ = 0@ // (float)
0063: 11@ -= 0@ // (float)
10@ *= 0.74
11@ *= 0.74
0208: 12@ = random_float_in_ranges 10@ 11@
04C4: store_coords_to 13@ 14@ 15@ from_actor $PLAYER_ACTOR with_offset 12@ 0@ 20.3
02CE: 15@ = ground_z_at 13@ 14@ 15@
0376: 16@ = create_random_actor_at 13@ 14@ 15@
17@ = Actor.Angle($PLAYER_ACTOR)
17@ -= 180.0
Actor.Angle(16@) = 17@
format 1@ "%.1f" 0@
30@ = SAMP.Create3DText(1@, -5821910, 13@, 14@, 15@, 100.0, 1, -1, -1)
ret 2 16@ 30@
:p1cador_935
if
09A8: actor 0@ headshoted
else_jump @p1cador_965
1@ += 1
Audiostream.PerformAction(2@, PLAY)
:p1cador_965
if
Actor.Dead(0@)
else_jump @p1cador_1003
Actor.DestroyInstantly(0@)
ret 2 1 1@
jump @p1cador_1013
:p1cador_1003
ret 2 0 1@
:p1cador_1013
call @p1cador_935 1 0@ 1@
:p1cador_1029
if or
not 0@ >= 0.0
0@ > 100.0
else_jump @p1cador_1140
chatmsg "p1cador: {ffffff}введите расстояние {ff0000}(/training 1...100)" 16711680
ret 1 -1
:p1cador_1140
if and
0@ >= 1.0
not 0@ > 100.0
else_jump @p1cador_1274
chatmsg "p1cador: {ffffff}тренировочный режим {00ff00}вкл. {ffffff}дистанция = {00ff00}%.1f" 16711680 0@
ret 1 0@
:p1cador_1274
if
0@ == 0
else_jump @p1cador_1393
chatmsg "p1cador: {ffffff}тренировочный режим {00ff00}вкл. {ffffff}дистанция = {00ff00}random" 16711680
ret 1 0
:p1cador_1393
ret 1 -1
:p1cador_1400
SAMP.GetScreenResolution(10@, 11@)
10@ /= 640
11@ /= 448
0085: 12@ = 10@ // (int)
0085: 13@ = 11@ // (int)
12@ *= 540
13@ *= 370
ret 2 12@ 13@
:p1cador_1467
call @p1cador_1400 0 11@ 12@
Render.DrawBorderedBox(11@, 12@, 180, 42, -1726211044, 1, -16777216)
if and
0@ > 0
1@ > 0
else_jump @p1cador_1932
11@ += 2
12@ += 20
0085: 13@ = 1@ // (int)
13@ *= 176
0072: 13@ /= 0@ // (int)
0085: 14@ = 4@ // (int)
006A: 14@ *= 13@ // (int)
0072: 14@ /= 1@ // (int)
Render.DrawBorderedBox(11@, 12@, 176, 20, 1437379479, 1, -16777216)
Render.DrawBorderedBox(11@, 12@, 13@, 20, -1090453730, 1, -16777216)
005A: 11@ += 13@ // (int)
0062: 11@ -= 14@ // (int)
Render.DrawBorderedBox(11@, 12@, 14@, 20, -1073807330, 1, -16777216)
005A: 11@ += 14@ // (int)
0062: 11@ -= 13@ // (int)
0087: 21@ = 1@ // (float)
0073: 21@ /= 0@ // (float)
21@ *= 100.0
format 3@ "%.0f%%" 21@
11@ += 3
Render.DrawText(2@, 3@, 11@, 12@, -1)
11@ -= 3
12@ -= 18
format 3@ "Shots: {ffffff}%d {00ff1e}Hits: {ffffff}%d {ff0000}HS: {ffffff}%d" 0@ 1@ 4@
23@ = Render.FontDrawLength(2@, 3@)
24@ = 176
0062: 24@ -= 23@ // (int)
24@ /= 2
005A: 11@ += 24@ // (int)
Render.DrawText(2@, 3@, 11@, 12@, -5461097)
jump @p1cador_2121
:p1cador_1932
11@ += 2
12@ += 20
Render.DrawBorderedBox(11@, 12@, 176, 20, 1437379479, 1, -16777216)
12@ -= 18
format 3@ "Shots: {ffffff}%d {00ff1e}Hits: {ffffff}%d {ff0000}HS: {ffffff}%d" 0@ 1@ 4@
23@ = Render.FontDrawLength(2@, 3@)
24@ = 176
0062: 24@ -= 23@ // (int)
24@ /= 2
005A: 11@ += 24@ // (int)
Render.DrawText(2@, 3@, 11@, 12@, -5461097)
:p1cador_2121
ret 0
[B]CAutomobile (Автомобили)[/B][/SIZE]
0x0000 | CVehicle vehicle
0x05A0 | CDamageManager m_sDamageManager
0x05B8 | CDoor m_sDoor[6]
0x0648 | RwFrame *m_pFrame[25]
0x06AC | CPanel m_sPanel[3]
0x070C | CDoor m_sSwingingChassis
0x0724 | CColPoint m_swheelColPoint[4] // Точки соприкосновения колес автомобиля с поверхностью
0x07D4 | float wheelsDistancesToGround1[4] // Расстояния между колесами и поверхностью
0x07E4 | float wheelsDistancesToGround2[4]
0x07F4 | float _f7F4
0x0804 | DWORD _f804
0x0808 | DWORD _f808
0x080C | DWORD _f80C
0x0810 | BYTE _f810[24]
0x0828 | DWORD _f828[4]
0x0838 | BYTE _f838[16]
0x0848 | DWORD _f848
0x084C | float fRotorSpeed // Скорость вращения ротора (0.22 - ротор при работе)
0x0850 | DWORD _f850
0x0854 | DWORD _f854
0x0858 | BYTE _f858[16]
0x0868 | BYTE TaxiAvaliable
0x0869 | BYTE _f869
0x086A | WORD _f86A
0x086C | WORD _f86C
0x086E | WORD _f86E
0x0870 | DWORD someEndTime
0x0874 | DWORD someStartTime
0x0878 | DWORD _f878
0x087C | BYTE _f87C[28]
0x0898 | float fHeightAboveRoad
0x089C | float fRearHeightAboveRoad
0x08A0 | float _f8A0
0x08A4 | float fNitroValue
0x08A8 | BYTE _f8A8[8]
0x08B0 | DWORD _f8B0
0x08B4 | BYTE _f8B4[48]
0x08E4 | DWORD burnTimer
0x08E8 | DWORD _f8E8
0x08EC | BYTE _f8EC[96]
0x094C | DWORD _f94C
0x0950 | DWORD _f950
0x0954 | float fForcedHeading
0x0958 | BYTE _f958[8]
0x0960 | BYTE numContactWheels
0x0961 | BYTE allWheelsOnGround
0x0962 | BYTE _f962
0x0963 | BYTE _f963
0x0964 | DWORD _f964
0x0968 | DWORD _f968[4]
0x0978 | CParticle *pNitroParticle1
0x097C | CParticle *pNitroParticle2
0x0980 | BYTE _f980
0x0981 | BYTE _f981
0x0982 | WORD _f982
0x0984 | DWORD _f984
первый раз пробую читать память, как мне считать 0x084C | fRotorSpeed из CAutomobile?
CLEO:[B]CAutomobile (Автомобили)[/B][/SIZE] 0x0000 | CVehicle vehicle 0x05A0 | CDamageManager m_sDamageManager 0x05B8 | CDoor m_sDoor[6] 0x0648 | RwFrame *m_pFrame[25] 0x06AC | CPanel m_sPanel[3] 0x070C | CDoor m_sSwingingChassis 0x0724 | CColPoint m_swheelColPoint[4] // Точки соприкосновения колес автомобиля с поверхностью 0x07D4 | float wheelsDistancesToGround1[4] // Расстояния между колесами и поверхностью 0x07E4 | float wheelsDistancesToGround2[4] 0x07F4 | float _f7F4 0x0804 | DWORD _f804 0x0808 | DWORD _f808 0x080C | DWORD _f80C 0x0810 | BYTE _f810[24] 0x0828 | DWORD _f828[4] 0x0838 | BYTE _f838[16] 0x0848 | DWORD _f848 0x084C | float fRotorSpeed // Скорость вращения ротора (0.22 - ротор при работе) 0x0850 | DWORD _f850 0x0854 | DWORD _f854 0x0858 | BYTE _f858[16] 0x0868 | BYTE TaxiAvaliable 0x0869 | BYTE _f869 0x086A | WORD _f86A 0x086C | WORD _f86C 0x086E | WORD _f86E 0x0870 | DWORD someEndTime 0x0874 | DWORD someStartTime 0x0878 | DWORD _f878 0x087C | BYTE _f87C[28] 0x0898 | float fHeightAboveRoad 0x089C | float fRearHeightAboveRoad 0x08A0 | float _f8A0 0x08A4 | float fNitroValue 0x08A8 | BYTE _f8A8[8] 0x08B0 | DWORD _f8B0 0x08B4 | BYTE _f8B4[48] 0x08E4 | DWORD burnTimer 0x08E8 | DWORD _f8E8 0x08EC | BYTE _f8EC[96] 0x094C | DWORD _f94C 0x0950 | DWORD _f950 0x0954 | float fForcedHeading 0x0958 | BYTE _f958[8] 0x0960 | BYTE numContactWheels 0x0961 | BYTE allWheelsOnGround 0x0962 | BYTE _f962 0x0963 | BYTE _f963 0x0964 | DWORD _f964 0x0968 | DWORD _f968[4] 0x0978 | CParticle *pNitroParticle1 0x097C | CParticle *pNitroParticle2 0x0980 | BYTE _f980 0x0981 | BYTE _f981 0x0982 | WORD _f982 0x0984 | DWORD _f984
{$CLEO}
0000: NOP
REPEAT
0001: WAIT 0 MS
UNTIL 0AFA: is_samp_available
WHILE TRUE
0001: WAIT 0 MS
IF 0ADC: test_cheat "1"
THEN
03C0: 0@ = actor $PLAYER_ACTOR car
0A97: 0@ = car 0@ struct
0@ += 0x084C // fRotorSpeed
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 1
0AD1: show_formatted_text_highpriority "fRotorSpeed: %f" time 1500 0@
END
END