Обновления RC1-0.3.7 RAGE:MP

Статус
В этой теме нельзя размещать новые ответы.

Pa[DoN]oK

Мастер
Пользователь
Регистрация
29 Май 2012
Сообщения
2,392
Лучшие ответы
1
Репутация
285
В данный теме собран список всех обновлений RAGE:MP.
Список изменений предоставлен с версии RC-1.
Данная тема будет обновляться.​
EVENTS
PHP:
public class EventsExample : RAGE.Events.Script
{
  public EventsExample()
  {
    // this kind of events receives mp.trigger, mp.events.callLocal, but also remote events
    RAGE.Events.AddEvent("remote_triggerable_event", SomeEvent);
    
    RAGE.Events.AddDataHandler("some_data", SomeDataHandler);
    
    RAGE.Events.Tick += Tick;
    RAGE.Events.OnPlayerChat += ChatHandler;
    
    // trigger a js event
    RAGE.Events.CallLocal("eventName", 1, "someString", 1.0f);
  }
  
  public void SomeEvent(object[] args)
  {
  }
  
  public void SomeDataHandler(RAGE.Elements.Entity entity, object value)
  {
  }
  
  public void ChatHandler(string text, RAGE.Events.CancelEventArgs cancel)
  {
    if(text == "cancelme")
    {
        cancel.Cancel = true;
    }
  }
  
  // known as "render" in JS
  public void Tick(System.Collections.Generic.List<RAGE.Events.TickNametagData> nametags)
  {
  }
}
GAME INTERACTION
PHP:
// trivial game stuff
int interior = RAGE.Game.Interior.GetInteriorFromCollision(0.0f, 0.0f, 0.0f);

// player interaction
RAGE.Elements.Entities.Players.GetAtRemote(1).ClearDecorations();

// player interaction using a game entity handle
RAGE.Game.Ped.ClearPedDecorations(RAGE.Elements.Player.LocalPlayer.Handle);

// ped creation
uint freeroamHash = RAGE.Game.Misc.GetHashKey("mp_m_freemode_01");
RAGE.Elements.Ped ped = new RAGE.Elements.Ped(freeroamHash, new RAGE.Vector3(0.0f, 0.0f, 0.0f), dimension: 5);
CEF
PHP:
...
  
public void OurEventHandler(object[] args)
{
  RAGE.Chat.Output("Got actually called! {0}", (string)args[0]);
}
  
public void TriggerMe()
{
      RAGE.Events.Add("eventExample", OurEventHandler);
  
    RAGE.Ui.HtmlWindow wnd = new RAGE.Ui.HtmlWindow("package://index.html");
     wnd.ExecuteJs("mp.trigger('eventExample', 'yep')");
  
      // "mp.gui.execute"
      RAGE.Ui.DefaultWindow.ExecuteJs("test()");
}
BUILT-IN NATIVEUI
PHP:
using System;
using System.Collections.Generic;

using RAGE.NUI;

