This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема Взаимодействие с колшейпом

hun1yy

Новый участник
2 Авг 2022
248
3
33
Всем привет, у меня взаимодействие с нпс реализовано через колшейпы (не знаю как у других), когда 2 игрока и более в одном колшейпе он начинает срабатывать через раз, а то и больше
код прикреплять не стал т.к. очень большой

P.S. работает при 2-х и более игроках колшейп только с определённой стороны
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28
Ну, варианта тут 2:
1. У тебя очень маленький радиус колшейпа, из-за чего просто помещаются в него всего 1-2 игрока.
2. Ты так написал код взаимодействия с колшейпом. Без кода тут тебе ничем не помогут.
 

hun1yy

Новый участник
2 Авг 2022
248
3
33

если без кода никуда то вот его часть
JavaScript:
mp.events.add('playerEnterColshape', async (player, colshape) => {
  await player.call('setInteract',[JSON.stringify(colshape)]);
  if(colshape.isParking && colshape.otherNumber){
    await player.setVariable('parkingNumberColshape',colshape.otherNumber);
    console.log(player.getVariable('parkingNumberColshape'));
  }
  if(colshape.isVehRent && colshape.otherNumber){
    await player.setVariable('rentNumberColshape',colshape.otherNumber);
  }
});

mp.events.add('interact',async (player,col) => {
  console.log('colshape')
  let colshape = JSON.parse(col);
  if( colshape.isRent){
    if (player.money >= 50){
      if(!player.isRent){
        playerRentStart(player,"faggio");
        player.money -= 50;
        await player.call('notify',[`Вы потратили 50 $`,3000,2]);
        mp.db.query("UPDATE `accounts` SET `money` = ? WHERE username = ?",[player.money,player.name]);
        await player.call("moneyUpD",[player.money]);
        await player.setVariable('money',player.money);
      }else{
        await player.call('notify',[`У вас уже есть арендованый транспорт`,3000,0]);
      }
    }else{
      await player.call('notify',[`У вас недостаточно денег`,3000,0]);
    }
  }
  else if(colshape.isNJob){
    await player.call('showNewJob');
    // player.outputChatBox("!{#00ab11}Скоро...");
  }
  else if(colshape.isDalnoJob){
    console.log(player.getVariable('isWork'));
      if(!player.getVariable('isWork')){
        let veh = mp.vehicles.new(mp.joaat('mule'),new mp.Vector3(-238.25372314453125, 6237.83203125, 31.449007034301758),{});
        await player.putIntoVehicle(veh,0);
        await player.setVariable('dalnoVeh',veh);
        await player.setVariable('isWork',true);
        player.jobBalance = 0;
        veh.heading = 90;
        await player.call('truck:startJob');
        // player.wayToD.routeFor(mp.players.local,69,1);
        // colshapeDalno = mp.colshapes.newSphere(3500.5029296875, 3678.830322265625, 33.159141540527344, 4);
        // colshapeDalno.isDalnoJobState1 = true;
      }else{
        // player.outputChatBox(`!{#a89700}Вы уже начали работу`);
        await player.setVariable('isWork',false);
        if(player.jobBalance){
          player.money += player.jobBalance;
          await player.call('truck:endJob');
          await player.call('moneyUpD',[player.money]);
          await player.call('notify',[`Рабочая смена окончена, вы получили ${player.jobBalance}$`,3000,2]);
          mp.db.query("UPDATE `accounts` SET `money` = ? WHERE username = ?",[player.money,player.name]);
        }
        // player.call('notify',["Вы уже начали работу",3000,0]);
      }
    }
})
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28

Mi-Zaft

Гений
VIP
9 Окт 2020
1,736
438
175
Создай маркер с таким же радиусом и поймешь, сколько это по ширине. Заодно сможешь понять, сколько тебе надо.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28
это у меня нпс, вот 2 и поставил
Я понимаю, что NPC, но 2 это нужно быть почти впритык к точке. Какую-то дистанцию занимает сам NPC, вот и получается. Увеличь, попробуй и поймёшь разницу.
 

hun1yy

Новый участник
2 Авг 2022
248
3
33
теперь с ним можно взаимодействовать через пол карты XD
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,770
1,577
211
28
ну это условно, но для нпс это слишком много
Так выставь сколько тебе надо. Откуда же мне знать какая цифра именно тебе нужна. Тебе написали выше - создай маркер на тех же координатах и выставь нужный радиус.
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,812
1,865
208
35
2 - это очень маленький радиус. Просто увеличь его.
Мне кажется ниет
Зашёл почекал свои кулшейпы у нпс



Пошёл даже в старый проект и почекал кулшейпы которые делал там около нпс


И там и там - 2х2
Это не мало на самом деле для нпс-кулшейпа

У меня была когда-то давно похожая история с кулшейпами у автоматов в казино, они адски багались из-за того что наезжали друг на друга и слетала

похожая история из-за этого.
Я бы повыводил себе в чат какие-то интерракшен чеки или проверки этих твоих параметров ну так чисто.

Но вообще когда мельком на код из третьего поста смотришь возникает вопрос
А нахуя там столько async-await?
Я может чего-то не понимаю, но
JavaScript:
        await player.call('notify',[`Вы потратили 50 $`,3000,2]);
        mp.db.query("UPDATE `accounts` SET `money` = ? WHERE username = ?",[player.money,player.name]);
        await player.call("moneyUpD",[player.money]);
        await player.setVariable('money',player.money);
авейтить апдейты я так понимаю отображения денег в худе(видимо?) и установки вариаблов (зачем?)
но при этом не отправлять в ио процесс запрос с апдейтом в базу данных
это ну
интересный мягко скажем подход
 
Последнее редактирование:

hun1yy

Новый участник
2 Авг 2022
248
3
33
про авейты и асинки я подумал что так лучше будет работать, но нет
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,812
1,865
208
35
я не сильно профессионал асинхронного программирования и если что заранее извиняюсь
но это выглядит как будто бы ты просто хуяришь везде асинк авейт где не попадя
а это ну не особо нужно

не вызывает ли это ошибок, когда у тебя часть кода выполняется до того, как то что было до него - успело ответить на эвейт
тогда ситуация которую ты описываешь, вполне может происходить
 

hun1yy

Новый участник
2 Авг 2022
248
3
33
я пытался проблему фиксануть
 

Mi-Zaft

Гений
VIP
9 Окт 2020
1,736
438
175
я пытался проблему фиксануть
В идеале - почитать про асинки, а не просто наугад тыкать их в каждую строку))
Ты что-то пробовал из предложенных тебе вариантов?
1)Я тебе советовал создавать маркер, чтобы визуализировать радиус колшейпа.
2)Человек выше тебе посоветовал выводить в чат инфу при колшейпах.
 
Реакции: Inoi