Многие помнят возможность раскраски чекпоинтов в ранних бетах 0.3c (а может быть уже тогда юзали цвет материалов?), но в релизе эту возможность убрали... Мы решили исправить эту досадную несправедливость! Вы можете распределить цвета так, как вам угодно, сделать цилиндры пикапами и назначить любые действия для ваших условий.
Спасибо Vince за наводку. Я переделал цвета (под обновление САМПа) и выставил действие при нахождении вблизи чекпоинтов.
Автор: OKStyle
Версия 2
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Спасибо 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;
}
Версия 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;
}
Последнее редактирование: