Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Чет не работает. Мне нужно сделать так, чтоб перс нажимал на пробел постоянно.
ну, геймкей нажимает игровую кнопку, тоесть прыжок, бег и влево вправо и прочее, независимо от настроек управления
вот тебе табличка по которой можешь искать нужные кнопки


ONFOOT CONTROLS
#CONTROLGXT ENTRY VALUES
0left/right~k~~GO_LEFT~ / ~k~~GO_RIGHT~
1forward/backward~k~~GO_FORWARD~ / ~k~~GO_BACK~
2special ctrl left/right~k~~VEHICLE_LOOKLEFT~/~k~~VEHICLE_LOOKRIGHT~
3special ctrl up/down-unknown-
4action/secondary fire~k~~PED_ANSWER_PHONE~/ ~k~~PED_FIREWEAPON_ALT~
5previous weapon/zoom in ~k~~PED_CYCLE_WEAPON_LEFT~/ ~k~~PED_SNIPER_ZOOM_IN~
6aim weapon~k~~PED_LOCK_TARGET~
7next weapon/zoom out~k~~PED_CYCLE_WEAPON_RIGHT~/ ~k~~PED_SNIPER_ZOOM_OUT~
8group CTRL forward~k~~GROUP_CONTROL_FWD~
9group CTRL back~k~~GROUP_CONTROL_BWD~
10 conversation - no~k~~CONVERSATION_NO~
11 conversation - yes~k~~CONVERSATION_YES~
12(does not exist)-- -- --
13change camera~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~
14jump~k~~PED_JUMPING~
15enter vehicle~k~~VEHICLE_ENTER_EXIT~
16sprint~k~~PED_SPRINT~
17fire~k~~PED_FIREWEAPON~
18crouch~k~~PED_DUCK~
19look behind~k~~PED_LOOKBEHIND~
LALTsneak~k~~SNEAK_ABOUT~




VEHICLE CONTROLS




#CONTROLGXT ENTRY VALUES
0left/right~k~~VEHICLE_STEERLEFT~/ ~k~~VEHICLE_STEERRIGHT~
1steer back/up~k~~VEHICLE_STEERUP~/ ~k~~VEHICLE_STEERDOWN~
2special ctrl left/right~k~~VEHICLE_TURRETLEFT~/ ~k~~VEHICLE_TURRETRIGHT~ (NUM6)
3special control up/down~k~~VEHICLE_TURRETUP~/ ~k~~VEHICLE_TURRETDOWN~
4secondary fire~k~~VEHICLE_FIREWEAPON_ALT~
5look left~k~~VEHICLE_LOOKLEFT~
6hand brake~k~~VEHICLE_HANDBRAKE~
7look right~k~~VEHICLE_LOOKRIGHT~
8next radio station~k~~VEHICLE_RADIO_STATION_UP~
9previous radio station~k~~VEHICLE_RADIO_STATION_DOWN~
10no~k~~CONVERSATION_NO~
11yes / trip skip~k~~CONVERSATION_YES~
12(does not exist)-- -- --
13camera ~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~
14brake/reserve~k~~VEHICLE_BRAKE~
15enter/exit~k~~VEHICLE_ENTER_EXIT~
16accelerate~k~~VEHICLE_ACCELERATE~
17fire~k~~VEHICLE_FIREWEAPON~
18horn~k~~VEHICLE_HORN~
19submission~k~~TOGGLE_SUBMISSIONS~
RMBvehicle mouse look~k~~VEHICLE_MOUSELOOK~
[TBODY] [/TBODY]
 
  • Нравится
Реакции: Jason2222

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

AnWu

https://t.me/anwublog
Всефорумный модератор
4,761
5,368
Как пропатчить эти адреса?
0x00B7CEE4, 0x0096916E (inf run, oxy)
Lua:
local memory = require 'memory'
local one, two = memory.getfloat(0x00B7CEE4), memory.getfloat(0x0096916E)
run и oxy вроде в флоат записаны. Если проще, то через либу memory. Она дефолт.
 
  • Нравится
Реакции: kektop1

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
кто может перевести на lua?
CLEO:
{$CLEO}
wait 1000
0AC6: 0@ = label @HOOK_WIDTH offset
0AB1: @asm_jmp_hook 3 offset 0x00718D12 function 0@ virtual_protect 1 
0A8C: write_memory 0x00718D17 size 1 value 0x90 virtual_protect 1 //NOP
0@ += 0xF   
0AB1: @asm_jmp_hook 3 offset 0@ function 0x00718D18 virtual_protect 1
0a93:

:HOOK_WIDTH
hex
BF 00002042           // mov edi,42200000 { 40.00 }
57                    // push edi
D8 0C 24              // fmul dword ptr [esp]
5F                    // pop edi
BF 00000000           // mov edi,00000000 { 0 }
E9 00718D18           // jmp gta_sa.exe+318D18
end // hex

//0AB1: @asm_jmp_hook 3 offset 1@ function 2@ virtual_protect 1
:asm_jmp_hook
0A8C: write_memory 0@ size 1 value 0xE9 virtual_protect 2@
0062: 1@ -= 0@ // (int)
000E: 1@ -= 5
0@ += 1
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 2@
0AB2: ret 0
ало вы шо ебобо?
moonloader - functions | BlastHack — DEV_WIKI(https://blast.hk/wiki/moonloader:functions) пишешь опкоды и получаешь функу на луа, чуть шевельнуть извилинами и получится полностью рабочий код
 

BND / PLP

Новичок
84
4
Lua:
result, id = sampGetPlayerIdByCharHandle(playerPed)
я так получу свой ид?
upd: в начале забыл почекать, уже можно не отвечать
 

AnWu

https://t.me/anwublog
Всефорумный модератор
4,761
5,368
Lua:
result, id = sampGetPlayerIdByCharHandle(playerPed)
я так получу свой ид?
upd: в начале забыл почекать, уже можно не отвечать
можно пропустить result.
local _, id = ..
Всё равно вернет правду для playerPed.
 
  • Нравится
Реакции: BND / PLP

kektop1

Новичок
62
12
Есть массив с анимками
Lua:
local anims = {
    [0] = 'KO_SKID_BACK',
    [1] = 'KO_SKID_FRONT',
    [2] = 'FALL_COLLAPSE',
    [3] = 'GETUP_FRONT',
    [4] = 'VEND_USE',
    [5] = 'VEND_EAT_P',
    [6] = 'VEND_EAT1_P',
    [7] = 'VEND_DRINK_P',
    [8] = 'VEND_DRINK2_P'
    }
Как это здесь заюзать? не понимаю

Lua:
if isCharPlayingAnim(playerPed,
   clearCharTasksImmediately(playerPed)
end
 

Eugene Crabs

Активный
544
30
Хотелось бы получить пример использования вот этого:
Lua:
if string.find(str, 'текст', 1, true) 
then 
-- строка str содержит "текст" 
end
 

trefa

3d print
Всефорумный модератор
2,106
1,260
Хотелось бы получить пример использования вот этого:
Lua:
if string.find(str, 'текст', 1, true)
then
-- строка str содержит "текст"
end
Он просто ищет слово "текст" в переменной

Есть массив с анимками
Lua:
local anims = {
    [0] = 'KO_SKID_BACK',
    [1] = 'KO_SKID_FRONT',
    [2] = 'FALL_COLLAPSE',
    [3] = 'GETUP_FRONT',
    [4] = 'VEND_USE',
    [5] = 'VEND_EAT_P',
    [6] = 'VEND_EAT1_P',
    [7] = 'VEND_DRINK_P',
    [8] = 'VEND_DRINK2_P'
    }
Как это здесь заюзать? не понимаю

Lua:
if isCharPlayingAnim(playerPed,
   clearCharTasksImmediately(playerPed)
end
Lua:
isCharPlayingAnim(playerPed,anims[2])
 
Последнее редактирование модератором:

trefa

3d print
Всефорумный модератор
2,106
1,260
А, понял, спасибо. А как тогда найти текст в чате сампа?
Lua:
local sampev = require 'lib.samp.events' -- в самое начало

function sampev.onServerMessage(color, text)
if string.find(text, "текст")
print("ееее")
end
end

так работает только со второй, а если сделать
Lua:
isCharPlayingAnim(playerPed,anims[0, 8])
то скрипт и во все перестаёт работать
Потому что она так не юзается.
 
Последнее редактирование модератором: