По скрытию маркера на карте -
kennydalglish - 10.02.2015
Приветствую уважаемые посетители русскоязычного sa-mp.com!
У меня проблема, не могу скрыть маркер на карте, хочу что бы игроку из своей команды маркер был виден, а из чужой команды не был виден маркер..
Пробовал вот так:
PHP код:
public OnPlayerStreamIn(playerid, forplayerid)
{
new string[40];
format(string, sizeof(string), "Теперь ты видишь игрока %d.", playerid);
SendClientMessage(forplayerid, 0xFFFFFFFF, string);
if(_start_tdm_game == true) // Значение устонавливаеться
{
foreach(new i: Player)
{
if(check_registration_tdm[i] == 0) continue;
if(my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue;
SetPlayerMarkerForPlayer(playerid, i, 0xA5A5A500);
}
}
Iter_Add(players_streamed[forplayerid], playerid);
return 1;
}
Но не срабатывает код, помогите пожалуйста. Заранее спасибо...
Re: По скрытию маркера на карте -
AlexanderM - 10.02.2015
PHP код:
if(my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue;
Вы ведь проверяете, если команда совпадает - исключаете его из цикла. Может там должно быть != ?
Re: По скрытию маркера на карте -
kennydalglish - 10.02.2015
Quote:
Originally Posted by AlexanderM
PHP код:
if(my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue;
Вы ведь проверяете, если команда совпадает - исключаете его из цикла. Может там должно быть != ?
|
I = forplayerid, не?
Или я ошибаюсь, предлагайте свой вариант кода ; )
Re: По скрытию маркера на карте -
AlexanderM - 11.02.2015
PHP код:
if(_start_tdm_game == true)
{
if(check_registration_tdm[playerid] > 0)
{
if(my_commands[forplayerid] == my_commands[playerid] || my_commands[playerid] == my_commands[forplayerid])
SetPlayerMarkerForPlayer(forplayerid, playerid, 0xA5A5A500);
}
}
Iter_Add(players_streamed[forplayerid], playerid);
Re: По скрытию маркера на карте -
SoNikMells - 11.02.2015
Quote:
Originally Posted by AlexanderM
PHP код:
if(my_commands[forplayerid] == my_commands[playerid] || my_commands[playerid] == my_commands[forplayerid])
|
Это что?
PHP код:
public OnPlayerStreamIn(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );
Далее:
Если в
OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL)
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Не забываем ознакомиться с
ShowPlayerMarkers
.
Re: По скрытию маркера на карте -
AlexanderM - 11.02.2015
Quote:
Originally Posted by SoNikMells
Это что?
PHP код:
public OnPlayerStreamIn(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );
|
да-да, не заметил. И не учёл, что нужно устанавливать маркер и для forplayerid.
Re: По скрытию маркера на карте -
kennydalglish - 11.02.2015
Quote:
Originally Posted by SoNikMells
Это что?
PHP код:
public OnPlayerStreamIn(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );
Далее:
Если в OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL)
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Не забываем ознакомиться с ShowPlayerMarkers
.
|
Сделал все как Вы сказали, но не сразу виден цвет, только после смерти (вызов спавна), а надо что бы сразу как только тпшнуло на определенные координаты, как такое сделать?
Re: По скрытию маркера на карте -
SoNikMells - 11.02.2015
После телепорта всех на координаты
PHP код:
for(new i; i != MAX_PLAYERS; i++)
{
if(!check_registration_tdm[i]) continue;
for(new p; p != MAX_PLAYERS; p++)
{
if(i == p || !check_registration_tdm[p]) continue;
if(my_commands[i] == my_commands[p])
{
SetPlayerMarkerForPlayer(i, p, (GetPlayerColor(p) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(p, i, (GetPlayerColor(i) & 0xFFFFFFFF));
continue;
}
SetPlayerMarkerForPlayer(i, p, (GetPlayerColor(p) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(p, i, (GetPlayerColor(i) & 0xFFFFFF00));
}
}
После телепорта выделенного игрока
PHP код:
for(new i; i != MAX_PLAYERS; i++)
{
if(i == playerid || !check_registration_tdm[i]) continue; // playerid = ID нашего игрока
if(my_commands[i] == my_commands[playerid])
{
SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFFFF));
continue;
}
SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00));
}
Re: По скрытию маркера на карте -
kennydalglish - 11.02.2015
Quote:
Originally Posted by SoNikMells
Это что?
PHP код:
public OnPlayerStreamIn(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );
Далее:
Если в OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL)
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playerid, forplayerid)
{
Iter_Add(players_streamed[forplayerid], playerid);
if(!_start_tdm_game) return true; // Значение устанавливается
if(!check_registration_tdm[playerid] || !check_registration_tdm[forplayerid]) return true;
if(my_commands[playerid] == my_commands[forplayerid])
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
}
else
{
SetPlayerMarkerForPlayer(playerid, forplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(forplayerid, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
}
return true;
}
Не забываем ознакомиться с ShowPlayerMarkers
.
|
Quote:
Originally Posted by SoNikMells
После телепорта всех на координаты
PHP код:
for(new i; i != MAX_PLAYERS; i++)
{
if(!check_registration_tdm[i]) continue;
for(new p; p != MAX_PLAYERS; p++)
{
if(i == p || !check_registration_tdm[p]) continue;
if(my_commands[i] == my_commands[p])
{
SetPlayerMarkerForPlayer(i, p, (GetPlayerColor(p) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(p, i, (GetPlayerColor(i) & 0xFFFFFFFF));
continue;
}
SetPlayerMarkerForPlayer(i, p, (GetPlayerColor(p) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(p, i, (GetPlayerColor(i) & 0xFFFFFF00));
}
}
После телепорта выделенного игрока
PHP код:
for(new i; i != MAX_PLAYERS; i++)
{
if(i == playerid || !check_registration_tdm[i]) continue; // playerid = ID нашего игрока
if(my_commands[i] == my_commands[playerid])
{
SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFFFF));
continue;
}
SetPlayerMarkerForPlayer(i, playerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
SetPlayerMarkerForPlayer(playerid, i, (GetPlayerColor(i) & 0xFFFFFF00));
}
|
Там уже есть цикл, зачем 2 цикл?
Объясните мне дураку
Re: По скрытию маркера на карте -
AlexanderM - 12.02.2015
первый цикл это игрок, цвет которого будет меняться, а второй, это который увидит изменения