public class MenuExample
        : RAGE.Events.Script
{
    private bool ketchup = false;
    private string dish = "Banana";
    private MenuPool _menuPool;

    public void AddMenuKetchup(UIMenu menu)
    {
        var newitem = new UIMenuCheckboxItem("Add ketchup?", ketchup, "Do you wish to add ketchup?");
        menu.AddItem(newitem);
        menu.OnCheckboxChange += (sender, item, checked_) =>
        {
            if (item == newitem)
            {
                ketchup = checked_;
                Notify("~r~Ketchup status: ~b~" + ketchup);
            }
        };
    }

    public void AddMenuFoods(UIMenu menu)
    {
        var foods = new List<dynamic>
        {
            "Banana",
            "Apple",
            "Pizza",
            "Quartilicious",
            0xF00D, // Dynamic!
        };
        var newitem = new UIMenuListItem("Food", foods, 0);
        menu.AddItem(newitem);
        menu.OnListChange += (sender, item, index) =>
        {
            if (item == newitem)
            {
                dish = item.IndexToItem(index).ToString();
                Notify("Preparing ~b~" + dish + "~w~...");
            }

        };
    }

    public void AddMenuCook(UIMenu menu)
    {
        var newitem = new UIMenuItem("Cook!", "Cook the dish with the appropiate ingredients and ketchup.");
        newitem.SetLeftBadge(UIMenuItem.BadgeStyle.Star);
        newitem.SetRightBadge(UIMenuItem.BadgeStyle.Tick);
        menu.AddItem(newitem);
        menu.OnItemSelect += (sender, item, index) =>
        {
            if (item == newitem)
            {
                string output = ketchup ? "You have ordered ~b~{0}~w~ ~r~with~w~ ketchup." : "You have ordered ~b~{0}~w~ ~r~without~w~ ketchup.";
                Notify(String.Format(output, dish));
            }
        };
        menu.OnIndexChange += (sender, index) =>
        {
            if (sender.MenuItems[index] == newitem)
                newitem.SetLeftBadge(UIMenuItem.BadgeStyle.None);
        };
    }

    public void AddMenuAnotherMenu(UIMenu menu)
    {
        var submenu = _menuPool.AddSubMenu(menu, "Another Menu");
        for (int i = 0; i < 20; i++)
            submenu.AddItem(new UIMenuItem("PageFiller", "Sample description that takes more than one line. Moreso, it takes way more than two lines since it's so long. Wow, check out this length!"));
    }

    public void DrawMenu(System.Collections.Generic.List<RAGE.Events.TickNametagData> nametags)
    {
        _menuPool.ProcessMenus();
    }

    public MenuExample()
    {
        _menuPool = new MenuPool();
        var mainMenu = new UIMenu("Native UI", "~b~NATIVEUI SHOWCASE");
      
          // original NativeUI replicates GTA V "interaction menu", 
          //changing FreezeAllInput to true makes the player completely frozen
          // while the menu is active
        mainMenu.FreezeAllInput = true;
      
        _menuPool.Add(mainMenu);
        AddMenuKetchup(mainMenu);
        AddMenuFoods(mainMenu);
        AddMenuCook(mainMenu);
        AddMenuAnotherMenu(mainMenu);
        _menuPool.RefreshIndex();

        RAGE.Events.Tick += DrawMenu;

        mainMenu.Visible = true;
    }

    public static void Notify(string text)
    {
        RAGE.Game.Ui.SetNotificationTextEntry("STRING");
        RAGE.Game.Ui.AddTextComponentSubstringPlayerName(text);
        RAGE.Game.Ui.DrawNotification(false, false);
    }
}
ОСТАЛЬНОЕ
PHP:
JS: "entityDataChange" event has been replaced with "mp.events.addDataHandler(key, handler)"
JS: added mp.events.callLocal
Improvements on initial server loading
Fix voice chat not getting cleared properly after setting "voice3d" to false
Improve voice chat playback thread synchronization mechanism, so it doesn't affect anything else
Fix reported voice chat crashes
0.4's game interaction performance improvements backport
Fix in-game UI not saving "latest IP connected to" correctly
DataStorage UTF-8 support fixes
Added a smoother voice chat packet loss handling
Fixed reported voice chat stability issues
Fixed some specific remote player tasks stuck after finished
Added "experimental web platform features" flag to the in-game CEF
Fixed key binding issues with isDown param = false
ОБЩИЕ ИЗМЕНЕНИЯ
PHP:
Added: server-based voice chat (server config option to enable: `voice-chat`: true)
Updated: Scripting stability improvements ("undefined" errors should be fixed now, needs to be confirmed)
Updated: V8 (a separate vanilla one is used client-side now, not the one bundled with NodeJS)
Updated: Security enhancements
Added: Grand Theft Auto V's 1.45 patch support
Reimplemented "construction zone crash" fix
Vehicle model limit adjustment (it's not an actual 0.4 backport since it uses another method that doesn't rely on 0.4 features)
Updated NodeJS
Backported native fool proofing
Added "allow-voice-chat-input" option (only available via registry at the moment); default value: 1
Updated: CEF (Chromium 70.0.3538.77)
Fixed: potential aiming synchronization data corruption
Added: more game limits have been adjusted so more global conversion mods are compatible now
Fixed: custom dlc packs conflicting with certain game dlc pack
Fixed: dlc packs not working correctly with FQDN
Miscellaneous fixes
ИЗМЕНЕНИЯ КОДА
PHP:
Added: mp.voiceChat.muted (client-side)
Added: mp.voiceChat.getPreprocessingParam(param) (client-side)
Added: mp.voiceChat.setPreprocessingParam(param, value) (client-side)
Added: player.voiceVolume (client-side)
Added: player.voice3d (client-side)
Added: player.voiceAutoVolume (client-side)
Added: player.isVoiceActive (client-side)
Added: event: playerStartTalking (client-side)
Added: event: playerStopTalking (client-side)
Added: player.enableVoiceTo(target) (server-side)
Added: player.disableVoiceTo(target) (server-side)
Added: player.voiceListeners (server-side)
Added: mp.voiceChat.isAllowed (read-only) (client-side)
Added: player.clearDecorations() (server-side)
Added: player.getVoiceAttribute(attribute) (client-side)
Added: player.setVoiceAttribute(attribute, value) (client-side)
Fixed: vehicle.getOccupant
Updated: C# enums
Fixed: C# UTF-8 support improvements
PHP:
Added: player.getDecoration(collection)
Added: player.setDecoration(collection, overlay)
Updated: player.setHeadOverlay(overlayId, [index, opacity, color, secondaryColor])
Updated: player.getHeadOverlay
Updated: mp.game.graphics.screen2dToWorld3d(x, y[, collisionTest])
Updated: click event args are (x, y, state, mouseKey, relativeX, relativeY, 3dpos, entityHandle) now
Fixed: text label rendering issues
Fixed: shared variables not reseting for local player clientside after reconnecting
Fixed: invalid password issue
Fixed: playerWeaponShot not triggering when there's no any target entity
PHP:
Updated: all remote trigger arguments should be passed as an array now, e.g. player.call("eventName", [1, 2, 3]). It was updated only for server-side API as for RC-2.
Added: vehicle.quaternion
Added: vehicle.heading
Added: "this" to events. It includes "cancel" and "handler" properties. Setting "this.cancel = true" would stop triggering futher events this call.
PHP:
Added: Vehicle.movable (get)
Updated: mp.environment is mp.world now
Added: mp.world.requireIpl
Added: mp.world.removeIpl
Added: mp.world.trafficLights.locked (get / set)
Added: mp.world.trafficLights.state (get / set)
Added Player.removeObject

C Уважением, модератор Pa[DoN]oK.​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу