
#include<thread> // std::thread
#include<chrono> // std::thread
#include "plugin.h"
#include "common.h"
#include "CWorld.h"
#include "CTheScripts.h"
#include "extensions\KeyCheck.h"
#include "extensions\ScriptCommands.h"
#include "eScriptCommands.h"
#include "CMessages.h"
#include "eWeaponType.h" 
#include "ePedAction.h" 
#include "CAutomobile.h" 

#include "CStreaming.h"
#include "eWeaponModel.h" 
#include "CModelInfo.h"
#include "eVehicleModel.h"
#include "CCarCtrl.h"
#include "CVehicle.h"
#include "CBoat.h"
#include "CBike.h"

#include "CPopulation.h"
#include "CCivilianPed.h"
#include "CHud.h"
#include "ePedModel.h"
#include "ePedType.h"
#include <cmath> 
#include "CWorld.h"
#include "extensions\ScriptCommands.h"
#include "eScriptCommands.h"
#include "extensions\KeyCheck.h"
#include "CEntity.h"
#include "CRunningScript.h"

#include "CAutomobile.h"
#include "CTimer.h"
#include "CDamageManager.h"
#include "CCoronas.h"
#include "CUserDisplay.h"
#include "eVehicleModel.h"

using namespace plugin;
using namespace std;

static list<CPed*>listpeds; 
static list<CVehicle*>listcars;// map для авто.
static list<int>markeron;// list для маркеров.
static list<int>spheres;// list для маркеров кругов.

CPed* createped(int modelID, CVector* pos);
void play_voice(); // проиграть реплику педа.
wchar_t* getwchat(const char* c); // перевод в строку.
void remove_sphere_and_blip(int marker, int sphere);// удалить маркер и сферу.
CVehicle* createcar(int modelID, float x, float y, float z, float angle); // создать авто
bool ped_in_point(CPed* ped, double x1, double y1, double z1, double rx, double ry, double rz); // пед в радиусе.
int set_skin(CPed* ped, char const* model); // уст скин педа.
void create_blip_and_sphere(int& marker, int& sphere, double x, double y, double z);// создать маркер и сферу на карте.

CPed* create_spec_ped(char const* model, float x, float y, float z); // создать спец педа.
void miss(int money);
void fail_mission();
bool getflagmission(); // проверка флага миссии.
int setflagmission(int flag); // уcтановить флага миссии.
void star_mission_marker(int t, float x, float y, float z);// миссия.
void mission(); //
void check_defined_and_arest();
void destroy(); // удаления объектов из памяти. 
struct star_thread {static bool star_second_thread;// вывод на экран.

	static void set(bool star_second_thread1) {
		star_second_thread = star_second_thread1;
	}
	static bool get() { return star_second_thread;
	};//;
};
bool star_thread::star_second_thread;

class Message {//имя класса
public:
	Message() {
	static unsigned int time = 0;// обнулить таймер.
	Events::gameProcessEvent += [] { // Тут обрабатываем нажатия и запускаем события
	bool star_second_thread = star_thread::get();
	CPed* player = FindPlayerPed();// найти игрока
	if (player != NULL && star_second_thread == false && CTimer::m_snTimeInMilliseconds - time > 136500) {
		std::thread(star_mission_marker, 9, 118.0, -825.9, 10.5).detach();// независимый поток.
		bool k = true;	star_thread::set(k);  time = 0;// обнулить таймер.
	}
	else{	};
	};
}
} message;

void mission(){	CPed* player = FindPlayerPed();// найти игрока
	static int marker, sphere; //id маркера.
	Command<COMMAND_SET_PLAYER_COORDINATES>(CWorld::PlayerInFocus, 118.0, -825.9, 10.5);
	Command<COMMAND_SET_PLAYER_HEADING>(CWorld::PlayerInFocus, 54.0);
	CVehicle* car = createcar(MODEL_ANGEL, 123.8, -810.9, 10.5, 320.0); // создать авто

	Command<COMMAND_DO_FADE>(1500, 1);// просветление.
	CMessages::AddMessageJumpQ(L"~r~Go get some new threads from Rafael's clothes shop", 5000, 1);// вывести сообщение на экран.
	create_blip_and_sphere(marker, sphere, 95.4, -1136.2, 10.5);// создать маркер на карте и создать сферу. 

	// 1 этап.
	while (getflagmission()) {this_thread::sleep_for(chrono::milliseconds(10));
	if (ped_in_point(player, 95.4, -1136.2, 10.5, 3.0,3.0, 2.0) && !player->m_bInVehicle){// если в точке и не в авто.
		remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
		Command<COMMAND_SWITCH_WIDESCREEN>(CWorld::PlayerInFocus, 1);// вкл/выкл широкий экран.
		Command<COMMAND_DO_FADE>(1500, 0);
		this_thread::sleep_for(chrono::milliseconds(2500));
		set_skin(player, "PLAYER9");
		Command<COMMAND_POINT_CAMERA_AT_POINT>(92.39, -1131.74, 16.724, 2);// переместить камеру в координатах.  
		Command<COMMAND_SET_FIXED_CAMERA_POSITION>(91.813, -1131.116, 17.251, 0.0, 0.0, 0.0); //уст камеру в координатах.
		Command<COMMAND_DO_FADE>(1500, 1);
		create_blip_and_sphere(marker, sphere, -251.2, -1360.8, 8.1);// создать маркер на карте и сферу. 

		this_thread::sleep_for(chrono::milliseconds(1500));
		Command<COMMAND_RESTORE_CAMERA>();
		Command<COMMAND_RESTORE_CAMERA_JUMPCUT>();	// восстановить камеру.
		Command<COMMAND_SWITCH_WIDESCREEN>(CWorld::PlayerInFocus, 0);// вкл/выкл широкий экран.
		CMessages::AddMessageJumpQ(L"~r~Get to then Colonel's boat", 5000, 1);// вывести сообщение на экран.
		break;}
	};
	CPed* ped;
	// 2 этап.
	while (getflagmission()) {this_thread::sleep_for(chrono::milliseconds(10));
	if (ped_in_point(player, -251.2, -1360.8, 8.1, 3.0, 3.0, 2.0 && !player->m_bInVehicle)) {// если в точке и не в авто.
		remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
		Command<COMMAND_DO_FADE>(1500, 0);
		this_thread::sleep_for(chrono::milliseconds(2500));
		Command<COMMAND_SET_PLAYER_COORDINATES>(CWorld::PlayerInFocus, -241.7, -1362.3, 8.1);
		Command<COMMAND_SET_PLAYER_HEADING>(CWorld::PlayerInFocus, 269.0);
		CMessages::AddMessageJumpQ(L"~r~Take the Colonel's daughter to the Pole Position club", 5000, 1);// вывести сообщение на экран., 3000, 1);// вывести сообщение на экран.
		create_blip_and_sphere(marker, sphere, 100.7, -1477.6, 10.1);// создать маркер на карте, создать сферу 

		ped = create_spec_ped("IGMERC", -241.7, -1360.3, 8.1); // создать спец педа.	
		ped->SetObjective(OBJECTIVE_SET_LEADER, player);
		Command<COMMAND_DO_FADE>(1500, 1);// просветление.
		break;	}
	};

	// 3 этап.
	while (getflagmission()) {	this_thread::sleep_for(chrono::milliseconds(10));
	if (ped_in_point(player, 100.7, -1477.6, 10.1, 3.0, 3.0, 2.0)) {// если в точке и не в авто.
		remove_sphere_and_blip(marker, sphere);// удалить маркер и сферу.
		miss(100);	break;	}	
	if (!ped->m_fHealth > 0.10f){ CMessages::AddMessageJumpQ(L"~r~Mercedes is dead", 5000, 1);// вывести сообщение на экран
	    fail_mission();	break;	}
	};
	ped->SetObjective(OBJECTIVE_LEAVE_CAR); // выйти из авто.
	while(ped->m_bInVehicle) { this_thread::sleep_for(chrono::milliseconds(10)); };
	destroy();// удалить маркер и сферу.
};

CPed* create_spec_ped(char const* model, float x, float y, float z) {// создать спец педа.
	CPed* ped;	int idped = 0;	Command<COMMAND_REQUEST_MODEL>(idped);
	while (!Command<COMMAND_HAS_MODEL_LOADED>(idped)) {	this_thread::sleep_for(chrono::milliseconds(1));}

	Command<COMMAND_CREATE_CHAR>(4, idped, x, y, z, &ped);
	Command<COMMAND_UNDRESS_CHAR>(CPools::GetPedRef(ped), model);
	Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
	Command<COMMAND_DRESS_CHAR>(CPools::GetPedRef(ped));
	listpeds.push_back(ped);
	return ped;
};

CVehicle* createcar(int modelID, float x, float y, float z, float angle) {// создать авто

	CVector pos(x, y, z);
	char reference = 2;
	CStreaming::RequestModel(modelID, 0); // ANGEL 166 ModelID
	CStreaming::LoadAllRequestedModels(false);
	CVehicle* v;
	if (CModelInfo::IsCarModel(modelID)) {// если создаем авто.
		v = new CAutomobile(modelID, reference);
	}
	if (CModelInfo::IsBikeModel(modelID) ) {
		//CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 100;// дать денег 
		v = new CBike(modelID, reference);
	}
	if (CModelInfo::IsBoatModel(modelID)) {	v = new CBoat(modelID, reference);
	}
	CCarCtrl::JoinCarWithRoadSystem(v);// ии машина в системе.
	v->m_nState = 4;
	v->CVehicle::m_nCreatedBy = reference; // Если один то транспорт будет удален позже...

	//v->m_placement.SetRotate(0, 0, 3.5f);
	v->m_placement.pos.x = pos.x;
	v->m_placement.pos.y = pos.y;
	v->m_placement.pos.z = pos.z + v->GetDistanceFromCentreOfMassToBaseOfModel();
	CWorld::Add(v);
	if (angle =! NULL){	Command<COMMAND_SET_CAR_HEADING>(CPools::GetVehicleRef(v), angle);
	}

	listcars.push_back(v);
	return v;
}; 
int set_skin(CPed* ped, char const* model) {// уст скин педа.
	Command<COMMAND_UNDRESS_CHAR>(CPools::GetPedRef(ped), model);
	Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
	Command<COMMAND_DRESS_CHAR>(CPools::GetPedRef(ped));
	this_thread::sleep_for(chrono::milliseconds(1));
	return 0;
};
void create_blip_and_sphere(int& marker, int& sphere, double x, double y, double z) {// создать маркер и сферу на карте.
	Command<COMMAND_ADD_BLIP_FOR_COORD_OLD>(x, y, z, 1, 2, &marker);// создать маркер на карте.
	Command<COMMAND_CHANGE_BLIP_SCALE>(marker, 3);// установить размер маркера.
	Command<COMMAND_ADD_SPHERE>(x, y, z, 3.0, &sphere); //создать, удалить, создать сферу 

	markeron.push_back(marker);;// list для маркеров.
	spheres.push_back(sphere);;// list для маркеров кругов.
};

wchar_t* getwchat(const char* c) {// перевод в строку.
	const size_t cSize = strlen(c) + 1;
	wchar_t* wc = new wchar_t[cSize]; mbstowcs(wc, c, cSize);
	return wc;// вернуть строку.
};
bool ped_in_point(CPed* ped, double x1, double y1, double z1, double rx, double ry, double rz) {
	this_thread::sleep_for(chrono::milliseconds(10));
	double x = ped->GetPosition().x; double y = ped->GetPosition().y; double z = ped->GetPosition().z;
	double r2 = rx * rx + ry * ry + rz * rz; x = x - x1; y = y - y1; z = z - z1;
	double res = x * x + y * y + z * z;
	if (res < r2) {	return true;}
	else {	return false;	}
};
void remove_sphere_and_blip(int marker, int sphere) {
	Command<COMMAND_REMOVE_SPHERE>(sphere);// удалить сферу.
	Command<COMMAND_REMOVE_BLIP>(marker);
	if (!markeron.empty()) {
		for (auto m : markeron) {
			if (m == marker)
				Command<COMMAND_REMOVE_BLIP>(marker);//удалить маркер.
			    markeron.remove(m);
		}
	}

	if (!spheres.empty()) {
		for (auto i : spheres) {
			if (i == marker) {
				Command<COMMAND_REMOVE_SPHERE>(i);// удалить сферу.
				spheres.remove(sphere);
			}
		}
	}
};
void star_mission_marker(int t, float x, float y, float z) {// координаты, id метки на карте.
//	CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 100;// дать денег 
	CVector p = { x, y, z };
while (true) {	this_thread::sleep_for(chrono::milliseconds(10));
	static int point; static int create = 0; CPed* player = FindPlayerPed();// найти игрока
	bool flagmission = getflagmission();
	bool arest = CWorld::Players[CWorld::PlayerInFocus].m_nPlayerState == PLAYERSTATE_HASBEENARRESTED;
	if (player->m_bInVehicle && create == 0 && !flagmission && !arest) {// в авто пед? проверка флага миссии
		Command<COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_CONTACT_POINT>(p.x, p.y, p.z, t, &point);
		create = 1;	this_thread::sleep_for(chrono::milliseconds(1));
	}
	if (!player->m_bInVehicle || flagmission || (!player->m_fHealth > 0.10f) || (arest) && (create == 1)) {// в авто пед?
		Command<COMMAND_REMOVE_BLIP>(point);// удалить метку на карте.	
		create = 0;	this_thread::sleep_for(chrono::milliseconds(1));
	}
	if (player->m_bInVehicle && !flagmission && (player->m_fHealth > 0.10f) && (!arest) && (create == 1)
		&& Command<COMMAND_IS_CAR_STOPPED>(CPools::GetVehicleRef(player->m_pVehicle))) {// в авто пед?
		CVehicle* car = player->m_pVehicle;
		if (car->IsSphereTouchingVehicle(x, y, z, 3.0)) {Command<COMMAND_BOAT_STOP>(CPools::GetVehicleRef(car), 0);// установить состояние двигателя авто.	
			create = 0; Command<COMMAND_REMOVE_BLIP>(point);// удалить метку на карте.>(p.x, p.y, p.z, t, size, &point);
			setflagmission(1); Command<COMMAND_DO_FADE>(500, 0);// затенение.
			player->SetObjective(OBJECTIVE_LEAVE_CAR); // выйти из авто.
			while (player->m_bInVehicle) { this_thread::sleep_for(chrono::milliseconds(10)); };

			Command<COMMAND_SET_CAR_COORDINATES>(CPools::GetVehicleRef(car), 0.0f, 0.0f, 0.0f);// установить координаты авто.
			std::thread(check_defined_and_arest).detach();// независимый поток.
			std::thread(mission).detach();// независимый поток.
			break;}
	}
};
};

