Not logged inClonkspot Forum
Forum Home Help Search Register Login
Up Topic Deutsch / Miniblogs / Bitte um Hilfe mit script
1 2 3 Previous Next  
Parent - By Tflk3 (More than 50 posts.) Date 05.02.2014 16:43
Für jeden der lust und laune hat mit zu machen oder die Beta zu testen schaut doch hier vorbei:
https://clonkforge.net/dforum.php?f=t&t=4652&c=1&pr=1522
Der neue "Pilz" ist hier in der Beta mit enthalten :grin:
Damit ihr auch wisst wobei ihr mir schon überall geholfen habt und was daraus geworden is.

MfG Tflk3
- By Tflk3 (More than 50 posts.) Date 11.02.2014 21:12 Edited 12.02.2014 21:36
Ab sofort gibts auch ein Forum rund ums Ant-Pack wenn ihr was loswerden wollt -> Betreff Ant-Pack (Außer den Script Hilfen) Schreibt doch bitte was rein ^^ is noch ziemlich leer ^^

https://clonkforge.net/dforum.php?f=t&t=4658&b=4&p=1&cmt=39563&pr=1522#39563
- - By Tflk3 (More than 50 posts.) Date 15.02.2014 14:35
Hi ihr Clonker :grin:
Ich brauch mal wieder eure Hilfe!
Wie kann ich ein Object daran hindern aus dem Spiel geworfen zu werden (Sagen wir mal ein Stein)
z.b. am Linken oder Rechten Map rand?
Parent - - By Sven2 (More than 500 posts.) Date 15.02.2014 14:41
DefCore BorderBound.
Parent - By Tflk3 (More than 50 posts.) Date 15.02.2014 15:05
Ja Geil :grin:
Danke für die Blitz-schnelle Hilfe :grin:
- - By Tflk3 (More than 50 posts.) Date 15.02.2014 17:18
Hi nochmal, und schon wieder.
Hab folgendes Problem: Ich habe ein Object erstellt das wenn man es trägt einem Schaden zufügt.
Es lässt sich werfen aber sucht sich anstatt eines neuen Clonks der näher am "Object" ist als der Werfer nicht diesen als neues Ziel.
Hier das script

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*-- "Ant"fekt-Batzen --*/
#strict
local rot;                          // Nur für die Farbmodulation

protected func Hit()
{Call("Initialize");
Sound("RockHit*");
return(1);}

func Initialize()
{ RemoveAll(GetID());
//Find_ID  ,Find_Exclude(0))
var obj;
Enter(obj=FindObject2(Find_OCF(OCF_Alive), Find_OCF(OCF_CrewMember)));  

// Funktioniert bei Spielstart und sucht sich dann einen "Clonk" aber wenn dieser dan
// das Object auf einen anderen Wirft kommt er zum Werfer zurück anstatt vom Getroffenen Clonk aufgenommen zu werden.....

return(1);}

func Timercall()
{if(Contained()==0) Call("Initialize");
if(rot<=254) {rot=rot+10;}
if(rot>=255) {rot=0;}
SetColorDw(HSL(rot,255,127),this());
SetColorDw(HSL(rot,255,127),Contained());
DoEnergy(-1,Contained());}
////////////////////////////////////////////////////////////////////////////////////////////////////////
Parent - By Tflk3 (More than 50 posts.) Date 15.02.2014 17:30
Schon Ok :grin:
Habs rausgefunden :grin:
- - By Tflk3 (More than 50 posts.) Date 22.02.2014 16:10
Da bin ich wieder ^^

Folgendes Problem:
Ich möchte die Wächter fähigkeit verbessern zum "Sehen" von Feinden.
Im Spiel func'st nur für Spieler 1 bis dessen Wächter Tot is dan erst für den nächsten Wächter.

Hier das Script:

protected func guardwatch() 
{var obj;
if (obj = FindObject(0, -200,-100,400,200, OCF_CrewMember, 0,0, NoContainer()))   //Nur bei CrewMembers die in der nähe sind
  if (Hostile(GetOwner(), GetOwner(obj)))                                                          // Nur bei Feinde
    if (PathFree(GetX(), GetY(), GetX(obj), GetY(obj)))                                        // Nur wenn das Object in sicht ist
{ PlayerMessage(GetOwner(), "{{WSA1}}", this());                                            // Is das Warnsymbol
PlayerMessage(GetOwner(), "{{WSA2}}", obj);                                                 // Eine Hand mit Fingerzeig auf den Feind
}}

