Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

[FS] Colored Checkpoints

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11
Многие помнят возможность раскраски чекпоинтов в ранних бетах 0.3c (а может быть уже тогда юзали цвет материалов?), но в релизе эту возможность убрали... Мы решили исправить эту досадную несправедливость! Вы можете распределить цвета так, как вам угодно, сделать цилиндры пикапами и назначить любые действия для ваших условий.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Спасибо Vince за наводку. Я переделал цвета (под обновление САМПа) и выставил действие при нахождении вблизи чекпоинтов.

PHP:
#include <a_samp>
// Colored Checkpoints by Vince & O.K.Style™
new ColoredCheckpoints[5];
public OnFilterScriptInit()
{
	ColoredCheckpoints[0] = CreateObject(1317, 1410.0, 1461.0, 9.82, 0.0, 0.0, 0.0);
    SetObjectMaterial(ColoredCheckpoints[0], 0, 18646, "matcolours", "red-4", 0x99FF0000); // name of texture or txd - same

    ColoredCheckpoints[1] = CreateObject(1317, 1412.0, 1461.0, 9.82, 0.0, 0.0, 0.0);
    SetObjectMaterial(ColoredCheckpoints[1], 0, 18646, "matcolours", "orange", 0x99FF8000);

    ColoredCheckpoints[2] = CreateObject(1317, 1414.0, 1461.0, 9.82, 0.0, 0.0, 0.0);
    SetObjectMaterial(ColoredCheckpoints[2], 0, 18646, "matcolours", "yellow", 0x99FFFF00);

    ColoredCheckpoints[3] = CreateObject(1317, 1416.0, 1461.0, 9.82, 0.0, 0.0, 0.0);
    SetObjectMaterial(ColoredCheckpoints[3], 0, 18646, "matcolours", "green", 0x99008000);

    ColoredCheckpoints[4] = CreateObject(1317, 1418.0, 1461.0, 9.82, 0.0, 0.0, 0.0);
    SetObjectMaterial(ColoredCheckpoints[4], 0, 18646, "matcolours", "blue", 0x990000FF);
    return 1;
}
public OnPlayerUpdate(playerid)
{
	new Float:x, Float:y, Float:z;
/*
	for(new i = 0; i < sizeof(ColoredCheckpoints); i++)
	{
	    GetObjectPos(ColoredCheckpoints[i], x, y, z);
	    if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z))
	    {
	        SendClientMessage(playerid, 0xFDE39DFF, "You are in checkpoint!");
	    }
	}
*/
	GetObjectPos(ColoredCheckpoints[0], x, y, z);
	if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z)) SendClientMessage(playerid, 0xFDE39DFF, "You are in red checkpoint!");
//	GetObjectPos(ColoredCheckpoints[1], x, y, z);
//	if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z)) SendClientMessage(playerid, 0xFDE39DFF, "You are in orange checkpoint!");
	return 1;
}
Автор: OKStyle

Версия 2

frog163 написал(а):
Решил все довести до ума, добавил действие на вход и выход из чекпоинта, а также ф-и:

IsPlayerInColorCheckID(playerid,colorcheckid) - вернет true если playerid находится в colorcheckid, иначе false;
IsPlayerInAnyColorCheck(playerid) - вернет true если playerid находится в каком-нибудь чекпоинте, иначе false;
GetPlayerColorCheckID(playerid) - вернет id чекпоинта в котором игрок стоит, если чекпоинт не найдется вернет -1;
PHP:
#include <a_samp>
// Colored Checkpoints by Vince & O.K.Style™
#define	MAX_COLOR_CHECK	5
new Float:cPos[MAX_COLOR_CHECK][6] = {
	{1410.0, 1461.0, 9.82, 0.0, 0.0, 0.0},
	{1412.0, 1461.0, 9.82, 0.0, 0.0, 0.0},
	{1414.0, 1461.0, 9.82, 0.0, 0.0, 0.0},
	{1416.0, 1461.0, 9.82, 0.0, 0.0, 0.0},
	{1418.0, 1461.0, 9.82, 0.0, 0.0, 0.0}
};
new cID[MAX_COLOR_CHECK];
new bool:cEntered[MAX_PLAYERS][MAX_COLOR_CHECK];
new timer;
#define	IsPlayerInColorCheckID(%0,%1)	cEntered[%0][%1]//проверка на нахождение игрока в чекпоинте
public OnFilterScriptInit()
{
	cID[0] = CreateObject(1317, cPos[0][0], cPos[0][1], cPos[0][2], cPos[0][3], cPos[0][4], cPos[0][5]);
	SetObjectMaterial(cID[0], 0, 18646, "matcolours", "red-4", 0x99FF0000); // name of texture or txd - same

	cID[1] = CreateObject(1317, cPos[1][0], cPos[1][1], cPos[1][2], cPos[1][3], cPos[1][4], cPos[1][5]);
	SetObjectMaterial(cID[1], 0, 18646, "matcolours", "orange", 0x99FF8000);

	cID[2] = CreateObject(1317, cPos[2][0], cPos[2][1], cPos[2][2], cPos[2][3], cPos[2][4], cPos[2][5]);
	SetObjectMaterial(cID[2], 0, 18646, "matcolours", "yellow", 0x99FFFF00);

	cID[3] = CreateObject(1317, cPos[3][0], cPos[3][1], cPos[3][2], cPos[3][3], cPos[3][4], cPos[3][5]);
	SetObjectMaterial(cID[3], 0, 18646, "matcolours", "green", 0x99008000);

	cID[4] = CreateObject(1317, cPos[4][0], cPos[4][1], cPos[4][2], cPos[4][3], cPos[4][4], cPos[4][5]);
	SetObjectMaterial(cID[4], 0, 18646, "matcolours", "blue", 0x990000FF);
	return 1;
}
public OnPlayerConnect(playerid){
	for(new i; i < MAX_COLOR_CHECK; i++)cEntered[playerid][i]=false;
	return 1;
}
public OnPlayerUpdate(playerid)
{
	if(GetTickCount() < timer+100)return 1;
	timer = GetTickCount();
	for(new i; i < MAX_COLOR_CHECK; i++)
	{
		if(IsPlayerInRangeOfPoint(playerid, 1.25, cPos[i][0], cPos[i][1], cPos[i][2]))
		{
			if(cEntered[playerid][i])continue;
			cEntered[playerid][i] = true;
			//ниже действия при входе
			printf("%d зашел в чекпоинт", playerid);
			SendClientMessage(playerid, -1, "{eeeeee}Зашел в чекпоинт!");
			switch(i){
				case 0:SendClientMessage(playerid, -1, "{ee0000}красный!");
				case 1:SendClientMessage(playerid, -1, "{ff8800}оранжевый!");
				case 2:SendClientMessage(playerid, -1, "{eeee00}желтый!");
				case 3:SendClientMessage(playerid, -1, "{00ee00}зеленый!");
				case 4:SendClientMessage(playerid, -1, "{00eeee}голубой!");
			}
			//end
		}else{
			if(!cEntered[playerid][i])continue;
			cEntered[playerid][i] = false;
			//ниже действия при выходе
			printf("%d покинул чекпоинт", playerid);
			SendClientMessage(playerid, -1, "{eeeeee}Вышел из чекпоинта!");
			switch(i){
				case 0:SendClientMessage(playerid, -1, "{ee0000}красный!");
				case 1:SendClientMessage(playerid, -1, "{ff8800}оранжевый!");
				case 2:SendClientMessage(playerid, -1, "{eeee00}желтый!");
				case 3:SendClientMessage(playerid, -1, "{00ee00}зеленый!");
				case 4:SendClientMessage(playerid, -1, "{00eeee}голубой!");
			}
			//end
		}
	}
	return 1;
}
public OnPlayerCommandText(playerid, cmdtext[]){
	if(!strcmp(cmdtext, "/moneyred", true)){
		if(IsPlayerInColorCheckID(playerid, 0)){//если playerid находится в чеке с идом 0 (красный)
			SendClientMessage(playerid, -1, "{ee0000}Ты в красном чеке, лови монетку!");
			GivePlayerMoney(playerid, 1);
		}else SendClientMessage(playerid, -1, "{ff0000}Ты не в красном чеке!");
		return 1;
	}else if(!strcmp(cmdtext, "/moneyany", true)){
		if(IsPlayerInAnyColorCheck(playerid)){//если playerid находится в каком нибудь чеке
			SendClientMessage(playerid, -1, "{ee00ee}Ты в какомто чеке, лови монетку!");
			GivePlayerMoney(playerid, 1);
		}else SendClientMessage(playerid, -1, "{ff0000}Войди в любой чек!");
		return 1;
	}else if(!strcmp(cmdtext, "/getcheck", true)){//узнать в каком чеке находится playerid
		if(IsPlayerInAnyColorCheck(playerid)){
			new str[144];
			format(str, 144, "{eeeeee}ColorCheckID: %d", GetPlayerColorCheckID(playerid));
			SendClientMessage(playerid, -1, str);
		}else SendClientMessage(playerid, -1, "{ff0000}Войди в любой чек!");
		return 1;
	}else if(!strcmp(cmdtext, "/tp", true)){//телепорт к тестовым чекам
		SetPlayerPos(playerid, 1415.0404,1452.5490,10.8203);
		return 1;
	}
	return 0;
}
stock IsPlayerInAnyColorCheck(playerid){
	for(new i; i < MAX_COLOR_CHECK; i++)if(IsPlayerInColorCheckID(playerid, i))return true;
	return false;
}
stock GetPlayerColorCheckID(playerid){
	for(new i; i < MAX_COLOR_CHECK; i++)if(IsPlayerInColorCheckID(playerid, i))return i;
	return -1;
}
 
Последнее редактирование:
Сверху Снизу