void miss(int money) {Command<COMMAND_PLAY_MISSION_PASSED_TUNE>(1);// проиграть мелодию.
	static char x[256]; snprintf(x, 256, "mission passed $%.d", money);
	wchar_t* str = getwchat(x);	CMessages::AddBigMessage(str, 2500, 0);//0 большими, розовые как миссии пройдена,
	CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 2500;// дать денег  
	setflagmission(0);
};
void fail_mission() {setflagmission(0);
	CMessages::AddBigMessage(L"mission failed!", 2500, 0);//0 большими, розовые как миссии пройдена,
};
void check_defined_and_arest() {
	while (true) {	this_thread::sleep_for(chrono::milliseconds(10));
		CPed* player = FindPlayerPed();// найти игрока
		bool arest = CWorld::Players[CWorld::PlayerInFocus].m_nPlayerState == PLAYERSTATE_HASBEENARRESTED;
		if (arest || (player->m_fHealth < 0.10f)) {	fail_mission(); 	break;
		}
	};
	bool k = false;	star_thread::set(k);
};

bool getflagmission() {// проверка флага миссии.
	unsigned int& OnAMissionFlag = *(unsigned int*)0x978748;
	bool getflagmission = (CTheScripts::ScriptSpace[OnAMissionFlag]);// получить флаг миссии.
	return getflagmission;
};

int setflagmission(int flag) { // уcтановить флага миссии.
	unsigned int& OnAMissionFlag = *(unsigned int*)0x978748;
	CTheScripts::ScriptSpace[OnAMissionFlag] = flag;
	return 0;
};













void destroy() {// удаления объектов из памяти. 
	if (!listpeds.empty()) {for (auto ped: listpeds){  ped->ClearInvestigateEvent();// пед уходит, опустить педа.
		Command<COMMAND_MARK_CHAR_AS_NO_LONGER_NEEDED>(CPools::GetPedRef(ped));// удалить педа.
		listpeds.pop_front();
		}
	}

	if (!listcars.empty()) {for (auto car : listcars) {	car->m_autoPilot.m_nCarMission = MISSION_NONE;
	     Command<COMMAND_MARK_CAR_AS_NO_LONGER_NEEDED>(CPools::GetVehicleRef(car));// удалить авто.
		  listcars.pop_front();	}
	}
	
	if (!markeron.empty()) {for (auto marker : markeron) {Command<COMMAND_REMOVE_BLIP>(marker);//удалить маркер.
			markeron.pop_front();	}
	}

	if (!spheres.empty()) {	for (auto i : spheres) {Command<COMMAND_REMOVE_SPHERE>(i);// удалить сферу.
	spheres.pop_front();}
	}

	bool k = false;	star_thread::set(k);
};




struct e {
	static bool str;
	static void set(bool str1) { // Включить событие двери
		str = str1;
		//	CMessages::AddMessageJumpQ(L"message", 000, 1);
	};

	static void ProcessDoors() { // Обработка событий для конкретного авто
		//if (str == true) {
		//	CMessages::AddMessageJumpQ(L"message", 100, 1);
		//	CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 1;// дать денег 	
		//}
	}//;
};
CPed* findpedinpool(const void* p) {
	for (auto ped : CPools::ms_pPedPool) {
		if (ped == p) {
			this_thread::sleep_for(chrono::milliseconds(1));
			return ped;
		}
	};
	CPed* ped2 = NULL;
	return ped2;
};
//Command<COMMAND_UNDRESS_CHAR>(CPools::GetPedRef(player), "STRIPA");
//Command<COMMAND_LOAD_ALL_MODELS_NOW>();
//Command<COMMAND_DRESS_CHAR>(CPools::GetPedRef(player));
//CStreaming::RequestSpecialChar(20, "SAM", 6); // 023C: load_special_actor 21 'SAM'
//if (CStreaming::HasSpecialCharLoaded(20)) {   // 023D: special_actor 21 loaded 
//	CPed* ped = new CCivilianPed(PEDTYPE_CIVMALE, 129);
		/*			ped->SetPosition(FindPlayerPed()->TransformFromObjectSpace(CVector(0.0f, 2.0f, 0.0f)));
		CWorld::Add(ped);
		CPed* p = findpedinpool(ped);
		p->m_fHealth = 0.0f;*/
		//	}
//bool e::str;
//		Events::gameProcessEvent += e::ProcessDoors; // Тут обрабатываем события, а также выключаем их
//		static	CVehicle* car;

CVector* worldcoord(CPed* ped, float x = 1.0, float y = 1.0) {
	CVector& pos1 = ped->m_placement.pos + ped->m_placement.right * x + ped->m_placement.up * y;
	CVector* pos = &pos1;
	return pos;
}; bool wait(unsigned int key) {
	if (!KeyCheck::CheckWithDelay(key, 200)) { return true; }
	else { return false; }
};
int& var_$3402 = *(int*)0x8247A8;
static int timer = 13608;
static int m_currentState = 0;

CPed* createped(int modelID, CVector* pos) {// создать pedа
	char reference = 2;// чтобы удалился потом.
	CStreaming::RequestModel(modelID, 0); // ANGEL 166 ModelID
	CStreaming::LoadAllRequestedModels(false);// модель загруженна.
	CPed* ped = new CCivilianPed(PEDTYPE_CIVMALE, modelID);

	ped->m_nState = 4;// флаг
	//ped->m_placement.SetRotate(0, 0, 3.5f);// смещение от координат игрока
	ped->m_placement.pos.x = pos->x;
	ped->m_placement.pos.y = pos->y;
	ped->m_placement.pos.z = pos->z;
	CWorld::Add(ped);// добавить в мир педа.
	listpeds.push_back(ped);
	return ped;
};
bool iscar(CPhysical* en) {
	if (CModelInfo::ms_modelInfoPtrs[en->m_nModelIndex]->m_nType == MODEL_INFO_PED) {
		CMessages::AddMessageJumpQ(L"ped", 2000, 0);
		return false;
	}

	if (CModelInfo::ms_modelInfoPtrs[en->m_nModelIndex]->m_nType == MODEL_INFO_VEHICLE) {
		CMessages::AddMessageJumpQ(L"vehicle", 2000, 0);
		return false;
	}
};
bool isinvehicle(CPed* player) {
	return player->m_bInVehicle && player->m_pVehicle != NULL;
};


void play_voice() {// проиграть реплику педа.
	Command<COMMAND_LOAD_MISSION_AUDIO>(1, "FIN_1a");
	while (true) {
		this_thread::sleep_for(chrono::milliseconds(1));
		if (Command<COMMAND_HAS_MISSION_AUDIO_LOADED>(1)) {
			Command<COMMAND_PLAY_MISSION_AUDIO>(1);
			if (Command<COMMAND_HAS_MISSION_AUDIO_FINISHED>(1)) {
				Command<COMMAND_CLEAR_MISSION_AUDIO>(1);
				break;
			}
		}
	}
};
bool wait(unsigned int key);

/*	//	if (Command<COMMAND_HAS_SPECIAL_CHARACTER_LOADED>(20)) {
				//		CMessages::AddMessageJumpQ(L"Create ped", 2000, 1);
	   //                 CVector* pos = worldcoord(player, 1.0, 10.0); //Нахождени координат на 10 от взгляда томми.
				//		Command<COMMAND_CREATE_CHAR>(4, 128, pos->x, pos->y, pos->z, &ped);
				//}
			//Command<COMMAND_LOAD_SPECIAL_CHARACTER>(20, "SAM", 1);
			//Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
			//KeyCheck::Update();
			//static	CPed* ped;
			//if (KeyCheck::CheckWithDelay('N', 200)) {//если N нажата
			//	if (wait('N')) {//если м нажата
					//COMMAND_UNDRESS_CHAR
				//int modelIndex = 0;;
				//player->DeleteRwObject();
				//
				//CStreaming::RequestSpecialModel(modelIndex, "STRIPA", 6);
				//CWorld::Remove(player);
				//CTimer::Stop();
				//CStreaming::LoadAllRequestedModels(false);
				//CTimer::Update();//player->m_nModelIndex = -1;
				//player->SetModelIndex(modelIndex);
				//CWorld::Add(player);
				//CVehicle* vehicle = FindPlayerVehicle();
				//if (vehicle && vehicle->m_nVehicleClass == VEHICLE_AUTOMOBILE) {
				//	CAutomobile* automobile = reinterpret_cast<CAutomobile*>(vehicle);
				//	if (!automobile->m_carDamage.GetWheelStatus(0)) {
				//		automobile->m_carDamage.SetWheelStatus(0, 1);
				//		CMessages::AddMessageJumpQ(L"damage", 2000, false);
				//	}
				//	else {
				//		automobile->m_carDamage.SetWheelStatus(0, 0);
				//		CMessages::AddMessageJumpQ(L"fix", 2000, false);
				//	}
				//}



FBI = {3,6}, ARMY = {4,6}, MEDIC = {5,16}, FIREMAN = {6,17},
			 HFYST = {9,5}, HFOST = {10,5},HMYST = {11,4},HMOST = {12,4}, HFYRI = {13,5}, HFORI = {14,5},
			 HMYRI = {15,4},HMORI = {16,4},HFYBE = {17,5},HFOBE = {18,5},HMYBE = {19,4},HMOBE = {20,4},
			 HFYBU = {21,5},HFYMD = {22,5},HFYCG = {23,5},HFYPR = {24,5},HFOTR = {25,5},HMOTR = {26,4},
			 HMYAP = {27,4},HMOCA = {28,4},BMODK = {29,4},BMYCR = {30,4},BFYST = {31,5},BFOST = {32,5},
			 BMYST = {33,4},BMOST = {34,4},BFYRI = {35,5},BFORI = {36,5},BMYRI = {37,4},BFYBE = {38,5},
			 BMYBE = {39,4},BFOBE = {40,5},BMOBE = {41,4},BMYBU = {42,4},BFYPR = {43,5},BFOTR = {44,5},
			 BMOTR = {45,4},BMYPI = {46,4},BMYBB = {47,4},WMYCR = {48,4},WFYST = {49,5},WFOST = {50,5},
			 WMYST = {51,4},WMOST = {52,4},WFYRI = {53, 5},WFORI = {54, 5}, WMYRI = {55,4}, WMORI = {56,4 },
			 WFYBE = {57,5}, WMYBE = {58,4}, WFOBE = {59,5}, WMOBE = {60,4}, WMYCW = {61,4}, WMYGO = {62,4},
			 WFOGO = {63,5}, WMOGO = {64,4}, WFYLG = {65, 5}, WMYLG = {66, 4}, WFYBU = {67,5}, WMYBU = {68, 4},
			 WMOBU = {69,4}, WFYPR = {70,5}, WFOTR = {71,5}, WMOTR = {72,4}, WMYPI = {73,4}, WMOCA = {74, 4},
			 WFYJG = {75, 5}, WMYJG = {76,4}, WFYSK = {77,5}, WMYSK = {78,4}, WFYSH = {79,5}, WFOSH = {80,5 },
			 JFOTO = {81, 5}, JMOTO = {82, 4}, CBA = {83,7}, CBB = {84,7}, HNA = {85,8}, HNB = {86,8},
			 SGA = {87,9}, SGB = {88,9}, CLA = {89,10}, CLB ={90,10}, GDA = {91,11}, GDB = {92,11},
			 BKA = {93, 12}, BKB = {94,12}, PGA = {95,13}, PGB = {96,13}, VICE1 = {97,18}, VICE2 = {98,18},
			 VICE3 = {99,18}, VICE4 = {100,18}, VICE5 = {101,18}, VICE6 = {102,18}, VICE7 = {103,18},
			 VICE8 = {104,18},WFYG1 = {105,5}, WFYG2 = {106,6}}
*/

//} test;
//			 car = createcar(MODEL_BANSHEE, 20.0f);
//				ped->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, car);
//				ped->WarpPedIntoCar(car); // переместить педа в авто
//				//CVector pos1 = *pos;
//			}
//	if (KeyCheck::CheckWithDelay('M', 200)) {//если N нажата
//	ped->BeingDraggedFromCar();	// вроде анимация выхода из авто.
//	CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
//			//ped->FightStrike(pos1, true);
//				CVector* pos = worldcoord(player, 1.0, 10.0); //Нахождени координат на 10 от взгляда томми.
//				ped = create(MODEL_HMYST, pos); // Спавним копа, передаем коор на 10 м вперед от томми.
//			ped->AimGun();
//	}
//			
//		}
//	};
//}
//			if (Command<COMMAND_IS_WANTED_LEVEL_GREATER>(CWorld::PlayerInFocus,1))		{
//Command<COMMAND_POINT_CAMERA_AT_POINT>(218.872, - 1282.988, 12.392, 2); CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 1;// дать денег 
/*	Command<COMMAND_LOAD_MISSION_TEXT>("GENERA1");
				Command<COMMAND_PRINT_NOW>("BNK1_4", 2000, 1);*/
				//..CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 1;// дать денег 	
				//e::set(true); // 0 капот






//gamefont::Print({
//	Format("id %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_nVarId),
//	Format("direction %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_nTimerDirection),
//	Format("enabled %d", CUserDisplay::OnscnTimer.m_aClocks[0].m_bEnabled),
//	Format("text %s", CUserDisplay::OnscnTimer.m_aClocks[0].m_acDisplayedText),
//	Format("key %s", &CUserDisplay::OnscnTimer.m_aClocks[0].m_acDescriptionTextKey),
//	Format("var $3402 %d", var_$3402)
//	}, 10, 10, 1, FONT_DEFAULT, 0.75f, 0.75f, color::White);

		//.CVehicle* car = createcar(MODEL_BANSHEE, 20.0f);				//CVector* pos = worldcoord(player, 1.0, 10.0); //Нахождени координат на 10 от взгляда томми.
		//	Command<COMMAND_LOAD_SPECIAL_CHARACTER>(1,"IGMIKE");
		//	Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
		//	if (Command<COMMAND_HAS_SPECIAL_CHARACTER_LOADED>(1)) {
		//		CMessages::AddMessageJumpQ(L"message", 10000, 1);
		//		Command<COMMAND_CREATE_CHAR>(4, 1, pos->x, pos->y, pos->z, &ped);
		//	}	
   //CPed* ped = create(MODEL_HMYST, pos); // Спавним копа, передаем коор на 10 м вперед от томми.
   //Command<COMMAND_SET_CHAR_ANSWERING_MOBILE>(player, 0);

										 //player->cell
//	ped->AnswerMobile();
	//ped->SetObjective(OBJECTIVE_GUARD_SPOT, pos); //охранное место 0194
	//Command<COMMAND_SET_PLAYER_CONTROL>(CWorld::PlayerInFocus, 0);
		//ped->SetObjective(OBJECTIVE_DESTROY_CAR, car); //уничтожить машину 01D9
	//ped->SetObjective(OBJECTIVE_SET_LEADER, player); //01DE / 01DF	следовать за лидером
	//player->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, car);
	// player->WarpPedIntoCar(car); // переместить педа в авто
		//switch (m_currentState) {
		//case 0:
		//	if (!CUserDisplay::OnscnTimer.m_aClocks[0].m_bEnabled) {
		//		if (KeyCheck::CheckWithDelay('M', 1000)) {
		//			var_$3402 = 60 * 1000; //in CLEO $3402 = 120000
		//			CUserDisplay::OnscnTimer.AddClock(timer, "R_TIME", 1); //03C3: set_timer_with_text_to $3402 type 1 text 'R_TIME'
		//			m_currentState = 1;
		//		}
		//	}
		//	break;
		//case 1:
		//	if (KeyCheck::CheckWithDelay('N', 1000) || var_$3402 > 121000 || var_$3402 < 1) {
		//		CUserDisplay::OnscnTimer.ClearClock(timer); //014F: stop_timer $3402
		//		var_$3402 = 0; //$3402 = 0
		//		m_currentState = 0;
		//	}
		//	break;
		//}

//switch (m_currentState) {
//case 0:
//	if (!CUserDisplay::OnscnTimer.m_aClocks[0].m_bEnabled) {
//		if (KeyCheck::CheckWithDelay('M', 1000)) {
//			var_$3402 = 60* 1000; //in CLEO $3402 = 120000
//			CUserDisplay::OnscnTimer.AddClock(timer, "R_TIME", 1); //03C3: set_timer_with_text_to $3402 type 1 text 'R_TIME'
//			m_currentState = 1;
//		}
//		if (KeyCheck::CheckWithDelay('U', 1000)) {
//			CUserDisplay::OnscnTimer.AddClock(timer, "R_TIME", 0); //03C3: set_timer_with_text_to $3402 type 0 text 'R_TIME'
//			m_currentState = 1;
//		}
//	}
//	break;
//case 1:
//	if (KeyCheck::CheckWithDelay('N', 1000) || var_$3402 > 121000 || var_$3402 < 1) {
//		CUserDisplay::OnscnTimer.ClearClock(timer); //014F: stop_timer $3402
//		var_$3402 = 0; //$3402 = 0
//		m_currentState = 0;
//	}
//	break;
//}

/*
			//CMessages::AddMessage(str, 10000, 1);
				CVehicle* car = createcar(MODEL_BANSHEE, 20.0f);
					car->SetDriver(player);
					car->SetUpDriver();//уст водителя в авто.
					Command<COMMAND_WARP_PLAYER_INTO_CAR>(CWorld::PlayerInFocus, CPools::GetVehicleRef(car));

				   CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
				   double x1 = car->GetPosition().x;
				   double y1 = car->GetPosition().y;
				   double z1 = car->GetPosition().z;
				Command<COMMAND_GET_CLOSEST_CAR_NODE>(x1, y1, z1, x,y,z);
				  Command<COMMAND_SET_CAR_COORDINATES>(CPools::GetVehicleRef(car), x, y, z);


			   }
			}*/
			//Test::eTimerState Test::m_currentState = STATE_START;
			//int Test::m_min = 0;
			//int Test::m_sec = 0;
			//int Test::m_millisec = 0;
			//class Test {
			//public:
			//	enum eTimerState { STATE_START, STATE_PLAY };
			//	static eTimerState m_currentState;
			//	static int m_min, m_sec, m_millisec;
			//
			//	Test() {
			//		Events::drawingEvent += [] {
			//			switch (m_currentState) {
			//			case STATE_START:
			//				KeyCheck::Update();
			//				if (KeyCheck::CheckWithDelay('M', 2000)) {
			//					m_min = 0; m_sec = 0; m_millisec = CTimer::m_snTimeInMilliseconds;
			//					m_currentState = STATE_PLAY;
			//				}
			//				break;
			//			case STATE_PLAY:
			//				if (CTimer::m_snTimeInMilliseconds > (m_millisec + 1000)) {
			//					m_millisec = CTimer::m_snTimeInMilliseconds;
			//					if (m_sec < 59)
			//						m_sec++;
			//					else {
			//						m_sec = 0;
			//						if (m_min < 2)
			//							m_min++;
			//						else
			//							m_currentState = STATE_START;
			//					}
			//				}
			//				gamefont::Print({
			//					Format("min %02d : sec %02d", m_min, m_sec)
			//					}, 130, 130, 1, FONT_DEFAULT, 1.75f, 1.75f, color::White);
			//				break;
			//			}
			//		};
			//	}
			//} test;
			//
			//Test::eTimerState Test::m_currentState = STATE_START;
			//int Test::m_min = 0;
			//int Test::m_sec = 0;
			//int Test::m_millisec = 0;


			//class Test {
			//public:    
			//    Test() {
			//		Events::gameProcessEvent += [] {
			//		double x, y, z; 
			//			CVehicle* car = nullptr;
			//			CPed* player = FindPlayerPed();// найти игрока
			//			if (!player) return;// проверка найден игрок
			//			KeyCheck::Update();
			//			if (KeyCheck::CheckWithDelay('N', 200)) {//если N нажата
			//				if (wait('N')) return; {//если м нажата
			//				 /* 	CVehicle* car = createcar(MODEL_BANSHEE, 20.0f); 
			//					car->SetDriver(player);
			//					car->SetUpDriver();//уст водителя в авто.
			//					Command<COMMAND_WARP_PLAYER_INTO_CAR>(CWorld::PlayerInFocus, CPools::GetVehicleRef(car));
			//					
			//				   CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
			//				   double x1 = car->GetPosition().x;
			//				   double y1 = car->GetPosition().y;
			//				   double z1 = car->GetPosition().z;
			//                Command<COMMAND_GET_CLOSEST_CAR_NODE>(x1, y1, z1, x,y,z);
			//                  Command<COMMAND_SET_CAR_COORDINATES>(CPools::GetVehicleRef(car), x, y, z);
			//   */
			//				   
			//			   }
			//			}
			//		};
			//	}
			//} test;	//if (isinvehicle(player)) {
						//   car = player->m_pVehicle;
						//   Command<COMMAND_SET_CAR_STRONG>(CPools::GetVehicleRef(car), true );// найти дорогу.
						//   if (Command<COMMAND_IS_CAR_IN_WATER>(CPools::GetVehicleRef(car))) {
			//Command<COMMAND_IS_CAR_STUCK>(CPools::GetVehicleRef(car));//03CE: car 12@ stuck если машина застряла.
			//Command<COMMAND_IS_CAR_UPSIDEDOWN>(CPools::GetVehicleRef(car));//01F4: car 12@ flipped если машина перевернута.
			//Command<COMMAND_IS_CAR_UPRIGHT>(CPools::GetVehicleRef(car));// 020D: car 12@ flipped если указанный автомобиль перевернут.
			//Command<COMMAND_GET_CLOSEST_CAR_NODE>(x1, y1, z1, x, y, z);// найти дорогу.
			//Command<COMMAND_SET_CAR_COORDINATES>(CPools::GetVehicleRef(car), x, y, z);// установить координаты авто.

			//02BF: car 12@ sunk Возвращает true, если транспортное средство погружено в воду.
			//KeyCheck::Update();
				//if (KeyCheck::CheckWithDelay('N', 200)) {//если N нажата
				//	if (wait('N')) return; {//если м нажата

				//		for (int i = 0; i < CPools::ms_pVehiclePool->m_nSize; i++) {
				//			CVehicle* vehicle = CPools::ms_pVehiclePool->GetAt(i);
				//			if (vehicle && (DistanceBetweenPoints(player->GetPosition(), vehicle->GetPosition()) < 7.0f)) {
				//				vehicle->m_autoPilot.m_nAnimationId = TEMPACT_REVERSE;
				//				vehicle->m_autoPilot.m_nAnimationTime = 2000000;
				//			}
				//		}
				//	}
							/*		if (iscar(car))	{
										CMessages::AddMessageJumpQ(L"this is car", 10000, 0);
									}*/
									//	}
								//	}
								//}
					/*

						static void EntityType(CEntity *entity) {
							if (CModelInfo::ms_modelInfoPtrs[entity->m_nModelIndex]->m_nType == MODEL_INFO_PED)
								CMessages::AddMessageJumpQ(L"ped", 2000, 0);
							if (CModelInfo::ms_modelInfoPtrs[entity->m_nModelIndex]->m_nType == MODEL_INFO_VEHICLE)
								CMessages::AddMessageJumpQ(L"vehicle", 2000, 0);
						}

						Test() {
							Events::gameProcessEvent += [] {
								KeyCheck::Update();
								if (KeyCheck::CheckWithDelay('M', 2000)) {
									CPed *player = FindPlayerPed();
									if (player) {
										if (player->m_pVehicle && player->m_bInVehicle)
											EntityType(player->m_pVehicle);
										else
											EntityType(player);
									}
								}
							};
						}
					} test;

					Цитировать
					Есть ли способ заставить ехать машину назад?
					Код: C++
					vehicle->m_autoPilot.m_nAnimationId = TEMPACT_REVERSE;
					vehicle->m_autoPilot.m_nAnimationTime = 20000;
				CObject* obj;
				//CVector pos = { 246.0f, -1293.7f, 10.9f };
				//							Command<COMMAND_CREATE_CHAR_INSIDE_CAR>(CPools::GetVehicleRef(car), 1, MODEL_SWAT, &ped);
				//						car->m_autoPilot.m_nCarMission = MISSION_NONE;
				//						car->DoSunGlare();//ехать в воду
				//			Command<COMMAND_SET_CAR_TEMP_ACTION>(CPools::GetVehicleRef(car), 22,20000);
				//			Command<COMMAND_CAR_GOTO_COORDINATES>(CPools::GetVehicleRef(car), -92.69, -997.78, 10.28);

			//	Command<COMMAND_IS_CAR_STOPPED>(CPools::GetVehicleRef(car));
					//	Command<COMMAND_REQUEST_MODEL>(333);
					//	Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
					//	if (Command<COMMAND_HAS_MODEL_LOADED>(333)) {

					//		CVector* pos = worldcoord(player, 1.0, 10.0);

					//		Command<COMMAND_CREATE_OBJECT>(333, pos->x, pos->y, pos->z, CPools::GetObjectRef(obj));
					//		CVehicle* car = createcar(MODEL_BANSHEE, 20.0f);
					//		CPed* ped = nullptr;
					//					}&& Command<COMMAND_HAS_MODEL_LOADED>(MODEL_BANSHEE)Command<COMMAND_REQUEST_MODEL>(MODEL_BANSHEE);

					//		if (KeyCheck::CheckWithDelay('M', 200)) {//если N нажата
					//			Command<COMMAND_MARK_OBJECT_AS_NO_LONGER_NEEDED>(CPools::GetObjectRef(obj));
					//			obj->Remove();
					//		Command<COMMAND_DELETE_OBJECT>(CPools::GetObjectRef(obj));
					//			car->FireFixedMachineGuns();
					//	car->ExtinguishCarFire();
					//	unsigned char c = car->m_nLastWeaponDamage;
					//	}
					//}
						//static char x[256];
						//	snprintf(x, 256, "x = %.s", c);

						//wchar_t* s1 = getwchat(x);
						//CMessages::AddMessageJumpQ(s1, 3000, 0);


car->m_autoPilot.m_nSpeedScaleFactor = 60.0f;
car->m_autoPilot.m_fMaxTrafficSpeed = 60.0f;
car->m_nLockStatus = 1;
car->ActivateBombWhenEntered();
car->ActivateBomb();*/
//Command<COMMAND_CAR_GOTO_COORDINATES>(CPools::GetVehicleRef(car), -92.69, -997.78, 10.28);

//ExtinguishCarFire();
/*
CMessages::AddMessageJumpQ(L"message", 10000, false);
		car->m_autoPilot.m_nCarMission = MISSION_RAMPLAYER_FARAWAY;*/
		//Command<COMMAND_CREATE_CHAR_AS_PASSENGER>(CPools::GetVehicleRef(car), 10, MODEL_SWAT, 0, &ped);
		//if (CWorld::Players[CWorld::PlayerInFocus].m_nPlayerState == PLAYERSTATE_HASBEENARRESTED)
	//{
	//	CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 10000;// дать денег 	
	//	CMessages::AddMessageJumpQ(L"message", 10000, false);
	//}
		//	Command<COMMAND_EXPLODE_CAR>(CPools::GetVehicleRef(car));
		//	Command<COMMAND_ADD_EXPLOSION>(54.9, -1077.3, 10.5, 10);

		//	if (Command<COMMAND_IS_PLAYER_PLAYING>()) {
		//	
		//		Command<COMMAND_BOAT_STOP>(CPools::GetVehicleRef(car), 0);// стоп
		//	
		//	Command<COMMAND_ADD_BLIP_FOR_CAR>(CPools::GetVehicleRef(car), &s);
		//	}
		//}
