Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
Help with plotting multiple ZigZag
by degenerate_762. 04/30/24 23:23
M1 Oversampling
by 11honza11. 04/30/24 08:16
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (AndrewAMD, dr_panther, TedMar), 872 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Local Entity* in A6 #351856
12/28/10 23:24
12/28/10 23:24
Joined: Dec 2010
Posts: 66
München (Germany)
dice Offline OP
Junior Member
dice  Offline OP
Junior Member

Joined: Dec 2010
Posts: 66
München (Germany)
Hi!

Im using C-Script with A6.

I want to create a local entity within a function (with Entity*). But he always answers with an error. So my question: Is it possible to do it in A6?

My Code:
Code:
function tower_shoot
{
	entity* ent_local;
	//some other code...
}



Re: Local Entity* in A6 [Re: dice] #351860
12/28/10 23:38
12/28/10 23:38
Joined: Dec 2008
Posts: 1,218
Germany
Rackscha Offline
Serious User
Rackscha  Offline
Serious User

Joined: Dec 2008
Posts: 1,218
Germany
try ENTITY not entity (if it differs between uper and lower case..cant remember if c-script differs between those)


MY Website with news of my projects:
(for example my current
Muliplayer Bomberman,
GenesisPrecompiler for LiteC
and TileMaster, an easy to use Tile editor)
Sparetime-Development

Re: Local Entity* in A6 [Re: Rackscha] #351864
12/28/10 23:47
12/28/10 23:47
Joined: Nov 2002
Posts: 913
Berlin, Germany
S
SchokoKeks Offline
User
SchokoKeks  Offline
User
S

Joined: Nov 2002
Posts: 913
Berlin, Germany
as far as i remember (haven't used c-script in a year), you can not have local entity pointer in c-script. use handle() and ptr_for_handle instead and save the pointer into a local var or skill.

@Rackscha: c-script does not differ between upper and lower case for most keywords.

Re: Local Entity* in A6 [Re: dice] #351899
12/29/10 12:36
12/29/10 12:36
Joined: Dec 2010
Posts: 66
München (Germany)
dice Offline OP
Junior Member
dice  Offline OP
Junior Member

Joined: Dec 2010
Posts: 66
München (Germany)
Thx, ill try to explain my whole problem in my mothertongue:

Also ich möchte mein eigenes Towerdefense Spiel erstellen. Komme aber nicht wirklich weiter, ich versuchs mal zu schildern:

Ich erstelle per Button Klick einen Tower und setze ihn auf einen Platz, von wo er die Monster, die einen bestimmten Weg ablaufen, selbstständig beschießen soll.

Code:
you = ent_create(tower001_mdl,mouse_ent.x,tower_schiesse);



Diese Funktion "tower_schiesse" prüft nun in einer Endlosschleife, ob sich Monster in seiner Reichweite befinden, auf die er feuern kann.

Den Monstern habe ich einen bestimmten Skillwert zugewiesen damit der Tower weiß, welche Entities er beschießen soll.

Jedoch suche ich in der Funktion "tower_schiesse" die Monster nur mit dem "YOU" Entity und der Funktion you = ent_next(you);

Damit kommen sich die ganzen Tower, die ich erstelle in die Quere, weil sie alle auf das gleiche aussind und somit nur der zuletzt erstellte Tower schießt.

Ich hab die Vermutung dass ich das ganze schon falsch angegangen bin und nen Denkfehler drin hab... hoffe da gibs nen Trick oder irgendeine Lösung für mein Problem! (der Einsatz von handle und ptr_for_handle() is mir noch nich ganz geläufig)

Hier noch die Fkt "tower_schiesse":

Code:
function tower_schiesse
{
	while(1)
	{
		you = ent_next(NULL); //erstes entity aussuchen
		
		//Ausschau halten nach Entitys mit Skill12 == 1
		if (you.skill12 > 0)
		{
			//jetzt auf ein Entity festlegen!
			while(you)
			{
				while (ent_tower001 == NULL) { wait(1);}
				if (vec_dist(my.x,you.x) < 200)
				{
					//Angreifen!
					you.skill12 -= angriff_tower001;
					show_angriff(angriff_tower001);
					
					//wenn skill(leben) zu klein dann tot
					if (you.skill12 <= 0)
					{
						ent_remove(you);
					}
				}
				else
				{
					//wenn die distanz überschritten wird, oder noch nicht erreicht ist, dann soll er sich ein neues entity suchen:
					goto neuesEntity;
					
				}
				
				//hiermit wird die angriffsgeschwindigkeit bzw die verzögerung festgelegt
				sleep(geschw_tower001*time);
				wait(1);
			}
		}
		else
		{
			neuesEntity: //SPRUNGMARKE Für Innere Schleife, um eine neue Entity auszusuchen!
			//wenn ds entity kein Skill == 1 hat, dann nächstes Entity auswählen!
			you = ent_next(you);
		}
		
		wait(1);
	}
}



Vielen Dank für deine Mühe!

Re: Local Entity* in A6 [Re: dice] #351925
12/29/10 16:57
12/29/10 16:57
Joined: Nov 2002
Posts: 913
Berlin, Germany
S
SchokoKeks Offline
User
SchokoKeks  Offline
User
S

Joined: Nov 2002
Posts: 913
Berlin, Germany
Ich habe meine vorschläge mal etwas gegliedert:

1. Die Monster sollten auch eine eigene funktion mit endlosschleife haben. Der Teil
Code:
//wenn skill(leben) zu klein dann tot
					if (you.skill12 <= 0)
					{
						ent_remove(you);
					}


sollte auf jedenfall dort rein, und nicht in die funktion des turms. das ist sonst keine saubere trennung, und du wirst nur durcheinanderkommen.

2.
Code:
you = ent_create(tower001_mdl,mouse_ent.x,tower_schiesse);

Hier scheint das "you" mir am anfang recht sinnlos. Es hat aber glaube ich nichts mit dem problem zu tun was du hast.

3.
Code:
while (ent_tower001 == NULL) { wait(1);}

leuchtet mir nicht ein. ich hoffe du willst nicht jeden erstellten turm mit 1 bis x durchnummerieren? das gleiche für die anderen variablen. Hier müsstest du ja für jeden turm eine eigene funktion schreiben. Nutze da lieber ein Array oder versuch ganz ohne eine durchnummerierung auszukommen, indem du angriffswert und geschw in skills des jeweilen towers speicherst.

4. scheint der fehler in der funktion show_angriff zu liegen, denn du hast ent_next und you soweit ich sehen konnte korrekt benutzt. kannst du die nochmal zeigen?

Re: Local Entity* in A6 [Re: SchokoKeks] #351927
12/29/10 18:07
12/29/10 18:07
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Die Sprungmarke könnte auch problematisch sein. Soweit ich weiß, muss das Ziel einer Sprungmarke im selben Anweisungsblock liegen wie das goto selbst.
Versuche mal, ohne Sprungmarken auszukommen; die machen es oft nur schwerer, dem Programmfluss zu folgen.

Re: Local Entity* in A6 [Re: SchokoKeks] #351942
12/29/10 23:05
12/29/10 23:05
Joined: Dec 2010
Posts: 66
München (Germany)
dice Offline OP
Junior Member
dice  Offline OP
Junior Member

Joined: Dec 2010
Posts: 66
München (Germany)
Danke für eure geopferte Zeit wink

Ich halte mich mal an deiner Gliederung:
zu 1.) Da hast du recht, hab ich jetzt auch so realisiert!
zu 2.) Stimmt, kann weg, ist aber nur nen Schönheitsfehler laugh
zu 3.) Bei C-Skript gibt es doch diese "Skript Fallen", die auf einen Empty Pointer verweisen! Dieser Ausdruck sorgt nur dafür dass am Anfang keine Fehlermeldung kommt, dass der Tower noch nicht da steht. In diesem Fall kann der Ausdruck aber auch entfallen, da ich den Tower garnicht mehr so anspreche! (war noch aus den vorigen Versionen)
zu 4.) show Angriff funzt einwandfrei, sorgt nur dafür dass ich sehe, dass etwas passiert (leben abgezogen wird vom Entity)

zum GOTO: Ich weiß, GOTO's sind nicht ganz sauber und man sollte es vermeiden diese zu benutzen, aber in diesem Fall funktioniert es und irgendwie muss ich ja aus dieser Schleife rausspringen, wenn die Entfernung über den angegebenen Wert ist! Das Entity muss ja nich zwangsläufig weg sein, sondern "while(you)" ist ja immer noch gültig! Jedenfalls liegt mein Problem woanders:

Das Problem besteht nämlich weiterhin. Die Tower, die ich erstelle, kennen jeweils nur alle den "YOU" Pointer und greifen nur ein und dasselbe Entity an! Bzw sie bündeln nichtmal ihren Angriff (bei 3 Tower zusammen im gleichen Radius müsste ja 3 mal soviel HP abgezogen werden bei den Monstern, klappt aber nich)

Deswegen auch zu erst die Frage, ob man ein lokales Entity mit übertragen kann, damit jede Funktion ihre eigene entity angreift! Wie kann ich das mit handle() und ptr_for_handle() realisieren?!

Hier mal die "neue" Funktion tower_schiesse:
Code:
function tower_schiesse
{	
	while(1)
	{
		you = ent_next(NULL); //erstes entity aussuchen
		
		
		
		//Ausschau halten nach Entitys mit Skill12 == 1
		if (you.skill12 > 0)
		{
			//jetzt auf ein Entity festlegen!
			while(you)
			{
				if (vec_dist(my.x,you.x) < my.skill51)
				{
					//Angreifen!
					you.skill12 -= my.skill50;
					show_angriff(my.skill50);
				}
				else
				{
					//wenn die distanz überschritten wird, oder noch nicht erreicht ist, dann soll er sich ein neues entity suchen:
					goto neuesEntity;
					
				}
				
				//hiermit wird die angriffsgeschwindigkeit bzw die verzögerung festgelegt
				sleep(geschw_tower001*time);
				wait(1);
			}
		}
		else
		{
			neuesEntity: //SPRUNGMARKE Für Innere Schleife, um eine neue Entity auszusuchen!
			//wenn ds entity kein Skill == 1 hat, dann nächstes Entity auswählen!
			you = ent_next(you);
		}
		
		wait(1);
	}
}



Gruß, dice

Re: Local Entity* in A6 [Re: dice] #351943
12/29/10 23:20
12/29/10 23:20
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Wenn eine Entity eine andere Entity als you zur Verfügung hat, kann sie die Nummer, die die Engine dieser Entity verliehen hat speichern, und zwar am besten in einem seiner eigenen Skills, da nur sie selbst auf den Skill zugreifen wird.

also so z.B.

if(you)
{
my.skillXX = handle(you);//XX steht für eine Zahl zwischen 1 und 100
}

Wenn die Entity später wieder auf diese Entity mit dem you-Pointer zugreifen will, wird ihre im Skill gespeicherte Nummer der Engine wieder hergeholt und sie darüber "you" zugewiesen.

z.B. so

if(my.skillXX != 0)
{
you = ptr_for_handle(my.skillXX);
}

Re: Local Entity* in A6 [Re: Pappenheimer] #351980
12/30/10 13:33
12/30/10 13:33
Joined: Dec 2010
Posts: 66
München (Germany)
dice Offline OP
Junior Member
dice  Offline OP
Junior Member

Joined: Dec 2010
Posts: 66
München (Germany)
Ja schön und gut, aber damit muss ich ja wieder auf das YOU zurückgreifen und dauernd zuweisungen machen.

Und da dieses YOU global zu sein scheint, hilft mir das auch nicht weiter, da ja jeder Tower autark handeln soll und andere Entities als Ziele nehmen soll.

Das heißt ich müsste für jeden Tower der gebaut wird, einen extra Pointer schreiben, weil Pointer kann man ja auch nicht wie Arrays anschreiben.... (das wäre des Rätsels lösung wink ).

Ich verzweifel grad grin ......

Re: Local Entity* in A6 [Re: dice] #351989
12/30/10 14:52
12/30/10 14:52
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
(me+) you ist für jede Entity lokal.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Page 1 of 2 1 2

Moderated by  HeelX 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1