Misha_Willson
Новичок
- 3
- 1
помогите пожалуйста, у меня скрипт не роботает, он должен открывать/закрывать машину на букву L и вытаскивать/вставлять ключи на букву k
{$CLEO .cs}
0000:NOP
wait 3000
:lock
wait 0
if and
0AB0: key_pressed 76
0AF9: samp say_msg "/lock"
wait 200
jump @lock
:key
wait 0
if and
0AB0: key_pressed 75
0AF9: samp say_msg "/key"
wait 200
{$CLEO .CS}
0000: NOP
REPEAT
0001: WAIT 0 MS
UNTIL 0AFA: is_samp_available
WHILE TRUE
0001: WAIT 0 MS
IF 0C89: key_just_pressed 0x4B
THEN 0AF9: samp say_msg "/key"
END
IF 0C89: key_just_pressed 0x4C
THEN 0AF9: samp say_msg "/lock"
END
END
не робит, в чат warning летит, не работает((CLEO:{$CLEO .CS} 0000: NOP REPEAT 0001: WAIT 0 MS UNTIL 0AFA: is_samp_available WHILE TRUE 0001: WAIT 0 MS IF 0C89: key_just_pressed 0x4B THEN 0AF9: samp say_msg "/key" END IF 0C89: key_just_pressed 0x4C THEN 0AF9: samp say_msg "/lock" END END
cast('unsigned char *', 0x005609FF)[0] = 0xEB
cast('unsigned char *', 0x00561344)[0] = 0xEB
script_author('LUCHARE')
script_url('blast.hk')
local inicfg = require 'inicfg'
local ffi = require 'ffi'
local cfg = inicfg.load(
{
general = {
dist = 1200.0;
cmd_alias = 'fd';
}
},
'fogdist'
)
local settings = cfg.general
local cast = ffi.cast
local draw_dist = cast('float *', 0x00B7C4F0)
cast('unsigned char *', 0x005609FF)[0] = 0xEB
cast('unsigned char *', 0x00561344)[0] = 0xEB
function set_fog_dist(m)
if m > 3600.0 or m < 0 then return false end
draw_dist[0] = m
settings.dist = m
return true
end
function cmdproc_set_fog_dist(param)
param = tonumber(param)
if param ~= nil then
if not set_fog_dist(param) then
sampAddChatMessage('[FogDist] {FFFFFF}Incorrect value', 0xFF5000)
end
end
end
function main()
while not isSampAvailable() do wait(100) end
-- default command
sampRegisterChatCommand('fogdist', cmdproc_set_fog_dist)
-- user-defined command
local udc = settings.cmd_alias
if udc then
sampRegisterChatCommand(udc, cmdproc_set_fog_dist)
end
-- apply saved distance
set_fog_dist(settings.dist)
sampAddChatMessage('[FogDist] {FFFFFF}LUCHARE says hello', 0xFF5000)
wait(-1)
end
function onScriptTerminate(script, quitGame)
if script == thisScript() then
inicfg.save(cfg, 'fogdist')
end
end
0C11: memset destination 0@ value 1@ size 0x4Помогите адаптировать этот кусок кода под клео
Code:cast('unsigned char *', 0x005609FF)[0] = 0xEB cast('unsigned char *', 0x00561344)[0] = 0xEB
Code:script_author('LUCHARE') script_url('blast.hk') local inicfg = require 'inicfg' local ffi = require 'ffi' local cfg = inicfg.load( { general = { dist = 1200.0; cmd_alias = 'fd'; } }, 'fogdist' ) local settings = cfg.general local cast = ffi.cast local draw_dist = cast('float *', 0x00B7C4F0) cast('unsigned char *', 0x005609FF)[0] = 0xEB cast('unsigned char *', 0x00561344)[0] = 0xEB function set_fog_dist(m) if m > 3600.0 or m < 0 then return false end draw_dist[0] = m settings.dist = m return true end function cmdproc_set_fog_dist(param) param = tonumber(param) if param ~= nil then if not set_fog_dist(param) then sampAddChatMessage('[FogDist] {FFFFFF}Incorrect value', 0xFF5000) end end end function main() while not isSampAvailable() do wait(100) end -- default command sampRegisterChatCommand('fogdist', cmdproc_set_fog_dist) -- user-defined command local udc = settings.cmd_alias if udc then sampRegisterChatCommand(udc, cmdproc_set_fog_dist) end -- apply saved distance set_fog_dist(settings.dist) sampAddChatMessage('[FogDist] {FFFFFF}LUCHARE says hello', 0xFF5000) wait(-1) end function onScriptTerminate(script, quitGame) if script == thisScript() then inicfg.save(cfg, 'fogdist') end end
{$CLEO}
0000:
repeat
wait 100
until SAMP.Available()
0B34: samp register_client_command "fogdist" to_label @fogdist
3@ = 200.0
0C11: memset destination 0x005609FF value 0 size 0xEB
0C11: memset destination 0x00561344 value 0 size 0xEB
while true
wait 0
0A8C: write_memory 0x00B7C4F0 size 4 value 3@ virtual_protect 1
end
:fogdist
0B35: samp 0@ = get_last_command_params
if 0AD4: 2@ = scan_string 0@ format "%d" 1@
then
008F: 3@ = integer 1@ to_float
0A8C: write_memory 0x00B7C4F0 size 4 value 3@ virtual_protect 1
chatmsg "Fog changed to %d" 0xff5000 1@
end
SAMP.CmdRet()
Скачай FixDist by SR_Team, и тогда твой код будет выглядеть так:Может кто протестить? А то у меня чот крашит, мб конфликтует с чем-то.
{$CLEO}
0000:
repeat
wait 100
until SAMP.Available()
0B34: samp register_client_command "fogdist" to_label @fogdist
0BDE: pause_thread 0
:fogdist
0B35: samp 0@ = get_last_command_params
if 0AD4: 2@ = scan_string 0@ format "%d" 1@
then
008F: 3@ = integer 1@ to_float
0A8C: write_memory 0x00B7C4F0 size 4 value 3@ virtual_protect 1
chatmsg "Fog changed to %d" 0xff5000 1@
end
SAMP.CmdRet()
Попробуй опкод 065B, если ты уже получил его id
{$CLEO .cs}
0000:
0001: 1500
0B34: samp register_client_command "ff" to_label @cmd
alloc 0@ 200
0B6D: render 1@ = create_font "Arial Black" height 8 flags 5
0AC6: 3@ = label @1 offset
while true
0001: 0
if 2@ == 1
then
for 4@ = 0 to 4096
6@ = 0x9788C0
if 0B51: samp 5@ = pickup_handle_by_id 4@
then
065B: store_pickup 5@ position_to 7@ 8@ 9@
if 00C2: sphere_onscreen 7@ 8@ 9@ radius 0.0
then
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@)
0B55: convert_3D_coords 7@ 8@ 9@ to_screen 13@ 14@
0B55: convert_3D_coords 10@ 11@ 12@ to_screen 17@ 18@
0B68: render draw_line_point1 13@ 14@ point2 17@ 18@ width 1 color 0x88fff333
0B70: render draw_polygon_pos 13@ 14@ size 3 3 corners 7 rotation 0 color 0xbafff000
0A8E: 16@ = 6@ + 24
0A8D: 15@ = read_memory 16@ size 2 virtual_protect 0
065B: store_pickup 15@ position_to 19@ 20@ 21@
format 0@ "{808080}Èä: {ff0000}%d {808080}Ìîäåëü: {ff0000}%d {808080}[!]: {ff0000}%d %d %d" 4@ 15@ 19@ 20@ 21@
13@ += 5
14@ -= 7
0B6F: render font 1@ draw_text 0@ pos 13@ 14@ color 0xcaf4f4c1
end
end
end
end
end
:cmd
0B12: 2@ = 2@ XOR 1
0B43: samp cmd_ret
:1
hex
70 31 63 61 64 6f 72 3a 20 70 69 63 6b 75 70 20 73 63 61 6e 6e 65 72 20 4f 4e 00 70 31 63 61 64 6f 72 3a 20 70 69 63 6b 75 70 20 73 63 61 6e 6e 65 72 20 4f 46 46 00
end
Это довольно интересная поделка, но если честно я не понимаю, зачем тут есть массив и создание указателя на него, ведь он вообще нигде не задействован. А так, с виду это дело должно рендерить пикапы и некую инфу о них. Возможно из их структуры, судя по оффсетам. Не могу разобрать из-за иероглифов.да пробовал вроде, уже не помню, голова не соображает. Там этого одного опкода явно маловато будет, опять чет очевидное упускаю, на отдых пойду.
Код ниже оставлю если любопытно.
{$CLEO}
0000:
REPEAT
0001: 0
UNTIL 0AFA:
0BB9: samp 0@ = get_pickup_pool_ptr
WHILE TRUE
0001: 0
FOR 1@ = 0 TO 4096 [STEP = 1]
IF 0B51: samp 2@ = pickup_handle_by_id 1@
THEN
0A90: 2@ = 1@ * 20
000A: 2@ += 61444
000A: 2@ += 0@ // stPickup
0A8D: 3@ = read_memory 2@ size 4 virtual_protect TRUE
IF 0039: 3@ == ??? //ModelID
THEN
0C0C: 3@ = struct 2@ offset 8 size 4 // X
0C0C: 4@ = struct 2@ offset 12 size 4 // Y
0C0C: 5@ = struct 2@ offset 16 size 4 // Z
IF 00C2: sphere_onscreen 3@ 4@ 5@ radius 5.0
THEN
0B55: convert_3D_coords 3@ 4@ 5@ to_screen 3@ 4@
00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@
0B55: convert_3D_coords 5@ 6@ 7@ to_screen 5@ 6@
0B68: render draw_line_point1 5@ 6@ point2 3@ 4@ width 1 color 0xFFFFA500
END
END
END
END
END