/*
			//create(MODEL_SWAT, pos); // Спавним копа, передаем коор на 15 м от томми.
		//	car->SetDriver(v); v->DriveVehicle();
		//				car->AddPassenger(v,1);
			//Command<COMMAND_CREATE_CHAR_INSIDE_CAR>(CPools::GetVehicleRef(car), 1, MODEL_COP, &ped);
//	CPed* ped = nullptr;
		//	int n = car->m_bSirenOrAlarm;
		//	car->UsesSiren(); Command<COMMAND_SET_CAR_DENSITY_MULTIPLIER>(0.0);
		//	Command<COMMAND_CREATE_CHAR_INSIDE_CAR>(CPools::GetVehicleRef(car), 10, MODEL_SWAT, &ped);
		/*	car->m_nPrimaryColor(52);
				car->m_nSecondaryColor(52);*/
				//Command<COMMAND_SWITCH_CAR_SIREN>(CPools::GetVehicleRef(car), 1);// Сирена.

				//Command<COMMAND_CREATE_CHAR_AS_PASSENGER>(CPools::GetVehicleRef(car), 10, MODEL_SWAT, 0, &ped);
				//0129: $680 = create_actor 10 #SWAT in_car $682 driverseat
											//CPed* v = create(MODEL_COP, pos); // Спавним копа, передаем коор на 15 м от томми.
						//car->AddPassenger(v,1);
							//car->SetDriver(v);
						//car->SetUpDriver();//уст водителя в авто.
						//		//CVehicle* v = createcar(MODEL_SENTXS); 0167: $3132 = create_marker_at - 1219.969 8.543 10.44 color 1 display 3
						/*	Command<COMMAND_ADD_BLIP_FOR_COORD_OLD>(246.0f, -1293.7f, 10.9f,1,3, &s);
						Command<COMMAND_CHANGE_BLIP_SCALE>(s,7);*/
						//0 Command<COMMAND_ADD_ONE_OFF_SOUND>( 0.0, 0.0, 0.0,7);// Проиграть звук в координатах.
						//018C: play_sound 7 at 0.0 0.0 0.0
						////Command<COMMAND_PRINT_BIG>("RACE2", 1500, 4);// числа для старта гонки.
						//0BA: text_styled 'RACE2' 1500 ms 4  // ~g~3
						//CCoronas b;
						//.Command<COMMAND_DRAW_CORONA>(pos.x, pos.y, pos.z, 5.5, 6, 0, 255, 0, 0);
						/*Command<COMMAND_DRAW_CORONA>(6,5.5,  0, 255, 0, 0, pos.x, pos.y, pos.z);
						Command<COMMAND_DRAW_CORONA>(0, 6, 5.5, 255, 0, 0, pos.x, pos.y, pos.z);
						Command<COMMAND_DRAW_CORONA>(255, 0, 0, 5.5, 6, 0, pos.x, pos.y, pos.z);
						Command<COMMAND_DRAW_CORONA>(255, 0, 0,  6,5.5, 0, pos.x, pos.y, pos.z);
						Command<COMMAND_DRAW_CORONA>(255, 0, 0, 0,5.5, 6,  pos.x, pos.y, pos.z);
						Command<COMMAND_DRAW_CORONA>(5.5, 6, 0, pos.x, pos.y, pos.z, 255, 0, 0);
						Command<COMMAND_DRAW_CORONA>(5.5, 6, 0, 255, 0, 0, pos.x, pos.y, pos.z);
						*/
						/*CMessages::AddMessageJumpQ(L"message", 2000, 1);*/
			//	KeyCheck::Update();
			//	if (KeyCheck::CheckWithDelay('M', 500)) {
			//		Command<COMMAND_DO_FADE>(500,0); 
			//		//					CMessages::AddMessageJumpQ(L"message", 4000, false);
			//		//.thread th(second); th.detach();
			//}
			//	if (KeyCheck::CheckWithDelay('N', 2000)) {
			//		Command<COMMAND_DO_FADE>(500, 1);
			//		
			//	}
			//Test::m_currentState = 0;
					/*	 CVehicle* car = createcar(MODEL_SENTXS);
									car->*/
									// car->FireFixedMachineGuns();
							// //		024F: create_corona_with_radius 2.0 type 9 lensflares 0 with_color 0 255 0 at 2490.4514 -1674.7673 13.3359
							////		Command<COMMAND_DRAW_CORONA>(5.5, 6, 0, 0, 255, 0, pos.x, pos.y, pos.z);
							//	    }
					//	Command<COMMAND_LOAD_MISSION_AUDIO>(152, &s);// = 0x3CF,
								//	if (Command<COMMAND_HAS_MISSION_AUDIO_LOADED>(s)){;// = 0x3D0,
								//	Command<COMMAND_PLAY_MISSION_AUDIO>(s);// = 0x3D1,
								//	if (Command<COMMAND_HAS_MISSION_AUDIO_FINISHED>(s)) {// = 0x3D2,
								//		Command<COMMAND_CLEAR_MISSION_AUDIO>(s);//	040D: unload_wav 1

								//		CMessages::AddMessageJumpQ(L"message", 2000, false);
								//}	}
										//	if (Command<COMMAND_LOCATE_CAR_3D>(CPools::GetVehicleRef(car), pos.x, pos.y, pos.z, 2.0, 2.0, 2.0)) {
										//Command<COMMAND_ADD_BLIP_FOR_CONTACT_POINT>(pos.x, pos.y, pos.z, &s);// создать сферу и розовый квадрат на карте.       
										//Command<COMMAND_CREATE_MONEY_PICKUP>( pos.x, pos.y, pos.z, 2000, &s);
										//	CMessages::AddMessageJumpQ(L"message", 2000, false);

				//Command<COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_CONTACT_POINT>(p.x, p.y, p.z, t, &point);
								//if (Command<COMMAND_LOCATE_PLAYER_ANY_MEANS_3D>(CWorld::PlayerInFocus, point.x, point.y, point.z, 2.0, 2.0, 2.0))
								//	CMessages::AddMessageJumpQ(L"Yes", 1000, 1);
								//
								//	Command<COMMAND_DECLARE_MISSION_FLAG>(true);{
									//CRunningScript script;
									//if(script.m_bIsMission) {
									//CMessages::AddMessageJumpQ(L"on", 2000, 1);}
									//.CVector pos = FindPlayerPed()->TransformFromObjectSpace(CVector(0.0f, 5.0f, 0.0f));
								//	CVector pos = { 241.6f, -1283.0f, 10.9f };
								//	CMessages::AddMessageJumpQ(L"Create", 2000, 1);
								//}
								//if (KeyCheck::CheckWithDelay('N', 500)) {
								//	Command<COMMAND_REMOVE_SPHERE>(sphere);
								//	CMessages::AddMessageJumpQ(L"Delete", 2000, 1);
				//00F5:   player $PLAYER_CHAR 0 - 926.8099 - 327.8378 13.3894 radius 4.0 4.0 4.0
							//Command<COMMAND_ADD_SPHERE>(pos->x, pos->y, pos->z, 2.0, &sphere);	
						//}; //создать, удалить, создать сферу  
						//	CMessages::AddMessageJumpQ(L"message", 2000, false);
						//	Command<COMMAND_REMOVE_SPHERE>(sphere);	};
				// return;
				//return; 
					//if (wait('N')) return; {//если м нажата
								//	pos = worldcoord(player, 1.0, 10.0); //Нахождени координат на 10 от взгляда томми.
								//	//Command<COMMAND_ADD_SPHERE>(pos->x, pos->x, pos->x, 20.0, &sphere);
								//}//создать, удалить, создать сферу  
				//if (Command<COMMAND_LOCATE_PLAYER_ANY_MEANS_3D>(CWorld::PlayerInFocus, 0, pos->x, pos->x, pos->x, 10.0, 5.0, 2.0)) {
				//				 нужно, чтобы обойти глюк.
				//					CMessages::AddMessageJumpQ(L"message", 2000, false);
				//				}
				//ped = create(MODEL_COP, pos); // Спавним копа, передаем коор на 10 м вперед от томми.
				//		static unsigned int time = 0;// обнулить таймер.
				//		delay(time, 2000);
				//		CVector* pos = worldcoord(player, 1.0, 10.0); //Нахождени координат на 10 от взгляда томми.
				//		ped = create(MODEL_COP, pos); // Спавним копа, передаем коор на 10 м вперед от томми.
				//		Command<COMMAND_REQUEST_MODEL>(MODEL_UZI);
				//		Command<COMMAND_LOAD_ALL_MODELS_NOW>(false);
				//		if (Command<COMMAND_HAS_MODEL_LOADED>(MODEL_UZI)) {
				//			Command<COMMAND_GIVE_WEAPON_TO_CHAR>(CPools::GetPedRef(ped), WEAPONTYPE_UZI, 1000);

				//			if (Command<COMMAND_IS_CURRENT_CHAR_WEAPON>(CPools::GetPedRef(ped), 23)) {
				//				(Command<COMMAND_IS_CURRENT_PLAYER_WEAPON>(CPools::GetPedRef(ped), 23))
				//				CMessages::AddMessageJumpQ(L"lkjh", 3300, 2);
				//				/*static char message[256];
				//					snprintf(message, 256, "test = %d", m_test);
				//					CMessages::AddMessageJumpQ(L"message", 4000, false);*/
				//			}
				//			}
				//	
				//	}

				///*
				//		
				//	}
				//if (KeyCheck::CheckWithDelay('B', 200)) {//если м нажата
				//	ped->SetAttack(player);			COMMAND_IS_CURRENT_CHAR_WEAPON = 0x2D8
				//			
				//		m_test =ped->GetWeaponSlot(WEAPONTYPE_UZI);
				//	}
				//	ped->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, player);
				//	CMessages::AddMessageJumpQ(L"model load", 1000, 0)*/
