Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Wise
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.10.2014
    Сообщений
    148
    Репутация:
    37 ±

    Виртуальный мир пассажиров транспорта

    Доброго времени суток уважаемые форумчане! Делал систему гаража, и столкнулся с небольшой проблемкой. Когда водитель сигналит, он перемещается в гараж. У него изменяется виртуальный мир и интерьер (у транспорта тоже). Но! Если в транспорте есть пассажир, то у него (у пассажира) не изменяется виртуальный мир и интерьер. Он остаётся нулевым. Вопрос остаётся за малым: как сделать так, чтобы при перемещении водителя в другой интерьер и вирт. мир, у пассажиров тоже они изменялись?
    PHP код:
    if(newkeys == клавиша сигнала)
    {
      
    // проверка на местонахождение игрока.в
      
    {
        
    SetVehiclePos(GetPlayerVehicleID(playerid), xyz);
      }


  2. #2
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Узнавай так же проверкой, если за местами сидят какие-либо люди, узнаём их айди, и передаём виртуальный мир/интерьер.
    Я лично так сделал у себя в моде..

  3. Пользователь сказал cпасибо:
    Wise (23.01.2016)
  4. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Узнавай так же проверкой, если за местами сидят какие-либо люди, узнаём их айди, и передаём виртуальный мир/интерьер.
    Я лично так сделал у себя в моде..
    Совершенно верно.
    Верно вам подсказал StevenH, ТС.
    Я же подскажу немного больше и оформлю это всё в виде кода:
    PHP код:
    if(newkeys == <некоторая_нажатая_клавиша>)
    {
        new
            
    current_client_vehicle GetPlayerVehicleID(playerid),
            
    current_client_world GetPlayerVehicleWorld(playerid),
            
    current_client_interior GetPlayerInterior(playerid);

        
    // возможно чуть ниже смена: интерьера, мира?
        
    for(new GetPlayerPoolSize(); --> -1; )
        {
            if(
    IsPlayerInVehicle(icurrent_client_vehicle))
            {
                
    SetVehicleVirtualWorld(icurrent_client_world);
                
    LinkVehicleToInterior(icurrent_client_interior);
            }
        }

    Но использовать ли этот способ, - это ваше решение.
    Последний раз редактировалось L0ndl3m; 23.01.2016 в 19:37.

  5. 2 пользователя(ей) сказали cпасибо:
    VVWVV (23.01.2016) Wise (23.01.2016)
  6. #4
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Можно так.
    PHP код:
    if(newkeys == клавиша сигнала
    {
        if(
    GetPlayerState(playerid) != 2) return 1;
        new 
    vehicleid GetPlayerVehicleID(playerid);
        new 
    pass1 GetVehicleSeat(vehicleid,1);
        new 
    pass2 GetVehicleSeat(vehicleid,2);
        new 
    pass3 GetVehicleSeat(vehicleid,3);
        
    LinkVehicleToInterior(vehicle1ид интерьера);
        
    SetVehicleVirtualWorld(vehicleidид вирт мира);
        
    SetPlayerVirtualWorld(playeridид вирт мира);
        
    SetPlayerInterior(playerid,ид интерьера);
        if(
    pass1 != INVALID_PLAYER_ID)
        {
            
    // меняем инт/вирт игроку 1
            
    SetPlayerInterior(pass1,ид интерьера);
            
    SetPlayerVirtualWorld(pass1,ид вирт мира);
        }
        if(
    pass2 != INVALID_PLAYER_ID)
        {
            / 
    меняем инт/вирт игроку 2
            SetPlayerInterior
    (pass2,ид интерьера);
            
    SetPlayerVirtualWorld(pass2,ид вирт мира);
        }
        if(
    pass3 != INVALID_PLAYER_ID)
        {
            / 
    меняем инт/вирт игроку 3
            SetPlayerInterior
    (pass3,ид интерьера);
            
    SetPlayerVirtualWorld(pass3,ид вирт мира);
        }

    PHP код:
    stock GetVehicleSeat(vehicleid,mesto)
    {
        for(new 
    0GetPlayerPoolSize(); <= ji++)
        {
            if(!
    IsPlayerConnected(i)) continue;
            if(
    PI[i][pSpawn] == false) continue; // тут свою проверку на авторизацию
            
    if(IsPlayerInVehicle(i,vehicleid))
            {
                if(
    GetPlayerVehicleSeat(i) == mesto) return i;
            }
        }
        return 
    INVALID_PLAYER_ID;

    п.с надеюсь зайдет в эту тему профик и скажет, что я бомж и предложит как узнать ид пассажира не используя перебор игроков.

  7. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от seriu Посмотреть сообщение
    Можно так.
      Открыть/закрыть
    PHP код:
    if(newkeys == клавиша сигнала
    {
        if(
    GetPlayerState(playerid) != 2) return 1;
        new 
    vehicleid GetPlayerVehicleID(playerid);
        new 
    pass1 GetVehicleSeat(vehicleid,1);
        new 
    pass2 GetVehicleSeat(vehicleid,2);
        new 
    pass3 GetVehicleSeat(vehicleid,3);
        
    LinkVehicleToInterior(vehicle1ид интерьера);
        
    SetVehicleVirtualWorld(vehicleidид вирт мира);
        
    SetPlayerVirtualWorld(playeridид вирт мира);
        
    SetPlayerInterior(playerid,ид интерьера);
        if(
    pass1 != INVALID_PLAYER_ID)
        {
            
    // меняем инт/вирт игроку 1
            
    SetPlayerInterior(pass1,ид интерьера);
            
    SetPlayerVirtualWorld(pass1,ид вирт мира);
        }
        if(
    pass2 != INVALID_PLAYER_ID)
        {
            / 
    меняем инт/вирт игроку 2
            SetPlayerInterior
    (pass2,ид интерьера);
            
    SetPlayerVirtualWorld(pass2,ид вирт мира);
        }
        if(
    pass3 != INVALID_PLAYER_ID)
        {
            / 
    меняем инт/вирт игроку 3
            SetPlayerInterior
    (pass3,ид интерьера);
            
    SetPlayerVirtualWorld(pass3,ид вирт мира);
        }

    PHP код:
    stock GetVehicleSeat(vehicleid,mesto)
    {
        for(new 
    0GetPlayerPoolSize(); <= ji++)
        {
            if(!
    IsPlayerConnected(i)) continue;
            if(
    PI[i][pSpawn] == false) continue; // тут свою проверку на авторизацию
            
    if(IsPlayerInVehicle(i,vehicleid))
            {
                if(
    GetPlayerVehicleSeat(i) == mesto) return i;
            }
        }
        return 
    INVALID_PLAYER_ID;


    п.с надеюсь зайдет в эту тему профик и скажет, что я бомж и предложит как узнать ид пассажира не используя перебор игроков.
    Профик выше уже показал как сделать всё с помощью одного цикла, а не вызывать функцию с циклом 3 раза ;) Да и у того же автобуса может быть гораздо больше 3-х пассажиров... А у мотоцикла их лишь один :( Так что вариант профика выше добротнее :с
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. Пользователь сказал cпасибо:
    seriu (23.01.2016)
  9. #6
    Аватар для Wise
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.10.2014
    Сообщений
    148
    Репутация:
    37 ±
    Огромное спасибо всем, кто отозвался. Помог способ StevenH`a и Londlem`a.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •