» 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", Ukázat celý příspěvek

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áč, Přesný počet, Získávání


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

Jak odposlouchávat sousedy: Bizarní Lamphone a další netušené techniky

Jak odposlouchávat sousedy: Bizarní Lamphone a další netušené techniky

** Lamphone je další bizarní technika odposlechu ** Zneužívá obyčejnou stropní lampu ** Podívejte se na další bizarní experimenty

Jakub Čížek | 17

Jak se žije s telefonem bez Googlu: Čerstvé zkušenosti s telefony Honor a Huawei

Jak se žije s telefonem bez Googlu: Čerstvé zkušenosti s telefony Honor a Huawei

** Honor u nás přichází s prvním telefonem bez Google Mobile Services ** Současný stav je lepší než na začátku, ideální ale není ** Zkusili jsme i hack s ručním přidáním služeb Googlu

Tomáš Holčík | 157

Windows 10 May 2020 Update je venku. Odstraňuje hesla a přináší Linux

Windows 10 May 2020 Update je venku. Odstraňuje hesla a přináší Linux

** Jarní aktualizace Desítek přináší dost novinek, jsou ale spíš menší ** Zlepšují se stabilita, rychlost i komfort ovládání ** Revoluce ve Windows 10 teprve přijde

Vladislav Kluska | 93

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

** Zkusil jsem se zbavit závislosti na vyhledávači od Googlu ** Jako alternativy posloužily Bing, Seznam a DuckDuckGo ** Mají své silné stránky, ale i nepřekonatelná negativa

Lukáš Václavík | 58

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

** Embargo pro testy nových desktopových procesorů Comet Lake od Intelu skončilo ** Spousta recenzí a testů ukazuje výhody a nevýhody nových modelů ** Dokáží nové procesory konkurovat modelům od AMD?

Karel Javůrek | 47

Zahodil jsem Windows, přešel na Linux a nezbláznil se z toho

Zahodil jsem Windows, přešel na Linux a nezbláznil se z toho

** Měsíc jsem se nedotkl Windows a byl závislý jen na Linuxu ** Jaká byla pozitiva a negativa přechodu? ** Se kterými aplikacemi jsem (ne)zápasil a které bych doporučil?

Lukáš Václavík | 229


Aktuální číslo časopisu Computer

Megatest: nejlepší notebooky do 20 000 Kč

Test 8 levných IP kamer

Jak vybrat bezdrátová sluchátka

Testujeme Android 11