Forumdelen sponsras av

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

World of warcraft items list?

Spelar just nu wow på privatserver.

Jag gillar att farma saker och sälja dom så det är det jag roar mig med hela dagarna

Men jag har 6 olika gubbar med en MAIN gubbe som har en guild bank med sjuh*lvetes massa saker i, som jag absolut inte kan hålla reda på.

Så då tänkte jag sätta ihop en hemsida där jag kan lägga till allt material jag har men hade vart smidigt om det fanns item list att få tag på, och fråga nummer 2 blir då även som så att hur gör dom när dom lägger upp som på bilden här under

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Mar 2011

Är det inte lättare att bara arbeta i Excel eller liknande program? Det är vad jag alltid har använt själv i alla år och det har fungerat hur bra som helst.

Gaming: GTX 770 & 3770k @ 4,2 Ghz
Studier: MacBook pro retina 13
Ljud: QH-1339
Telefon: iPhone 6s plus

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2013

1. Ladda ner Greenshot (tar skärmdumpar som du kan markera osv)
2. Lägg WoW i Windowed mode
3. Håll över item så att dess ”tooltip” visas
4. Klicka ”printscreen”knappen och markera itemet
5. Bilden har nu sparats automatiskt om du confat greenshot, sen så är det bara att fortsätta med steg 2-4 med resterande items

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Norrköping
Registrerad
Okt 2011
Skrivet av ThLoser:

Spelar just nu wow på privatserver.

Jag gillar att farma saker och sälja dom så det är det jag roar mig med hela dagarna

Men jag har 6 olika gubbar med en MAIN gubbe som har en guild bank med sjuh*lvetes massa saker i, som jag absolut inte kan hålla reda på.

Så då tänkte jag sätta ihop en hemsida där jag kan lägga till allt material jag har men hade vart smidigt om det fanns item list att få tag på, och fråga nummer 2 blir då även som så att hur gör dom när dom lägger upp som på bilden här under

https://i.imgur.com/BpVEP4c.png

Kolla addons, borde finnas något bag addon som syncar mellan gubbar

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

Hittade ett skript som är C# men fattar inte ett dyft hur jag ska få igång det >_<

http://www.strategytraderhelp.com/wow/item/

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002

@ThLoser: För att få ut listor över vilka items din karaktär har i inventory eller bank så måste du använda en addon, den datan finns såvitt jag vet inte tillgänglig via web-API:t (så det behövs ett manuellt steg när du vill uppdatera dina karaktärer). Lyckligtvis finns det redan addons som gör det, t.ex. http://www.wowhead.com/bagscanner. Om du installerar den och följer instruktionerna för att få fram data från den där sidan så kommer du få ut ett stycke text som ser ut ungefär så här:

~1~123~"Namn""Realm""",1:6948::::::::1:102::::::,1:137446::::::::1:102::::::,,,,,,,,,,,,,,!!!

Efter informationen om namn och realm följer kommaseparerade grupper med information om vilka items den har hittat i dina väskor: det första numret i varje grupp är antalet, och det andra numret är ett id som du kan använda för att hämta upp mer information från Blizzards API. 1:137446 innebär t.ex. att det finns 1x [Elementium Bomb Squirrel Generator] i väskan. Splitta upp den här datan och hämta ut de två värdena.

För att hämta namn och likande från Blizzard behöver du registrera ett konto på https://dev.battle.net/, sidan kommer be dig om namn, syfte och lite sådant, men du får en nyckel direkt. När du har fått nyckeln så behöver du bara skicka GET-requests mot den här urlen:

https://us.api.battle.net/wow/item/ITEMID?locale=en_US&apikey=APIKEY

Svaren är JSON som ser ut så här:

{ "id": 6948, "name": "Hearthstone", "description": "", "icon": "inv_misc_rune_01", ... }

(https://dev.battle.net/io-docs)

Utifrån det går det att pyssla ihop något som kan uppdatera din hemsida. Bifogar ett snabbt exempel på de olika stegen i C# (>= 7.1, .NET Core) nedan eftersom att du verkade vara inne på det tidigare, men observera att du kommer behöva skriva något som integrerats mot din hemsida och att jag har tagit många genvägar för att hålla nere på exemplets storlek. Hoppas att det kan vara till någon nytta ändå.

using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using static System.Console; namespace Demo { /// <remarks> /// Tar data från http://www.wowhead.com/bagscanner på STDIN och hämtar upp /// namn på items från https://us.api.battle.net. /// /// Användning: /// cat data.txt | ./program.exe APIKey=qwertyuiop /// </remarks> class Program { static async Task Main(string[] args) { // Populera settings med argument från kommandoraden: var settings = new ConfigurationBuilder() .AddCommandLine(args) .Build() .Get<Settings>(); // Hämta upp data från stdin och parsa ut slots med itemid / antal: var slots = ExtractSlots(DataFromStdin()); // Fråga API:t efter information om alla hittade items: var tasks = new List<Task>(); var sem = new SemaphoreSlim(settings.Threads); foreach (var slot in slots) { await sem.WaitAsync(); lock (tasks) { var task = Task.Run(async () => { try { var item = await GetItemAsync( settings.APIKey, slot.ItemId ); WriteLine($"{item.Name}: {slot.Count}"); } finally { sem.Release(); } }); tasks.Add(task); tasks.RemoveAll(_ => _.IsCompleted); } } await Task.WhenAll(tasks); } private async static Task<Item> GetItemAsync(string apiKey, int itemId) { using (var client = new HttpClient()) { var response = await client.GetAsync( $"https://us.api.battle.net/wow/item/{itemId}?locale=en_US&apik..." ); if (response.IsSuccessStatusCode) { var content = await response .Content .ReadAsStringAsync(); return JsonConvert.DeserializeObject<Item>( content ); } else { throw new Exception(); } } } private static string DataFromStdin() { using (var reader = new StreamReader( OpenStandardInput(), Encoding.UTF8 )) { return reader.ReadLine(); } } /// <remarks> /// Exempeldata: /// ~1~123~"Namn""Realm""",1:6948::::::::1:102::::::,1:92738:::::::213003392:1:102::::::,,,,,,,,,,,,,,!!! /// </remarks> private static IReadOnlyList<Slot> ExtractSlots(string data) { var itemsStartAt = data.IndexOf(','); return data // Vi är bara intresserade av vad som finns mellan den första // punkten och de tre utropstecknena på slutet: .Substring( itemsStartAt, data.Length - itemsStartAt - 3 ) // ... splitta sedan resten på komman: .Split(',') // ... och för varje grupp: .Select(slotStr => { // ... hämta ut de två första värdena och samla resten // i en catch all: var parts = slotStr.Split(':', 3); // Om det inte fanns tre delar så var den en tom slot. // Ignorera och fortsätt. if (parts.Length < 3) { return null; } // Annars är den första siffran antal, // och den andra siffran itemid. else { return new Slot( itemId: int.Parse(parts[1]), count: int.Parse(parts[0]) ); } }) // Filtrera ut tomma slots: .Where(slot => slot != null) .ToList(); } } class Slot { public int ItemId { get; } public int Count { get; } public Slot(int itemId, int count) { ItemId = itemId; Count = count; } } class Item { public int ItemId { get; set; } public string Name { get; set; } } class Settings { public string APIKey { get; set; } public int Threads { get; set; } = 8; } }

Exempel

PS > cat .\data.txt | .\program.exe APIKey=qwertyuiop Elementium Bomb Squirrel Generator: 1 Hearthstone: 1 PS >

Användning (PowerShell)

Abstractions all the way down.

Trädvy Permalänk
Medlem
Registrerad
Okt 2011
Skrivet av ThLoser:

Spelar just nu wow på privatserver.

Jag gillar att farma saker och sälja dom så det är det jag roar mig med hela dagarna

Men jag har 6 olika gubbar med en MAIN gubbe som har en guild bank med sjuh*lvetes massa saker i, som jag absolut inte kan hålla reda på.

Så då tänkte jag sätta ihop en hemsida där jag kan lägga till allt material jag har men hade vart smidigt om det fanns item list att få tag på, och fråga nummer 2 blir då även som så att hur gör dom när dom lägger upp som på bilden här under

https://i.imgur.com/BpVEP4c.png

"Bankitems" håller koll på alla dina saker och kan även exportera en lista.
Du kan även söka per gubbe/realm/allt etc.
https://www.curseforge.com/wow/addons/bank-items
Gammal addon, men fungerar fortfarande bra med lite handpåläggning.

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

Valde att skriva om detta inlägget helt till dig istället @Biberu.

Insåg nu att jag har skrivit väldigt luddigt, det jag vill åstakomma är att spara allt i en txt fil som den gör på denna länken:
http://www.strategytraderhelp.com/wow/item/

Så jag kan göra på samma sätt som han har gjort där med att lägga till filen i min databas.

Det jag vill göra helt med min hemsida är att jag lägger till mina items manuellt men varje item finns i en databas, så jag kan använda liknande autocomplete, så skriver jag Windwoo i input fältet så får jag fram förslag ifrån min databas med dom items som finns i min databas.

Har även testat skriptet på länken som jag skickade men aldrig riktigt hållt på med C# eller C++ så kan inte trolla igång det och få det att funka tyvärr.

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002

@ThLoser: Aha, uppfattade det som att du ville hålla ordning på vad dina karaktärer hade. I.s.f verkar det som om du får hämta data om ett item åt gången från API:t, som i steg två ovan, vilket även verkar vara vad exemplet du hittade gör. Det ser dock ut att vara skrivet för en äldre version av API:t, utan att ha hittat så särskilt noga så är det åtminstone andra urler än idag, och det verkar inte ha använt några nycklar på den tiden.

Du kommer behöva skriva om de delarna, och i allmänhet anpassa det för dina önskemål... men, är det ens C# du vill använda, eller frågar du om det bara för att du råkat hitta ett exempel skrivet i språket? Konceptuellt behöver du bara fråga efter information om alla items som verkar finnas, spara listan någonstans och sedan låta din autocomplete slå mot den. Du kan lösa det med i princip vad som helst om du är bekvämare med något annat språk. Vad har du skrivit din hemsida med?

Abstractions all the way down.

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

@Biberu: Nej hittade bara ett exempel, vill bara få ut txt fil så jag kan lägga in till mysql

Php html och css MySQL

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002

@ThLoser: Ok. Så om du skulle vilja generera listan med PHP istället, vilka delmoment har du och vad är det första du fastnar på?

Abstractions all the way down.

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011
Skrivet av Biberu:

@ThLoser: Ok. Så om du skulle vilja generera listan med PHP istället, vilka delmoment har du och vad är det första du fastnar på?

Har tyvärr inte tänkt så långt. Tänkte det skulle vart smidigt att få ihop C# skriptet och lägga in txtn i databasen men så var ju inte fallet så får nog tänka om

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

Har fått tag på en json lista nu men får det ej att fungera med php, så fort jag använder decode så försvinner all text :S

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002
Skrivet av ThLoser:

Har fått tag på en json lista nu men får det ej att fungera med php, så fort jag använder decode så försvinner all text :S

Behöver mer information för att kunna hjälpa till. Hur ser koden ut?

Edit: Omge koden med [code]...[/code]-taggar när du klistrar in den i ett inlägg för att bevara formateringen.

Abstractions all the way down.

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

@Biberu:

<?php $str = file_get_contents('http://localhost/items.json'); $test = json_decode($str, true); print_r($test); ?>

Den koden här över får jag helt tomt resultat med

Denna koden är inte decodad men jag får resultat

<?php $str = file_get_contents('http://localhost/items.json'); print_r($str); ?>

Här är lite av json filen kan inte posta allt då den är 135mb stor xD

[{"_id":{"$oid":"589ca9270735fb9444b4e810"},"data":{"artifactId":0,"bonusSummary":{"bonusChances":[],"chanceBonusLists":[],"defaultBonusLists":[]},"availableContexts":[""],"bonusLists":[],

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002

@ThLoser: Att läsa upp så mycket data på en och samma gång kommer kräva mångdubbelt mer minne av PHP; gissningsvis så försöker ditt script helt enkelt använda mer än vad som är tillåtet. Kolla om dina loggfiler säger något i still med "Allowed memory size of x bytes exhausted", och om inte, vad står det istället?

Om du bara får en WSOD (white screen of death) i webbläsaren så kan det även vara en god idé att aktivera felrapportering i php.ini:

Eftersom du bara bör behöva köra det här en gång så kanske du kan komma undan med att ställa upp / inaktivera din memory_limit, annars behöver du läsa in filen i delar. PHP har inget för att streama JSON i sitt standardbibliotek, men det kanske finns något färdigt på annat håll. Alternativt så kanske du kan få filen i något annat format (t.ex. XML) från din källa?


Alternativt så är det helt enkelt inte giltig JSON, i vilket fall print_r inte ger någon läsbar output. Använd var_dump för att debugga sådant, och kontrollera alltid dina returvärden. json_decode returnerar NULL om inputen inte kunde läsas (vilket visas som en tom sträng av print_r - inte bra), och då kan du se vad felet var via json_last_error_msg:

<?php $str = "inte json"; $test = json_decode($str, true); var_dump($test); if($test === null) { var_dump(json_last_error_msg()); }

Körbart exempel:
https://3v4l.org/iobdb

Abstractions all the way down.

Trädvy Permalänk
Medlem
Plats
Vetlanda
Registrerad
Nov 2011

@Biberu: Det hade du ju rätt i jag fick syntax error på den

Trädvy Permalänk
Medlem
Plats
Ängelholm
Registrerad
Feb 2011

@ThLoser: Back in the days sysslade jag med Mobile Auction House på mobilen. Finns inte det längre?

i7-920 @ 4.0Ghz - 12GB Corsair XMS3 - EVGA GTX 980 SC - Corsair TX850 - Asus pb298q
Main rigg - LAN-dator

Trädvy Permalänk
Medlem
Registrerad
Okt 2015
Skrivet av ThLoser:

@Biberu:

<?php $str = file_get_contents('http://localhost/items.json'); $test = json_decode($str, true); print_r($test); ?>

Den koden här över får jag helt tomt resultat med

Denna koden är inte decodad men jag får resultat

<?php $str = file_get_contents('http://localhost/items.json'); print_r($str); ?>

Här är lite av json filen kan inte posta allt då den är 135mb stor xD

[{"_id":{"$oid":"589ca9270735fb9444b4e810"},"data":{"artifactId":0,"bonusSummary":{"bonusChances":[],"chanceBonusLists":[],"defaultBonusLists":[]},"availableContexts":[""],"bonusLists":[],

En liten headsup, din json kod är ingen json, den börjar med [ vilket indikerar att det är en lista. Varje item i listan är dock json.

Jag hade gjort en for each i hela listan och printa ut varje objekt för sig.

<?php $str = file_get_contents('http://localhost/items.json'); foreach($str as $item) { $test = json_decode($item, true); print_r($test); } ?>

Förhoppningsvis fungerar detta. Brukar inte sitta med PHP så någon annan kan säkert lösa det snyggare

Trädvy Permalänk
Legendarisk
Hedersmedlem
Plats
::1
Registrerad
Dec 2002
Skrivet av for_each_while:

... din json kod är ingen json, den börjar med [ vilket indikerar att det är en lista. Varje item i listan är dock json ...

Mjo, den data vi kan se är giltig JSON om man stänger de öppna strukturerna. Utöver objekt så kan texten beskriva en array eller olika typer av primitiver (strängar, nummer, booleans och null), det är inga problem att börja med en lista på det viset.

Exempel:
https://3v4l.org/ffkRp
https://tools.ietf.org/html/rfc8259#section-13

Abstractions all the way down.

Trädvy Permalänk
Medlem
Registrerad
Mar 2016
Skrivet av tBiorrith:

@ThLoser: Back in the days sysslade jag med Mobile Auction House på mobilen. Finns inte det längre?

Han spelar på en privat server. Dessutom tog blizzard nyligen bort mobile armory appen.