etoa / etoa-gui

EtoA Game GUI
https://etoa.ch
GNU Affero General Public License v3.0
10 stars 7 forks source link

EMP - Abreissen der FloKo macht EMP wirkungslos #150

Closed lwihler closed 4 years ago

lwihler commented 5 years ago

Bug Report

Es gab einen erfolgreichen EMP-Angriff, der die Flottenkontrolle lahmgelegt hat. Nach einem erfolgten Abriss kann ich meine Flotte trotzdem starten, da bei Flottenkontrolle 0 eine Flotte vom Planeten starten kann Das Problem ist nur beim Rigelia-Bomber vorhanden, da die Raketen Gebäude nur kurzfristig lahmlegen und die Zeit da nicht ausreichen würde, das ganze Gebäude abzureissen.

Steps to Reproduce

Actual Results

(Hab ich leider nicht^^) **Expected Results** Ein EMP, der die Flottenkontrolle lahmgelegt hat, sollte jeglichen Wegflug verhindern, selbst wenn die Flottenkontrolle abgerissen wurde **Possible Solutions** Wenn ein Gebäude durch ein EMP lahmgelegt wird, könnte der 'Abreissen' Button beim Gebäude verschwinden, also deaktiviert werden. Alternativ würde ein erfolgreicher EMP Angriff nicht das Gebäude per se deaktivieren, sondern die dazugehörigen Aktionen, sprich das "Flotte starten" (sämtliche Flottenaktionen)
A-A-G commented 5 years ago

Da das Spiel ganz schön einschläft ohne die Bomber, wäre es schön, wenn es hier weiter geht.

Gut wäre natürlich, wenn auch bei Floko 0 nach getDeactivated(...) geschaut werden würde. In load(..) "AND l.buildlist_current_level>'0'" anzupassen würde wohl zu viel Änderungen erfordern, da ja teilweise nur geschaut wird, was geladen wurde. Eine nicht allzu schöne Lösung wäre eine entsprechende Datenbankabfrage direkt in getDeactivated(...).

Soll das Abreißen einfach mit deaktiviert werden, müsste nur in checkDemolishable($bid) z.B. vor dem Kostencheck noch $this->getDeactivated($bid) geprüft werden?

So ungefähr zumindest. Schwer zu testen.

coo1ness commented 5 years ago

Wenn man einfach nur das Abreißen deaktiviert wird das Problem nicht komplett gelöst da man dann einfach abreißen kann während die Bomber noch fliegen. Denke eine Datenbankabfrage wäre nicht schön aber vermutlich die effektivste Methode um das Problem zu lösen.

coo1ness commented 5 years ago

@A-A-G anscheinend wurde deine Nachricht nur per Mail verschickt aber nicht im Ticket hier aktualisiert. Von daher poste ich es:

Abreißen während die Bomber fliegen kannst Du in beiden Fällen. Erst nach einem erfolgreichen Angriff sollte in der DB stehen, was deaktiviert wurde. Ob es sinnvoll ist das Abreißen bereits zu deaktivieren während die Bomber unterwegs sind, weiß ich nicht. Dann hat man immer 1% Bomber auf alle Planeten fliegen?

A-A-G commented 5 years ago

Ne, hatte das wieder gelöscht weil das nicht ganz zuende gedacht war. ;) Wobei es auch nicht so verkehrt war... Bin heute nicht so ganz fit...

Die Datenbankabfrage wäre nur wirklich besser, wenn auch Floko 0 deaktiviert werden kann. Das funktioniert aber nicht, da nur Gebäude > 0 deaktiviert werden. Somit kann man durch Abreißen während des Angriffs bei beiden Lösungen der Stilllegung entgehen. Finde ich jetzt als "Feature" auch nicht so schlimm... Will man das Abreißen verhindern indem man die Flotten prüft, dann gibt es die Möglichkeit mit 1% Speed Bomberangriffen. Habe gerade keine gute Idee wie man in empBuilding(...) das Query anpassen müsste, damit Floko auch bei 0 aber die anderen Gebäude nur bei > 0 deaktiviert werden. Sollte aber gut zu ändern sein.

coo1ness commented 5 years ago

Du warst schon auf dem richtigen Weg. Spricht irgendwas dagegen auch Level 0 Gebäude zu deaktivieren?

Das Deaktivieren der Abrissfunktion schon während dem Flug finde ich aber keine schöne Lösung auch wenn ich da keine wirkliche Missbrauchsgefahr sehe. Abreißen wird ja nur zum Umgehen von Deaktivierungen genutzt, oder?

PS Wenn du willst kann ich dich in unsere Slack-Gruppe einladen, dann geht die Kommunikation schneller.

A-A-G commented 5 years ago

Ja, außer um die Deaktivierungen zu umgehen gibt es da zumindest keinen Grund für, den ich kenne.

Musste ein wenig über die Level 0 Gebäude nachdenken. An sich spricht nichts dagegen. Beim Markt finde ich gut, dass dieser dann nicht noch nachträglich gebaut werden kann und alles in den Markt gepackt wird. Das wäre ja Lösung zwei, falls man nur die Floko ändert. Bei RH und VA hatte man halt bisher bessere Wahrscheinlichkeiten, wenn die auf 0 waren. Aber das ist eh nur sehr selten der Fall...

Slack kenne ich nicht, aber wollte ich mir eh schon länger mal anschauen. ;) Wobei ich es auch nicht verkehrt finde, wenn man für Issues den Issuetracker nutzt und so etwas Transparenz zeigt. ;)

coo1ness commented 5 years ago

Ich bin mir nicht mehr ganz sicher aber ich glaube mich zu erinnern, dass ein Gebäude erst gebaut sein muss um in der Tabelle Buildlist zu erscheinen. D.h. ein Gebäude, welches noch nie gebaut wurde, kann nicht deaktiviert werden. Ein Gebäude, welches erst gebaut und dann wieder abgerissen wurde hingegen schon. Allerdings werden zur Zeit nur Gebäude höher als Level 0 auf EMP geprüft.

Meiner Meinung nach müsste man 2 Sachen machen:

  1. im Eventhandler die EMP-Funktion anpassen, dass sie auch auf Level 0 zielt
  2. in buildlist.class.php die Funktion load() erweitern damit auch Level 0 Gebäude geprüft werden.

Für Slack muss ich deine E-Mail haben damit ich eine Einladung schicken kann.

A-A-G commented 5 years ago

Das ein Gebäude, dass noch nie gebaut wurde nicht deaktiviert werden kann ist ja in Ordnung, oder?

Für 1. müsste es ja dann genügen, in Entity::empBuilding() die Zeile "query << " AND buildlist_current_level > 0 "; rauszunehmen, oder?

Ob es geschickt ist, für 2. die load() Funktion zu erweitern kann ich nicht einschätzen. Teilweise wird ja auf die Existenz eines Gebäudes > 0 geprüft, indem einfach geschaut wird ob es geladen wurde? Dann würden aber alle Gebäude auch mit 0 geladen. Was natürlich nicht ganz so schlimm ist, wenn nur Gebäude in der Tabelle stehen, die bereits irgendwann gebaut wurden. So viel dürfte ja nicht abgerissen werden? Könnte dennoch zu ungewollten Bugs führen. Spricht irgendwas gegen eine DB Abfrage in getDeactivated() ?

coo1ness commented 5 years ago

Jo ist es.

Ich würde die Abfrage drin lassen und >= daraus machen. Es gab bereits Bugs mit negativen Gebäudelevel.

Ich denke nicht, dass es da zu irgendwelchen Problemen kommt aber da die Funktion an vielen Stellen genutzt wird kann ich es nicht zu 100% ausschließen. Die SQL-Abfragen würde ich gerne zentral in der load-Funktion halten, von daher würde ich in dem Fall vorschlagen wir machen aus der if-Abfrage eine switch-case und steuern es so.

A-A-G commented 5 years ago

Das klingt doch gut. Wird das noch während der laufenden Runde geändert?

coo1ness commented 5 years ago

Du kannst gern einen PR mit den Änderungen erstellen, ich schau es mir dann an und merge bzw teste es. Danach kann ich es in die Runde deployen.

coo1ness commented 5 years ago

Ich habe wegen dem Thema nochmals mit den Admins geredet und die sind der Meinung, dass die Änderung zu extrem für die laufende Runde wäre. Für R19 müssen wir es erstmal so lassen mit der Änderung, dass EMP Aktionen auch das Abreisen von dem deaktiviertem Gebäude blockieren. Für spätere Runden könne wir die Idee von diesem Ticket umsetzen. Um es nicht allzu kompliziert zu machen würde es sich anbieten, hier eine Konfigurationsmöglichkeit ins Tool einzubauen.