Обычная пуля или сверхсветовой поражающий луч?

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#1
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Думаю над тем, чтобы пвп составляющая оружейного мода была более менее адекватной.
Но вот тут выбор, дамажить сущности, лежащих на вектора взгляда игрока, или просто спавнить пули
Пули у меня спавнятся хреново, с задержкой дикой на сервере, и из-за этого невозможно адекватно перестреливаться
Так как мне баллистика не важна, хочу попробовать 1 метод. Можно ли рандомом искривлять взгляд игрока в сторону? Типо разброс. Кроме движения экрана, кншн. И какие подводные камни?
 

MaxVaryingFloats = 32;

Золотая лига
Сообщения
1,750
Лучшие ответы
47
Симпатии
280
#2
лежащих на вектора взгляда игрока
Однозначно так. Энтити пули очень сильно нагружают сервер, это уже практика многих серверов.
Трассировка взгляда игрока уже есть в майне, можешь посмотреть там.
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#3
Ну, у меня тут и встает проблема. Возьму я вектор взгляда игрока, он будет дамажить в одну точку же? Как мне сделать поведение, подобное обычному разбросу. Да и нужны ли тут пакеты?
 

MaxVaryingFloats = 32;

Золотая лига
Сообщения
1,750
Лучшие ответы
47
Симпатии
280
#4
Разброс это банальное прибавление к ветору взгляда игрока случайного значения, в этом вообще ничего сложного нет.
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#5
Что насчет пакетов? Думаю что нужны
 

MaxVaryingFloats = 32;

Золотая лига
Сообщения
1,750
Лучшие ответы
47
Симпатии
280
#6
конечно нужны, без них никуда
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#7
Я чекнул тему Положение игрока
Способ такой же, как мне надо сделать, но я не понял как амазинг это пофиксил... Там проблема была с рассинхроном позиций игрока, собственно как и с обычной пулей
 
Последнее редактирование:

Liahim

Золотая лига
Сообщения
3,034
Лучшие ответы
32
Симпатии
169
#8
Слуш... А тот же снежок - это не пуля? Почему он сервер не грузит?
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#9
Может потому что снежки никто не юзает? И никто не юзают снежкометы с 600 выстрелов в минуту и 100 патронами в обойме
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#10
Пытаюсь через:
Java:
MovingObjectPosition object = Minecraft.getMinecraft().objectMouseOver;
            if (object.typeOfHit == MovingObjectType.ENTITY){
                System.out.println("текст");
            }
Но работает только на близком расстоянии (около 4.5F)
Чорт, столько тем по этому, но я ничего так и не понял >_<
 

Liahim

Золотая лига
Сообщения
3,034
Лучшие ответы
32
Симпатии
169
#11
Бяда... А я только задумал сделать снежкомёт (((
 

Agravaine

Алмазная лига
Сообщения
4,069
Лучшие ответы
151
Симпатии
435
#12
Пытаюсь через:
Java:
MovingObjectPosition object = Minecraft.getMinecraft().objectMouseOver;
            if (object.typeOfHit == MovingObjectType.ENTITY){
                System.out.println("текст");
            }
Но работает только на близком расстоянии (около 4.5F)
Чорт, столько тем по этому, но я ничего так и не понял >_<
Эта переменная вычисляется в методе EntityRenderer#getMouseOver. Скопируй его себе и измени максимальное расстояние.
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#13
Скопируй его себе и измени максимальное расстояние
да, я уже просек))
Теперь осталось дамажить и сделать разброс
Не совсем понимаю как это делать :(
Хотя на пальцах что то вертится, но я не уверен
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#14
Java:
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY)
                {
                    mop.entityHit.attackEntityFrom(DamageSource.cactus, 15);
                }
Дамагаю энтити так. Но оно не работает, хотя метод setDead() срабатывает :/
 

Agravaine

Алмазная лига
Сообщения
4,069
Лучшие ответы
151
Симпатии
435
#15
Пакет на сервер отправляй и там уже наноси урон.
 

bluffyWendoX

Каменная лига
Сообщения
71
Лучшие ответы
7
Симпатии
15
#16
Для разброса - rotationYaw && rotationPitch.Юзай через Random r = new Random();
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#18
Пакет на сервер отправляй и там уже наноси урон.
Странно, но мне даже это не помогает. Я не понимаю, почему метод setDead() спокойно работает, но атакэнтитифром вообще отказывается, это что за чушь?
 

Agravaine

Алмазная лига
Сообщения
4,069
Лучшие ответы
151
Симпатии
435
#19
Код давай как отправляешь пакет.
почему метод setDead() спокойно работает
Потому что удалить моба в клиентском мире можно, а вот урон расчитывается только на сервере.
 

fane4qa

Каменная лига
Сообщения
552
Лучшие ответы
8
Симпатии
23
#20
Java:
public class PacketGunFire extends PacketBase
{
    public boolean held;
    public boolean left;
    
    public PacketGunFire() {}
    
    public PacketGunFire(boolean l, boolean h)
    {
        left = l;
        held = h;
    }

    @Override
    public void encodeInto(ChannelHandlerContext ctx, ByteBuf data)
    {
        data.writeBoolean(held);
        data.writeBoolean(left);
    }

    @Override
    public void decodeInto(ChannelHandlerContext ctx, ByteBuf data)
    {
        held = data.readBoolean();
        left = data.readBoolean();
    }

    @Override
    public void handleServerSide(EntityPlayerMP playerEntity)
    {
        
        ItemStack currentItem = playerEntity.inventory.getCurrentItem();
        GunType gunType = ((ItemGun)currentItem.getItem()).type;
        if(currentItem != null && currentItem.getItem() != null && currentItem.getItem() instanceof ItemGun)
        {
            ((ItemGun)currentItem.getItem()).onMouseHeld(currentItem, playerEntity.worldObj, playerEntity, left, held);
            
        }
        
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void handleClientSide(EntityPlayer clientPlayer)
    {
        
    }
}
Java:
Это изначальный вид пакета с юзом энтити еще.
Я не знаю просто как впихнуть сюда вектор с темы отсюда, я оттуда взял только энтити лук и часть кода с класса ЭвентИнит.
Я полюбому неправильно пакет отправлял поэтому просто не хочу стыдиться, простите((
 
Сверху