Требования: SF 3.0+, MGF 3.3+
Активация: Автоматическая; /asat - включить/выключить.
Описание:
Первая настоящая антисытость/антисытность на CLEO. Фишка её в том, что она работает не посредством NOP SetPlayerHealth, а немного иначе:
Когда игроку приходит команда о том, что нужно поменять хп, скрипт сверяет сколько хп прибавилось или отнялось. Если будет определено, что это отнимается хп от голода, то скрипт просто проигнорирует это действие, во всех остальных случаях (поднял хп, слэпнул админ и т.д) скрипт будет выполнять изменение здоровья.
Спасибо всей BH team за помощь в написании :)
Исходный код:
[hide=150]
[/hide]
Активация: Автоматическая; /asat - включить/выключить.
Описание:
Первая настоящая антисытость/антисытность на CLEO. Фишка её в том, что она работает не посредством NOP SetPlayerHealth, а немного иначе:
Когда игроку приходит команда о том, что нужно поменять хп, скрипт сверяет сколько хп прибавилось или отнялось. Если будет определено, что это отнимается хп от голода, то скрипт просто проигнорирует это действие, во всех остальных случаях (поднял хп, слэпнул админ и т.д) скрипт будет выполнять изменение здоровья.
Спасибо всей BH team за помощь в написании :)
Исходный код:
[hide=150]
PHP:
{$CLEO .cs}
0662: NOP "CLEO SETPLAYERHEALTH HOOK"
wait 0
repeat
wait 400
until 0AFA: is_samp_structures_available
0B34: samp register_client_command "asat" to_label @asat
0AC8: 30@ = allocate_memory_size 128
0AD3: 30@ = format "[Àíòèñûòîñòü+]: {EAEAEA}×èò íàïèñàí ñïåöèàëüíî äëÿ {FF8E1C}blasthack.net"
0AB1: call @write_text_in_chat 1 text 30@
0AD3: 30@ = format "[Àíòèñûòîñòü+]: {EAEAEA}Ââåäèòå {FF8E1C}/asat{EAEAEA}, ÷òîáû âêëþ÷èòü/âûêëþ÷èòü."
0AB1: call @write_text_in_chat 1 text 30@
0AC9: free_allocated_memory 30@
0ab1: call @GetSampBase 0 retr_base_to 20@
20@ += 0x21683A
0DB6: 30@ = create_hook from_addr 20@ to_label @antisat pop_count 0 var_to_set_hook 30
0DB7: plant_hook 30@
while true
wait 0
end
:antisat
0DB9: get_hook 30@ last_param_pntr_to 29@
0AB1: call @GetCallParam 2 params_pntr 29@ param_num -2 to 28@
0AB1: call @GetCallParam 2 params_pntr 29@ param_num 1 to 27@
0AB1: call @GetCallParam 2 params_pntr 29@ param_num 2 to 26@
0AB1: call @GetCallParam 2 params_pntr 29@ param_num 3 to 24@
0AB1: call @GetPlayerHealth 0 to 25@
0063: 26@ -= 25@
if or
26@ > -1.0
26@ < -2.0
21@ == true
then
005B: 26@ += 25@ // Эта строка добавлена в обновлении. Грубая ошибка что её не было :(
0DB8: unplant_hook 30@
0AA6: call_method 20@ struct 28@ num_params 3 pop 3 params 24@ 26@ 27@
0DB7: plant_hook 30@
end
0D98: callback_retn
:asat
if
21@ == false
then
21@ = true
0AD1: show_formatted_text_highpriority "ASAT ~R~OFF" time 3000
else
21@ = false
0AD1: show_formatted_text_highpriority "ASAT ~G~ON" time 3000
end
0B43: samp cmd_ret
:GetSampBase
0AA2: 0@ = load_library "kernel32.dll"
0AA4: 1@ = get_proc_address "GetModuleHandleA" library 0@
0AA7: call_function 1@ num_params 1 pop 0 "samp.dll" 2@
0AA3: free_library 0@
0ab2: ret 1 2@
:GetCallParam
0012: 1@ *= 4
005A: 0@ += 1@
0A8D: 2@ = read_memory 0@ size 4 virtual_protect 1
0AB2: ret 1 2@
:GetPlayerHealth
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x540
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0AB2: ret 1 0@
:write_text_in_chat
0ab1: call @GetSampBase 0 retr_base_to 3@
0A8E: 2@ = 3@ + 0x212A6C
0A8D: 1@ = read_memory 2@ size 4 virtual_protect 1
0A8E: 2@ = 3@ + 0x7A4F0
0AA6: call_method 2@ struct 1@ num_params 5 pop 0 params 0 0xFFFF8E1C 0 0@ 8
0AB2: ret 0