Jump to content

long in Weaponhash Konvertieren?


RastaKopf

Recommended Posts

Hi,

frage mich gerade wie ich den Typ long in Weaponhash konverteren kann. Von Weaponhash in long funktioniert wunderbar mit Convert.ToInt64. Nur anders herum habe ich noch keine Lösung gefunden. Die Weaponhash's sind bei mir Dezimalzahlen. Mit item.GetTypeId() bekomme ich den Weaponhash als Long.

        public void SyncWeapons(Client c)
        {
            List<Item> items = c.GetData("inventory_items");
            long hash = 0;
            if (items != null && items.Count >= 1)
            {
                foreach (Item item in items)
                {
                    if(LonginWeaponname(item.GetTypeId()) != "Fehler bitte bei Administartion melden" && (IsMelee(item.GetTypeId()) || IsGranate(item.GetTypeId())))
                    {
                        hash = item.GetTypeId();
                        NAPI.Player.GivePlayerWeapon(c, hash, item.GetAmount()) //Fehler weil hash dem Typ long entspricht
                    }
                    if (LonginWeaponname(item.GetTypeId()) != "Fehler bitte bei Administartion melden" && !IsMelee(item.GetTypeId()) && !IsGranate(item.GetTypeId()))
                    {
                        hash = item.GetTypeId();
                        List<Item> items1 = c.GetData("inventory_items");
                        if (items1 != null && items1.Count >= 1)
                        {
                            foreach (Item item1 in items1)
                            {
                                if (item1.GetTypeId() == hash+1)
                                {
                                    NAPI.Player.GivePlayerWeapon(c, hash, item1.GetAmount()); //Fehler weil hash dem Typ long entspricht
                                }
                            }
                        }
                    }
                }
            }
        }

 

Link to comment
Share on other sites

Die erste Frage vorweg: Warum `long`?

Der Datentyp, von dem der enum `WeaponHash` erbt ist vom Typ `uint` (4 Bytes). Du versuchst nun, einen long (8 Bytes) in einen kleineren Datentypen umzuwandeln. Normalerweise kannst du so etwas einfach casten, weil es "lediglich" Datentypen vom Grundtyp integer (unsigned und signed) sind.
Das sieht dann so aus:

uint a = 1;
long b = (long)a; // von uint zu long
a = (uint)b; // von long zu uint

Anzumerken ist, dass du hier in kauf nimmst, dass in einem long enthaltende Daten bei einem cast zu einem kleineren Datentypen verloren gehen könnten.

Der Datentyp long beinhaltet die gesamte Spanne eines uint, andersherum aber nicht!

 

Darüber hinaus noch eine grundlegendere Frage meinerseits: Warum wird bei item.GetTypeId() ein long zurückgegeben? Du könntest doch direkt WeaponHash nutzen. Dann müsstest du das auch nicht casten.

Edited by TheMysteriousVincent
Link to comment
Share on other sites


Also ich habe die Waffencodes von der Seite

https://wiki.gtanet.work/index.php?title=Weapons_Models

Die Zahlen sind teilweise zu groß für einen normalen integer also habe ich long genommen. Außerdem kennt die Datenbank den Typ WeaponHash nicht und das hat nicht funktioniert wenn er sie ausgelesen hat als long (aus der db) und ich die als weaponhash benutzt habe.

NAPI.Player.GivePlayerWeapon(c, uint, item1.GetAmount()); 

Also könnte ich dort auch einfach uint einfügen und der würde es wie ein weaponhash nutzen. Oder kann ich das als uint in der Datenbank speichern und als weaponhash aus der datenbank abrufen?

Edited by RastaKopf
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...