Добавлю ещё то, что вместо бесконечного цикла после создания команды можно просто поставить: 0BDE: pause_thread 0 .Раскритикую тебя немножко.
Добавлю ещё то, что вместо бесконечного цикла после создания команды можно просто поставить: 0BDE: pause_thread 0 .Раскритикую тебя немножко.
while trueВообщем, захотел я FPS Counter перевести с textdraw в render, но так как render не поддерживает форматирование, я сделал вот так:
Ну активация должна быть на букву O, даже не нажимая на неё, появляется три сиджея, и игра начинает бесоёбитьCLEO:0B6D: render 0@ = create_font "Arial" height 11 flags 5 wait 2000 const TIMER_OFFSET = 0xB7CB84 end :FPSON wait 0 0AB0: 79 0AC8: 0@ = allocate_memory_size 100 0AD3: 0@ = format "FPS %s" 1@ while true call @FPS 7 in 0@ 1@ 2@ 3@ 4@ 5@ 6@ out 0@ 1@ 2@ 3@ 4@ 5@ 6@ 0092: 8@ = float 6@ to_integer 0AD3: 8@ = format "FPS %s" 1@ 0B6F: render font 8@ draw_text "FPS %d" pos 100 100 color 0xFFff0000 end 0@ = 0.0 1@ = 0.0 2@ = 0.0 3@ = 0.0 4@ = 0.0 5@ = 0 6@ = 0.0 :FPS // in: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay. out: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay 0@ += 1.0 // fpsFrameCounter++; 0A8D: 7@ = read_memory TIMER_OFFSET size 4 virtual_protect 0 // GetTickCount 0085: 8@ = 7@ // (int) 0062: 7@ -= 5@ // (int) if 7@ > 240 // if ( (GetTickCount() - 250) > fps_time ) then 0087: 4@ = 3@ // fpsBuf4 = fpsBuf3; 0087: 3@ = 2@ // fpsBuf3 = fpsBuf2; 0087: 2@ = 1@ // fpsBuf2 = fpsBuf1; // fpsBuf1 = ( fpsFrameCounter * 4 ); 0087: 1@ = 0@ 1@ *= 4.0 // fpsDisplay = ( fpsBuf1 + fpsBuf2 + fpsBuf3 + fpsBuf4 ) / 4.0; 0087: 6@ = 1@ 005B: 6@ += 2@ // (float) 005B: 6@ += 3@ // (float) 005B: 6@ += 4@ // (float) 6@ /= 4.0 // fpsFrameCounter = 0; 0@ = 0.0 // fps_time = GetTickCount(); 0085: 5@ = 8@ end ret 7 0@ 1@ 2@ 3@ 4@ 5@ 6@
Исправь ту хуйню с переменными и wait'ом и дай код.Тоже самое :sad_frog:
Походу ошибка не в этом.
Где создание шрифта? Что за говно ты вообще рендеришь? Ты задавал формат переменной просто так? И зачем 0AD3: 0@ = format "FPS %s" 1@? И ФПС в %d, а не %s.CLEO::FPSON wait 0 0AB0: 79 0AC8: 0@ = allocate_memory_size 100 0AC8: 8@ = allocate_memory_size 100 0AD3: 0@ = format "FPS %s" 1@ while true wait 0 call @FPS 7 in 0@ 1@ 2@ 3@ 4@ 5@ 6@ out 0@ 1@ 2@ 3@ 4@ 5@ 6@ 0AD3: 8@ = format "FPS %s" 1@ 0B6F: render font 8@ draw_text "FPS %d" pos 100 100 color 0xFFff0000 end 0@ = 0.0 1@ = 0.0 2@ = 0.0 3@ = 0.0 4@ = 0.0 5@ = 0 6@ = 0.0 :FPS // in: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay. out: 0@ - frameCounter, 1@, 2@, 3@, 4@ - fpsBuf, 5@ - fpsTime, 6@ - fpsDisplay 0@ += 1.0 // fpsFrameCounter++; 0A8D: 7@ = read_memory TIMER_OFFSET size 4 virtual_protect 0 // GetTickCount 0085: 8@ = 7@ // (int) 0062: 7@ -= 5@ // (int) if 7@ > 240 // if ( (GetTickCount() - 250) > fps_time ) then 0087: 4@ = 3@ // fpsBuf4 = fpsBuf3; 0087: 3@ = 2@ // fpsBuf3 = fpsBuf2; 0087: 2@ = 1@ // fpsBuf2 = fpsBuf1; // fpsBuf1 = ( fpsFrameCounter * 4 ); 0087: 1@ = 0@ 1@ *= 4.0 // fpsDisplay = ( fpsBuf1 + fpsBuf2 + fpsBuf3 + fpsBuf4 ) / 4.0; 0087: 6@ = 1@ 005B: 6@ += 2@ // (float) 005B: 6@ += 3@ // (float) 005B: 6@ += 4@ // (float) 6@ /= 4.0 // fpsFrameCounter = 0; 0@ = 0.0 // fps_time = GetTickCount(); 0085: 5@ = 8@ end ret 7 0@ 1@ 2@ 3@ 4@ 5@ 6@ jump @FPSON
Тип | РазмерПосоны что сдесь не так? Вроде беру онфутку, вставляю байт с хп там же uint8_t это по идее целое число.. Так вот.. Крашит почему-то... гляньте что не так
Код::src wait 0 if 0@ == true jf @src 0B2B: samp 1@ = get_player_id_by_actor_handle $Player_Actor 0BBA: samp store_player 1@ onfoot_data 2@ alloc 2@ 68 0C0D: struct 2@ offset 34 size 1 = 50 0BC0: samp send_onfoot_data 2@ free 2@ wait 100 jump @src
Сначала выделяешь память, и после этого записываешь в неё онфут данные.Посоны что сдесь не так? Вроде беру онфутку, вставляю байт с хп там же uint8_t это по идее целое число.. Так вот.. Крашит почему-то... гляньте что не так
Код::src wait 0 if 0@ == true jf @src 0B2B: samp 1@ = get_player_id_by_actor_handle $Player_Actor 0BBA: samp store_player 1@ onfoot_data 2@ alloc 2@ 68 0C0D: struct 2@ offset 34 size 1 = 50 0BC0: samp send_onfoot_data 2@ free 2@ wait 100 jump @src
0B6F: render font 8@ draw_text "FPS %d" pos 100 100 color 0xFFff0000Я хотел просканировать рендер как строку, потом вывести фпс на экран
Шрифт я создал в самом начале кода
{$CLEO}
0000: 'AW_Rage'
const
script = 20@
end
repeat
wait 0
until samp.available
0B34: samp register_client_command "son" to_label @ScriptON
0B34: samp register_client_command "soff" to_label @ScriptOFF
alloc 10@ 128
while true
if script == true
then
if 0@ > 999
then
0@ = -1
end
0@ += 1
if
0B23: is_player_connected 0@
then
0B20: 1@ = actor_handle_by_samp_player_id 0@
if
056D: actor 1@ defined
then
0B25: 2@ = get_player_health 0@
0AD3: 10@ = format "Êîë-âî ÕÏ: %i" 2@
04C4: store_coords_to 3@ 4@ 5@ from_actor 1@ with_offset 0.0 0.0 1.0
0C45: samp create_3d_text id 0 text 10@ color 0xFFFFFF position 3@ 4@ 5@ view_distance 100.0 show_behind_walls 1 attached_to_player -1 attached_to_vehicle -1
end
end
end
wait 0
end
:ScriptON
script = true
cmdret
:ScriptOFF
script = false
cmdret
Тебя крашнет полюбасу, тк стоят ограничения на 3Д тексты, и код не проверял, возможно не рабочийПочему не работает? :с
CLEO:{$CLEO} 0000: 'AW_Rage' const script = 20@ end repeat wait 0 until samp.available 0B34: samp register_client_command "son" to_label @ScriptON 0B34: samp register_client_command "soff" to_label @ScriptOFF alloc 10@ 128 while true if script == true then if 0@ > 999 then 0@ = -1 end 0@ += 1 if 0B23: is_player_connected 0@ then 0B20: 1@ = actor_handle_by_samp_player_id 0@ if 056D: actor 1@ defined then 0B25: 2@ = get_player_health 0@ 0AD3: 10@ = format "Êîë-âî ÕÏ: %i" 2@ 04C4: store_coords_to 3@ 4@ 5@ from_actor 1@ with_offset 0.0 0.0 1.0 0C45: samp create_3d_text id 0 text 10@ color 0xFFFFFF position 3@ 4@ 5@ view_distance 100.0 show_behind_walls 1 attached_to_player -1 attached_to_vehicle -1 end end end wait 0 end :ScriptON script = true cmdret :ScriptOFF script = false cmdret
Сначала выделяешь память, и после этого записываешь в неё онфут данные.Посоны что сдесь не так? Вроде беру онфутку, вставляю байт с хп там же uint8_t это по идее целое число.. Так вот.. Крашит почему-то... гляньте что не так
Код::src wait 0 if 0@ == true jf @src 0B2B: samp 1@ = get_player_id_by_actor_handle $Player_Actor 0BBA: samp store_player 1@ onfoot_data 2@ alloc 2@ 68 0C0D: struct 2@ offset 34 size 1 = 50 0BC0: samp send_onfoot_data 2@ free 2@ wait 100 jump @src
0B6F: render font 8@ draw_text "FPS %d" pos 100 100 color 0xFFff0000Я хотел просканировать рендер как строку, потом вывести фпс на экран
Шрифт я создал в самом начале кода
Дебил? СНАЧАЛА ВЫДЕЛЯЕШЬ ПАМЯТЬ, ПОТОМ ЗАПИСЫВАЕШЬ В НЕЁ ОНФУТ. У тебя наоборот.Так то я выделил если ты не заметил... alloc 2@ 68
При запуске игры запускается клео в котором выводится рендер, и плюс две команды регистрируются, всё нормально. При вводе команды рендер пропадает, и его никак не вернуть. Как исправить? Если ввожу jump на рендер, после cmdret (или до cmdret), то игра вылетает.
{$CLEO}
0000:
wait 2000
reg_cmd "cmd1" @cmd1
reg_cmd "cmd2" @cmd2
while true
wait 0
// тут рендер
end
:cmd1
// код команды
cmd_ret
:cmd2
// код команды
cmd_ret
%G на %.2fCLEO:{$CLEO} {$INCLUDE SF} 0000: // KYRLYK_DEV TOOLS 0.3.7 0B34: samp register_client_command "sinfo" to_label @Help 0B34: samp register_client_command "ppos" to_label @ppos 0B34: samp register_client_command "sbar" to_label @FPSON 0B6D: render 0@ = create_font "Arial" height 11 flags 5 wait 2000 0B78: log "[KYRLYK] sInfo Loaded!" 0AF8: samp add_message_to_chat "[KYRLYK] sInfo çàïóùåí!" color 0xFF0000 0AF8: samp add_message_to_chat "[KYRLYK] Äëÿ ïðîñìîòðà êîìàíä ââåäèòå /sinfo" color 0xFF0000 :FPSON alloc 1@ 128 alloc 5@ 128 while true wait 0 actor.StorePos($PLAYER_ACTOR, 2@, 3@, 4@) 0B2B: samp 6@ = get_player_id_by_actor_handle $PLAYER_ACTOR 0B36: samp 7@ = get_player_nickname 6@ format 1@ = "| X: %G | Y: %G | Z: %G |" 2@ 3@ 4@ 0B6F: render font 0@ draw_text 1@ pos 300 0 color 0xffff0000 format 5@ = "| Nick: %s | ID: %d |" 7@ 6@ 0B6F: render font 0@ draw_text 5@ pos 14 388 color 0xffff0000 end :Help 0AF8: samp add_message_to_chat "sInfo êîìàíäû:" color 0x00FF00 0AF8: samp add_message_to_chat "/ppos <id> - Óçíàòü êîîðäèíàòû èãðîêà" color 0xFF0000 samp.CmdRet :ppos 0B35: samp 0@ = get_last_command_params if 0AD4: 1@ = scan_string 0@ format "%d" 2@ then 0B20: samp 3@ = actor_handle_by_samp_player_id 2@ if 0B23: samp is_player_connected 2@ then if 056D: actor 3@ defined then actor.StorePos(3@, 4@, 5@, 6@) 0AF8: samp add_message_to_chat "[pPos] Êîîðäèíàòû èãðîêà: {00FF00}| X: %G | Y: %G | Z: %G |" color 0xFF00FF 4@ 5@ 6@ else 0AF8: samp add_message_to_chat "[pPos] Èãðîê íå íàéäåí!" color 0xFF0000 end else 0AF8: samp add_message_to_chat "[pPos] Èãðîê íå ïîäêëþ÷åí!" color 0xFF0000 end else 0AF8: samp add_message_to_chat "[pPos] /ppos <playerid>" color 0xFF0000 end samp.CmdRet
:Noname_473
1@ = SAMP.Base()
1@ += 2173476
1@ = Memory.Read(1@, 4, 0)
1@ += 310
0@ *= 252
005A: 1@ += 0@ // (int)
1@ += 28
0AB2: ret 1 1@
Замени на опкод.Почему при использовании этой функции компилятор выдает ошибку:
Неверное выражение 1@ = Memory.Read(1@,4,0).
Одна из переменных имеет неизвестный тип, либо их типы несовместимы.
Функция:
CLEO::Noname_473 1@ = SAMP.Base() 1@ += 2173476 1@ = Memory.Read(1@, 4, 0) 1@ += 310 0@ *= 252 005A: 1@ += 0@ // (int) 1@ += 28 0AB2: ret 1 1@