По скрытию маркера на карте
#1

Приветствую уважаемые посетители русскоязычного sa-mp.com!
У меня проблема, не могу скрыть маркер на карте, хочу что бы игроку из своей команды маркер был виден, а из чужой команды не был виден маркер..

Пробовал вот так:
PHP код:
public OnPlayerStreamIn(playeridforplayerid)
{
    new 
string[40];
    
format(stringsizeof(string), "Теперь ты видишь игрока %d."playerid);
    
SendClientMessage(forplayerid0xFFFFFFFFstring);
     if(
_start_tdm_game == true// Значение устонавливаеться
     
{
         foreach(new 
iPlayer)
        {
            if(
check_registration_tdm[i] == 0) continue;
             if(
my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue;
             
SetPlayerMarkerForPlayer(playeridi0xA5A5A500);
          }
    }
    
Iter_Add(players_streamed[forplayerid], playerid);
    return 
1;

Но не срабатывает код, помогите пожалуйста. Заранее спасибо...
Reply
#2

PHP код:
 if(my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue; 
Вы ведь проверяете, если команда совпадает - исключаете его из цикла. Может там должно быть != ?
Reply
#3

Quote:
Originally Posted by AlexanderM
Посмотреть сообщение
PHP код:
 if(my_commands[i] == my_commands[playerid] && my_commands[i] == my_commands[forplayerid]) continue; 
Вы ведь проверяете, если команда совпадает - исключаете его из цикла. Может там должно быть != ?
I = forplayerid, не?

Или я ошибаюсь, предлагайте свой вариант кода ; )
Reply
#4

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(forplayeridplayerid0xA5A5A500);
        }
    }
    
Iter_Add(players_streamed[forplayerid], playerid); 
Reply
#5

Quote:
Originally Posted by AlexanderM
Посмотреть сообщение
PHP код:
            if(my_commands[forplayerid] == my_commands[playerid] || my_commands[playerid] == my_commands[forplayerid]) 
Это что?


PHP код:
public OnPlayerStreamIn(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );


Далее:
Если в OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Не забываем ознакомиться с ShowPlayerMarkers
.
Reply
#6

Quote:
Originally Posted by SoNikMells
Посмотреть сообщение
Это что?


PHP код:
public OnPlayerStreamIn(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );
да-да, не заметил. И не учёл, что нужно устанавливать маркер и для forplayerid.
Reply
#7

Quote:
Originally Posted by SoNikMells
Посмотреть сообщение
Это что?


PHP код:
public OnPlayerStreamIn(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );


Далее:
Если в OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Не забываем ознакомиться с ShowPlayerMarkers
.
Сделал все как Вы сказали, но не сразу виден цвет, только после смерти (вызов спавна), а надо что бы сразу как только тпшнуло на определенные координаты, как такое сделать?
Reply
#8

После телепорта всех на координаты
PHP код:
for(new i!= MAX_PLAYERSi++)
{
    if(!
check_registration_tdm[i]) continue;
    for(new 
p!= MAX_PLAYERSp++)
    {
        if(
== || !check_registration_tdm[p]) continue;
        if(
my_commands[i] == my_commands[p]) 
        { 
            
SetPlayerMarkerForPlayer(ip, (GetPlayerColor(p) & 0xFFFFFFFF)); 
            
SetPlayerMarkerForPlayer(pi, (GetPlayerColor(i) & 0xFFFFFFFF)); 
            continue;
        }
        
SetPlayerMarkerForPlayer(ip, (GetPlayerColor(p) & 0xFFFFFF00)); 
        
SetPlayerMarkerForPlayer(pi, (GetPlayerColor(i) & 0xFFFFFF00)); 
    }

После телепорта выделенного игрока
PHP код:
for(new i!= MAX_PLAYERSi++)
{
    if(
== playerid || !check_registration_tdm[i]) continue; // playerid = ID нашего игрока
    
if(my_commands[i] == my_commands[playerid]) 
    { 
        
SetPlayerMarkerForPlayer(iplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF)); 
        
SetPlayerMarkerForPlayer(playeridi, (GetPlayerColor(i) & 0xFFFFFFFF)); 
        continue;
    }
    
SetPlayerMarkerForPlayer(iplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00)); 
    
SetPlayerMarkerForPlayer(playeridi, (GetPlayerColor(i) & 0xFFFFFF00)); 

Reply
#9

Quote:
Originally Posted by SoNikMells
Посмотреть сообщение
Это что?


PHP код:
public OnPlayerStreamIn(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Для корректной работы прежде нужно установить цвет игрокам каждой команды:
SetPlayerColor(playerid, ... );


Далее:
Если в OnGameModeInit установлена, либо отсутствует функция
PHP код:
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL
следует использовать CallBack, чтоб при выходе из зоны прорисовки маркеры так же скрывались
PHP код:
public OnPlayerStreamOut(playeridforplayerid
{
    
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(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFFFF));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF));
    }
    else
    {
        
SetPlayerMarkerForPlayer(playeridforplayerid, (GetPlayerColor(forplayerid) & 0xFFFFFF00));
        
SetPlayerMarkerForPlayer(forplayeridplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00));
    }
    return 
true

Не забываем ознакомиться с ShowPlayerMarkers
.
Quote:
Originally Posted by SoNikMells
Посмотреть сообщение
После телепорта всех на координаты
PHP код:
for(new i!= MAX_PLAYERSi++)
{
    if(!
check_registration_tdm[i]) continue;
    for(new 
p!= MAX_PLAYERSp++)
    {
        if(
== || !check_registration_tdm[p]) continue;
        if(
my_commands[i] == my_commands[p]) 
        { 
            
SetPlayerMarkerForPlayer(ip, (GetPlayerColor(p) & 0xFFFFFFFF)); 
            
SetPlayerMarkerForPlayer(pi, (GetPlayerColor(i) & 0xFFFFFFFF)); 
            continue;
        }
        
SetPlayerMarkerForPlayer(ip, (GetPlayerColor(p) & 0xFFFFFF00)); 
        
SetPlayerMarkerForPlayer(pi, (GetPlayerColor(i) & 0xFFFFFF00)); 
    }

После телепорта выделенного игрока
PHP код:
for(new i!= MAX_PLAYERSi++)
{
    if(
== playerid || !check_registration_tdm[i]) continue; // playerid = ID нашего игрока
    
if(my_commands[i] == my_commands[playerid]) 
    { 
        
SetPlayerMarkerForPlayer(iplayerid, (GetPlayerColor(playerid) & 0xFFFFFFFF)); 
        
SetPlayerMarkerForPlayer(playeridi, (GetPlayerColor(i) & 0xFFFFFFFF)); 
        continue;
    }
    
SetPlayerMarkerForPlayer(iplayerid, (GetPlayerColor(playerid) & 0xFFFFFF00)); 
    
SetPlayerMarkerForPlayer(playeridi, (GetPlayerColor(i) & 0xFFFFFF00)); 

Там уже есть цикл, зачем 2 цикл?

Объясните мне дураку
Reply
#10

первый цикл это игрок, цвет которого будет меняться, а второй, это который увидит изменения
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)