» Poradna » Programy

C# .NET problém s pluginem do hry

 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Dobrý den,mohl by mi někdo prosím poradit jak upravit plugin do hry Unturned? Našel jsem v něm bug, který se dá zneužít jako získávání nekonečného množství munice zadarmo. Jedná se o takzvanou aukci ve hře. Zneužít se dá tak, že když hráč přidá do aukce jakoukoli zbraň bez munice, následně ji odkoupí nebo zruší, tak zbraň obdrží i s náboji. Já se ptám jakou podmínku přidat, aby po koupení či zrušení aukce hráč dostal přesně to, co do aukce přidává (přesný počet munice nebo aby se do aukce dali přidávat pouze zbraně s plnou municí. Případně zakázat přidávání zbraní do aukce jako je nyní zakázáno přidávat do aukce samostatnou munici. http://pastebin.com/KjTwa6FzNapadlo mě jako krajní řešení přidat podmínku na konec kódu "case ("pridat"):", která tedy zakazuje konkrétní zbraně. Něco jako List<int> weapons = new List<int>() { 107, 1021, 99, 1039, 448, 1369, 1379, 1041, 116, 1024, 1377, 484, 1000, 363, 1375, 122, 1362, 297, 1382, 112, 132, 1364 };Budu rád za každou připomínku či radu. Předem děkuji

Odpovědi na otázku

 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Neznám ani hru a ani ten plugin, takže konkrétní radu ti asi nedám, ale mám pár doporučení jak na to.Asi úplně nejblbuvzdornější řešení je vyvarovat se tomu že item "zničíš" a pak ho "znovu vytváříš" tj funkcí: player.Inventory.removeItem() a player.GiveItem(), místo toho je lepší při vložení do aukce ten item pouze přesunout z inventáře prodejce do nějakého inventáře (obchodu/obchodníka) a při prodeji novému majiteli ho zase z inventáře obchodu přesunout do inventáře kupujícího.Tím se vyhneš všem problémům a je to kompatibilní snad se vším. Stále se totiž jedná o tentýž identický předmět který jen přesouváš z jednoho inventáře do jiného. Jediný mínus je fakt že item v obchodu, stále existuje i ve hře takže to zabírá paměť.Ale neznám API hry tak ti nepovím jak na to a ani zda to je vůbec možné.Další řešení je například při vložení do aukce si uložit množství munice ve zbrani a po prodeji té zbrani zase nastavit toto množství munice. Takto je dnes řešeno vypořádání s kvalitou. Tj při vložení do aukce se to uloží (netuším kam) a při prodeji (tj vytvoření itemu v inventáři) je použita funkce player.Inventory.updateQuality() kterou se tomu novému itemu nastaví kvalita z té uložené informace. Takže při vložení itemu do aukce budeš muset uložit množství munice a při prodeji nějak podobně té zbrani nastavit množství munice, aby nebyla s plným zásobníkem. Ale nic konkrétního ti nepovím. Neznám hru a ani její API tak nevím co za možnosti tam jsou. Takže pokud toho o tom víš víc tak ti to snad trochu pomůže a posune správným směrem.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

hra je připojena k MySQL databázi, kde se mažou nebo přidávají hodnoty. Vím že problém je v této části, kam je potřeba přidat novou podmínku, jenže ve visual studiu jsem začátečník a právě bych potřeboval pomoci s kódem, který by vyřešil můj problém. if (command.Length > 2) { switch (command[0]) { case ("add"): byte amt = 1; ushort id; string name = null; ItemAsset vAsset = null; string itemname = ""; for (int x = 1; x < command.Length - 1; x++) { itemname += command[x] + " "; } itemname = itemname.Trim(); if (!ushort.TryParse(itemname, out id)) { Asset[] array = Assets.find(EAssetType.ITEM); Asset[] array2 = array; for (int i = 0; i < array2.Length; i++) { vAsset = (ItemAsset)array2[i]; if (vAsset != null && vAsset.itemName != null && vAsset.itemName.ToLower().Contains(itemname.ToLower())) { id = vAsset.id; name = vAsset.itemName; break; } } } if (name == null && id == 0) { UnturnedChat.Say(player, LIGHT.Instance.Translate("could_not_find", itemname)); return; } else if (name == null && id != 0) { try { vAsset = (ItemAsset)Assets.find(EAssetType.ITEM, id); name = vAsset.itemName; } catch { UnturnedChat.Say(player, LIGHT.Instance.Translate("item_invalid")); return; } } if (player.Inventory.has(id) == null) { UnturnedChat.Say(player, LIGHT.Instance.Translate("not_have_item_auction", name)); return; } List<InventorySearch> list = player.Inventory.search(id, true, true); if (vAsset.amount > 1) { UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_mag_ammo", name)); return; } decimal price = 0.00m; if (LIGHT.Instance.Configuration.Instance.EnableShop) { price = LIGHT.Instance.ShopDB.GetItemCost(id); if (price <= 0.00m) { price = 0.00m; } } byte quality = 100; switch (vAsset.amount) { case 1: // These are single items, not ammo or magazines while (amt > 0) { try { if (player.Player.equipment.checkSelection(list[0].page, list[0].jar.x, list[0].jar.y)) { player.Player.equipment.dequip(); } } catch { UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_unequip_item", name)); return; } quality = list[0].jar.item.durability; if (LIGHT.Instance.DatabaseAuction.CurrentListings(player.CSteamID.ToString()) > 2) { UnturnedChat.Say(player, "max 3 items!"); return; } player.Inventory.removeItem(list[0].page, player.Inventory.getIndex(list[0].page, list[0].jar.x, list[0].jar.y)); list.RemoveAt(0); amt--; } break; default: UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_mag_ammo", name)); return; } decimal SetPrice; if (!decimal.TryParse(command[command.Length - 1], out SetPrice)) SetPrice = price; if (LIGHT.Instance.DatabaseAuction.CurrentListings(player.CSteamID.ToString()) > 2) { UnturnedChat.Say(player, "max 3 items!"); return; } if (LIGHT.Instance.DatabaseAuction.AddAuctionItem(LIGHT.Instance.DatabaseAuction.GetLastAuctionNo(), id.ToString(), name, SetPrice, price, (int)quality, player.Id)) UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_succes", name, SetPrice, Uconomy.Instance.Configuration.Instance.MoneyName)); else UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_failed")); break;

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 55.0.2883.98

Tak pro začátečníka asi bude minimum úpravy to co jsi navrhoval na začátku. Tj do aukce půjde vložit jen plně nabitá zbraň. To by asi bylo vhodné vložit hned tyto dvě podmínky: if (player.Inventory.has(id) == null) { UnturnedChat.Say(player, LIGHT.Instance.Translate("not_have_item_auction", name)); return; } List<InventorySearch> list = player.Inventory.search(id, true, true); if (vAsset.amount > 1) { UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_mag_ammo", name)); return; }A dát tam: if (gun.getCurrentAmmo < gun.getMaxAmmo) { UnturnedChat.Say(player, LIGHT.Instance.Translate("auction_item_gun_ammo", name)); return; }S tím že "auction_item_gun_ammo" si budeš muset někde nadefinovat, aby to zobrazilo chybu: "Prodávat lze pouze zbraně s plným zásobníkem"a pak si nastudovat API hry a zjistit si dva příkazy. Já jsem v tom kódu použil: "gun.getCurrentAmmo" a "gun.getMaxAmmo" a jsem si jistý že to fungovat nebude, protože to jsem si vymyslel. Ty musíš z API hry zjistit jaké jsou příkazy na zjištění aktuálního množství střel ve zbrani a maximálního množství střel ve zbrani, ale to už musíš sám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Ono vlastně ten plugin co mám je pluginem jiného pluginu, takže jak říkáš, API si sehnat z toho plugin, z kterého vycházím, ne ze hry. Předpokládám-li tedy správně jedná se o https://github.com/RocketMod/Rocket/tree/mas... Prozatím sem problém vyřešil tak, že jsem jednoduše zakázal všechny zbraně přidávat v tomto příkazu. Ale to co navrhuješ by bylo skvělé. Díky if (LIGHT.Instance.Configuration.Instance.BannedIds.Contains(id)) { UnturnedChat.Say(caller, "Zbraně nelze přidat do aukce"); return; }

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Zbraně, Aukce, Munice, Hráč, Pastebin, Přesný počet, Získávání


Určitě si přečtěte

Nové iPhony, hodinky a další novinky Applu: Zase bude za co utrácet

Nové iPhony, hodinky a další novinky Applu: Zase bude za co utrácet

Dnes proběhla další velká prezentační akce Applu, na které došlo k odhalení nových iPhonů a dalších novinek. Událost jsme sledovali online, a tak se můžete podívat na chronologický zápis těch nejdůležitějších informací.

David Polesný | 136

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

** Je sice z Aliexpressu, ale funguje ** Můžete ji ovládat hlasem přes Amazon Echo nebo Google Home ** Za tři stovky zautomatizuje menší 230V spotřebič

Jakub Čížek | 101

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

** Strojové učení ještě nepřitáhlo takový zájem jako na začátku prázdnin ** Ne, umělá inteligence nenašla lék na rakovinu ** Naučila se svlékat ženy nejen z plavek

Jakub Čížek | 35

Co všechno se spouští se startem Windows a proč by vás to mělo zajímat

Co všechno se spouští se startem Windows a proč by vás to mělo zajímat

** Společně s operačním systémem se spouští řada aplikací a služeb ** Mohou mít negativní dopad na celkovou dobu startu Windows ** Jak získat kontrolu nad automaticky spouštěnými programy?

Karel Kilián | 57

Bývalý zaměstnanec Nokie vysvětluje, proč telefony s Windows Phone neuspěly

Bývalý zaměstnanec Nokie vysvětluje, proč telefony s Windows Phone neuspěly

** Za neúspěchem Microsoftu v mobilech stojí i Windows 8 ** Microsoft pozdě naskočil do rozjetého vlaku ** Uživatelé neměli zásadní důvody, proč přejít

Karel Kilián | 136

Windows 10 podle našich čtenářů: Poslali jste nám skoro 300 nápadů, jak je vylepšit

Windows 10 podle našich čtenářů: Poslali jste nám skoro 300 nápadů, jak je vylepšit

** Microsoft aktualizuje Windows 10 dvakrát ročně ** Jenže praktických novinek už není tolik jako dříve ** Poslali jste nám skoro 300 tipů, co by se měly Desítky ještě naučit

Jakub Čížek | 139

Je ta fotka černobílá, nebo barevná? Náš mozek realitu pouze odhaduje a vymýšlí si

Je ta fotka černobílá, nebo barevná? Náš mozek realitu pouze odhaduje a vymýšlí si

** Klasický počítač bezchybně zpracuje bit po bitu dat ** Mozek si realitu naopak spíše představuje a chybuje ** Teď se tím baví internet u další optické iluze

Jakub Čížek | 33


Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky