Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 854
Scroll for tl;dr

Hei, jeg ser en del på Twitch (hovedsakelig WoW streams) for tiden. Dette har vist seg å vær ypperlig bakgrunnsstøy både på jobb og mens jeg selv spiller.

En ting som alltid irriterer vettet av meg når jeg ser på streams er når jeg ser en WoW streamer åpner inventoryen sin som er proppfull med items jeg ikke har snøring på hva er for noe. Det samme gjelder også items i actionbaren jeg ser blir brukt titt og ofte uten å forstå hverken hva det er eller hva den gjør. Den eneste Informasjonen jeg får løpet av de 2,30 sekundene inventoryen er åpen er at mange har uendelig med stacker av items og at det virker viktig. "Sikkert potion" tenker jeg ofte og gir opp all håp om å noen gang finne ut hva som gjemmer seg bak det mystiske og ukjente ikonet. Så slo det meg.

Tenk hvor digg det hadde vært dersom du kunne dratt opp mobilen og brukt en app der du ved hjelp av kameraet gjennkjenne alle ikoner på actionbarene og inventoryen til en til streamer og gjennspeiler disse til deg på en app til telefonen/nettbrettet eller en ingame addon. Som en nøyaktig kopi vil du se hele UI til streameren med mulighet for mouseover info. De sjeldne gangene du får se inventoryen i maks 10 sekund vil sette deg i panikkmodus for å rekke å ta et bilde av inventoryen før den forsvinner. Kansje for alltid. Siden alle ikke er adrealinjunkies så måtte appen/addonen hatt en screenshot funksjon med samme gjenkjennings funksjon.

Jeg tenkte videre på design og kom frem til at det hadde vært kult hvis du kunne valgt for eksempel kun å velge data fra inventory hvor det deretter dukket opp hele streamerens inventory.

Så til saken. Er det bare jeg som er sær og tar latskapen til nye høyder eller tror dere at det finnes flere som kunne tenkt seg en slik app/addon?

Jeg har selvfølgelig ti tusen spørsmål om alt fra SQL til puberteten men sparer de til en eventuelt respons.

Setter uansett veldig stor på tilbakemeldinger fra alle mulige meninger og kommentarer

tl;dr: Eg e lat og vil ha en app som kan fortella meg kass type mel folk har i posen.

edit: skrivefeil
Sist endret av Outlogging; 27. november 2016 kl. 03:46.
Kan aldri tenke meg noen gidder å se streams med telefonen klar til å ta bilde enhver tid.
I tillegg har du problemet med at WoW gjenbruker ikoner, så det kan bli problematisk å finne riktig item.

Men hva er det du egentlig vil?
Få noen til å lage en sånn app til deg?
Hvis det er tilfellet tror jeg muligens det havner et stykke utover ditt budsjett.
Tja, har slengt sammen en liten suppe av en kode i et suppe-"språk". Som funker sånn ca suppe.

Scriptet jeg har laga har en del vesentlige problemer. Noen er sikkert mulig å fikse relativt enkelt, andre vil bli vanskelig.
Problemene:
  1. Få en "hitbox" som er større enn 1x1 pixel (Sikkert noen som har en løsning på den)
  2. Inventory item-bilder må være i samme skallering som bildene i "databasen" din
  3. Dersom streamen er i for lav oppløsning vil den ikke finne item-bildene
  4. Pcen vil muligens gå suppe når du har en hel haug av bilder som skal søkes igjennom
  5. Og som Goophy nevner er det mange items som har samme bilde, som du kan se her foreksempel

Kan også nevne at jeg har null peiling på WoW.
Jeg kan jo likevel dele det jeg har gjort dersom det skulle være noen som har lyst på det.

Kode

#include <INet.au3>
#Include <File.au3>
#Include <Array.au3>
#include <ImageSearch.au3>
#include <Dict2.au3>
#include <ScreenCapture.au3>

HotKeySet("{ESC}", "Terminate")
HotKeySet("{PRINTSCREEN}", "Main")
HotKeySet("{PAUSE}", "Reset")

MsgBox(64, "Usage", "ESC: Stop the script."&@crlf&"PrntScrn: Open screenshot."&@crlf&"Pause/Break: Reset the script."&@crlf&@crlf&"Hover mouse over item to display info."&@crlf&"(Top left corner 1x1 pixel)  =(")

Global $xPos = 0, $yPos = 0, $itemPos, $ImgList, $hover
$itemPos = _DictCreate()
$imgDir = "Img/"
$dataBase = "Database/"
$ImgList = _FileListToArray($imgDir, "*", 1)
$hover = 0

Func _Html2Text($sHTML)
      local $oHTML = ObjCreate("HTMLFILE")
      $oHTML.Open()
      $oHTML.Write($sHTML)
      return $oHTML.body.innerText
EndFunc

Func displayInfo($item)
	$html = FileRead($dataBase&$item&'.html')
	$title = _Html2Text(String(StringRegExp($html, '<b class="q\d{1,5}">.*</b>', 1)[0]))
	If @error Then
		$info = "Could not retrive info from web."
	Else
		if StringRegExp($html, '<span class="moneygold">\d{1,5}') = 1 Then
			$gold = " "&_Html2Text(String(StringRegExp($html, '<span class="moneygold">\d{1,5}', 1)[0]))&" Gold, "
		else
			$gold = ""
		EndIf
		If StringRegExp($html, '<span class="moneysilver">\d{1,5}') = 1 Then
			$silver = " "&_Html2Text(String(StringRegExp($html, '<span class="moneysilver">\d{1,5}', 1)[0]))&" Silver, "
		Else
			$silver = ""
		EndIf
		If StringRegExp($html, '<span class="moneycopper">\d{1,5}') = 1 Then
			$copper = " "&_Html2Text(String(StringRegExp($html, '<span class="moneycopper">\d{1,5}', 1)[0]))&" Copper"
		Else
			$copper = ""
		EndIf
	EndIf
	$info = _Html2Text(String(StringRegExp($html, "<!--ndstart-->.*Sell Price: ", 1)[0]))&$gold&$silver&$copper

	$mousePos = MouseGetPos()
	ToolTip($info & @crlf, $mousePos[0], $mousePos[1]+20, $title)
	Sleep(2000)
EndFunc

Func Main()
	_ScreenCapture_Capture ("tmp.jpg", 0, 0, -1, -1, False)
	Run("mspaint tmp.jpg")
	WinWait("Paint")
	Send("{F11}")
	For $i = 1 to $ImgList[0]
		global $x = 0, $y = 0
		Local $search = _ImageSearch($imgDir&$ImgList[$i], 0, $x, $y, 125)
		If $search = 1 Then
			$itemPos.set(($x&$y), StringTrimRight(String($ImgList[$i]), 4))
			MouseMove($x, $y) ; Denne er her fordi det er forbanna vanskelig å treffe "hitboxen" ;)
		EndIf
	Next
	hoverMode()
EndFunc

Func hoverMode()
	$hover = 1
	While $hover = 1
		Local $mousePos = MouseGetPos()
		if WinExists("tmp.jpg - Paint") = 0 Then
			Reset()
		Elseif $itemPos.contains($mousePos[0]&$mousePos[1]) = True Then
			displayInfo($itemPos.get($mousePos[0]&$mousePos[1])) ; Her må det gjøres noe for å få en større "hitbox", nå er den 1x1 pixel :p
		EndIf
		Sleep(100)
		ToolTip("")
	WEnd
EndFunc

while 1
	Sleep(100)
Wend

Func Reset()
	$hover = 0
	ToolTip("")
	$itemPos = 0
	$itemPos = _DictCreate()
EndFunc

Func Terminate()
	exit 1
EndFunc
Så gjenstår det bare å skaffe seg fullstendig "database".
.rar fil med script
Edit: RUN.au3 er den som starter scriptet
Sist endret av NAPse; 28. november 2016 kl. 20:05.