bin mir nich sicher was ich falsch mache weil ich über PlayerMessage ja den Betreffenden Spieler suche....
Parent - By Gecko (More than 500 posts.) Date 23.02.2014 13:29 Edited 23.02.2014 17:22
"obj" kann bei deiner Version auch der eigene Clonk / Ameise sein, und dann wäre der Rest egal. Es wird bei dir ja nur EIN Objekt gesucht, und dann erst nach Kriterien, die "obj" haben muss.
Das es nur für Spieler 1 funktioniert erkläre ich mir durch die Objektreihenfolge in Clonk.

Ich Empfehle dir eine for schleife mit FindObjects, damit auch mehrere Feinde angezeigt werden.

Analog dazu der Script:

protected func guardwatch()  {

/* Durchsucht ALLE Clonks/Ameisen im Suchbereich */
for(var obj in FindObjects(Find_InRect(-200,-100,400,200), Find_OCF(OCF_CrewMember), Find_NoContainer () )){
 
  if (Hostile(GetOwner(), GetOwner(obj)))                         // Nur bei Feinde
    if (PathFree(GetX(), GetY(), GetX(obj), GetY(obj)))        // Nur wenn das Object in sicht ist
     {
        PlayerMessage(GetOwner(), "{{WSA1}}", this());      // Is das Warnsymbol
        PlayerMessage(GetOwner(), "{{WSA2}}", obj);         // Eine Hand mit Fingerzeig auf den Feind
     }
    } 

  }
Parent - - By Zapper (More than 500 posts.) Date 23.02.2014 14:30
Zu der Problemlösung, die Gecko gegeben hat (die genau das richtige ist!), noch etwas: Du hast dann jetzt eine Schleife. Das heisst, wenn du nicht alle Objekte finden willst, musst du die Schleife dann noch per "break;" verlassen.
Wenn du es ein wenig übersichtlicher haben willst, kannst du die Schleife und das was passieren soll auch trennen, so zB:


protected func guardwatch()
{
  var target;
  /* Durchsucht ALLE Clonks/Ameisen im Suchbereich */
  for(var obj in FindObjects(Find_Distance(200), Find_OCF(OCF_CrewMember), Find_NoContainer(), Sort_Distance()))
  {
    if (!Hostile(GetOwner(), obj->GetOwner())) continue; // nur Feinde
    if (!PathFree(GetX(), GetY(), obj->GetX(), obj->GetY())) continue; // Nur wenn sichtbar
    target = obj; // merke Gegner
    break; // verlasse die Schleife hier! Wir haben schon einen Gegner!
  }
 
  if (target) // nur wenn wirklich ein Gegner gefunden wurde
  {
    PlayerMessage(GetOwner(), "{{WSA1}}", this); // Is das Warnsymbol
    PlayerMessage(GetOwner(), "{{WSA2}}", obj); // Eine Hand mit Fingerzeig auf den Feind
  }
}

Da kann man jetzt noch ganz bequem weitere Bedingungen hinzufügen, ohne dass man gleich einen Koller kriegt, weil alles so tief verschachtelt ist ;)
(Vergiss nicht, dass die Bedingungen in diesem Fall per ! verneint sind.)
Parent - - By Tflk3 (More than 50 posts.) Date 24.02.2014 21:00
:cry: Hi
Problem hat sich jetzt nur nen bissel geändert....
Hab als test 3 Spieler aller als Feinde neben einander gestellt:
   - Zuerst sieht Spieler 1 alle Zeichen (Also das über sich selbst und die die Feinde Anzeigen) und die anderen nix.......
    - dann Töte ich den Wächter von Spieler 1 und Spieler 2 sieht alles aber der rest nix......
Parent - - By Zapper (More than 500 posts.) Date 24.02.2014 23:28
Wie sieht dein Code denn im Moment aus?
Parent - - By Tflk3 (More than 50 posts.) Date 25.02.2014 19:24
protected func guardwatch()  {

/* Durchsucht ALLE Clonks/Ameisen im Suchbereich */
for(var obj in FindObjects(Find_InRect(-200,-100,400,200), Find_OCF(OCF_CrewMember), Find_NoContainer () )){

  if (Hostile(GetOwner(), GetOwner(obj)))                         // Nur bei Feinde
    if (PathFree(GetX(), GetY(), GetX(obj), GetY(obj)))        // Nur wenn das Object in sicht ist
     {
        PlayerMessage(GetOwner(), "{{WSA1}}", this());      // Is das Warnsymbol
        PlayerMessage(GetOwner(), "{{WSA2}}", obj);         // Eine Hand mit Fingerzeig auf den Feind
     }
    }

  }

Wird über die TimerCall alle 10 Frames aufgerufen....
Parent - - By Zapper (More than 500 posts.) Date 25.02.2014 19:29
Sieht gut aus.

Ich habe einen Verdacht: Normalerweise überschreiben Nachrichten sich ja gegenseitig. Also wenn du über einem Objekt eine Nachricht ausgibst, werden alle alten Nachrichten entfernt.
Kann sein, dass das bei PlayerMessage auch passiert, wenn die Spieler unterschiedlich sind - also, dass jedes Objekt nur eine einzige PlayerMessage zur Zeit haben kann.

Das könntest du testen, indem du deine zwei Nachrichten durch nur eine Nachricht ersetzt, so zB:

PlayerMessage(GetOwner(), Format("Mein Ziel ist %s", obj->GetName()), this);
Parent - By Tflk3 (More than 50 posts.) Date 01.03.2014 18:20
:happy:
Ja die Nachrichten behindern sich gegenseitig....
Werd mir mal das mit dem Keeper-Objecten anschaun :grin:

Danke für eure Hilfe Leute!!
Ihr Seit die Besten!!!! :grin: :wink:
Parent - - By Gecko (More than 500 posts.) Date 25.02.2014 23:32
Alternativ könntest du Objekte Attachen, die eine Art Icon über den Feind zeigen.

Mit SetVisibility(VIS_Owner); wären die nur für den Besitzer sichtbar.
Desweiteren brauchst du hierfür eine ActMap.txt mit einer Action die Attach ausführt.
Mir fällt spontan das Kampf-U-Boot vom CCAN an, das Radar davon hat mit Attach gearbeitet, wenn du ein Beispiel brauchst.

Es ist umständlicher und auch unschöner im allgemeinen, aber vielleicht löst das auch das Problem.
Du könntest auch über diesen Attachten Objekt die Nachricht ausgeben, sie ist dann auch nur für den Spieler sichtbar.

ACHTUNG:
Aus Erfahrung kann ich dir sagen, dass Objekte die zB. an einem Clonk hängen (mit Action Prozedur: ATTACH) bei betreten eines Gebäudes mit hinnein steigen. Sie sind dann oft im Inventar des Hauses zu finden.
Dagegen half wimni ein Defcore-Eintrag..

Und noch ein Tipp zum verschieben des Attachten Objektes, so das es über den Clonk ist: verändere einfach den y-Wert des Offsets, so das es passt. zB. Offset=-4,12
Parent - - By Luchs (More than 1000 posts.) Date 25.02.2014 23:51

>Aus Erfahrung kann ich dir sagen, dass Objekte die zB. an einem Clonk hängen (mit Action Prozedur: ATTACH) bei betreten eines Gebäudes mit hinnein steigen. Sie sind dann oft im Inventar des Hauses zu finden.
>Dagegen half wimni ein Defcore-Eintrag..


Hm, vielleicht NoGet=1?
Parent - By Zapper (More than 500 posts.) Date 26.02.2014 01:06
+NoSell=1
Parent - By Zapper (More than 500 posts.) Date 26.02.2014 01:06

>Alternativ könntest du Objekte Attachen, die eine Art Icon über den Feind zeigen.


Du könntest dir auch die entsprechenden Hilfsobjekte aus Keepers stibitzen. Da werden die Statuseffekte auch so an den Clonk rangepappt. Ich bin mir aber grad nicht 100% sicher ob direkt per Nachricht oder per Hilfsobjekt.
Up Topic Deutsch / Miniblogs / Bitte um Hilfe mit script
1 2 3 Previous Next  

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill