Ich arbeite gerade an einem Inventarbereich. Wenn man nun eine Waffe anwählt und auf "Waffe anlegen" klickt wird die Funktion waffe_wechseln aufgerufen. Hier wird die Waffe, die man in der Hand hat in das Inventar zurückgelegt und die neue vom Inventar entfernt und in die Hand genommen.
Code: Alles auswählen
void waffe_wechseln(char name[256])
{
[...]
messageboxEx("Alter Objname: %s Neuer Name: %s",character.waffe.objektname,name);
//Alte Waffe dem Inventar hinzufügen
inventar.add(character.waffe.objektname);
messageboxEx("Alter Objname: %s Neuer Name: %s",character.waffe.objektname,name);
[...]
}
Die Ausgabe ist also:
Da ich bei inventar.add(char obj_name[256]) ja nur einen char Array und keine Zeiger übergebe und auch nicht auf eine Variable "name" zugreife, dürfte sich doch nichts ändern, oder seh ich das falsch?1. Aufruf MessageboxEx: Alter Objname: Schwert Neuer Name: Axt
2. Aufruf MessageboxEx: Alter Objname: Schwert Neuer Name: Schwert
Der Vollständigkeit halber hier noch mal der Code von inventar.add:
Code: Alles auswählen
void inventar_manager::add(char obj_name[256])
{
//Gibt es Item schon?
for(int i=0;i<num_items;i++)
{
if(strcmp(obj_name,this->items[i].name)==0)
{
this->items[i].anzahl++;
this->RebuildVarlist();
return;
}
}
//Es befindet sich das Item noch nicht im Inventar
//Freien Slot suchen
int aktl_slot=-1;
for(int i=0;i<num_items;i++)
{
if(this->items[i].anzahl<=0)
{
aktl_slot=i;
break;
}
}
//Item hinzufügen
if(aktl_slot==-1)
{
this->num_items++;
this->items=(item *) realloc(this->items,num_items*sizeof(item));
aktl_slot=num_items-1;
}
sprintf(this->items[aktl_slot].name,obj_name);
this->items[aktl_slot].anzahl=1;
this->RebuildVarlist();
}