PBeM-Spiele
Aktuelle Zeit: 20.10.2017 04:06

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 01.02.2010 05:29 
Offline
Fast-Mitglied
Fast-Mitglied
Benutzeravatar

Registriert: 20.07.2003 21:00
Beiträge: 80
Wohnort: Ritus, 8. Welt
Andunier hat geschrieben:
Aktuell habe ich aber folgendes Problem: Ich möchte den Talentwert wissen, mit dem ich an der Burg $no weiterbauen kann.
Code:
building[$no].Talent
liefert aber als benötigten Talentwert fälschlicherweise 0 zurück (und resultiert dadurch in einer Division-by-zero). Möglicherweise muss hier auch im e3.cfg-file eine Änderung vorgenommen werden.

Laut Doku klappt das mit dem Talent nur für Eressea.
Du kannst aber über den #config Befehl auf die Abschnitte der Config-Datei direkt zugreifen. Hier z.B. für das erste Gebäude der Region:
Code:
#config Buildings nested
#message 'Mindestbautalent: '+Buildings[region.building[0].Typ].Talent

_________________
Quiquid id est, timeo Danaos et (iam) dona ferentes.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 01.02.2010 10:35 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Perfekt. So funktioniert es.
Ein Test hat mir gezeigt, dass man die config-Datei nicht nur einmal global einbinden kann. Der Befehl #config darf nur innerhalb einer Prozedur aufgerufen werden. Die config-Datei muss also lokal, ggfs. in diversen Prozeduren, eingebunden werden.

Und gleich eine Frage dazu (mal wieder ;)):
Wie weiß Vorlage welche config-Datei ich einbinden will (default, ohne die [file <Datei>]-Option von #config zu benutzen)? In meinem Verzeichnis liegen ja inzwischen einige .cfg-files von eressea.cfg über vinyambari(i).cfg bis e3.cfg, und ich will ja für E3 immer nur in e3.cfg gucken. Merkt Vorlage, dass ich den #config-Befehl in der e3.vms gebe? Oder klappt mein Skript gerade zufällig, weil die Burgtalente (die ich ja abfragen will) sowieso in allen .cfg-files drin stehen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 01.02.2010 16:02 
Offline
Fast-Mitglied
Fast-Mitglied
Benutzeravatar

Registriert: 20.07.2003 21:00
Beiträge: 80
Wohnort: Ritus, 8. Welt
1) Du könntest den #config Befehl in die OnInit-Prozedur stecken:

Code:
#proc OnInit
{
   #config ...     
}

2) Die CRs enthalten ein ;Spiel Tag, woran Vorlage die passende Config Datei erkennt:

Code:
VERSION 64
"UTF-8";charset
"de";locale
"Eressea";Spiel

Code:
VERSION 65
"UTF-8";charset
"de";locale
"E3";Spiel

_________________
Quiquid id est, timeo Danaos et (iam) dona ferentes.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Da schau her...
BeitragVerfasst: 22.07.2010 15:44 
Offline
Neuling
Neuling

Registriert: 22.07.2010 15:33
Beiträge: 1
Solthar hat geschrieben:
sondern hauptsächlich die Skriptsammlung von Roman Benesch verwende.


Das ist ja mal nett!

Bin auf das posting grad beim nach mir selber googeln gestossen....fein daß jemand noch was von meinem Skriptsystem hat, nach der vielen Arbeit!

Und das nach so langer Zeit...
Viel Spaß noch!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2011 23:31 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Bin grad mal wieder dran ein Skript zu verändern und stoße auf ein Problem:
Ich habe eine Prozedur "learn"
Code:
#proc learn $skill $maxskill
{
  #if unit.$skill.Stufe<$maxskill { #call confirm }
  #else { #message 'bis hier sollte ich lernen!' }
  LERNEN $skill
}


Jetzt will ich zusätzlich, dass die Einheit merkt, dass wenn Sie in einem unterhaltspflichtigen Gebäude steht. Denn dann soll neben dem Lernen auch BEZAHLE NICHT machen.

