0 registered members (),
1,089
guests, and 10
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Local Entity* in A6
#351856
12/28/10 23:24
12/28/10 23:24
|
Joined: Dec 2010
Posts: 66 München (Germany)
dice
OP
Junior Member
|
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:
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
Serious User
|
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: dice]
#351899
12/29/10 12:36
12/29/10 12:36
|
Joined: Dec 2010
Posts: 66 München (Germany)
dice
OP
Junior Member
|
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.
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":
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
SchokoKeks
User
|
User
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
//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.
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.
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]
#351942
12/29/10 23:05
12/29/10 23:05
|
Joined: Dec 2010
Posts: 66 München (Germany)
dice
OP
Junior Member
|
OP
Junior Member
Joined: Dec 2010
Posts: 66
München (Germany)
|
Danke für eure geopferte Zeit 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 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:
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: Pappenheimer]
#351980
12/30/10 13:33
12/30/10 13:33
|
Joined: Dec 2010
Posts: 66 München (Germany)
dice
OP
Junior Member
|
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 ). Ich verzweifel grad ......
|
|
|
|