Danke =)
Vorweg zu der Forumsstruktur:
ja ich hab schon gemerkt, dass das hier so strukturiert wird... habe auch schon ein paar andere Threads hier gelesen. Ich persönlich finde diese Struktur aber alles andere als geeignet... Denn sie ist sehr unübersichtlich. So hat man dann bei einem Thread vom Zeitraum vom 5.9 bis 10.9. 10 verschiedene Antworten die direkt an ans Threadthema anschließen. Dann liest man sich das durch und denkt, nun hat man alles gelesen. Aber nein, dann kommen darunter "völlig durcheinander" noch weitere Antworten zu einezelnen Beiträgen. Einer vom 6.9, der andre vom 8.9 und dann plötzlich wieder einer vom 5.9.
Das macht es für den LEser seeehr viel schwieriger den Überblick zu behalten und alle wichtigen Infos aus dem Thread mitzunehmen. Deswegen möchte ich bewusst nur in einem Strang bleiben, sodass es ein linearer Aufbau ausschließlich nach Datum sortierter Antworten ist.
Einzige frage die ich mir gerade stelle: es wird ja immer mehr nach rechts gerückt... gibt es da ein Limit bis es nicht weiter nach rechts geht, oder kann man iwann einfach nicht mehr antworten? :D Das könnte also in der Tat ein Problem werden... aber ich fänds schade, weil sonst die Zusammenhänge verloren gehen würden.
So. Erstmal zum Script. Ich hab es wie erwähnt nun übernommen und so getestet. Es erscheint dann die Fehlermeldung "Syntax error" in Script10. Das heißt soweit ich weiß, dass z.b irgendein Zeichen fehlt wie z.b ; oder ein unbekanntes Zeichen verwendet wurde. Ich habe mal vor "// Geld? Basis? Bereits bekommen?" Ein Semikolon gesetzt, weil da keines war, aber das ändert leider nichts an der Fehlermeldung. Was könnte es sonst sein?
Nun zum Bohrturm. beim normalen Bohrturm Skript aus den Objekten findet sich tatsächlich die Funktion:
private func StartDrillHead(object pCaller)
{
PipeHeadCheck();
Sound("Click");
if (!EnergyCheck(1000)) return(0);
SetComDir(COMD_Down(), pDrillHead);
ObjectSetAction(pDrillHead, "Drill");
SetPlrView(pCaller->GetController(), pDrillHead);
DigFreeRect(GetX(pDrillHead)-1, GetY() + GetObjHeight() / 2, 3, GetY(pDrillHead) - GetY() - GetObjHeight() / 2);
}
Also habe ich die letzte Zeile mit dem DigFreeRect... kopiert und wollte sie in das Script des neuen Bohrturms einfügen. Erstaunlicherweise hat der neue Bohrturm überhaupt keinen Eintrag, der die Wörter "dig" oder "free" enthält. Deswegen weiß ich nicht, wo sein Graben Befehl steckt... Den Befehl einfach irgendwo einzufügen hat natürlich nichts gebracht :D Dann fiel mir eben auf, dass das Skript des Bohrkopfes entscheidend sein könnte. Und im Skript des alten BohrturmKopfes finden sich tatsächlich Anweisungen, wie sich der Bohrer bei verschiedenen Materialien verhalten soll:
private func Drilling()
{
// Material prüfen
var mat = GetMaterial(0,3);
// Nicht durch SolidMasks bohren
if (Material("Vehicle") == mat)
{
Sound("MetalHit3");
return(0);
}
// Schneller in freien Bereichen
if ((Material("Tunnel") == mat) || (Material("Sky") == mat))
{
SetPhysical("Float", 150, 2);
return(1);
}
// Langsamer in festen Materialien
if (!GetMaterialVal("DigFree", "Material", mat))
if (!GetMaterialVal("Instable", "Material", mat))
{
var iSpeed = 25;
// Etwas hardgecodete Erkennung
if (Material("Granite") == mat)
iSpeed = 10;
// Langsamere Geschwindigkeit
SetPhysical("Float", iSpeed + Random(2 * iSpeed), 2);
FreeRect(GetX() - 1, GetY(), 3, 4, C4M_Solid);
return(1);
}
// Normale Geschwindigkeit
SetPhysical("Float", 100, 2);
return(1);
}
Aber beim neuen Bohrturm findet sich auch beim Bohrkopf kein einziger Befehl mit "dig" oder "free" =/
Hier mal das komplette Script des neuen Bohrkopfes:
/*-- Bohrkopf --*/
/#strict
local derrick;
public func Init(par_derrick)
{
derrick = par_derrick;
SetAction("Level");
}
protected func DestructCheck()
{
if (!FindLine()) RemoveObject();
}
private func TopCheck()
{
var minY = GetY(derrick) + 20;
if (GetY() >= minY) return(1);
SetComDir(COMD_Stop());
SetYDir(0);
SetPosition(GetX(), minY);
Sound("Click");
return(0);
}
protected func ContactBottom()
{
SetAction("Level");
SetComDir(COMD_Stop());
SetYDir(0);
Sound("Click");
}
private FindLine: return(FindObject(SPIP,0,0,0,0,0,"Connect",Contents()));
Wo kann ich hier die Anweisung für verschiedene Materialien unterbringen? Habe sie einfach unten dran kopiert, aber das hat nichts geändert =( (der neue Bohrturm ist übrigens aus "Space Launch", nur falls das wen interessiert)
Nun zur Forschungsstation:
Danke für die Vorschläge :) Leider sind beide Vorschläge nicht ganz das was ich suche. Wenn ich will, dass garnichts erforscht werden kann, dann sorge ich einfach dafür, dass niemand die Forschungsstation bauen kann :D aber gut, so könnte ich zumindest einzelne Dinge ausschließen, aber das will ich ja auch nicht ;)
Ich möchte einfach, dass man am Anfang z.b nur die hier schon in den Schriftrollen erwähnten Gebäude erforschen kann. So. Wenn man dann z.b 300Gold erreicht hat, werden diese wie bisher auch abgezogen und man erhält dann die Möglichkeit weitere Gebäude in der Forschungsstation zu erforschen :)
Falls es dafür keine vernünftige Lösung gibt, könnte man bestimmt aus Pitirs Vorschlag etwas machen. Man könnte z.b. kleine Burg als Voraussetzung dafür machen, dass Wachturm, Werktstatt, Lore Brücke usw usw. erforscht werden können. Und anstatt dann bei 300 Gold all diese Gebäude freizuschalten, schaltet man dann nur die kleine Burg frei und der Rest kann nun erforscht werden :) Dazu müsste man aber halt ein einzelnes Gebäude als Voraussetzung für viele Gebäude einstellen können, geht das?
Ach noch ne Frage: in dem Space Empire Paket sind verschiedene Space Pakete drin, also z.b. Hazard, Space Launch und CognitionAlliance. D.h es gibt glaube ich 3 verschiedene neue Fahrstühle, welche aber alle den alten normalen Fahrstuhl ersetzen wollen. Glücklicherweise habe ich aus dem Fallout Pack den Metallfahrstuhl geholt, und offensichtlich versuchen die neuen Fahrstühle nur einen davon zu ersetzen, sodass ich immer einen "alten" Fahrstuhl im Spiel habe. Meine Frage ist nun aber: alle drei neuen Fahrstühle "kämpfen" sozusagen um den Platz im Spiel. Wie entscheidet sich, welcher sich letzlich durchsetzt? Ist es ohne großen Aufwand möglich, dafür zu sorgen, dass alle drei Arten ins Spiel kommen? Oder müsste ich dazu sehr viel umschreiben? Wenn ich es so wie es jetzt ist lasse, wäre es dann besser, die 2 Fahrstühle, die sich nicht durchsetzen, ganz aus meinem Objektpaket zu löschen?
Ach und wenn ich schonmal hier bin: In dem Space Empire Pack gibt es verschiedene Bunker, auf denen man Geschütze installieren kann. Z.b ein Maschinengewehrgeschütze, ein "Vulcan-geschütz" oder auch Plasmakanonen. Ich hab gestern erstaunt festgestellt, dass die Plasmakanone feindliche Clonks heilt, anstatt ihnen schaden zuzufügen :D Und sie heilt ziemlich stark. Wenn eine Plasmakanone feuert, heilt sie so stark, dass 5 Maschinengewehre die auf denselben Clonk feuern, ihn nicht töten können ^^ Ihr wisst nicht zufällig, wo man sowas für gewöhnlich umstellen könnte? Bei der Plasmakanone selbst? oder bei den Partikeln? Und wie würde so ein Befehl aussehen?
>Ich persönlich finde diese Struktur aber alles andere als geeignet... Denn sie ist sehr unübersichtlich.
Das ist Gewöhnungssache, denke ich. Ich mag dieses System sogar sehr, weil eine diskussion dann wirklich ihre eigenen Wege gehen kann. Wenn man wissen will, worauf der Post eine Antwort ist, benutzt man den Pfeil
oben rechts im Header vom Post.
>Deswegen möchte ich bewusst nur in einem Strang bleiben, sodass es ein linearer Aufbau ausschließlich nach Datum sortierter Antworten ist.
Du willst das System über den Haufen werfen, indem du es ignorierst? Ich glaube, ein paar Leute hier werden davon nicht begeistert sein. o.o
Grundsätzlich finde ich solche ellenlangen Posts, die mehrere Themen zusammenfassen unübersichtlich. Hängt vielleicht damit zusammen, dass ich die Baumstruktur nun sei Jahren gewöhnt bin. Mir ist es lieber, wenn zu den einzelnen Themen wirklich an der richtigen Stelle sachlich Stellungnahme gemacht wird und nicht alles in einen riesigen Post gequetscht wird. Und ich fühle mich genötigt, zu allen Stichpunkten stellung zu nehmen, was den Post um bestimmt eine halbe Stunde verzögert.
>Einzige frage die ich mir gerade stelle: es wird ja immer mehr nach rechts gerückt... gibt es da ein Limit bis es nicht weiter nach rechts geht, oder kann man iwann einfach nicht mehr antworten? :D
Ein Beantwortungslimit gibt es nicht, aber irgendwann wird nicht weiter eingerückt, da die Textbox sonst zu klein wird. Ich persönlich habe die Einrückung in den Einstellungen auf das minimum von 1% gestellt. Somit sind die Nachrichten so breit wie es geht und werden nur langsam immer schmäler. Das Limit ist bei ungefähr einem Drittel Bildschirmbreite erreicht.
>"Syntax error" in Script10. Das heißt soweit ich weiß, dass z.b irgendein Zeichen fehlt wie z.b ; oder ein unbekanntes Zeichen verwendet wurde.
Syntax Error bedeutet eigentlich nur, dass der Compiler einen Fehler beim compilen bemerkt hat. Beim compilen spuckt er dann die Fehlermeldungen aus, mit Position im Script. Stolpert die Engine ingame dann nochmal über die Stelle, wird die Meldung "ERROR: Syntax error: see previous parser for details" ausgegeben, was soviel bedeutet, wie "Guck in der Liste nach, die ich Anfangs ausgegeben habe."
Deshalb die Empfehlung von mir: Lass die Engine das ganze nochmal compilen, pausiere das Spiel und scroll im log nach oben. Dort sind die Positionen der Fehler gespeichert:
Objektpfad.c4d\Script.c:17:34
>Aber beim neuen Bohrturm findet sich auch beim Bohrkopf kein einziger Befehl mit "dig" oder "free" =/
Wenn du den Bohrturm meinst, der nur frei_graben_ kann, kann es sein, dass das ganze über die ActMap geregelt ist. Im Script vom Clonk ist nirgendwo ein DigFree() versehen, das wird über die Graben-Aktion durch den Eintrag
Procedure=DIG
geregelt.
>3 verschiedene neue Fahrstühle, welche aber alle den alten normalen Fahrstuhl ersetzen wollen.
Bist du dir sicher, dass sie ihn ersetzen wollen? Ich sehe das eigentlich nur als Ergänzung an. Sie wurden halt gemacht, damit der zum Pack gehörende Style nachempfunden wird. Ersetzt wird das ganze nur, wenn die C4ID vom Fahrstuhl wirklich verwendet wird. Und Entwickler die bereits belegte C4IDs in ihren Packs verwenden, sind doof. :P
hmm... okay, danke für die Argumente für die baumstruktur. Stimmt schon, dass es vor und nachteile hat... ich bin halt eine normale Forumsstruktur gewohnt :D
Aber selbst wenn ich mich dem nun füge, werde ich es unmöglich übersichtlich halten können. Ich meine ich würde jetzt zum Thema Forumsstruktur einmal an Zapper und einmal an Pitri antworten, und zwar so ziemlich denselben Text. Das ist doch unnötig... usw usw, siehe Post an Zapper ;)
So jetzt zu den eigentlichen Fragen:
Zum Skript für die Baupläne, der Fehler lautet:
ERROR: unknown identifier: CheckAllPlayerWealth (in Script10, selbsterstellte.c4f\test.c4s\Script.c:12:22)
heißt das nun, dass in Zeile 12 und 22 ein Fehler ist? das kan eig nicht sein, denn Zeile 12 und 22 sind:
goto(1); // und wieder zu 1, damit bei 10 wieder geprueft wird.
und
SetWealth(iPlr, 0);
Zum Bohrturm:
Beim neuen Bohrtrum im Bohrkopfteil steht in der ActMap:
[Action]
Name=Level
Procedure=FLOAT
Length=1
Delay=5
FacetBase=1
NextAction=Level
StartCall=TopCheck
[Action]
Name=Drilling
Procedure=FLOAT
Length=1
Delay=10
FacetBase=1
NextAction=Drilling
DigFree=1
Sound=Drill
Fertig editiert:
Okay, also hier haben wir tatsächlich in der ActMap den Befehl DigFree=1. Ich habe das jetzt mal umgeändert in FreeRect=1. Aber es kommt dann folgende Fehlermeldung:
ERROR: declaration expected, but found identifier 'if' (C:\Programme\Clonk Rage\Sammlung.c4d\Space Empire.c4d\SpaceLaunch.c4d\Structures.c4d\Derrick.c4d\Script.c:124:7)
WARNING: Unexpected value "FreeRect"! (in section "Action", after line 9, C:\Programme\Clonk Rage\Sammlung.c4d\Space Empire.c4d\SpaceLaunch.c4d\Structures.c4d\Derrick.c4d\PipeHead.c4d\ActMap.txt)
Was sagt mir die Fehlermeldung jetzt?
Zu den Fahrstühlen:
Es ist jedenfalls so, dass nur einer der 3 Fahrstühle bei den Spieleinstellungen eingestellt werden kann und außerdem der alte Fahrstuhl nicht verfügbar ist. Deswegen gehe ich mal davon aus, dass sie ihn überschreiben... sie haben aber andere Namen (wobei die 3 neuen Fahrstühle alle "Liftdock" im DefCore stehen haben) und andere IDs, also keine Ahnung, wie das zusammenspielt =/
>ERROR: unknown identifier: CheckAllPlayerWealth (in Script10, selbsterstellte.c4f\test.c4s\Script.c:12:22)
>heißt das nun, dass in Zeile 12 und 22 ein Fehler ist? das kan eig nicht sein, denn Zeile 12 und 22 sind
Das bedeutet, dass in deinem Script in Zeile 12, Zeichen 22 der Zeile die Funktion CheckAllPlayerWealth() aufgerufen wird. Der Script kennt die funktion aber aus bestimmten Gründen nicht. Entweder ist das falsch geschrieben, oder du hast die Funktion in einem anderen Script deklariert, aber nicht global verfügbar gemacht. Ich bräuchte dazu etwas mehr Information als bisher gegeben. Wo ist CheckAllPlayerWealth() definiert und ist es überhaupt richtig geschrieben oder ein Tippfehler?
Die beiden angegebenen Zahlen sind wirklich die Koordinaten zum Problem: Zeile und Spalte. Unknown identifer bedeutet immer, dass du etwas verwendest, was die Engine nicht kennt. Sei es Funktionsnamen oder Variablennamen die nicht deklariert sind.
>Okay, also hier haben wir tatsächlich in der ActMap den Befehl DigFree=1. Ich habe das jetzt mal umgeändert in FreeRect=1.
Dass das nicht geht, war abzusehen. In ActMap und DefCore sind nur gewisse Einträge zugelassen, die sind in der engine definiert. Man kann nicht jeden beliebigen Funktionsnamen eintragen. Das ist ein wenig blöd, da das hardgecodet ist. Soweit ich weiß, haben die Bohrtürme in früheren Clonk-Versionen so funktioniert, dass sie nicht durch gestein bohren konnten. Das hat sehr wahrscheinlich die ActMap-Variante verwendet. Und die wurde wahrscheinlich in Star Empires übernommen. Wenn du willst, dass man damit auch durch Gestein graben will, müsstest du den script vom Bohrturm im Originalpack übernehmen.
>Es ist jedenfalls so, dass nur einer der 3 Fahrstühle bei den Spieleinstellungen eingestellt werden
>und andere IDs
Okay, wenn sie verschiedene IDs haben, verstehe ich nicht, warum man sie nicht parallel verwenden kann.
Zum Script:
Zeile 12, Zeichen 22 ergibt aber irgendwie keinen Sinn.. in Zeile 12 ist doch nur der goto Befehl, Zeichen 22 ist sogar hinter den // , also stimmt das nicht... Daher schließe ich, dass gewisse Zeilen nicht als Zeilen gewertet werden? Werden leere Zeilen berücksichtigt, werden Zeilen mit "{" als Zeile gewertet? Und ab wo wird gezählt? Oder wie läuft das?
Zu deiner Frage wo "CheckAllPlayerWealth() " definiert ist, habe ich keine richtige Antwort... ich habe lediglich das Gecko von geschriebene Script kopiert und eingefügt (und den hinweis von Clonkgeist zur Raute und iPLr berücksichtigt). Mehr habe ich nicht gemacht. Das heißt, wenn dort der Befehl CheckAllPlayerWealth() nicht definiert ist, habe ich das auch nirgendwo anders gemacht, weshalb er wohl nirgends definiert ist?
Zum Thema Engine, ich hab Version 4.9.10.4 ich dachte das wäre die neuste Version, war aber noch kostenpflichtig. Habe mir letztens mit meinem Laptop die Freeware Version runtergeladen und habe beim Netzwerkspiel festgestellt, dass es eine Fehlermeldung gibt, dass die Engine nicht identisch wäre, weshalb ich nicht teilnehmen könne (in eine richtugn gings nicht, in die andere richtug gings schon). Das ist jetzt nur meine spontane Idee, falls der befehl CheckAllPlayerWealth() erst seit der Freeware existiert ^^ Falls das nichts damit zu tun hat, dann ist das egal und braucht nicht weiter nachgeforscht zu werden ;)
Zum Bohrturm:
einfach die beiden Skripte der Bohrtürme zu tauschen kam mir auch in den Sinn.. allerdings gibt es da ja sicher Werte, die ich nicht tauschen darf, oder? Ich meine z.b das Aussehen der Türme, oder den EMP Effekt, oder die Energiekosten oder die Baumaterialkosten... Das würde doch alles über den Haufen geworfen und nicht mehr funktionieren, wenn ich einfach die skripte tausche, oder?
edit: ansonsten würde es auch reichen, wenn ich einfach nur das Aussehen des Turmes tauschen könnte. Wie man die Baukosten ändert, weiß ich. Es ist nur noch das Aussehen, was sozusagen stört, weil ein altes Gebäude besser ist, als ein Zukunftsgebäude.
Zu den Fahrstühlen:
naja gut.. war auch mehr eine Interessenfrage. Mir reicht 1 Zukunftsfahrstuhl aus, also brauch man hier auch nicht weiter nachforschen.
>Zeile 12, Zeichen 22 ergibt aber irgendwie keinen Sinn.. in Zeile 12 ist doch nur der goto Befehl, Zeichen 22 ist sogar hinter den // , also stimmt das nicht... Daher schließe ich, dass gewisse Zeilen nicht als Zeilen gewertet werden? Werden leere Zeilen berücksichtigt, werden Zeilen mit "{" als Zeile gewertet? Und ab wo wird gezählt? Oder wie läuft das?
Leere Zeilen zählen auch. Am besten ist es, wenn du dir einen Editor zulegst, der
die Zeilen mitzählt. Ich selbst benutze C4scripter, aber Notepad++ soll auch gut funktionieren. Die Koordinaten sind immer so eine Sache. Die stimmen meißt nicht genau. Beispielsweise bei einem Semikolon-fehler: Die Engine parst den Script und merkt erst in der nächsten Zeile, dass zwischen dem letzten und dem aktuellen Befehl kein Semikolon vorkomt. Woraus resultiert, dass die Engine in der Situation die Zeile des darauffolgenden Befehls ausgibt und nicht die Zeile, in der das Semikolon vergessen wurde. Die Koordinaten sind trotzdem ein guter Ansatz, bei dem man in der Nähe schauen sollte. In der Regel passiert der Fehler bei oder vor den Koordinaten. Schau einfach mal da in der Gegend.
>Zum Thema Engine, ich hab Version 4.9.10.4 ich dachte das wäre die neuste Version, war aber noch kostenpflichtig. Habe mir letztens mit meinem Laptop die Freeware Version runtergeladen und habe beim Netzwerkspiel festgestellt, dass es eine Fehlermeldung gibt, dass die Engine nicht identisch wäre
Die aktuelle ist 4.9.10.7 oder kurz [330]. Guck am besten nochmal auf clonk.de nach der Version.
>wenn dort der Befehl CheckAllPlayerWealth() nicht definiert ist [...]
Nein, CheckAllPlayerWealth() ist keine Engine-Funktion. Die muss selbst definiert werden. Jetzt fällt mir auch auf, woher der Fehler kommt:
>ich habe lediglich das Gecko von geschriebene Script kopiert und eingefügt
Gecko hat beim Aufruf CheckAllPlayerWealth() benutzt, obwohl die Funktion CheckAllPlayerWealth
s() heißt. Du musst einen der beiden Namen anpassen.
ah super, ja das "s" war der fehler =)
Allerdings funktioniert es trzd. nicht wie es soll =(. Es erscheint zwar keine Fehlermeldung mehr, aber es funktioniert nur für spieler 1. Egal ob Spieler 2 der einzige mit genug Gold ist, oder ob beide genug Gold haben, bei Spieler 2 werden die baupläne nicht freigeschaltet , also es passiert nichts, das Gold wird auch nicht abgezogen =/
Schon wieder ein kleines neues Thema, wundert mich nur, muss nicht weiter behandelt werden:
Nachdem ich Clonk gerade in der neueren Version installiert habe, war die standardeinstellung von "faire clonks" wieder auf "trainierte Clonks" Dies hat zur Folge, dass mein Hauptclonk (Brigardegeneral) plötzlich einen leeren Lebenspunktebalken hat und offensichtlich unbesiegbar ist (habs mit mehreren Minuten unter wasser mit Haien probiert).
Ist das normal? :D Da ich eh immer mir "fairen Clonks" spiele, und dort alles funktioniert, ist es jetzt nicht weiter tragisch, aber wundert mich natürlich :D
>Dies hat zur Folge, dass mein Hauptclonk (Brigardegeneral) plötzlich einen leeren Lebenspunktebalken hat und offensichtlich unbesiegbar ist (habs mit mehreren Minuten unter wasser mit Haien probiert).
In dem Fall würde ich sagen, dass das ein Cheatclonk/Radiergummiclonk war, also ein Clonk, bei dem manuell die Werte im Editor verändert wurden. Hast du früher mal etwas der Art gemacht? :P
oh stimmt :D
sein Energie Wert liegt bei 2 Milliarden nochwas :D wieder ein Rätsel gelöst :)
Schäm dich! :o
Am besten, du erstellst einen neuen Spieler, gibst dessen Clonk eine unglaublich hohe Erfahrung, bewegst ihn, bis er den Rang deines Clonks erreicht hat und eliminierst den Spieler dann (dass er gespeichert wird). Danach kannst du die ganzen Physicals vom Clonk nehmen, um deine wiederherzusetellen.
>Schäm dich! :o
Na na, wer hat denn das nicht gemacht? :) Das waren noch Zeiten, als ich mit den Physics rumgespielt habe. Ich drücke springen und plötzlich hat sich mein Clonk in Luft aufgelöst. In echt ist er aber nur irre weit in die Luft gesprungen und kam nach gefühlten 10 Stunden wieder runter. :D
Das Problem mit dem Bohrturm habe ich jetzt lösen können.
Ich habe an sich einfach den unbrauchbaren Bohrturm aus dem Space Launch Pack entfernt und nur seine IDs und seine Grafik behalten. Nun hab ich den normalen Bohrtrum kopiert, ihm neue IDs und die neue Grafik gegeben, aber den alten Bohrkopf (mit neuer ID) behalten.
Zu guter letzt habe ich dem Bohrkopfscript des alten Bohrturmes bei den Einstellungen, wie er sich für MAterialien verhalten soll das "FreeRect" für Granit, einfach auf "DigFree" geändert. Nun kommt er nicht mehr durch Granit/stein usw. Zu guter letzt muss ich nun nur noch die Baukosten im DefCore ändern und schon ist alles gut :)
So haben die beiden Bohrtürme nun natürlich fast dieselben Eigenschaften und der neue Turm reagiert auch nicht mehr auf EMP... aber das ist mir nicht so wichtig, als dass ich da nun noch mehr verwurschteln will.
Eine Sache die dabei extrem gestört hat, war, dass der Editor Dinge falsch angezeigt hat. Ich habe einfach nur eine Kopie des alten Turms mit neuer Grafik gehabt. Wenn ich dann in die DefCore oder ins Script geschaut habe, stant im Editor plötzlich schon die neue ID, obwohl ich diese noch garnicht angepasst hatte. Aber in der Minivorschau des defCores, die man im Editor sieht, stand noch die alte ID. So wusste ich erst nicht, wo ich die ID nun schon angepasst hatte, und wo nicht, bis ich halt rausfand, dass die Minivorschau es richtig anzeigt....
>Eine Sache die dabei extrem gestört hat, war, dass der Editor Dinge falsch angezeigt hat.
Ja, solche Dinge gibts immer mal wieder. Einfach das Objekt aktualisieren lassen (Rechtsklick->Aktualisieren oder F5, was aber den kompletten Editor neu lädt) und das Problem dürfte erledigt sein.
Ich hab jetzt übrigens rausgefunden, warum sich die anderen neuen Fahrstühle nicht bauen lassen.
Es liegt an der "Category" in der DefCore. Bin da zufällig drüber gestolpert und wusste nicht was Category ist, also hab ich gegoogelt und das hier gefunden:
http://www.clonk.de/docs/de/sdk/definition/category.htmlda erkennt man, dass all die Dinge, die im Objektpaket, aber nicht im Spiel sind, nicht die nötige Kategorie haben. So sind die Fahrstühle einfach nur "2" und demnach nur ein Gebäude, welches aber nicht im normalen Spiel verwendet werden kann, sondern nur, wenn es von vorneherein ins Spiel gebracht wurde :)
Das ist sehr gut, dass ich das rausgefunden habe, weil das ungefähr auf die Hälfte aller Objekte aus dem Paket zutrifft, also habe ich jetzt viel neues Spielzeug :)
Date 06.09.2014 14:37
Ich hoffe das ist jetzt in Ordnung, wenn ich hier in einem Strang das Thema Forschungsstation weiterführe.^^
Ich habe zufällig festgestellt, dass bei erstellbaren Objekten im Script eine Anweisung gibt, wann sie erforschbar sind. Als Beispiel mal die Haubitze:
public func GetResearchBase() { return(CATA); }
(sehe gerade, das ist das was Pitri genannt hatte :D)
Das heißt man muss erst den Katapult erforscht haben, dann kann man die Haubitze erforschen :)
Wie könnte ich dies nun erweitern? Kann ich in die Klammer in der zurzeit CATA steht noch einfach beliebig viele weitere IDs einfügen, die Voraussetzung sein sollen? Oder wie würde ich das machen, wenn ich nun mehr als diese eine Voraussetzung haben wollen würde?
Für mein Beispiel würde ich dort nun also noch die ID der kleinen Burg eintragen. Dasselbe müsste ich dann bei jedem einzelnen Objekt machen. Natürlich dann auch noch mit anderen "Auslösern" als nur der kleinen Burg. So würde es dann reichen, bei einer bestimmten Menge Gold, einfach den Bauplan für das "auslösergebäude" auszuhändigen. Der Rest könnte dann bis zu einem gewissen Level erforscht werden, bis das nächste "auslösergebäude" das ganze stoppt und es erst weitergeht, wenn dieses durch Gold erreicht wurde.
Es wäre natürlich recht viel Arbeit bei jedem einzelnen Objekt nun sowas hinzuzufügen... geht das irgendwie anders/leichter?
>Kann ich in die Klammer in der zurzeit CATA steht noch einfach beliebig viele weitere IDs einfügen, die Voraussetzung sein sollen? Oder wie würde ich das machen, wenn ich nun mehr als diese eine Voraussetzung haben wollen würde?
Ich bin mir nicht sicher, ob das aktuelle System mehrere Vorraussetzungen erlaubt. Wenn nicht, wie ich vermute, müsste man ein #appendto an die Forschungsstation machen. ...mooooooooment!
Vergiss das obere, ich habe eben in den script von der Forschungsstation geschaut:
// Erweiterte Forschungsgrundlagen
while (idBase = DefinitionCall(idDef, Format("GetResearchBase%d", ++j)))
if (!GetPlrKnowledge(iPlr,idBase)) fHasBase=0;
Es müsste also möglich sein, beliebig viele GetResearchBase-Funktionen zu erstellen und darin die ID zurückzugeben. Die Funktionen müssten dann im Format GetResearchBase2(), GetResearchBase3() etc sein.
super =)
es funktioniert sogar mit
public func GetResearchBase() { return(SFLN); }
public func GetResearchBase() { return(TFLN); }
public func GetResearchBase() { return(ELEV); }
usw., also ohne 1,2 3 :)
Gutgut, dann wäre das gelöst. Ich könnte also theoretisch auch einfach selbst einen Aufbauplan erstellen, was zuerst erforscht werden muss usw usw.
Dadurch könnte ich theoretisch auf die "sammle Gold -> bekomme Baupläne" Sache verzichten... Aber dadurch wäre denn derjenige am technologisch fortgeschrittensten, der ohne Pause dutzende Clonks forschen lässt und das fänd ich nicht so toll, weil man ja schon auch noch Gold scheffeln soll :)
D.h. am besten ist eine Kombination, wie ich es schon mit der kleinen Burg vorgeschlagen habe.
Also heißt es jetzt auf Gecko warten, oder jemanden der das Skript nochmal anschaut und sagen kann, warum es nur für Spieler 1 fnuktioniert =/
entschuldigt den Doppelpost, aber wenn ich editieren würde, könnte es sein, dass es nicht jeder mitbekommt ;)
mir ist grad noch eine mögliche Lösung eingefallen:
Man könnte auch dafür sorgen, dass Forschung in der Forschungsstation kostenpflichtig ist. Am besten wäre es natürlich, wenn man die Kosten für jedes Gebäude einzeln einstellen könnte, damit z.b. die Erforschung eines Schlosses teurer ist, als die Erforschung einer Bambushütte.
Auf diese Weise könnte ich mir die "sammle Gold -> bekomme Baupläne" Sache tatsächlich sparen, weil man eben auch Gold sammeln müsste, um zu forschen :)
Kann man das umsetzen? und wenn ja, wie?
Nein, das wird nicht funktionieren. jedes mal, wenn func GetResearchBase() compiliert wird, wird die vorherige überschrieben. Das bedeutet, dass ledigilich ELEV drin stehen wird. Sie müssen unterschiedlich benannt sein.
gut dass dus sagst, hast recht ;)
hast du eine Idee zu dem kostenpflichtigem Forschen?
Das hat mich schon immer bei Clonk gewundert, dass das forschen nichts als Energie und Zeit benötigt, und halt nichts kostet ^^
Das wurde bereits in
Tower Attack umgesetzt. Müsste man da mal reinschauen, das wurde ganz bestimmt mit einem #appendto geregelt.
>Das hat mich schon immer bei Clonk gewundert, dass das forschen nichts als Energie und Zeit benötigt, und halt nichts kostet ^^
Ja, da wird auch auf eigene Faust geforscht, das braucht kein Geld. :D
habs mir mal gedownloadet... aber da werd ich leider nicht schlau draus, das übersteigt noch meinen Wissensstand :D
EDIT
habs mal angespielt, aber das forschen scheint kostenlos zu sein, so wie immer. Nur das Bauen von den Türmen kostet Gold.
Seltsam, bei mir geht der Clunkerstand durchs Forschen runter.
ah stimmt, an sowas hatte ich garnicht gedacht :D
gut.. stellt sich nur noch die frage, wie das umgesetzt wurde und ob man diesen Abzug für jedes Gebäude einstellen kann... aktuell sieht es aus, als wären es einfach nur 10 Gold pro x sekunden, die geforscht wird, egal was... oder?
Das mit den Plasmakanonen habe ich auch lösen können. Im Script der Plasmakugeln stand:
```
/* Treffer */
private func HitObject(target)
{
if (!Random(5))
Sound("ProjectileHit*");
DoEnergy(-1+Random(5)/4+20, target); // Schaden an Lebewesen: 20.8 HP
DoDamage(Random(2)+20, target); // Schaden an Fahrzeugen: 20.5 HP
SetXDir(GetXDir(target) + xdir/GetMass(target), target);
SetYDir(GetYDir(target) + ydir/GetMass(target), target);
return(RemoveObject());
}
```
ich habe einfach das "+20" in den 2 Zeilen entfernt. Keine ahnung was es bewirkt, aber die Kanonen machen jetzt schaden, anstatt zu heilen.
Hm ja, da hatt der Entwickler wohl einen Denkfehler.
DoEnergy(energy,objec)
gibt einem Objekt Energie (Lebewesen Lebensenergie, Gebäuden Strom). Wenn die Zahl positiv ist, kommt Energie hinzu, wenn sie negativ ist, wird welche abgezogen.
Wahrscheinlich wollte der Entwickler die Wirkung von
-1-Random(5)/4-20
erzielen.
Können wir ja mal durchgucken:
>DoEnergy(-1+Random(5)/4+20, target); // Schaden an Lebewesen: 20.8 HP
DoEnergy
funktioniert so:
DoEnergy(energie_veränderung, ziel_objekt)
ziel_objekt
ist in dem Fall
target
. Interessant ist jetzt noch was
energie_verändung
ist - merke: negative=Schaden, positiv=Heilung.
energie_veränderung
ist
-1+Random(5)/4+20
.
Random(x)
generiert eine Zufallszahl zwischen 0 und
x-1
.
Also steht bei dir sowas wie
-1 + ([0 bis 4])/4 + 20
also eine Zahl zwischen
-1+0/4+20 = +19
und
-1+4/4+20 = +20
.
Beides ist positiv, also Heilung. Ich rate einfach mal, dass der Autor das Vorzeichen-Minus auf das Ergebnis anwenden wollte und nicht auf die
1
.
Also zB so:
- (1 + Random(5)/4 + 20)
was dann zwischen -22 und -21 liegen würde (Negativ=Schaden).
Alternativ kann man zB auch die Funktion
RandomX(von, bis)
für zufällige Bereiche benutzen:
-RandomX(15, 25)
bzw
RandomX(-25, -15)
für Zufallsschaden zwischen 15 und 25 Lebenspunkten.
PS:
Was der Author wohl auch nicht wusste ist, dass Clonkscript keine Kommazahlen kann.
Also Random(5)/4
gibt echt nur entweder 0 oder 1 zurück (immer gerundet!). Nichts dazwischen.
danke für die Erklärungen Pitri und Zapper =)
Jetzt muss glaub ich nur noch das Forschungsproblem gelöst werden. Also entweder das Script von Gecko wie beabsichtigt zum laufen gebracht werden, oder dass das Forschen Geld kostet. Wobei es am besten wäre, es nicht wie im Szenario Tower Attack zu machen, wo 10 Geld pro x Forschungssekunden abgezogen werden, sondern besser wäre es, wenn einfach bei Start der Forschung ein Wert Geld abgezogen wird, wobei dieser Wert von Gebäude zu Gebäude einstellbar ist.
Iwie so stelle ich es mir vor. ;)