Nur wie prüfe ich das?
Mit unit.Bauwerk bekomme ich die ingame-Nummer des Gebäudes. Schön wäre jetzt wenn ich building[unit.Bauwerk].Unterhalt abrufen könnte um
Code:
#if building[unit.Bauwerk].Unterhalt>0 { BEZAHLEN NICHT }
zu prüfen. Das geht aber irgendwie nicht?

Hat jemand einen (kreativen) Lösungsvorschlag für mein Problem?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 07:49 
Offline
PBEM-Liebhaber
PBEM-Liebhaber
Benutzeravatar

Registriert: 22.05.2003 08:16
Beiträge: 1144
Wohnort: Hamburg/Germany
Die ganz stumpfe Lösung, einfach immer @BEZAHLE NICHT zu setzen gefällt dir also nicht?

Die nächst-unstumpfere Lösung wäre, zumindest alle Einheiten, die in Gebäuden stehen den BEZAHLE NICHT Befehl zu geben. Was für eine ID-Nummer bekommt man denn für Einheiten zurück, die in keinem Gebäude sitzen?

Anderer Ansatz: Check, ob die Einheit Gebäudebesitzer ist. Das werden nur die wenigsten Einheiten sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 08:29 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Danke schonmal, aber das hilft mir alles nicht.

Genau @BEZAHLE NICHT ist schlecht, denn ich will es z.B. auch für Skripte benutzen, in denen z.B. im Steinbruch Steine abgebaut werden und bezahlt wird wenn das Talent ausreichend ist, jedoch gelernt wird und nicht bezahlt wird, wenn das Talent nicht reicht. Der @-Befehl und Vorlage machen gemeinsam imho keinen Sinn, bzw. dann kann ich mir Vorlage sparen, was ich nicht will, weil es komfortabel ist.

Die unstumpfe Lösung, Personen die in einem Gebäude stehen generell BEZAHLE NICHT zu befehlen, wenn sie lernen war mein erster Versuch. Es führt aber dazu, dass alle Einheiten z.B. in einem Turm ein BEZAHLE NICHT bekommen, was unmengen nerviger echeck Warnungen produziert. Ich will aber keine unnötigen Warnungen, da ich die "echten" nicht übersehen will. (Der Rückgabewert von "unit.Bauwerk", wenn die Einheit nicht in einem Gebäude steht ist 0.)

Das Problem beim Prüfen auf Besitzer ist vermutlich das selbe (habe ich aber nicht getestet). Denn wenn
Code:
building[unit.Bauwerk].Unterhalt
nicht geht, vermute ich dass
Code:
building[unit.Bauwerk].Besitzer
ebenfalls nicht geht.
[Stellt sich eine weitere Frage ob das überhaupt geht: Was ist, wenn in einem 2er Steinbruch zwei 1-Personen-Einheiten stehen, aber nur der Besitzer ein BEZAHLE NICHT hat. Versucht die 2. Einheit im Steinbruch den Unterhalt zu zahlen oder will der Server das Geld wenn nur vom Besitzer?]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 08:37 
Offline
PBEM-Liebhaber
PBEM-Liebhaber
Benutzeravatar

Registriert: 22.05.2003 08:16
Beiträge: 1144
Wohnort: Hamburg/Germany
Bei Bezahle Nicht geht es nur um den Besitzer. Also:

* Bei jeder Einheit checken, ob sie Besitzer ist
* Dann entscheiden, ob du bezahlen willst.

Nur Einheiten, die LERNEN und Besitzer sind brauchen Bezahlen Nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 11:14 
Offline
Forumheld
Forumheld
Benutzeravatar

Registriert: 08.02.2005 16:41
Beiträge: 320
Wohnort: Karlsruhe
Andunier hat geschrieben:
Mit unit.Bauwerk bekomme ich die ingame-Nummer des Gebäudes. Schön wäre jetzt wenn ich building[unit.Bauwerk].Unterhalt abrufen könnte um
Code:
#if building[unit.Bauwerk].Unterhalt>0 { BEZAHLEN NICHT }
zu prüfen. Das geht aber irgendwie nicht?

Das soll nicht gehen? Sollte aber. Hast Du vielleicht vergessen, vorher auf unit.Bauwerk!=0 zu testen?

Hier ein Schnipsel, der in meinen Vorlageskripten gute Dienste geleistet hat (bis ich Vorlage zu Gunsten des viel cooleren ExtCmds aufgegebn habe </Werbung>)
Code:
#proc GebaeudeUnterhaltOnUnit
{
    ; Ist Einheit Kommandant eines Gebaeude?
    #if (UNIT.Bauwerk!=0)&(UNIT.Position==1)
    {
      ; Ja - Gebaeudetyp auslesen
      $Typ=BUILDING[UNIT.Bauwerk].Typ
      ; Wieviel Silber wird benoetigt?
      $Silber=antoi(BUILDING[UNIT.Bauwerk].Unterhalt,10)
      ; Wird ausser Silber sonst noch etwas benoetigt?
      $Menge=0
      #if $Typ=='Schmiede'
      {
        $Material='Holz'
        $Menge=1
      }
; [snip]  #else test Bergwerk, Karawanserei...
      ; Wird ueberhaupt etwas benoetigt?
      #if ($Silber>0)|($Menge>0)
      {
; [snip]
        #if $Silber>0
        {
          #call Benoetige $Silber 'Silber'
        }
        #if $Menge>0
        {
          #call Benoetige $Menge $Material
        }
      }
    }
  }
}

_________________
Bild
~~~
Fehlermeldungen: http://magellan-client.sourceforge.net/bugs/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 11:21 
Offline
Fast-Mitglied
Fast-Mitglied
Benutzeravatar

Registriert: 13.09.2002 15:47
Beiträge: 59
Wohnort: Bremen
Hai!

Andunier hat geschrieben:
Nur wie prüfe ich das?
Mit unit.Bauwerk bekomme ich die ingame-Nummer des Gebäudes. Schön wäre jetzt wenn ich building[unit.Bauwerk].Unterhalt abrufen könnte um
Code:
#if building[unit.Bauwerk].Unterhalt>0 { BEZAHLEN NICHT }
zu prüfen. Das geht aber irgendwie nicht?


Damit gibt es in der Tat ein Problem. Ich weiß jetzt nicht mehr aus dem Kopf ab/bis zu welcher Version von Magellan das der Fall war. Ich verwende in meinen Skripten folgenden Workaround:

Code:
#func Unterhalt $geb
{
   ; Gibt die Kosten (nur Silber, keine anderen Ressourcen!) des Gebäudes $geb
   ; zurück.
   ;
   ; Parameter:
   ;  $geb   : NATURAL BASE 36
   ;  RETURN : NATURAL
   ;
   ; Aufrufbsp.:
   ;  #message 'Das Gebäude kostet '+Unterhalt(UNIT.Bauwerk)+' Silber Unterhalt.'

   #call AddLogData 'Unterhalt' TRUE

   #var $summe

   #if GebaeudeEffekt('Zahn der Zeit',$geb) { $summe=0 }
   #else
   {
      $summe=BUILDING[$geb].Unterhalt

      ; Workaround, solange Vorlage nicht die korrekten Unterhaltskosten
      ; zurückgibt:
      #if BUILDING[$geb].Typ=='Leuchtturm' { $summe=100 }
      #else
      {
         #if BUILDING[$geb].Typ=='Bergwerk' { $summe=500 }
         #else
         {
            #if BUILDING[$geb].Typ=='Steinbruch' { $summe=250 }
            #else
            {
               #if BUILDING[$geb].Typ=='Sägewerk' { $summe=250 }
               #else
               {
                  #if BUILDING[$geb].Typ=='Schmiede' { $summe=300 }
                  #else
                  {
                     #if BUILDING[$geb].Typ=='Pferdezucht' { $summe=150 }
                     #else
                     {
                        #if BUILDING[$geb].Typ=='Hafen' { $summe=250 }
                        #else
                        {
                           #if BUILDING[$geb].Typ=='Akademie' { $summe=1000 }
                           #else
                           {
                              #if BUILDING[$geb].Typ=='Magierturm' { $summe=1000 }
                              #else
                              {
                                 #if BUILDING[$geb].Typ=='Karawanserei' { $summe=3000 }
                                 #else
                                 {
                                    #if BUILDING[$geb].Typ=='Damm' { $summe=1000 }
                                    #else
                                    {
                                       #if BUILDING[$geb].Typ=='Tunnel' { $summe=100 }
                                       #else { $summe=0 }
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   #call AddLogData 'Unterhalt' FALSE
   #return $summe
}


Das sieht zwar unschön aus, aber solange da nicht täglich neue Gebäudetypen in Eressea hinzukommen, arbeitet das ohne Probleme.

Gruß,
Thorsten


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 14:07 
Offline
Forumheld
Forumheld
Benutzeravatar

Registriert: 08.02.2005 16:41
Beiträge: 320
Wohnort: Karlsruhe
Aha, das funktioniert also nicht. Hättet ihr ja gleich sagen können.
Code:
#config Buildings nested
Buildings[BUILDING[UNIT.Bauwerk].Typ].Unterhalt.Silber
tut es aber.

Thoran hat geschrieben:
Damit gibt es in der Tat ein Problem. Ich weiß jetzt nicht mehr aus dem Kopf ab/bis zu welcher Version von Magellan das der Fall war.

Aber Magellan kann da ausnahmsweise mal wirklich nichts dafür, oder?

_________________
Bild
~~~
Fehlermeldungen: http://magellan-client.sourceforge.net/bugs/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 14:47 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Danke Leute.
Ich werds heute oder morgen mal testen, wenn ich dazu komme. Ich hatte inzwischen auch das "#config Buildings nested" im Visier. Hab mir nochmal die erste Seite der Diskussion durchgelesen, da hatte ich bei meiner Burgenbau-Routine ein ähnliches Problem, da lags auch daran (neben der BASE36 Umstellung)...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2011 22:41 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Klappt wunderbar:
Code:
#proc learn $skill $maxskill
{
  #config Buildings nested
  #if unit.$skill.Stufe<$maxskill { #call confirm }
  #else { #message 'bis hier sollte ich lernen!' }
  LERNEN $skill
  #if (unit.Bauwerk!=0) {
    ;steht die Einheit in einem unterhaltspflichtigen Gebaeude?
    #if Buildings[building[unit.Bauwerk].Typ].Unterhalt.Silber>0 { BEZAHLEN NICHT }
  }
}


Danke!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 08.04.2011 09:43 
Offline
Fast-Mitglied
Fast-Mitglied
Benutzeravatar

Registriert: 13.09.2002 15:47
Beiträge: 59
Wohnort: Bremen
Solthar hat geschrieben:
Aha, das funktioniert also nicht. Hättet ihr ja gleich sagen können.
Code:
#config Buildings nested
Buildings[BUILDING[UNIT.Bauwerk].Typ].Unterhalt.Silber
tut es aber.

Thoran hat geschrieben:
Damit gibt es in der Tat ein Problem. Ich weiß jetzt nicht mehr aus dem Kopf ab/bis zu welcher Version von Magellan das der Fall war.

Aber Magellan kann da ausnahmsweise mal wirklich nichts dafür, oder?


Oops! Ich meinte natürlich auch Vorlage.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: allgemeine Fragen zu Vorlage
BeitragVerfasst: 07.08.2016 14:06 
Offline
Etabliertes Mitglied
Etabliertes Mitglied

Registriert: 05.05.2005 21:32
Beiträge: 158
Hallo,

ich versuche in eine Vorlage-generierte Nachricht, Anführungszeichen einzubauen, allerdings gelingt es mir nicht.
Hier steht
"Strings mit Anfühungszeichen, wie sie z.B. für BENENNE EINHEIT "Hugo" nötig sind, werden durch den senkrechten Balken (Pipe) zu Beginn und Ende des von Hochkommas eingeschlossenen Strings erzeugt und bei der Ausgabe als Befehl in eine Zugvorlage in die Anführungszeichenversion umgewandelt."

Hier mein Versuch:
#forever { BOTSCHAFT REGION |'Willkommen in '+region.Name+', wir grüßen Euch!'| }

Hier meine Fehlermeldung:
FEHLER: Ausdruck ungueltig '|'Willkommen in '+region.Name+', wir grüßen Euch!'|': Syntaktischer Fehler.

Kann jemand helfen?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
Webhosting by sunrise design ohg