RastaKopf Posted March 10, 2020 Share Posted March 10, 2020 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 More sharing options...
TheMysteriousVincent Posted March 10, 2020 Share Posted March 10, 2020 (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 March 10, 2020 by TheMysteriousVincent Link to comment Share on other sites More sharing options...
RastaKopf Posted March 10, 2020 Author Share Posted March 10, 2020 (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 March 10, 2020 by RastaKopf Link to comment Share on other sites More sharing options...
RastaKopf Posted March 11, 2020 Author Share Posted March 11, 2020 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 Link to comment Share on other sites More sharing options...
TheMysteriousVincent Posted March 11, 2020 Share Posted March 11, 2020 Einfach nen uint Datentyp nehmen... - Oder direkt WeaponHash als Typ verwenden. D.h. bei einem uint kannst du eine Variable so: "var num = 1u;" als uint definieren. Wichtig dabei ist der Suffix u bei einer Gannzahl (siehe https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) Link to comment Share on other sites More sharing options...
RastaKopf Posted March 12, 2020 Author Share Posted March 12, 2020 Jo danke habs hin bekommen. Mit (WeaponHash) ist alles ganz einfach 🤦♂️🙆♂️ bin noch nicht solange mit c# am scripten... Link to comment Share on other sites More sharing options...
Recommended Posts