Форум Pawn.Wiki - Воплоти мечту в реальность!: OnPlayerText не могу ходить с анимацией - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
OnPlayerText не могу ходить с анимацией

#1
Пользователь офлайн   Crestan Games 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Здравствуйте, проблема в том что не могу ходить когда пишу что-то в чат, пробовал многое но не смог найти решение, если знаете в чем проблема подскажите пожалуйста!
public OnPlayerText(playerid, text[])
{
    if(!pInfo[playerid][pLogged]) return 0;
    
    new playerName[64];
    new chatColors = COLOR_CHAT_IC;
    
    if(PlayerMasked[playerid])
    {
        format(playerName, sizeof(playerName), "Неизвестный [%d]", playerid);
        chatColors = 0xA0A0A0FF;
    }
    else
    {
        format(playerName, sizeof(playerName), "%s [%d]", pInfo[playerid][pName], playerid);
    }
    
    new vehicleid = GetPlayerVehicleID(playerid);
    new inVehicle = (vehicleid != 0);
    new speakerWindowsClosed = 0;
    
    if(inVehicle)
    {
        speakerWindowsClosed = vehicleWindowState[vehicleid];
    }
    
    foreach(new i : Player)
    {
        if(i == playerid) continue; 
        
        if(!pInfo[i][pLogged]) continue;
        
        new listenerVehicleid = GetPlayerVehicleID(i);
        new listenerInVehicle = (listenerVehicleid != 0);
        new listenerWindowsClosed = 0;
        
        if(listenerInVehicle)
        {
            listenerWindowsClosed = vehicleWindowState[listenerVehicleid];
        }
        
        new Float:distance = GetDistanceBetweenPlayers(playerid, i);
        
        // Случай 1: ОБА игрока в транспорте
        if(inVehicle && listenerInVehicle)
        {
            // Если они в одном транспорте
            if(vehicleid == listenerVehicleid)
            {
                if(speakerWindowsClosed == 1)
                {
                    // Окна закрыты - сообщение только внутри
                    new message[256];
                    format(message, sizeof(message), "(Внутри) %s говорит: %s", playerName, text);
                    SendClientMessage(i, chatColors, message);
                }
                else
                {
                    // Окна открыты - обычное сообщение
                    new message[256];
                    format(message, sizeof(message), "[Транспорт] %s говорит: %s", playerName, text);
                    SendClientMessage(i, chatColors, message);
                }
            }
            // Если в разных транспортах
            else
            {
                // Говорящий с открытыми окнами И слушатель с открытыми окнами
                if(speakerWindowsClosed == 0 && listenerWindowsClosed == 0)
                {
                    if(distance <= 15.0)
                    {
                        new message[256];
                        format(message, sizeof(message), "[Транспорт] %s говорит: %s", playerName, text);
                        SendClientMessage(i, chatColors, message);
                    }
                }
                // Если у кого-то окна закрыты - не слышно
            }
        }
        
        // Случай 2: Говорящий в транспорте, слушатель НЕ в транспорте
        else if(inVehicle && !listenerInVehicle)
        {
            if(speakerWindowsClosed == 1)
            {
                // Если окна закрыты - снаружи не слышно
                if(distance <= 15.0)
                {
                    SetPlayerChatBubble(playerid, "Что-то говорит...", COLOR_CHAT_IC, 15.0, 3000);
                    ApplyAnimation(i, "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0, 0);
                }
            }
            else
            {
                // Если окна открыты - слышно с искажениями
                if(distance <= 15.0)
                {
                    new message[256];
                    format(message, sizeof(message), "[Транспорт] %s говорит: %s", playerName, text);
                    SendClientMessage(i, chatColors, message);
                    
                    SetPlayerChatBubble(playerid, text, COLOR_CHAT_IC, 15.0, 3000);
                    ApplyAnimation(i, "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0, 0);
                }
            }
        }
        
        // Случай 3: Говорящий НЕ в транспорте, слушатель в транспорте
        else if(!inVehicle && listenerInVehicle)
        {
            // Если у слушателя закрыты окна - он не слышит речь снаружи
            if(listenerWindowsClosed == 0)
            {
                // Окна открыты - слышно
                if(distance <= 15.0)
                {
                    new message[256];
                    format(message, sizeof(message), "%s говорит: %s", playerName, text);
                    SendClientMessage(i, chatColors, message);
                    
                    SetPlayerChatBubble(playerid, text, COLOR_CHAT_IC, 15.0, 3000);
                    ApplyAnimation(i, "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0, 0);
                }
            }
            // Если окна закрыты - не отправляем сообщение
        }
        
        // Случай 4: ОБА игрока НЕ в транспорте
        else if(!inVehicle && !listenerInVehicle)
        {
            if(distance <= 15.0)
            {
                new message[256];
                format(message, sizeof(message), "%s говорит: %s", playerName, text);
                SendClientMessage(i, chatColors, message);
                
                SetPlayerChatBubble(playerid, text, COLOR_CHAT_IC, 15.0, 3000);
                ApplyAnimation(i, "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0, 0);
            }
        }
    }
    
    new selfMessage[256];
    
    if(inVehicle)
    {
        if(speakerWindowsClosed == 1)
        {
            format(selfMessage, sizeof(selfMessage), "(Внутри) %s говорит: %s", playerName, text);
            SetPlayerChatBubble(playerid, "Что-то говорит...", COLOR_CHAT_IC, 20.0, 3000);
        }
        else
        {
            format(selfMessage, sizeof(selfMessage), "[Транспорт] %s говорит: %s", playerName, text);
            SetPlayerChatBubble(playerid, text, COLOR_CHAT_IC, 20.0, 3000);
        }
    }
    else
    {
        format(selfMessage, sizeof(selfMessage), "%s говорит: %s", playerName, text);
        SetPlayerChatBubble(playerid, text, COLOR_CHAT_IC, 15.0, 3000);
    }
    
    SendClientMessage(playerid, chatColors, selfMessage);
    
    ApplyAnimation(playerid, "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0, 0);
    
    SetTimerEx("ResetAnimation", 3000, false, "i", playerid);
    
    printf("[CHAT] %s: %s", playerName, text);
    
    return 0;
}

Сообщение отредактировал Crestan Games: 09 января 2026 - 02:13

0

#2
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
Посмотри, за что отвечают параметры вообще у функции:

https://sampwiki.bla.../ApplyAnimation

И зачем ты задаешь анимацию разговора всем, кто «слышит» (i), когда нужно задавать только тому, кто «говорит» (playerid)
0

#3
Пользователь офлайн   Crestan Games 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (09 января 2026 - 03:23) писал:

Посмотри, за что отвечают параметры вообще у функции:

https://sampwiki.bla.../ApplyAnimation

И зачем ты задаешь анимацию разговора всем, кто «слышит» (i), когда нужно задавать только тому, кто «говорит» (playerid)

Не заметил что i влепил туда, но всё равно заменив i на playerid ничего не изменяется, во время разговора я игрок все равно не может двигаться
0

#4
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
Почему первую часть сообщения пропустил? Вот готовые решение:

https://pawn.wiki/in...dpost__p__89260
0

#5
Пользователь офлайн   Crestan Games 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (09 января 2026 - 04:02) писал:

Почему первую часть сообщения пропустил? Вот готовые решение:

https://pawn.wiki/in...dpost__p__89260

2 проверки попробовал которые там были, с первого раза вообще забагалась анимация и я просто шел не мог остановить (спомощью AirBrake остановился)
https://skr.sh/vZUPwL5H7NI вот видео
Не обращайте что у меня где-то atlas RP, а где-то Long RP, проект несколько раз переименовывал

Сообщение отредактировал Crestan Games: 09 января 2026 - 21:21

0

#6
Пользователь офлайн   Crestan Games 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Решено таким способом:
	if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
	{
		ApplyAnimation(playerid, "PED", "IDLE_chat", 4.0, 0, 1, 0, 1, 1);
		SetTimerEx("ChatAnim", 2000, 0, "i", playerid);
	}

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика