Hallo,
ich hab ein sehr merkwürdiges problem und komm einfach nicht dahinter:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
// //////////////////////////////////////////////////////////////////////////
// ////////////////////// Get Item ////////////////////
// //////////////////////////////////////////////////////////////////////////
// purpose : - Give Item to Hero
void CHero::GetItem(CItem *Item)
{
// Variables
char cChangeEquippment, cWhichItem;
int iItemType = 0, iRingsAnkhs = 0;
bool bRemoved = false;
if (Item->bEquippment == true)
{
// Equippment
if (Item->bStaff == true)
iItemType = 0;
else if (Item->bCap == true)
iItemType = 1;
else if (Item->bCloak == true)
iItemType = 2;
else if (Item->bArmor == true)
iItemType = 3;
else if (Item->bRing == true)
iItemType = 4;
else if (Item->bAmulet == true)
iItemType = 8;
else
iItemType = 9;
if (Equippment[iItemType]->stName != "Nichts" && (Item->bRing == false && Item->bAnkh == false))
{
// Change Item
cout << "Ihr tragt bereits einen Gegenstand dieses Typs:" << endl;
Equippment[iItemType]->ShowStats();
cout << "Durch neuen Gegenstand ersetzen : (j)a, (n)ein" << endl;
cin >> cChangeEquippment;
if (cChangeEquippment == 'j' || cChangeEquippment == 'J')
{
RemoveItem(iItemType, Item);
bRemoved = true;
}
//...
if (bRemoved == false)
{
Equippment[iItemType] = Item;
// Modify Stats of Hero
iStrength += Equippment[iItemType]->Bonus_iStrength;
iAgility += Equippment[iItemType]->Bonus_iAgility;
iVitality += Equippment[iItemType]->Bonus_iVitality;
iSpellpointsMAX = Equippment[iItemType]->Bonus_iSpellpoints;
iSpellpoints = iSpellpointsMAX;
fArmor += Equippment[iItemType]->Bonus_fArmor;
iHitpointsMAX += Equippment[iItemType]->Bonus_iHitpointMax;
iMantora += Equippment[iItemType]->Bonus_iMantora;
iDamageNORMAL += Equippment[iItemType]->Bonus_iDamageNORMAL;
iDamageNATURE += Equippment[iItemType]->Bonus_iDamageNATURE;
iDamageFIRE += Equippment[iItemType]->Bonus_iDamageFIRE;
iDamageWATER += Equippment[iItemType]->Bonus_iDamageWATER;
iDamageLIGHT += Equippment[iItemType]->Bonus_iDamageLIGHT;
iDamageDARKNESS += Equippment[iItemType]->Bonus_iDamageDARKNESS;
iResistanceNATURE += Equippment[iItemType]->Bonus_iResistanceNATURE;
iResistanceFIRE += Equippment[iItemType]->Bonus_iResistanceFIRE;
iResistanceWATER += Equippment[iItemType]->Bonus_iResistanceWATER;
iResistanceLIGHT += Equippment[iItemType]->Bonus_iResistanceLIGHT;
iResistanceDARKNESS += Equippment[iItemType]->Bonus_iResistanceDARKNESS;
}
// ...
// end Get Item
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
// //////////////////////////////////////////////////////////////////////////
// //////////////////// Remove Item ///////////////////
// //////////////////////////////////////////////////////////////////////////
// purpose : - Remove Item from Hero
void CHero::RemoveItem(int iEquippmentType, CItem *Item)
{
delete Equippment[iEquippmentType];
Equippment[iEquippmentType] = new CItem;
GetItem(Item);
}
|
also gibt nicht viel zu sagen, der funktion get item wird ein pointer auf eine klasse CItem übergeben. Der Held zieht das Item an und falls er einen gegenstand schon besitzt von dem typ kann er ihn auswechseln oder nicht.
wenn er wechseln will removed es ihm den gegenstand und er bekommt das neue item angezogen.
jetzt ist folgendes:
der held bekommt nen stab mit z.b. 5 schaden.
er zieht ihn an und funktioniert alles perfekt.
jetzt findet er nen stab mit 20 schaden und er wird gefragt ob er den alten stab wechseln will. um zu zeigen welcher stab besser ist wird die ShowStats funktion vom getragenen gegenstand aufgerufen und da liegt das problem.
es zeigt nen stab mit 20 schaden an, also das Equippment[0] (Stab) wird also schon vorher überschrieben oO
wie kann da sein ? wo ist denn hier der fehler?
bitte um hilfe, weil ich ehrlich nicht draufkomme, habs schon sooft jetzt durchgegangen von oben nach unten und ich komm ned drauf
mfg
Drac
edit: achja bei der remov itemfunktion sieht man mal
Equippmentblabla = new CItem;
CItem ist einfach der standardkonstruktor der einen leeren gegenstand erzeugt mit dem Namen Nichts.