PDA

Просмотр полной версии : [Вопрос] ProxDetector



Rick
21.01.2015, 17:06
#define ProxDetectorNew(%0,%1,%2,%3) ProxDetector(%0,%1,%2,%3,%3,%3,%3,%3)
ProxDetectorNew(30.0,playerid,ministring,COLOR_PURPLE);

Нужно ведь ещё сток объявить с ProxDetector ? или почему же у меня ошибка выходит?



error 017: undefined symbol "ProxDetector

L0ndl3m
21.01.2015, 17:19
Вы заменили макросом название старого стока, но его не существует. То есть создавайте функцию ProxDetector, в ней всё что нужно создавайте.

Rick
21.01.2015, 19:04
Вы заменили макросом название старого стока, но его не существует. То есть создавайте функцию ProxDetector, в ней всё что нужно создавайте.

Ну вы наверное знаете функции ProxDetectora - не поможете создать сток? именно этот, под мою ту фунцию которую я выше скинул, мне просто самому не получается создать, а в модах различных данного стока тоже нету.

L0ndl3m
21.01.2015, 21:05
Эта функция в гугле лежит в очень многих экземплярах.

Rick
21.01.2015, 21:08
Эта функция в гугле лежит в очень многих экземплярах.

Я не смог её найти, скиньте её пожалуйста, она мне очень требуется - помогите .

L0ndl3m
21.01.2015, 21:11
Плохо искали (http://g.zeos.in/?q=ProxDetector).

gangzone.ini
21.01.2015, 21:12
stock ProxDetector(playerid, Float:range, string[])
{
new Float:POS[3],Float:radius;
GetPlayerPos(playerid, POS[0], POS[1], POS[2]);
foreach(new i: Player)
{
if(IsPlayerConnected(i) && GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i))
{
radius = GetPlayerDistanceFromPoint(i, POS[0], POS[1], POS[2]);
if(radius < range/16) SendClientMessage(i, -1, string);
else if(radius < range/8) SendClientMessage(i, -1, string);
else if(radius < range/4) SendClientMessage(i, -1, string);
else if(radius < range/2) SendClientMessage(i, -1, string);
else if(radius < range) SendClientMessage(i, -1, string);
}
}
return 1;
}

L0ndl3m
21.01.2015, 21:13
#Azumi, количество аргументов выложенной Вами функции не совпадает с количеством аргументов в макросе Rick, будут ошибки.

Rick
21.01.2015, 21:28
Воспользовался поиском, нашёл функцию такую вот . Нормальна ли она?



forward ProxDetector(Float:radi, playerid, str[], col1, col2, col3, col4, col5);
public ProxDetector(Float:radi, playerid, str[],col1,col2,col3,col4,col5)
{
if(IsPlayerConnected(playerid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
//radi = 2.0; //Trigger Radius
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{

GetPlayerPos(i, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
//printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
{
SendClientMessage(i, col1, str);
}
else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
{
SendClientMessage(i, col2, str);
}
else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
{
SendClientMessage(i, col3, str);
}
else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
{
SendClientMessage(i, col4, str);
}
else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
SendClientMessage(i, col5, str);
}
}
}
}//not connected
return 1;
}

L0ndl3m
21.01.2015, 21:43
Если честно, не очень.

В общем, в конец скрипта:


stock ProxDetectorNew(Float: range, playerid, string[], color = -1)
{
new
Float: x,
Float: y,
Float: z,
i = GetMaxPlayers(),
world = GetPlayerVirtualWorld(playerid);

GetPlayerPos(playerid, x, y, z);

do
{
if(0 == IsPlayerConnected(--i)
|| world != GetPlayerVirtualWorld(i)
|| GetPlayerDistanceFromPoint(i, x, y, z) > range)
continue;

SendClientMessage(i, color, string);
}
while(i > 0);
return 1;
}


И уберите Ваш макрос ( если не поняли это define ).

Rick
21.01.2015, 22:02
Закрыто, спасибо.