Избранное ASI SAMPFUNCS

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Код:
0B44: samp 0@ = create_3d_text "dafuq" color 0xFFFF00FF position 1@ 2@ 3@ view_distance 50.0 show_behind_walls true attached_to_player -1 attached_to_vehicle -1
Почему после "2 спавна" текст пропадает?
Или у меня одного?
 

FYP

Известный
Автор темы
Администратор
1,763
5,890
gcode, попробуй переустановить Sanny Builder, а затем SDK SAMPFUNCS и скомпилировать скрипт заново, это должно решить проблему.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Как работает опкод 0B2F?
Код:
0B2F: samp get_streamed_out_player_pos 0@ to 1@ 2@ 3@ // Получает позицию удалённого игрока // Входные данные: 0@ - ид игрока. Выходные данные: 1@ 2@ 3@ - позиция
Он всё время возрващает координаты 0.0 0.0 0.0....

Мой код:
Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
wait 0
0B34: samp register_client_command "streampl" to_label @streampl
 
while true
    wait 0
end
 
:streampl
wait 0
0B35: samp 0@ = get_last_command_params
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@
then
    if and
        1@ > -1
        1@ < 1001
    then
        if
            SAMP.IsPlayerConnected(1@)
        then
            0B2F: samp get_streamed_out_player_pos 1@ to 2@ 3@ 4@
            0AF8: chat "ID: %d | X: %f , Y: %f , Z: %f" 0xFFFFFF 1@ 2@ 3@ 4@
        end
    end
end
0B43: ret

Хотя нет, получает координаты только игрока под 0 id
При всех остальных значениях, возвращает координаты 0.0
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
legend2360, по идее можно получать координаты только тех id, которые находятся в зоне прорисовки.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
legend2360, по идее можно получать координаты только тех id, которые находятся в зоне прорисовки.
Хех. Нет. Как раз этот опкод сделан для того, чтобы получать позицию игрока ВНЕ зоны прорисовки.
Я смотрел исходник собейта. Там есть такая функция, как узнать информацию о игроке вне стрима, но можно узнать только позицию по его id.
Я мучался(я нихера не знаю, как расставлять оффсеты), так и не смог сделать функцию.
А опкод очень нужен :(
Да и уже начало "названия" опкода говорит за себя: "get_streamed_out_player_pos"

Да и пробовал я использовать этот опкод и в зоне прорисовки, результата 0.
Получает только координаты игрока под нулевым ID и всё :(

Вот "структура":
Код:
struct stStreamedOutPlayerInfo
{
    int        iPlayerID[SAMP_PLAYER_MAX];
    float    fPlayerPos[SAMP_PLAYER_MAX][3];
};

А вот вызов( :D ):

Код:
#define HOOK_CALL_STREAMEDOUTINFO    0x63F80
DWORD dwStreamedOutInfoOrigFunc;
float fStreamedOutInfoPosX, fStreamedOutInfoPosY, fStreamedOutInfoPosZ;
uint16_t wStreamedOutInfoPlayerID;
uint8_t _declspec ( naked ) StreamedOutInfo ( void )
{
    _asm
    {
        push eax
        mov eax, dword ptr [esp+12]
        mov fStreamedOutInfoPosX, eax
        mov eax, dword ptr [esp+16]
        mov fStreamedOutInfoPosY, eax
        mov eax, dword ptr [esp+20]
        mov fStreamedOutInfoPosZ, eax
        mov ax, word ptr [esp+24]
        mov wStreamedOutInfoPlayerID, ax
        pop eax
    }
 
    _asm pushad
    g_stStreamedOutInfo.iPlayerID[wStreamedOutInfoPlayerID] = (int)wStreamedOutInfoPlayerID;
    g_stStreamedOutInfo.fPlayerPos[wStreamedOutInfoPlayerID][0] = fStreamedOutInfoPosX;
    g_stStreamedOutInfo.fPlayerPos[wStreamedOutInfoPlayerID][1] = fStreamedOutInfoPosY;
    g_stStreamedOutInfo.fPlayerPos[wStreamedOutInfoPlayerID][2] = fStreamedOutInfoPosZ;
    _asm popad
 
    _asm
    {
        push eax
        mov eax, g_dwSAMP_Addr
        add eax, HOOK_CALL_STREAMEDOUTINFO
        mov dwStreamedOutInfoOrigFunc, eax
        pop eax
 
        jmp dwStreamedOutInfoOrigFunc
    }
}
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Ещё для новой версии

Код:
0000: samp 0@ = get_last_message_from_chat // Получает последнюю строку чата
0000: samp 1@ = get_player_score 0@ // Получает очки (TAB) игрока с ИД 0@
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
gcode, попробуй переустановить Sanny Builder, а затем SDK SAMPFUNCS и скомпилировать скрипт заново, это должно решить проблему.
Проблема компиляции скриптов с командами действительно решилась. Осталась только непонятка из сообщения №96, попробовал даже на чистую gta ставить, итог тот же.
 

FYP

Известный
Автор темы
Администратор
1,763
5,890
Подскажите, пожалуйста, почему после использования
Код:
0B23: samp is_player_connected

Игра вылетает с warningами
Код:
Exception 0xC0000005 at 0x486DDF
Exception 0xC0000005 at 0x0
у опкода 0B23 один параметр, этим параметром является ид игрока. (см. описание опкодов)

После
Код:
0B36: samp 0@ = get_player_nickname 0
Тоже вылетает
Код:
Exception 0xC0000005 at 0x466751
Exception 0xC0000005 at 0x0
вылетает у тебя скорее всего после неправильного использования возвращенного значения, а не от самого опкода получения ника. делай пороверку после получения ника ( not 0@ == 0 ).
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
FYP, выложил код скрипта тут. Загляни, пожалуйста.
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
Кажется я нашёл корень всех своих проблем. Завтра попробую переписать код и сообщу, что вышло.

mgmoldova, спасибо большое. А не подскажешь, какие опкоды есть для работы со строками? Интересует именно поиск символа или строки символов, а точнее хотя бы просто проверка на их наличие, в строке. Ну или копирование определённого количества символов начиная с n-ого символа строки.
 

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
mgmoldova, спасибо, я так понял это поиск символа в строке? А можно на примере показать? Да и лучше бы было поиск строки символов в строке, который было бы легко сделать, если была бы функция копирования n-ого количества символов, начиная с символа номер m (есть ли такая?).

И ещё одна идея для опкода:
Код:
0000: samp is_player_animated 0@ // 0@ - SAMP-id игрока