Wer kann mir bitte bei struct helfen, raff das einfach nicht !!!

Posted By: Ascalon

Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/22/08 13:22

Hallo,
ich habe folgendes struct im code:

typedef struct{
STRING* Name;
int Dorfnummer;
ENTITY* Dorf;
} VILLAGE;
VILLAGE myVillage[index];

mit der Funktion "function buildVillage()" möchte ich zur Laufzeit ein Dorf erstellen.
Code:
function BuildVillage()
{
	VECTOR temp;
	vec_set(temp.x,Siedler.x);	
	temp.z = 0;
	index += 1;
	myVillage[index].Dorfnummer = index;
	myVillage[index].Dorf = ent_create("dorf.mdl",temp.x,village_property); 
}


Mittels village_property möchte ich dann, wenn ich auf das Dorf klicke, über ein Panel die aktuelle Dorfnummer angeben und die Gesamtanzahl der Dörfer.
Beide Werte sind aber imm die gleichen, ganz egal, welches Dorf ich dann anklicke.
Was mach ich da falsch ?
Posted By: Anonymous

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/22/08 15:20

Woher soll die angeklickte Entity wissen welchen Index sie in Deinem Array hat?
Du musst der Entity (per Skill) diesen Wert mitteilen...

...
you = ent_create("dorf.mdl",temp.x,village_property);
myVillage[index].Dorf = you;
you.skill1 = index;
...

...den Du dann beim Klick-event anzeigst.


PS: vorsicht bei dem String!
Soweit ich weis must Du den String erst erzeugen bevor Du ihn über den Pointer im struct verwendest:

myVillage[index].Dorf = str_create("Mein Dorf");




Posted By: Ascalon

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/22/08 19:06

oh...man !! ich raffs leider immer noch nicht cry
was genau muss ich dann in der function village_property schreiben ?

danke jedenfalls mal für die Hilfe !
Posted By: Anonymous

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/22/08 20:34

ohne es zu prüfen...

Code:
// event handler........................................................
function evt_village(){
STRING* str_tmp = "#20";
STRING* str_vid = "#10";

  // angeklickt
  if(event_type==EVENT_CLICK){
    str_cpy(str_tmp, "Ich bin Dorf #");
    str_for_num(str_vid, myVillage[my.skill1].Dorfnummer);
    str_cat(str_tmp, str_vid);
    error(str_tmp); // Ausgabe
  }
}

// entity action.........................................................
action village_property(){

  // make me clickable
  my.emask|=ENABLE_CLICK;
  my.event=evt_village;

}



myVillage[index].Dorfnummer = index;
muss - wie von Dir beschrieben - beim Erzeugen natürlich gesetzt werden.


[edit] Da fällt mir noch auf:
VILLAGE myVillage[index]; index sollte eine Zahl sein: z.B.: VILLAGE myVillage[100]

Posted By: Ascalon

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/22/08 20:54

Vielen vielen vielen dank !! Jetzt funktioniert es bei mir endlich !! laugh
Posted By: Ascalon

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/23/08 08:07

Hab jetzt leider noch ein Problem mit den Dorfnamen. Ich möcht ja bei jedem neu erstellten Dorf einen eigenen Dorfnamen zuweisen. Mit der Dorfnummer funktioniert alles einwandfrei, nur gehts jetzt bei dem Dorfnamen nicht.
Code:
 
function BuildVillage()
{
	while(key_any) {wait(1);}
	
	VECTOR temp;
	vec_set(temp.x,Siedler.x);	
	temp.z = 0;
	
	index += 1;
	
	myVillage[index].DorfNummer = index;
	str_cpy(strEntry,"                    ");
	inkey(strEntry);
	myVillage[index].Name = strEntry;
	you = ent_create("dorf.mdl",temp.x,village_property);		// erstellt das Dorf
	myVillage[index].Dorf = you;
	you.skill99 = index;
}


in der village_property hab ich dann den verweis auf das klick-Ereignis und das weißt dann auf CityInfo_Event. Da steht dann folgendes:
Code:
 
function CityInfo_Event()
{	
	if(event_type == EVENT_CLICK)
	{
		str_cpy(strVillageName,myVillage[my.skill99].Name);
		
		DorfNummer = myVillage[my.skill99].DorfNummer;
		CityInfoPanel.flags = VISIBLE;
	}
}


Jetzt hab ich aber wieder das gleiche Problem wie vorhin mit dem Counter, dass jedes Dorf den zuletzt eingegebenen Namen hat.
Was hab ich jetzt falsch gemacht ?
Posted By: Anonymous

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/23/08 08:27

Hier weist Du nur einen Pointer zu myVillage[index].Name = strEntry;
.
Verwende str_cpy um stringinhalte zu kopieren.

In Deinem Fall denke ich aber, Du musst den String (Spiecher) erst allocieren:
myVillage[index].Name = str_create(strEntry);
Posted By: Ascalon

Re: Wer kann mir bitte bei struct helfen, raff das einfach nicht !!! - 10/23/08 10:17

Nochmals vielen vielen dank !! Jetzt klappt alles wie ich es mir wünsche, danke !!
© 2023 lite-C Forums