//#include "plugin.h"
//#include "InputManager.h"
//#include "CAnimManager.h"
//#include "eAnimations.h"
//#include "detours.h"
//#include "CStreaming.h"
//
//using namespace plugin;
//
//typedef bool(__cdecl* hCStreaming_RemoveModel) (int);
//static auto OLD_CStreaming_RemoveModel = (hCStreaming_RemoveModel)0x40D6E0;
//
//class GTAVCAnimation {
//public:
//	GTAVCAnimation() {
//		// Initialise your plugin here
//		Events::initGameEvent += [&]
//		{
//			if (!theInputManager.Initialize())
//			{
//				MessageBox(0, "Failed to initialize input manager", "Error", MB_OK);
//				return;
//			}
//
//			theInputManager.RegisterKeyBoardCallBack(
//				std::bind(&GTAVCAnimation::OnKeyPress, this, std::placeholders::_1, std::placeholders::_2)
//			);
//		};
//
//		Events::gameProcessEvent += [&]
//		{
//			theInputManager.ProcessInput();
//		};
//
//		PatchFunction();
//		HookFunctions();
//	}
//
//	void PatchFunction()
//	{
//		// mov al, 01
//		// ret
//		// nop (2x)
//		BYTE AreAnimsUsedByRequestedModels_Patch[] = { 0xB0, 0x01, 0xC3, 0x90, 0x90 };
//		MemCpy((void*)0x40C9C0, AreAnimsUsedByRequestedModels_Patch, sizeof(AreAnimsUsedByRequestedModels_Patch));
//
//		// ret
//		// nop (3x)
//		BYTE CAnimManager_RemoveAnimBlockRef_Patch[] = { 0xC3, 0x90, 0x90, 0x90 };
//		MemCpy((void*)0x404950, CAnimManager_RemoveAnimBlockRef_Patch, sizeof(CAnimManager_RemoveAnimBlockRef_Patch));
//	}
//
//	void HookFunctions()
//	{
//		DetourRestoreAfterWith();
//		DetourTransactionBegin();
//		DetourUpdateThread(GetCurrentThread());
//
//		DetourAttach(&(PVOID&)OLD_CStreaming_RemoveModel, NEW_CStreaming_RemoveModel);
//
//		DetourTransactionCommit();
//	}
//
//	static bool NEW_CStreaming_RemoveModel(int modelID)
//	{
//		// Check if it's IFP animation block
//		if (modelID >= 7916 && modelID <= 7950)
//		{
//			// Do not unload the animation block
//			return true;
//		}
//		return OLD_CStreaming_RemoveModel(modelID);
//	}
//
//	void PlayAnimation(RpClump* pClump, int animGroup, int animID, float blend)
//	{
//		if (animGroup < CAnimManager::ms_numAnimAssocDefinitions)
//		{
//			CAnimationStyleDescriptor* pAnimDef = &CAnimManager::ms_aAnimAssocDefinitions[animGroup];
//			if (pAnimDef)
//			{
//				if (!LoadAnimationBlock(pAnimDef->blockName))
//				{
//					return;
//				}
//			}
//		}
//
//		CAnimBlendAssociation* pAnimAssoc = RpAnimBlendClumpGetFirstAssociation(pClump);
//		while (pAnimAssoc)
//		{
//			if (pAnimAssoc->m_nAnimId == animID && pAnimAssoc->m_nAnimGroup == animGroup)
//			{
//				// Destroy the animation
//				pAnimAssoc->~CAnimBlendAssociation();
//				break;
//			}
//			pAnimAssoc = RpAnimBlendGetNextAssociation(pAnimAssoc);
//		}
//		pAnimAssoc = CAnimManager::BlendAnimation(pClump, animGroup, animID, blend);
//		pAnimAssoc->m_nFlags = ANIMATION_STARTED | ANIMATION_MOVEMENT | ANIMATION_LOOPED;
//	}
//
//	bool LoadAnimationBlock(const char* szBlockName)
//	{
//		CAnimBlock* pAnimBlock = CAnimManager::GetAnimationBlock(szBlockName);
//		if (pAnimBlock)
//		{
//			if (!pAnimBlock->bLoaded)
//			{
//				int animIndex = ((unsigned char*)pAnimBlock - (unsigned char*)CAnimManager::ms_aAnimBlocks) / 32;
//				CStreaming::RequestModel(7916 + animIndex, 0x20 | MISSION_REQUEST | PRIORITY_REQUEST);
//				CStreaming::LoadAllRequestedModels(true);
//				if (pAnimBlock->bLoaded)
//				{
//					return true;
//				}
//			}
//			else
//			{
//				return true;
//			}
//		}
//		return false;
//	}
//
//	void OnKeyPress(unsigned char key, PressState state)
//	{
//		if (state == PRESS_DOWN)
//		{
//			switch (key)
//			{
//			case DIK_0:
//			{
//				CPlayerPed* pLocalPlayer = FindPlayerPed();
//				if (pLocalPlayer && pLocalPlayer->m_pRwClump)
//				{
//					PlayAnimation(pLocalPlayer->m_pRwClump, ANIM_GROUP_PLAYIDLES, ANIM_PLAYIDLES_STRETCH, 1.0f);
//				}
//			}
//			}
//		}
//	}
//
//private:
//	InputManager theInputManager;
//} gTAVCAnimation;

