RastaKopf

long in Weaponhash Konvertieren?

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
                                }
                            }
                        }
                    }
                }
            }
        }

 

Share this post


Link to post
Share on other sites
Posted (edited)

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

Share this post


Link to post
Share on other sites
Posted (edited)


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

Share this post


Link to post
Share on other sites

Alles klar mit

NAPI.Player.GivePlayerWeapon(c, (WeaponHash)long, item1.GetAmount());

Kann ich das Umwandeln :) danke dir für den entscheidenden Tipp. Jetzt muss ich nur noch schauen wie ich das ganze ohne long hinbekomme :)

Share this post


Link to post
Share on other sites

Jo danke habs hin bekommen. Mit (WeaponHash) ist alles ganz einfach 🤦‍♂️🙆‍♂️ bin noch nicht solange mit c# am scripten...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.