Crafting - Problem/Anregung

10/24/2010 13:50 Nuru der Stadtmasseur#1
Ich habe folgendes Problem, hoffentlich kann mir jmd. helfen:

Ich crafte mit meinem Bot caster amus/rings, blood rings und blood gloves

Allerdings stört es mich, dass der Bot diese 4 sachen nicht parallel crafted, sondern immer hintereinander

Er sucht sich zwar die Grunditems (Ring, Amu, Gloves, ...) und die Runen parallel, aber Pgems und Juwelen nimmt er immer erst dann wieder neu auf, wenn ein Craftrezept fertiggestellt worden ist --> so werden Juwelen und Gems verschwendet

Gibt es irgendeine Möglichkeit, einzustellen, dass er die verschieden Craftrezepte gleichzeitig abarbeitet? Also an insgesamt 4 Rezepten gleichzeitig arbeitet sozusagen ...

edit ... achja, ich verwende sternenloopers version
10/24/2010 14:08 Copy&Past#2
stell einfach die sachen in der pickit ein, dass er sie immer auf nehmen soll^^
10/24/2010 14:16 Nuru der Stadtmasseur#3
Quote:
Originally Posted by Copy&Past View Post
stell einfach die sachen in der pickit ein, dass er sie immer auf nehmen soll^^
Schlechte Lösung ^^

Damit wird erstens mein Inventar zugemüllt und zweitens verwende ich idevils Automulefunktion --> Der Bot behält alle Items, die nicht in der Pick-It stehen.
Er würde dann beim Mulen alles wieder wegwerfen, also sinnlos.
10/24/2010 14:28 Copy&Past#4
Lösung: Du schreibst ne eigene Pickit für die random Jewels und Gems
Lösung2: Du schaust dir den Bot von Medix an oder Stairbuilder und übernimmst die MaxQuantity funktion^^
10/24/2010 15:01 Nuru der Stadtmasseur#5
Das klingt schon besser ;-)

Mit Max Quantity würde ich mal ein Problem lösen

Allerdings klappt das mit der eigenen Pickit nicht, weil Automule ja meine Pickit überprüft --> wenn da alle Jools drinnenstehen, dann droppt er die beim Mulen auch

Und wie kann der Bot dann zwischen Jools zum craften und z.B. 40/15ern unterscheiden?
10/24/2010 16:12 ldevil#6
Quote:
Originally Posted by fertoker1 View Post
Und wie kann der Bot dann zwischen Jools zum craften und z.B. 40/15ern unterscheiden?
Kann er eben nicht... daher klappt das nur für die Gems :) AutoMule kann man aber ziemlich leicht anpassen.
10/24/2010 20:10 Nuru der Stadtmasseur#7
Danke mal für die Hilfe euch beiden (hier und per pm)

Kurze Zusammenfassung: Automule lässt sich so einstellen, dass der Bot die Sachen nicht mehr dropt, allerdings ist es nicht möglich, gute von schlechten Jools zu unterscheiden, wenns ums craften geht und ich einfach alle aufhebe.

Also müsste man doch irgendetwas in der NTcubing.ntl verändern, damit das so läuft, wie ich mir das vorstelle

Vielleicht hat ja noch irgendjmd. eine Lösung parat :-)
11/05/2010 17:03 Nuru der Stadtmasseur#8
Ich schieb das mal hoch, vielleicht treibt sich hier ja jmd. herum, der sich mit der NTcubing.ntl auskennt
11/30/2010 08:52 Nuru der Stadtmasseur#9
Und nochmal hoch :)

Inzwischen weiß ich ja, dass sich die Funktion mit den Juwelen beim Craften in der NTCubing.ntl in diesem Teil befindet (else if(_classid == 643):

Code:
else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON)
		{
			_index = NTConfig_CubingItem[i][0] - NTCU_CRAFT_HITPOWER_HELM;

			if(_classid == NTConfig_CubingItem[i][1])
			{
				if(result == 0 && item.quality == 4 && item.GetStat(0x400000) == 0 && _calclevel >= _NTCU_CraftRecipe[_index][0])
				{
					if(NTConfig_ilvl80)
					{
					if(item.itemlevel >= 80)
					{
						if(NTConfig_CubingItem[i][2] == null)
						{
							NTConfig_CubingItem[i][2] = _gid;
							_result = true;
						}
						else if(NTConfig_CubingItem[i][2] == _gid)
							_result = true;
					}
					}
					else if(NTConfig_ilvl90)
					{
					if(item.itemlevel >= 90)
					{
						if(NTConfig_CubingItem[i][2] == null)
						{
							NTConfig_CubingItem[i][2] = _gid;
							_result = true;
						}
						else if(NTConfig_CubingItem[i][2] == _gid)
							_result = true;
					}
					}
					else
					{
						if(NTConfig_CubingItem[i][2] == null)
						{
							NTConfig_CubingItem[i][2] = _gid;
							_result = true;
						}
						else if(NTConfig_CubingItem[i][2] == _gid)
							_result = true;
					}
				}
			}
			else if(_classid == 643)
			{
				if(result == 0 && NTConfig_CubingItem[i][2] != null)
				{
					if(NTConfig_CubingItem[i][3] == null)
					{
						NTConfig_CubingItem[i][3] = _gid;
						_result = true;
					}
					else if(NTConfig_CubingItem[i][3] == _gid)
						_result = true;
				}
			}
			else if(_classid == _NTCU_CraftRecipe[_index][1])
			{
				if(NTConfig_CubingItem[i][2] != null)
				{
					if(NTConfig_CubingItem[i][4] == null)
					{
						NTConfig_CubingItem[i][4] = _gid;
						_result = true;
					}
					else if(NTConfig_CubingItem[i][4] == _gid)
						_result = true;
				}
			}
			else if(_classid == _NTCU_CraftRecipe[_index][2])
			{
				if(NTConfig_CubingItem[i][2] != null)
				{
					if(NTConfig_CubingItem[i][5] == null)
					{
						NTConfig_CubingItem[i][5] = _gid;
						_result = true;
					}
					else if(NTConfig_CubingItem[i][5] == _gid)
						_result = true;
				}
			}
			else if(_classid == _NTCU_CraftRecipe[_index][2]-1)
			{
				if(NTConfig_CubingItem[i][2] != null && NTConfig_CubingItem[i][5] == null)
				{
					for(n = 0 ; n < 3 ; n++)
					{
						if(NTConfig_CubingItem[i][6+n] == null)
						{
							NTConfig_CubingItem[i][6+n] = _gid;
							_result = true;

							break;
						}
						else if(NTConfig_CubingItem[i][6+n] == _gid)
						{
							_result = true;

							break;
						}
					}
				}
			}
		}
allerdings habe ich noch immer keine Ahnung, was ich machen muss, damit er Rezepte gleichzeitig abarbeitet (der Teil mit den Edelsteinen ist ein bisschen oberhalb dieser Funktion zu finden)

Außerdem hätte ich gerne, dass er nur Amulette und Ringe ab einem Itemlevel von 90+ crafted, alles andere aber frei einstellbar ist

Das wäre dann hier einzustellen, aber wieder weiß ich nicht genau, wie:
(Irgendwie müsste man einfach eine Ausnahmebedingung bei der Itemlevel-Einstellung machen)

