Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  FAQFAQ  SuchenSuchen  AnmeldenAnmelden  MitgliederMitglieder  LoginLogin  

Austausch | 
 

 Problem mit Relaunchscript

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Problem mit Relaunchscript   Di Feb 08, 2011 6:01 pm

Ich habe einen Relaunchscript gemacht, aber man relauncht nicht! Es macht auch keinen Error.
Hier der Script:

private func RelaunchPlayer(iPlr, object pCursor)
{
var NoRelaunch = [_RP0, _RP1, _RP2, _RP3];
if(GetPlayerType(iPlr) == C4PT_Script) {}
else
if(GetID(pCursor) == NoRelaunch[GetLength(NoRelaunch)]) {}
else
{
Global(9)++;
if(Global(9) < 5)
{
MakeCrewMember(CreateObject(ASAS, 75, 665, iPlr), iPlr);
SetPlrViewRange(200, GetCrew(iPlr));
SetCursor(iPlr, GetCrew(iPlr));
DoEnergy(100, GetCrew(iPlr));
CreateContents(CLUB, GetCrew(iPlr));
CreateContents(BOTP, GetCrew(iPlr));
CreateContents(HOOK, GetCrew(iPlr));
CreateContents(CRBW, GetCrew(iPlr));
Log("%s hat noch %d Versuche!", GetPlayerName(iPlr), 5 -Global(9));
}
}
return 1;
}

NoRelaunch sind die RPG-Clonks, die sollen nicht relaunchen, und auch nicht die KI.
Kann mir bitte jemand helfen? Crying or Very sad
Nach oben Nach unten
Benutzerprofil anzeigen
Liech
Fregattenkapitän
Fregattenkapitän


Männlich Alter : 26
Anmeldedatum : 02.02.09

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 6:07 pm

schau mal ob das script überhaupt aufgerufen wird (test per Log("Script wurde ausgeführt"); ganz an den anfang schreiben)

if(GetID(pCursor) == NoRelaunch[GetLength(NoRelaunch)])
ist übrigens relativ sinnlos. NoRelaunch[GetLength(NoRelaunch)] fragt das letzte element +1 ab (Es wird bei 0 angefangen zu zählen!)
was du sicher testen möchtest ist ob es einer der 4 ids entspricht. das wäre
int i =0 ;
while(i < GetLength(NoRelaunch))
{
if (NoRelaunch[i] == GetID(pCursor) return 1;
i++;
}
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 6:34 pm

Es wird aufgerufen. Heißt das nicht "var i = 0;"
Wo soll ich das hinschreiben? Ich will ja, dass die RPGs nicht relaunchen.
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 8:16 pm

Die Funktion muss public sein, damit sie per GameCall(Ex) aufgerufen werden kann.

Edit: Prüfen, ob etwas in einem Array ist, geht per GetIndexOf(any item, array a). Undokumentierte Enginefunktion, ist aber deutlich schneller als selbstgebastelte Äquivalente.

Code:
public func RelaunchPlayer(int iPlr, object pCursor)
{
  var NoRelaunch = [_RP0, _RP1, _RP2, _RP3];
  if (GetPlayerType(iPlr) != C4PT_Script)
    if(GetIndexOf(GetID(pCursor), NoRelaunch) == -1)
      if(++Global(9) < 5)
      {
        MakeCrewMember(CreateObject(ASAS, 75, 665, iPlr), iPlr);
        SetPlrViewRange(200, GetCrew(iPlr));
        SetCursor(iPlr, GetCrew(iPlr));
        DoEnergy(100, GetCrew(iPlr));
        CreateContents(CLUB, GetCrew(iPlr));
        CreateContents(BOTP, GetCrew(iPlr));
        CreateContents(HOOK, GetCrew(iPlr));
        CreateContents(CRBW, GetCrew(iPlr));
        Log("%s hat noch %d Versuche!", GetPlayerName(iPlr), 5 -Global(9));
      }
}
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 8:38 pm

Das funktioniert nicht. Die RPGs kriegen trotzdem ein relaunch.
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 9:54 pm

Ach, an RelaunchPlayer wird der gestorbene Clonk auch gar nicht übergeben. Und GetID(0) ist halt auch immer 0 Razz
Du kannst stattdessen OnClonkDeath verwenden, allerdings sind da dann die beiden Parameter vertauscht. (OnClonkDeath(object pClonk, int iPlr))
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 10:04 pm

Wie soll ich OnClonkDeath() verwenden?
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: Re: Problem mit Relaunchscript   Di Feb 08, 2011 10:31 pm

Eigentlich genau gleich. Der Unterschied ist nur, dass die Parameter anders sind und dass es auch aufgerufen wird, wenn nicht der letzte Clonk eines Spielers gestorben ist, sondern nur irgendeiner.
Nach oben Nach unten
Benutzerprofil anzeigen
Liech
Fregattenkapitän
Fregattenkapitän


Männlich Alter : 26
Anmeldedatum : 02.02.09

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 1:10 am

Tut mir leid, es ist natürlich var. Ich bin zurzeit ein wenig zu häufig mit c# und java unterwegs :s
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 11:01 am

@Limeox:
Jetzt hab ich das:

Code:
public func OnClonkDeath(object pClonk, int iPlr)
{
  var NoRelaunch = [_RP0, _RP1, _RP2, _RP3];
  if (GetPlayerType(iPlr) != C4PT_Script)
    if(GetIndexOf(GetID(pClonk), NoRelaunch) == -1)
      if(++Global(9) < 5)
      {
        MakeCrewMember(CreateObject(ASAS, 75, 665, iPlr), iPlr);
        SetPlrViewRange(200, GetCrew(iPlr));
        SetCursor(iPlr, GetCrew(iPlr));
        DoEnergy(100, GetCrew(iPlr));
        CreateContents(CLUB, GetCrew(iPlr));
        CreateContents(BOTP, GetCrew(iPlr));
        CreateContents(HOOK, GetCrew(iPlr));
        CreateContents(CRBW, GetCrew(iPlr));
        Log("%s hat noch %d Versuche!", GetPlayerName(iPlr), 5 -Global(9));
      }
}

Die RPGs kriegen keinen Relaunch mehr, das funktioniert jetzt. Aber wenn man stirbt, ist man sofort eliminiert, es wird zwar ein Meuchelmörder erstellt, aber der gehört dem KI-Team! Was hab ich falsch gemacht? confused
Nach oben Nach unten
Benutzerprofil anzeigen
Liech
Fregattenkapitän
Fregattenkapitän


Männlich Alter : 26
Anmeldedatum : 02.02.09

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 12:19 pm

Wenn ich mich nicht irre ist int iPlr nicht iPlr sondern iKiller. Und auch die anderen Parameter sind etwas fragwürdig. Du kannst hier generell informationen per this über den toten clonk einholen.
sprich
var iPlr = GetOwner(this);
var pClonk = this;
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 5:06 pm

Okay, jetzt funktioniert alles, ich hab es nun ein wenig anders gemacht(Hab mir etwas vom 3. M&M-Tutorial abgeschaut):

Code:
private func RelaunchPlayer(iPlr, object pCursor)

  if(GetPlayerType(iPlr)!=C4PT_User) return;
    Global(9)++;
  if(Global(9) < 5)
  {
  var id = ASAS;
  var crew = CreateObject(id, 75, 665, iPlr);
    MakeCrewMember(crew,iPlr);
    SetCursor(iPlr, crew);
    DoEnergy(100, crew);
    SetPlrViewRange(200, crew);
    CreateContents(CLUB, crew);
    CreateContents(BOTP, crew);
    CreateContents(HOOK, crew);
    CreateContents(CRBW, crew);
    Log("%s hat noch %d Versuche!", GetPlayerName(iPlr), 5 -Global(9));
  }
      return 1;
}


Nur noch eine Frage: Was muss ich jetzt verändern, damit das auch mit mehreren Spielern funzt?(Also, dass jeder Spieler seine eigenen 4 Relaunches hat)
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 6:02 pm

Zitat :
Du kannst hier generell informationen per this über den toten clonk einholen.
Öh, nein. Der Aufruf im Szenarioscript ist komplett ohne Objektkontext, zumindest hier über GameCall/GameCallEx. Da ist this einfach 0.

Es müsste eigentlich reichen, bei der oberen Funktion (mit OnClonkDeath) den iPlr-Parameter rauszuschmeißen und zu Beginn var iPlr = GetOwner(pClonk) zu deklarieren, der Rest kann so bleiben.

Für Relaunches pro Spieler kannst du einfach andere Globals verwenden, oder einfach ein globales Array.
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 6:16 pm

Zitat :
Für Relaunches pro Spieler kannst du einfach andere Globals verwenden, oder einfach ein globales Array.
Ähm... und wie mach ich das?
Nach oben Nach unten
Benutzerprofil anzeigen
Limeox
Admiral
Admiral
avatar

Männlich Anmeldedatum : 25.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 6:34 pm

Global(iPlr) zum Beispiel, allerdings musst du dann halt NO_OWNER aussortieren. Razz
Ein Array ist prinzipiell dasselbe, du brauchst aber nur eine einzige Variable und nicht gleich die ganzen Globals.
Code:
static aRelaunes;  //static ist global

protected func Initialize()
{
  aRelaunches = [];  //neues, leeres Array
  ...
}
Und zugreifen kannst du dann zB per aRelaunches[iPlr].
Gibts hier auch irgendwo Tutorials dazu.
Nach oben Nach unten
Benutzerprofil anzeigen
Andriel
Oberst
Oberst
avatar

Männlich Alter : 67
Anmeldedatum : 06.04.10

BeitragThema: Re: Problem mit Relaunchscript   Mi Feb 09, 2011 6:49 pm

Okay, jetzt hab ich alle Global(9) durch Global(iPlr) ersetzt und die NO_OWNER werden eh schon am Anfang der Funktion aussortiert(glaub ich Laughing )
Jedenfalls geht jetzt alles, danke!
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: Problem mit Relaunchscript   

Nach oben Nach unten
 
Problem mit Relaunchscript
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Translator script problem
» HTML Code listen erstellungs Problem in threads
» Problem: Hochladen/Installieren von phpBB Dateien?
» Problem bei "HTML-Seite-Verwalten"
» Login-in Problem bei der Backup-Verwaltung

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Sonstiges :: Scripthilfe-
Gehe zu: