[Mini-RLS][C++] Switcher / Adder / Refine Scroll stackable

12/07/2016 11:07 iPeri /..#1
Hi Leute,

ich denke mal, dass der Titel beschreibt, was dieses Mini-Release macht!

Ihr geht in die char_item.cpp

Sucht nach:
Code:
					case USE_PUT_INTO_BELT_SOCKET:
					case USE_PUT_INTO_RING_SOCKET:
					case USE_PUT_INTO_ACCESSORY_SOCKET:
					case USE_ADD_ACCESSORY_SOCKET:
					case USE_CLEAN_SOCKET:
					case USE_CHANGE_ATTRIBUTE:
					case USE_CHANGE_ATTRIBUTE2 :
					case USE_ADD_ATTRIBUTE:
					case USE_ADD_ATTRIBUTE2:
						{
							LPITEM item2;
							if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
								return false;
Und fügt darunter:
Code:
							if (item->GetVnum() == item2->GetVnum())
							{
								int d = item->GetCount();
								if ((item->GetCount() + item2->GetCount()) > 200)
									d = 200 - item2->GetCount();
								item2->SetCount(item2->GetCount() + d);
								item->SetCount(item->GetCount() - d);
								return false;
							}

Andere Methode von rollback:
Quote:
Originally Posted by rollback View Post
Code:
int add = MIN(200 - item->GetCount(), item2->GetCount());

item->SetCount(item->GetCount() + add);
item2->SetCount(item2->GetCount() - add);
12/07/2016 11:18 Benhero#2
Und wenn man auf einen Stack mit 199 Stück 50 stück draufzieht ;)?
Der zweite wird gelöscht und der erste denke ich wird auf das Limit von 200 gesetzt.

Also wäre eine zweite Abfrage bzw eine for schleife nicht schlecht um ggf. einen Zweiten stack zu erstellen oder dem zweiten Stack nur soviel abzuziehen bis das Limit erreicht ist.

Code dafür: (aus dem Kopf geschrieben)
Code:
int difference = pkItemScroll->GetCount();
if ((item.GetCount() + pkItemScroll->GetCount()) > 200)
	diffence = 200 - item.getCount()
item->SetCount(item->GetCount() + diffence);
pkItemScroll->SetCount(pkItemScroll->GetCount() - diffence);
return false;
Grüße
12/07/2016 11:39 iPeri /..#3
Quote:
Originally Posted by Benhero View Post
Und wenn man auf einen Stack mit 199 Stück 50 stück draufzieht ;)?
Der zweite wird gelöscht und der erste denke ich wird auf das Limit von 200 gesetzt.

Also wäre eine zweite Abfrage bzw eine for schleife nicht schlecht um ggf. einen Zweiten stack zu erstellen oder dem zweiten Stack nur soviel abzuziehen bis das Limit erreicht ist.

Code dafür: (aus dem Kopf geschrieben)
Code:
int difference = pkItemScroll->GetCount();
if ((item.GetCount() + pkItemScroll->GetCount()) > 200)
	diffence = 200 - item.getCount()
item->SetCount(item->GetCount() + diffence);
pkItemScroll->SetCount(pkItemScroll->GetCount() - diffence);
return false;
Grüße
Stimmt, das habe ich aus dem Auge gelassen!
War auch eigentlich nur testweise :D

Werde es nachfügen!
12/07/2016 12:53 Benhero#4
Die Abfrage muss heißen > 200 nicht >= 200 ;)

Grüße
12/07/2016 12:59 iPeri /..#5
Quote:
Originally Posted by Benhero View Post
Die Abfrage muss heißen > 200 nicht >= 200 ;)

Grüße
Habe ich beim Testen auch gemerkt :D Mathematik ist nicht unbedingt die Stärke :D
12/07/2016 17:49 rollback#6
Code:
int add = MIN(200 - item->GetCount(), item2->GetCount());

item->SetCount(item->GetCount() + add);
item2->SetCount(item2->GetCount() - add);
und anstatt 200 die globale Variable für die Stackgröße nutzen, die gibt es ja irgendwie soweit ich weiß.
12/07/2016 19:45 悪地城#7
Guter Release

Danke
12/07/2016 23:42 Yiv#8
Quote:
Originally Posted by rollback View Post
Code:
int add = MIN(200 - item->GetCount(), item2->GetCount());

item->SetCount(item->GetCount() + add);
item2->SetCount(item2->GetCount() - add);
und anstatt 200 die globale Variable für die Stackgröße nutzen, die gibt es ja irgendwie soweit ich weiß.
Gute Lösung, keine Ahnung was ihr da sonst macht, aber so ist es das einfachste...

MfG
12/07/2016 23:43 DasSchwarzeT#9
Quote:
Originally Posted by Yiv View Post
Gute Lösung, keine Ahnung was ihr da sonst macht, aber so ist es das einfachste...

MfG
Ich finde man sollte nochmal betonen, dass Sens äh rollback das viel schöner gemacht hat
12/08/2016 00:23 iPeri /..#10
Quote:
Originally Posted by rollback View Post
Code:
int add = MIN(200 - item->GetCount(), item2->GetCount());

item->SetCount(item->GetCount() + add);
item2->SetCount(item2->GetCount() - add);
und anstatt 200 die globale Variable für die Stackgröße nutzen, die gibt es ja irgendwie soweit ich weiß.
Danke für deine kleine Verbesserung, an sich ist es ja egal, beide Varianten funktionieren.
12/08/2016 01:11 Yiv#11
Quote:
Originally Posted by 'iPeri View Post
Danke für deine kleine Verbesserung, an sich ist es ja egal, beide Varianten funktionieren.
Richtig, beide Varianten funktionieren, egal ist es trzdm. nicht. Ohne dich angreifen zu wollen: Der Code von Rollback ist qualitativer, das ist der große und entscheidende Unterschied, den es zwischen Programmierern gibt. Normalerweise produziert jeder funktionierenden Code, aber der eine qualitativ hochwertigen Code und beim anderen läuft es halt.
Ich möchte dich damit nicht persönlich angreifen oder sonst etwas, Rollback hat ja auch nur einen Verbesserungsvorschlag gepostet. Durch Verbesserungsvorschläge lernt man und du solltest einfach ein wenig üben und dich informieren, wie man qualitativ entwickelt. :)

MfG
12/08/2016 10:52 iPeri /..#12
Quote:
Originally Posted by Yiv View Post
Richtig, beide Varianten funktionieren, egal ist es trzdm. nicht. Ohne dich angreifen zu wollen: Der Code von Rollback ist qualitativer, das ist der große und entscheidende Unterschied, den es zwischen Programmierern gibt. Normalerweise produziert jeder funktionierenden Code, aber der eine qualitativ hochwertigen Code und beim anderen läuft es halt.
Ich möchte dich damit nicht persönlich angreifen oder sonst etwas, Rollback hat ja auch nur einen Verbesserungsvorschlag gepostet. Durch Verbesserungsvorschläge lernt man und du solltest einfach ein wenig üben und dich informieren, wie man qualitativ entwickelt. :)

MfG
C++ ist bisher nicht meine Stärke, dort bin ich auch noch in der Lernphase und kannte die Funktion von Rollback nicht...
Ich finde es ja gut Verbesserungsvorschläge zu bekommen, damit ich dies für meinen eigenen Coding-Stil übernehmen kann.

Angegriffen fühle ich mich keinesfall, da ich halt noch Anfänger in dieser Programmiersprache bin und auch gerne immer neue Ideen und Lösungswege für meine Methoden lernen möchte.

Von der Funktionalität ist es klar, dass es beides geht, jedoch weiß ich auch, dass mein Coding-Stil nicht immer der schönste ist.