Code:
else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON)
		{
			_index = NTConfig_CubingItem[i][0] - NTCU_CRAFT_HITPOWER_HELM;

			if(_classid == NTConfig_CubingItem[i][1])
			{
				if(result == 0 && item.quality == 4 && item.GetStat(0x400000) == 0 && _calclevel >= _NTCU_CraftRecipe[_index][0])
				{
					if(NTConfig_ilvl80)
					{
					if(item.itemlevel >= 80)
					{
						if(NTConfig_CubingItem[i][2] == null)
						{
							NTConfig_CubingItem[i][2] = _gid;
							_result = true;
						}
						else if(NTConfig_CubingItem[i][2] == _gid)
							_result = true;
					}
					}
					else if(NTConfig_ilvl90)
					{
					if(item.itemlevel >= 90)
					{
						if(NTConfig_CubingItem[i][2] == null)
						{
							NTConfig_CubingItem[i][2] = _gid;
							_result = true;
						}
						else if(NTConfig_CubingItem[i][2] == _gid)
							_result = true;
					}
Bin zwar wirklich eine Null, was Java, etc. betrifft aber das kann meiner Meinung nach nicht so kompliziert sein, vielleicht hat ja doch noch irgendjmd. Zeit und Lust, sich das einmal kurz anzugucken.
11/30/2010 08:55 njomnjomnjom#10
Quote:
Außerdem hätte ich gerne, dass er nur Amulette und Ringe ab einem Itemlevel von 90+ crafted
Beim Sternenlooper in der Charconfig einstellbar.

Ein ilvl90+ amu benötigt aber trotzdem en lvl 94 char um gut zu werden.
Stells auf 92 hoch fals du den lvl nochnicht hast.
11/30/2010 10:31 Nuru der Stadtmasseur#11
Quote:
Originally Posted by njomnjomnjom View Post
Beim Sternenlooper in der Charconfig einstellbar.

Ein ilvl90+ amu benötigt aber trotzdem en lvl 94 char um gut zu werden.
Stells auf 92 hoch fals du den lvl nochnicht hast.
Genauer lesen, bitte ;)

Wenn man beim Sternenlooper ilvl 90+ einstellt, werden alle Craftgrunditems ab Level 90+ gesammelt -> Das ist bei Amus wichtig, um immer die Chance auf + 2 Skills zu haben, bei Gürteln z.B. aber nicht notwendig, weil alle guten Affixe auch schon bei geringeren Itemlevel auftauchen

Ich hätte also gerne, dass Amus und Ringe ab Level 90 gesammelt (oder gegambelt), alle anderen Sachen aber schon ab z.B Level 70 mitgenommen werden.

Übrigens ist das Charlevel, mit dem man crafted vollkommen egal -> man kann auch mit einem Level 1 Char +2 Amulette bekommmen, wichtig ist nur, dass das Itemlevel 90+ ist, deswegen gambelt man mit 95+ Chars Amulette, um immer entsprechende zu bekommen.
11/30/2010 11:23 armine89#12
sagen wir ma so ich hatte mal eine rechnung vom kollegen gehabt für craften da spielte das char lvl schon eine rolle aber ich weiß nicht mehr die rechnung aber ich frage den kollegen noch einma und dann poste ich die mal hier
edit: da haben wir das
Itemlevel = [Itemlevel_alt/2] + [Charakterlevel/2]
so das ist die rechung also spielt das char lvl eine rolle siehe oben

bsp
so
sagen wir das itemlvl vom amu ist 27 und das char lvl iost 95 dann sieht die rechung so aus
27/2=13,5+95/2=47,5

dann hat das craft item ein ilvl von 61

also char lcl + amu spielt eine rolle wenn man natürlich ein ring craftet muss man das itemlvl natürlich vom ring nehmen und nicht vom amu
11/30/2010 11:36 Muddy Waters#13
Quote:
Originally Posted by fertoker1 View Post
Genauer lesen, bitte ;)

Wenn man beim Sternenlooper ilvl 90+ einstellt, werden alle Craftgrunditems ab Level 90+ gesammelt -> Das ist bei Amus wichtig, um immer die Chance auf + 2 Skills zu haben, bei Gürteln z.B. aber nicht notwendig, weil alle guten Affixe auch schon bei geringeren Itemlevel auftauchen

Ich hätte also gerne, dass Amus und Ringe ab Level 90 gesammelt (oder gegambelt), alle anderen Sachen aber schon ab z.B Level 70 mitgenommen werden.

Übrigens ist das Charlevel, mit dem man crafted vollkommen egal -> man kann auch mit einem Level 1 Char +2 Amulette bekommmen, wichtig ist nur, dass das Itemlevel 90+ ist, deswegen gambelt man mit 95+ Chars Amulette, um immer entsprechende zu bekommen.
Ohne dir zu nahe treten zu wollen: letzteres ist sachlich falsch. :(
Aber das kann leicht passieren, so ganz leicht durchschaubar ist die ganze Thematik nämlich nicht. :)
Ich denke du hast da was mit dem cuben von charms verwechselt, bei denen das Itemlevel konstant bleibt.
Alternativ hast du aber auch an Ausnahmefälle gedacht, bei denen ohnehin das Qualitylevel des Items bestimmend und das Itemlevel schlichweg egal ist.

Das Itemlevel beim craften ergibt sich zu:
Code:
Ilvl_nach = Clvl * 0.5 + Ilvl_vor * 0.5
Das Affixlevel des Items ergibt sich nun aus dem resultierenden Itemlevel (Ilvl_nach in der Gleichung oben) oder dem Qualitylevel des Items, je nachdem welches von beiden höher ist.
Da Amulette ein Qualitylevel von 1 haben, ist für diesen Fall immer das Itemlevel wichtig.
Und wie man oben in der Formel sehen kann, hängt dieses durchaus vom Charlevel ab.

Ich hoffe ich konnte dich überzeugen. ;)

Achja, dein Quelltextbeispiel kannst du dir vereinfacht vorstellen, wie eine Art Schrank, in dem jedes aktive Rezept eine eine Schublade darstellt.
In diesen Schubladen sind - je nach Rezept - verschiedene Fächer.

Der Algorithmus macht nun im Grunde folgendes:
- Leeren aller Fächer
- Durchlaufen aller Items im Inventar, wobei passende Items in der richtigen Schublade im passenden Fach abgelegt werden

Wenn das nun geschehen ist, wird überprüft, ob in einer der Schublade alle Fächer voll sind.
Ist dies der Fall, heisst das, dass alle Items für ein Rezept vorhanden sind und somit das Cubing initialisiert werden kann.

Schau es dir nochmal in Ruhe an, der Algorithmus ist eigentlich sehr elegant, leider aber eben auch nicht ganz leicht nachzuvollziehen. :rolleyes:

Lg
Muddy
11/30/2010 13:49 Nuru der Stadtmasseur#14
Hmmm ... dann nehme ich alles zurück und entschuldige mich auch hochoffiziell bei njomnjomnjom für meine Falschaussage.

Ich war mir allerdings sicher, irgendwann genau diese Thematik so nachgelesen zu haben; Danke für die Aufklärung an Muddy und armine :)

