Results 1 to 10 of 10

Thread: Flugkosten

  1. #1
    Senior Member
    Join Date
    Nov 2011
    Posts
    150

    Flugkosten

    Wie kann ich die Flugkosten in einem Sektor abfragen? Und falls das nicht geht:
    Wie kann ich herausfinden, oder der sich Sektor im normalen, leeren oder "total leeren" Raum befindet (Verdoppelung/Verdreifachung der Flugkosten)?

    lg
    Elchi
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

  2. #2

    Re: Flugkosten

    Willst du das Feld in dem du dich befindest abfragen, oder ein x-beliebiges nebenan?

  3. #3
    Senior Member
    Join Date
    Nov 2011
    Posts
    150

    Re: Flugkosten

    Jedes x-beliebige, ich möchte nämlich einen Navigationssystem proggen.
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

  4. #4

    Re: Flugkosten

    Also du könntest dir über den CSector die Koords nehmen und dann mit EGalaxyMapItemType das Feld ermitteln. Dann haste dir ne Liste erstellt mit den Einflugkosten und könntest das Regeln. So könntest du ggf. aufn grünen Zweig kommen. Das wäre dann dein zweiter Weg den du vorgeschlagen hast.

  5. #5
    Senior Member
    Join Date
    Nov 2011
    Posts
    150

    Re: Flugkosten

    Deswegen meine zweite Frage:
    Kann ich irgendwie einfach gucken ob ich mich im leeren Raum befinde?
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

  6. #6

    Re: Flugkosten

    Schiffsobjekt heißt jetzt mal Ship.


    Ship.GalaxyMapItem.Type

    müsste dir eigentlich den Typ des aktuellen Feldes ausgeben. (istn Enum --> http://game.stne.net/objectexplorer?p=E ... apItemType )

    ansonsten

    Ship.Sector.Type --> biste wieder bei dem Enum von oben.


    Die würden mir auf anhieb einfallen.

  7. #7

    Re: Flugkosten

    für jeden der wissen will wie die flugkosten unter 0 und die flugreichweite berechnet werden

    falls du oder jeder andere die flugkosten auch im negativen gondelbereich(mit overdrive) berechnen willst hier sind die funktionen so wie sie auch in stne verwendet werden
    hab sie nur etwas verändert, sodass sie direkt im scriptsystem verwendet werden können

    kleine Info zur CMyShip-Klasse
    CMyShip.Gondola sind die aktuellen Gondeln
    CMyShip.FlightRange is die max Reichweite in abhängigkeit der energie/eps
    CMyShip.Definition.FlightRange sind die max Gondeln

    man kann ganz einfach überprüfen ob der overdrive aktiviert bzw nutzbar ist
    und zwar wenn die reichweite größer ist als die aktuellen Gondeln

    mit dieser funtkion können die flugkosten berechnet werden wenn man x gondeln bei y gondeln übrig verwendet werden, dies funtkioniert sowohl mit als auch ohne overdrive

    Funktion wird so verwendet:
    var kosten as double = calcGondelnBenutzenFlugkostenFaktor(gondel, gondelnBenutzen, gondelMax) * flugkostenDesSchiffs;
    - gondel sind die aktuellen gondeln
    - gondelnBenutzen sind die anzahl der gondeln die du benutzen willst (wenn du zb 5 normale felder fliegst muss da 5 rein und wenn du zb durch 2 normale und ein dünnen deut fliegst kommt da 4 rein)
    achtung in orbit ein-/ausfliegen kosten nur noch nen 20stel der gondelkosten also normaler plani 0.05 , klasti 0.10 und grasti 0.15
    wieviele gondeln man insgesamt verwenden kann kriegt man ganz einfach durch die max reichweite raus also CMyShip.FlightRange
    - gondelMax sind die max gondeln

    falls man ein schiff im traktor hat:
    var kosten as double = calcGondelnBenutzenFlugkostenFaktor(gondel, gondelnBenutzen * gondelnVerbrauchPerFeld , gondelMax) * (flugkostenDesSchiffs + flukostenSchiffimTraktor) / gondelnVerbrauchPerFeld;
    - gondelnVerbrauchPerFeld = (slotsSchiff + slotSchifimTraktor) / slotsSchiff
    auch wenn man normal sieht das man weniger gondeln/max gonden mit traktor hat, dies ist in wahrheit nicht so sondern es werden einfach mehr gondeln pro feld verbraucht

    Beispiel 1:
    Schiff mit 10/60 gondeln soll 20 gondeln verbrauchen und hat 0.6 e flugkosten (sind werte von nem koloschiff falls jemand das mit nem schiff nachprüfen will)

    var kosten as double = calcGondelnBenutzenFlugkostenFaktor(10, 20, 60) * 0.6;
    WriteLine(kosten);//<- da wird genau 19,4202815282965 rauskommen

    Beispiel 2:
    Schiff mit 60/60 gondeln soll 115 gondeln verbrauchen und hat 0.6 e flugkosten (115 is max reichweite eines normalen vollem koloschiffs)

    var kosten as double = calcGondelnBenutzenFlugkostenFaktor(60, 115, 60) * 0.6;
    WriteLine(kosten);//<- da wird genau 148,312338408503 rauskommen

    Beispiel 3:
    Schiff mit 50/60 gondeln soll 6 gondeln verbrauchen und hat 0.6 e flugkosten (um mal nen beispiel ohne overdrive zu zeigen)

    var kosten as double = calcGondelnBenutzenFlugkostenFaktor(50, 6, 60) * 0.6;
    WriteLine(kosten);//<- da wird genau 3,6 rauskommen



    als letztes is da noch eine funktion zur berechnung der max flugreichweite die brauchst du hier aber nicht, die is für die leute die zb ausrechnen wollen wie weit reicht ihr schiff mit tritkit oder bestimmten item/avatar was schiffswerte verändert ohne diese zu installieren oder um auszurechnen wie weit ihr shiff mit x energie/eps noch kommen wird
    verwendung:
    var reichweite as double = calcMaxRange(gondeln, gondelnVerbrauchPerFeld, energie, flugkosten, gondelMax);
    - gondeln sind die aktuellen gondeln
    - gondelnVerbrauchPerFeld dies wird für den traktorstrahl verwendet um die reichweite mit aktiviertem traktor zu berechnen (sonst immer 1)
    wenn mit traktor is gondelnVerbrauchPerFeld = (slotsSchiff + slotSchifimTraktor) / slotsSchiff und die flugkosten sind dann die flugkosten der beiden schiffe zusammen
    - energie eps/energie je nachdem wovon weniger vorhanden ist
    - flugkosten flugkosten des shiffs
    - gondelMax sind die max gondeln


    Code:
    Var KA As Double = 0.25;//konstanten
    Var KC As Double = 0.25;
    Var KB As Double = 1 - (KA + KC);
    Var N As Double = 2;
    
    Function calcGondelnBenutzenFlugkostenFaktor(gondel As Double, gondelnBenutzen As Double, gondelMax As Double) As Double
    {
      If (gondel > 0)
      {
        If (gondelnBenutzen > gondel)
        {
          Return gondel + calcGondelnBenutzenFlugkostenFaktorAlt(0, gondelnBenutzen - gondel, gondelMax);
        }
        Else
        {
          Return gondelnBenutzen;
        }
      }
      Else
      {
        Return calcGondelnBenutzenFlugkostenFaktorAlt(gondel, gondelnBenutzen, gondelMax);
      }
    }
    
    Function calcGondelnBenutzenFlugkostenFaktorAlt(gondel As Double, gondelnBenutzen As Double, gondelMax As Double) As Double
    {
      Var x As Double = Math.Max(N, gondelMax) - gondel + gondelnBenutzen;
      Var y As Double = (x - 1) / Math.Max(1, gondelMax - 1);
      Var faktor As Double = KA * y * y * x + KB * y * x + KC * x;
      x = Math.Max(N, gondelMax) - gondel;
      y = (x - 1) / Math.Max(1, gondelMax - 1);
      faktor = faktor - (KA * y * y * x + KB * y * x + KC * x);
      Return faktor;
    }
    
    Function calcMaxRange(gondeln As Double, gondelnVerbrauchPerFeld As Double, energie As Double, flugkosten As Double, gondelMax As Double) As Double
    {
      Var x As Double = 0;
      Var xn As Double = 1;
      Var b As Double;
      Var c As Double;
      Var d As Double;
      Var g As Double;
      Var y As Double;
      Var gondel As Double = gondeln;
      Var gondelverbrauch As Double = gondelnVerbrauchPerFeld;
      Var energiefaktor As Double = energie / (flugkosten / gondelverbrauch);
      
      Var i As Integer;
      
      //if (overdrive)   <- man kann per script nicht abrufen ob overdrive aktiviert/erforscht ist
      If(True) 
      {
        g = Math.Max(1, gondelMax - 1);
        y = energiefaktor;
        If(gondel > 0)
        {
          y = y - gondel;
        }
        If(gondel < 0)
        {
          y = y + calcGondelnBenutzenFlugkostenFaktorAlt(Math.Max(N, gondelMax), Math.Max(N, gondelMax) - gondel, gondelMax);
        } Else {
          y = y + calcGondelnBenutzenFlugkostenFaktorAlt(Math.Max(N, gondelMax), Math.Max(N, gondelMax), gondelMax);
        }
        b = (KB / KA) * g - 2;
        c = (KC / KA) * g * g - (KB / KA) * g + 1;
        d = (0 - g) * g * (y / KA);
        x = (0 - 50);//<- der scriptparser erkennt keine negativen zahlen
        For (i = 0 To 50)
        {
          xn = x - (x * x * x + b * x * x + c * x + d) / (3 * x * x + b * x + c);
          If (Math.Abs(x - xn) < 0.00005)
          {
            x = xn;
            Exit For;
          }
          x = xn;
        }
        If(gondel < 0)
        {
          x = (x - (Math.Max(N, gondelMax) - gondel)) / gondelverbrauch;
        } Else {
          x = (x - Math.Max(N, gondelMax)) / gondelverbrauch;
        }
      }
      If (gondel > 0)
      {
        If (energiefaktor > gondel)
        {
          x = x + (gondel / gondelverbrauch);
        }
        Else
        {
          x = energiefaktor / gondelverbrauch;
        }
      }
      Return x;
    }

  8. #8
    Senior Member
    Join Date
    Nov 2011
    Posts
    150

    Re: Flugkosten

    ja vielen Dank, meinte aber eig. die Bestimmung der Voidzonen

    lg
    Elchi
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

  9. #9

    Re: Flugkosten

    Var map As New CHtmlGalaxyMap(SMap.Default, SPoint.FromString("522|489"), 1, 1);
    WriteLine(map.item(522, 489).HexColor);

    Script gestartet.
    #555555
    Script beendet.

    heißt wenn die farbe der umrandung #555555 ist steht man im void
    im void fliegen kostet doppelte gondeln
    nen normaler sektor hat #333333
    da voidzonen auch andere farben haben können solltest du nur überprüfen ob es nen normaler sektor also hexcolor #333333 ist alles andere is void

    ps. die CHtmlGalaxyMap kann man auch anzeigen lassen

    Code:
    Var map As New CHtmlGalaxyMap(SMap.Default, SPoint.FromString("522|489"), 1, 1);
    if(map.item(522, 489).HexColor = "#333333") {
    //normaler sektor
    } else {
    //void
    }

  10. #10
    Senior Member
    Join Date
    Nov 2011
    Posts
    150

    Re: Flugkosten

    stimmt, danke

    lg
    Elchi
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •