|
You last visited: Today at 22:20
Advertisement
[C++]party_get_member_pids Problem
Discussion on [C++]party_get_member_pids Problem within the Metin2 Private Server forum part of the Metin2 category.
07/16/2016, 14:50
|
#1
|
elite*gold: 0
Join Date: Dec 2012
Posts: 819
Received Thanks: 220
|
[C++]party_get_member_pids Problem
Hallo Community,
Ich habe irgendwie das Problem das bei der Funktion party.get_member_pids mir die Pids zusammen ausgegeben werden.
BILD:
Dadurch Funktionieren bei mir die Gruppen Runs nicht. Die PIDS sollten eigentlich mit ein Komma getrennt sein.
Meine party.get_member_pids Funktion
Code:
struct FPartyPIDCollector
{
std::vector <DWORD> vecPIDs;
FPartyPIDCollector()
{
}
void operator () (LPCHARACTER ch)
{
vecPIDs.push_back(ch->GetPlayerID());
}
};
int party_get_member_pids(lua_State *L)
{
CQuestManager & q = CQuestManager::instance();
LPCHARACTER ch = q.GetCurrentCharacterPtr();
LPPARTY pParty = ch->GetParty();
if (NULL == pParty)
{
return 0;
}
FPartyPIDCollector f;
pParty->ForEachOnMapMember(f, ch->GetMapIndex());
for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
{
lua_pushnumber(L, *it);
}
return f.vecPIDs.size();
}
Ich bedanke mich im Voraus für eure hilfe.
|
|
|
07/16/2016, 17:57
|
#2
|
elite*gold: 0
Join Date: Nov 2013
Posts: 23
Received Thanks: 1
|
Die Funktion gibt dir die Anzahl der PIDs zurück
Code:
return f.vecPIDs.size();
Ich nehme einfach mal an, dass die gewünschten PIDs sind. Innerhalb des std::vector müssten deine PIDs stehen. Sehr wahrscheinlich werden diese an einer anderen Stelle ausgelesen.
|
|
|
07/16/2016, 20:25
|
#3
|
elite*gold: 0
Join Date: Dec 2012
Posts: 819
Received Thanks: 220
|
Quote:
Originally Posted by info.student
Die Funktion gibt dir die Anzahl der PIDs zurück
Code:
return f.vecPIDs.size();
Ich nehme einfach mal an, dass die gewünschten PIDs sind. Innerhalb des std::vector müssten deine PIDs stehen. Sehr wahrscheinlich werden diese an einer anderen Stelle ausgelesen.
|
Ja aber wie mache ich dass sie jetzt mit einem Komma getrennt werden habe ja kaum Ahnung davon.
|
|
|
07/17/2016, 01:52
|
#4
|
elite*gold: 0
Join Date: Nov 2013
Posts: 23
Received Thanks: 1
|
Hier gibt es verschiedene Möglichkeiten. Ich bezweifle stark, dass die Funktion "party_get_member_pids" die Funktion ist, die nicht richtig funktioniert. Klär könntest du sie umschreiben, dass sie nicht mehr die Größe des Arrays zurückgibt, würde aber keinen Sinn machen, da du dann die gesamte Datenstruktur ändern müsstest, weil der Rückgabewert genau EIN integer ist, was du brauchst sind 2 Integer. Idealerweise wird, dass mit pair geregelt. Ich würde lieber die Stelle im Code suchen, wo der Wert tatsächlich zurückgegeben wird, den du im Spiel brauchst und dann diese Stelle verändern. Hast du die Stelle gefunden, kann Ich dir eventuell weiterhelfen. Oder du schaust auf
|
|
|
07/17/2016, 12:05
|
#5
|
elite*gold: 0
Join Date: Dec 2012
Posts: 819
Received Thanks: 220
|
Quote:
Originally Posted by info.student
Hier gibt es verschiedene Möglichkeiten. Ich bezweifle stark, dass die Funktion "party_get_member_pids" die Funktion ist, die nicht richtig funktioniert. Klär könntest du sie umschreiben, dass sie nicht mehr die Größe des Arrays zurückgibt, würde aber keinen Sinn machen, da du dann die gesamte Datenstruktur ändern müsstest, weil der Rückgabewert genau EIN integer ist, was du brauchst sind 2 Integer. Idealerweise wird, dass mit pair geregelt. Ich würde lieber die Stelle im Code suchen, wo der Wert tatsächlich zurückgegeben wird, den du im Spiel brauchst und dann diese Stelle verändern. Hast du die Stelle gefunden, kann Ich dir eventuell weiterhelfen. Oder du schaust auf
|
Die Funktion ist ja richtig.Also zu Erklärung der Funktion sie gibt alle Ids der Spieler in der jeweiligen Gruppe zurück. Das tut sie aber nicht getrennt mit einem komma
|
|
|
07/17/2016, 13:57
|
#6
|
elite*gold: 26
Join Date: Oct 2011
Posts: 1,262
Received Thanks: 1,064
|
Hab dir das mal umgeschrieben, damit dir das ganze ne Tabelle ausgibt.
Ist untested, sollte aber funktionieren ♥
Code:
int party_get_member_pids(lua_State *L)
{
CQuestManager & q = CQuestManager::instance();
LPCHARACTER ch = q.GetCurrentCharacterPtr();
LPPARTY pParty = ch->GetParty();
if (NULL == pParty)
{
return 0;
}
FPartyPIDCollector f;
pParty->ForEachOnMapMember(f, ch->GetMapIndex());
//erstellen einer lua Tabelle
lua_newtable(L);
//hier iterieren wir durch den vector
for(int i = 0; i < f.vecPIDs.size(); ++i) {
//pushen der zahl welche wir an einer stelle im array speichern wollen.
lua_pushnumber(L, f.vecPIDs[i]);
//Stack hat derzeit die Zahl im obersten Slot, die Tabelle ist im Slot darunter
//Tabelle liegt dementsprechend in Slot (-2)
//Popt das oberste Objekt und speichert es in die Tabelle mit dem Key (i)
lua_rawseti(L, -2, i);
}
// du returnst 1 lua Objekt -> deshalb returnen wir 1.
return 1;
}
Quote:
Originally Posted by info.student
Hier gibt es verschiedene Möglichkeiten. Ich bezweifle stark, dass die Funktion "party_get_member_pids" die Funktion ist, die nicht richtig funktioniert. Klär könntest du sie umschreiben, dass sie nicht mehr die Größe des Arrays zurückgibt, würde aber keinen Sinn machen, da du dann die gesamte Datenstruktur ändern müsstest, weil der Rückgabewert genau EIN integer ist, was du brauchst sind 2 Integer. Idealerweise wird, dass mit pair geregelt. Ich würde lieber die Stelle im Code suchen, wo der Wert tatsächlich zurückgegeben wird, den du im Spiel brauchst und dann diese Stelle verändern. Hast du die Stelle gefunden, kann Ich dir eventuell weiterhelfen. Oder du schaust auf
|
Muss dich da leider korrigieren.
Du solltest dich zuerst mit der lua c api außeinandersetzen bevor du hier Halbwahrheiten verbreitest. Das return am Ende der Funktion != der zurückgegebene Wert in LUA.
|
|
|
07/17/2016, 15:31
|
#7
|
elite*gold: 26
Join Date: Oct 2011
Posts: 1,262
Received Thanks: 1,064
|
Quote:
Originally Posted by Effexion
brudi die funktion gibt die anzahl nur an eine andere c++ funktion weiter
an die quest werden die pids weitergegeben, jedoch nicht als table (siehe das lua_pushnumber)
deswegen nutzt man es auch so: {party.get_member_pids()}
hätten die schlitzis mal besser machen können
ehhh in der realen welt nutzt man iteratoren für container klassen
|
Schön dich wiederzusehen Remix.
Damit hast du Recht, könnte das i natürlich auch einfach durch it-vec.begin() ersetzen, aber mir war da gerade nich danach.
(range based loops sind was tolles, aber erst ab c++11 implementiert -> großteil der leute hier <c++11)
Ahja. Klugscheißer mag keiner! ♥
|
|
|
07/17/2016, 15:35
|
#8
|
elite*gold: 0
Join Date: Jul 2016
Posts: 29
Received Thanks: 35
|
Quote:
Originally Posted by Socialized
Schön dich wiederzusehen Remix.
Damit hast du Recht, könnte das i natürlich auch einfach durch it-vec.begin() ersetzen, aber mir war da gerade nich danach.
Ahja. Klugscheißer mag keiner! ♥
|
bin nicht remix. er hat nen anderen undercover account
|
|
|
07/17/2016, 17:35
|
#9
|
elite*gold: 0
Join Date: Nov 2013
Posts: 23
Received Thanks: 1
|
eben, besser mal C++ lernen, als hier andere Leute, die wirklich Ahnung haben, korrigieren zu wollen.
|
|
|
07/17/2016, 20:42
|
#10
|
elite*gold: 0
Join Date: Jul 2016
Posts: 29
Received Thanks: 35
|
Quote:
Originally Posted by info.student
eben, besser mal C++ lernen, als hier andere Leute, die wirklich Ahnung haben, korrigieren zu wollen.
|
ich hoffe du meinst nicht dich
er hatte nämlich recht und in deinem post sind mehrere technische unwahrheiten
1. es ist kein array, es ist ein vector
2. müsste man nicht die datenstruktur ändern. im schlimmsten fall müsste man den rückgabetyp anpassen
3. braucht man nicht 2 integer sondern x (die anzahl der elemente im vector) integer bzw eine kette von integers (array, linked list, vector, o.ä)
std:: pair für eine pid liste?
ich bitte dich...
die klasse wird für 2 werte genutzt die zueinander gehören (z.B. zur unterschiedsberechnung oder sonst irgendne scheiße)
|
|
|
07/17/2016, 21:47
|
#11
|
elite*gold: 0
Join Date: Nov 2013
Posts: 23
Received Thanks: 1
|
ok chef
|
|
|
07/18/2016, 02:06
|
#12
|
elite*gold: 0
Join Date: Dec 2012
Posts: 819
Received Thanks: 220
|
Quote:
Originally Posted by Effexion
ich hoffe du meinst nicht dich
er hatte nämlich recht und in deinem post sind mehrere technische unwahrheiten
1. es ist kein array, es ist ein vector
2. müsste man nicht die datenstruktur ändern. im schlimmsten fall müsste man den rückgabetyp anpassen
3. braucht man nicht 2 integer sondern x (die anzahl der elemente im vector) integer bzw eine kette von integers (array, linked list, vector, o.ä)
std:: pair für eine pid liste?
ich bitte dich...
die klasse wird für 2 werte genutzt die zueinander gehören (z.B. zur unterschiedsberechnung oder sonst irgendne scheiße)
|
Also wird das so nicht Funktionieren wenn ich das jetzt richtig verstehe?
|
|
|
07/18/2016, 11:20
|
#13
|
elite*gold: 5
Join Date: Mar 2013
Posts: 1,986
Received Thanks: 2,254
|
Quote:
Originally Posted by EisTee,
Also wird das so nicht Funktionieren wenn ich das jetzt richtig verstehe?
|
uhm, einfach so nutzen(also mit der orginal funktion):
PHP Code:
local pids = {party.get_member_pids()}
|
|
|
07/18/2016, 13:59
|
#14
|
elite*gold: 5
Join Date: Mar 2013
Posts: 1,986
Received Thanks: 2,254
|
Quote:
Originally Posted by .†αø™
Das wird so ja nicht Funktionieren wenn die pids nicht durch Komma Zeichen getrennt werden, das ist ja sein Problem, wenn du sein Screen anguckst. Dann hast du nur ein eintrag in der Tabelle.
|
Ok.
|
|
|
07/18/2016, 14:03
|
#15
|
elite*gold: 0
Join Date: Feb 2014
Posts: 261
Received Thanks: 323
|
Quote:
Originally Posted by xGr33n
Ok.
|
Hehehe.... Bester Mann!
|
|
|
All times are GMT +2. The time now is 22:20.
|
|