Zum Thema Craften und Co.:

Die (ich vermute von Sternenlooper) nachträglich eingebaute Itemlevel-Funktion ist ja ziemlich simpel und in dieser Funktion enthalten:
Code:
else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON)
(Damit werden alle Craft - Rezepte von NTCU_CRAFT_HITPOWER_HELM bis NTCU_CRAFT_SAFETY_WEAPON inkludiert)

hier die Itemlevel - Bedingung:


Da ich mich überhaupt nicht mit der Materie auskenne, habe ich das eben das Problem, selbst eine if - Funktion zu schreiben, die Amus und Ringe extra behandelt, obwohl ich wüßte, wie man anzusetzen hätte. (Einfach 2 Bedingungen für die NTConfig_ilvl90 festlegen; 1. Blood Ringe und Caster Amus ab Ilvl 90, die restlichen Rezepte ab Level 70)

Zum Algorithmus beim Craften:

Prinzipiell habe ich (glaube ich) schon verstanden, wie es funktioniert:

Es werden einfach die verschieden Bedingungen in einer Reihenfolge abgefragt, auch die Reihenfolge ist mir klar (Durch ingame Beobachtung und Code - Durchgucken)

1. Grunditem wird gesucht -> Amu, Ringe, Gürtel, ...
2. Wenn ein Grunditem vorhanden ist, werden die Runen, Juwelen und Edelsteine dazu gesucht
3. Alles vorhanden -> Craft

Aber jetzt zu meinem Problem: Die Grunditems werden noch parallel gesucht -> Man kann also durchaus 1 x Ring, 1 x Gürtel, 1 x Amu, ... im Inventar haben -> Wo bitte im Code ist das zu finden (das parallele meine ich)???

Auch die Runen werden noch parallel in den Stash gelegt.

Aber bei den Juwelen und Edelsteinen ist das eben nicht so -> Juwel wird immer nur eines gestasht, bis das Rezept fertiggestellt worden ist -> Da habe ich auch keine Ahnung, wo genau das im Code steht

Genauso bei den Edelsteinen: Ich crafte normale PR und PA hoch, damit das Ganze ein bisschen schneller geht -> Bei 2 parallel laufenden Bloodcraft-Rezepten werden dann aber immer die makellosen Rubeine weggeworfen, wenn schon ein PR vorhanden ist

Ich hätte nur gerne, dass jedes Rezept sein eigenes Juwel und seinen eigenen PR/PA bekommt, hab aber leider keine Ahnung, wo genau das definiert sein soll.
12/04/2010 12:08 Nuru der Stadtmasseur#15
Hab die Itemlevelbedingung jetzt mal auf eine sehr umständliche Weise zu lösen versucht, indem ich diesen Part:

Code:
else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON)
so verändert habe

Code:
else if(NTConfig_CubingItem[i][0] >= NTCU_CRAFT_HITPOWER_HELM && NTConfig_CubingItem[i][0] <= NTCU_CRAFT_SAFETY_WEAPON && != NTCU_CRAFT_BLOOD_BELT)
und dann den ganzen Absatz kopiert und für den Blood Belt nochmal mit Itemlevelbedingung 70+ eingefügt habe -> kein Erfolg, spuckt mir nur eine Fehlermeldung aus :(

Sollte prinzipiell aber funktionieren, oder?