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

fane4qa

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

case DLL_PROCESS_ATTACH:

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

fane4qa

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

case DLL_PROCESS_ATTACH:

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

fane4qa

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

fane4qa

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

Liahim

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

fane4qa

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

fane4qa

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

Liahim

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

Agravaine

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

fane4qa

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

fane4qa

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

Agravaine

Команда форума
Сообщения
4,600
Лучшие ответы
198
Симпатии
655
#15
Пакет на сервер отправляй и там уже наноси урон.
 

WendoX

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

fane4qa

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

Agravaine

Команда форума
Сообщения
4,600
Лучшие ответы
198
Симпатии
655
#19
Код давай как отправляешь пакет.
почему метод setDead() спокойно работает
Потому что удалить моба в клиентском мире можно, а вот урон расчитывается только на сервере.
 

fane4qa

Каменная лига
Сообщения
721
Лучшие ответы
10
Симпатии
43
#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:
Это изначальный вид пакета с юзом энтити еще.
Я не знаю просто как впихнуть сюда вектор с темы отсюда, я оттуда взял только энтити лук и часть кода с класса ЭвентИнит.
Я полюбому неправильно пакет отправлял поэтому просто не хочу стыдиться, простите((
 
Сверху