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

    Статус
    Оффлайн
    Регистрация
    26.11.2016
    Сообщений
    14
    Репутация:
    0 ±

    Подмена координат объекта

    Доброго времени суток.
    Сразу к сути, я создаю объект при наезде на который происходит взрыв. Далее создаю объект который прокалывает шипы, но он так же взрывается.
    Объект который должен взрываться:
    PHP код:
                    if(IsValidPlayerObject(playeridobmin[battleinv[playerid]]))
                    {
                        new 
    Float:xoFloat:yoFloat:zo;
                        
    GetPlayerObjectPos(playeridobmin[battleinv[playerid]], xoyozo);
                     
                        if(
    IsPlayerInRangeOfPoint(playerid5.0xoyozo))
                        {
                            
    DestroyObject(obmin[battleinv[playerid]]);
                            foreach(
    Playeri)
                            {
                                if(
    battleinv[i] == battleinv[playerid])
                                {
                                    
    CreateExplosion(xoyozo06.0);
                                    
    DestroyPlayerObject(iobmin[battleinv[i]]);
                                    
    xo 0;
                                    
    yo 0;
                                    
    zo 0;
                                }
                            }
                        }
                    } 
    Объект который должен прокалывать шипы:
    PHP код:
                   new Float:xsFloat:ysFloat:zs;
                    new 
    panelssdoorsslightsstiress;
                    
    GetPlayerObjectPos(playeridshipi[battleinv[playerid]], xsyszs);
                    if(
    IsPlayerInRangeOfPoint(playerid1.0xsyszs))
                    {

                        
    GetVehicleDamageStatus(vehicleidpanelssdoorsslightsstiress);
                        
    UpdateVehicleDamageStatus(vehicleidpanelssdoorsslightss15);
                    } 
    Если сначала поставить объект который прокалывает шипы, а потом создать тот что должен взрываться, то всё работает правильно.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    При удалении объекта нужно и переменную обнулять, что хранит ID объекта
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    26.11.2016
    Сообщений
    14
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    При удалении объекта нужно и переменную обнулять, что хранит ID объекта
    Проблема была действительно в том, что я не обнулял переменную. Спасибо, тема закрыта.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Сталкиваюсь с подобной проблемой у людей далеко не первый раз, поэтому давайте попробую объяснить причину, по которой происходил баг (встречаются и те, кто не понимает почему так происходит):

    Когда ты создавал объект бомбы, он занимал, например, ID 1, который ты записывал в переменную.
    Далее ты действие обрабатывал и удалял сам объект, но переменную не обнулял.
    После ты создал объект шипов и он занял первый свободный ID (тот самый 1-ый ID, который был у объекта бомбы).
    Соответственно, теперь у тебя и бомба, и шипы имеют одинаковый ID объекта => когда происходит обработка кода для бомб, функция IsValidPlayerObject возвращает информацию о том, что объект существует (хотя это шипы, а не бомба) и действие для шипов выполняется как для бомбы.

    Это так же можно было зафиксить проверкой на нужную тебе модель объекта (GetPlayerObjectModel) вместо IsValidPlayerObject, но обнуление переменной в данном случае подходит больше


    Закрыто.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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