JS Телепорт в точку на карте

Verdiji

Trainee
Доброго дня, выкладываю код с видео от замечательного человека ecore, дабы не переписывать все оттуда, кому надо.
Единственное, что я переделал - вызов функции.
На сервере создал команду с проверкой на админа :
Код:
mp.events.addCommand('tpwp', (player) => { // команда
    if (player.admin < 1) return player.notify('~r~Вы не админ!'); // проверка
    player.call('teleport') // вызов выполнения кода на клиенте
})

Клиентская часть:
JavaScript:
GetWaypointCoords = function () {
    try {
        if (mp.game.invoke('0x1DD1F58F493F1DA5')) {
            let Blip_Interator = mp.game.invoke('0x186E5D252FA50E7D');
            let BlipsFound = mp.game.invoke('0x9A3FF3DE163034E8');
            let FirstInfoId = mp.game.invoke('0x1BEDE233E6CD2A1F', Blip_Interator );
            let NextInfoId = mp.game.invoke('0x14F96AA50D6FBEA7', Blip_Interator);
            for (let i = FirstInfoId, blipCount = 0; blipCount != BlipsFound; blipCount++, i = NextInfoId) {
                if (mp.game.invoke('0x1FC877464A04FC4F'))
                var coord = mp.game.ui.getBlipInfoIdCoord(i);
                return coord;
            }
        }
        return null;
    } catch (e) {}
}
getZCoord = function(x, y, z, fnd) {
    let zcoord = 0.0;
    let interval_c = 0;

    let interval = setInterval(function() {
        interval_c++;
        mp.game.streaming.setFocusArea(x, y, 1000, 0.0, 0.0, 0.0);

        if (z ==0) {
            for (let i = 800; i >= 0; i-=20) {
                let checkz = i +0.1;

                mp.game.streaming.requestAdditionalCollisionAtCoord(x, y, checkz);
                if (interval_c >= 50) player.setCoordsNoOffset(x, y, checkz, false, false, false);
                zcoord = mp.game.gameplay.getGroundZFor3dCoord(x, y, checkz, 0.0, false);
                if (zcoord !== 0.0) {
                    mp.game.invoke('0x198F77705FA0931D', player.handle)
                    fnd(zcoord + 0.1);
                    clearInterval(interval);
                    return;
                }
            }
        } else {
            zcoord = mp.game.gameplay.getGroundZFor3dCoord(x,y, checkz, 0.0, false);
            mp.game.invoke('0x198F77705FA0931D', player.handle)
            fnd(zcoord + 0.1);
            clearInterval(interval);
            return;
        }
        if (interval_c >= 100) {
            if (interval_c >= 50) player.setCoordsNoOffset(x, y, 10.0, false, false, false);
            mp.game.invoke('0x198F77705FA0931D', player.handle);
            clearInterval(interval);
            return
        }
    }, 1);
}

mp.events.add('teleport', () => { // создание точки вызова для сервера

  let coords = GetWaypointCoords();
  if (!coords) return mp.game.graphics.notify('~r~ Нет точки телепорта');
  if (coords !== null) {
      getZCoord(coords.x, coords.y, 0, function(z) {
          if (!player.vehicle){
            player.setCoordsNoOffset(coords.x, coords.y, z, false, false, false);
          } else {
              player.vehicle.setCoordsNoOffset(coords.x, coords.y, z, false, false, false);
          }
      })
  }
});

Для бинда на кнопку, без участия сервера вместо
Код:
mp.events.add('teleport', () => {
вставить
Код:
mp.keys.bind(0x74, true, function() {

0x74 - кнопка F5
Если где-то не так написал формулировку - поправьте, пожалуйста, сам учусь ещё = )
 

evgee

Junior Developer
Респект за музыку в уроке! Это уникальный урок!! Спасибо
 

Verdiji

Trainee
Все благодарности автору ролика в комментах напишите, мож вернётся и напишет для нас что-нибудь ещё :D( это вряд ли = ) )
 
Яндекс.Метрика
Верх