Перейти к содержанию
Авторизация  
Karlsss

NPC Bot

Рекомендуемые сообщения

Karlsss

Здравствуйте, Уважаемые читатели данного портала. Я столкнулся с такой проблемой:

Создал NPC бота, дал ему 3dtext, он ходит по своему маршруту, все хорошо, текст над ним есть, но есть проблема. Бот не говорит сообщения которые должен говорить.

То есть, если Вы приближаетесь к боту должно рандомно сработать какая-та фраза, но такого не выходит, смотрите код в npcmodes:

 

#define RECORDING "9" //ковычки оставляем
#define RECORDING_TYPE 2// Заменяем на любое другое число если запись
#define RECORDING_REPLAY 1// Повтор записи, 1 - да, 0 - нет
#include <a_npc>
main()
{
}
new antiflood = 0;
#if RECORDING_REPLAY == 1
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif
#if RECORDING_TYPE == 1
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
#else
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif
forward Bot();
new bool:paused;//пауза
forward Bot1();
public Bot1()
{
    antiflood--;
    return 1;
}
public Bot()
{
    for(new i; i < 100; i++)
    {
        if(IsPlayerConnected(i))
        {
            new Float:x,Float:y,Float:z;
            GetMyPos(x, y, z);
            if(IsPlayerInRangeOfPoint(i, 2.0, x, y, z))
            {
                if(antiflood>=5) return 1;
                antiflood=20;
                PauseRecordingPlayback();
                new asd = random(5);
                if(asd==0)
                {
                    SendChat("чо? а?");
                }
                if(asd==1)
                {
                    SendCommand("/do Семечки в кармане");
                }
                if(asd==2)
                {
                    SendCommand("/do Фингал под глазом");
                }
                if(asd==3)
                {
                    SendChat("Чо уставился? М? С какого района?");
                }
                if(asd==4)
                {
                    SendChat("пщел отсюду!");
                }
                if(asd==5)
                {
                    SendChat("пошел!");
                }
                paused=true;
            }
            else if(paused)
            {
                if(!IsPlayerInRangeOfPoint(i, 10.0, x, y, z))
                {
                    ResumeRecordingPlayback();
                    SendChat("Вот и вали отсюда!");
                    paused=false;
                }
            }
        }
    }
    return 1;
}
 
По идеи он должен писать в чат рандомно фразы, когда подходишь к нему, но такого нет. Прошу помощи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Karlsss, со стороны игрового мода невозможно отправлять сообщения от имени сервера? Я сторонник того, чтобы эту систему реализовать не в npcmodes, а в основном моде. Вот так:

new npc_msg_timer[MAX_PLAYERS];

public OnPlayerSpawn(playerid)
{
	npc_msg_timer[playerid] = SetTimerEx("@OnPlayerCheckNearTheBot", 1000, true, "i", playerid);
}

public OnPlayerDisconnect(playerid, reason)
{
	KillTimer(npc_msg_timer[playerid]);
}

@OnPlayerCheckNearTheBot(playerid);
@OnPlayerCheckNearTheBot(playerid)
{
	if(GetPlayerState != PLAYER_STATE_ONFOOT)
		return 1; // если игрок не пешком, то пропускаем работу функции

	static
		Float:distance,
		Float:x, Float:y, Float:z,
		bool:pause = false,
		antiflood;
	
	GetPlayerPos(playerid, x, y, z);
	foreach(new i: Bot)
	{
		distance = GetPlayerDistanceFromPoint(i, x, y, z);
		if(distance >= 10.0 && pause == true)
		{
			ResumeRecordingPlayback();
			SendChat("Ну и вали отсюда");
			pause = false;
			return 1;
		}
		
		else if(distance <= 2.0)
		{
			if(--antiflood) >= 5
				return 1;
			antiflood = 20;
			
			switch(random(6))
			{
				case 0:
					SendChat("чо? а?");
				case 1:
					SendCommand("/do Семечки в кармане");
				case 2:
					SendCommand("/do Фингал под глазом");
				case 3:
					SendChat("Чо уставился? М? С какого района?");
				case 4:
					SendChat("пщел отсюду!");
				case 5:
					SendChat("пошел!");	
			}
			pause = true;
			return 1;
		}
	}
	return 0;
} 

К сожалению, с ботами не работал, потому не знаю точно, реально ли это сделать именно через основной мод. Постараюсь поискать информацию насчет ботов в ближайшее время.

Изменено пользователем Elrmrnt-Kritik
  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.