Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
fixed_cost = feste Betriebskosten
#31
Es war schon dein Patch, nur wurde bisher fixed cost nie abgefragt, sondern die maintenace aus dem übergeordneten
obj_desc_transport_related_t, die im übrigen bereits ein sint32 war. Ich habe nur den Wert in desc vergessen auf sint32 zu ändern.

Und noch eine zweite new_month Routine nur für die fixen Kosten ist ganz schlecht für die Wartbarkeit. Das fällt einem später auf die Füße. Wenn es schlecht aufgeläste abhängigkeiten gibt (Linienmonat muss vor Convoimonat aufgerufen werden), dann muss dass halt so sein. Hacks sind immer eine schlechte Lösung auf lange Sicht.

Wegen jahresgewinn schaue ich mal. Sollte in r9133 alles behoben sein.
Zitieren
#32
(13-06-2020, Saturday-16:02:44 )prissi schrieb: Es war schon dein Patch, nur wurde bisher fixed cost nie abgefragt, sondern die maintenace aus dem übergeordneten
obj_desc_transport_related_t, die im übrigen bereits ein sint32 war. Ich habe nur den Wert in desc vergessen auf sint32 zu ändern.

Und noch eine zweite new_month Routine nur für die fixen Kosten ist ganz schlecht für die Wartbarkeit. Das fällt einem später auf die Füße. Wenn es schlecht aufgeläste abhängigkeiten gibt (Linienmonat muss vor Convoimonat aufgerufen werden), dann muss dass halt so sein. Hacks sind immer eine schlechte Lösung auf lange Sicht.

Ich hab mich nicht getraut die Reihenfolge zu ändern, weil ich da die Folgen nicht überblicke.

Es fehlt noch was aus meinem Patch. Convois müssen nicht auf einer Strecke stehen.
Deshalb :
Zitat:waytype_t wtyp = ignore_wt;
if(schedule_t* s = get_schedule())
{
wtyp = s->get_waytype();
}
else
{
wtyp = fahr[0]->get_waytype();
}

get_owner()->book_running_costs( sum_fixed_costs, wtyp);

Sonst gibt es Absturz. Also get_schedule()->get_waytype() zeigt gelegentlich ins leere.
Zitieren
#33
jahresgewinn += sum_fixed_costs;
Zitieren
#34
Zitat:--- depot_frame.cc (Revision 9128)
+++ depot_frame.cc (Revision 9130)
@@ -1157,7 +1157,7 @@

txt_convoi_value.printf("%s %8s", translator::translate("Restwert:"), buf );

txt_convoi_cost.clear();
- if(  sint64 fix_cost = welt->scale_with_month_length((sint64)cnv->get_fix_cost())  ) {
+ if(  sint64 fix_cost = cnv->get_fixed_cost()  ) {
money_to_string(  buf, (double)fix_cost / 100.0, false );
txt_convoi_cost.printf( translator::translate("Cost: %8s (%.2f$/km %.2f$/m)\n"), buf, (double)cnv->get_running_cost()/100.0, (double)fix_cost/100.0 );

Was soll diese Änderung? Ich empfehle sie zurück zu nehmen.

Merke: get_fixed_cost != get_fix_cost
Zitieren
#35
Der Wert heißt get_fixed_cost in desc. Warum soll die Routine für convois dann get_fix_cost heißen? In deinem Patch war get_fix_cost und get_fixed_cost beides, was ziemlich verwirrt (mich jedenfalls).

Auf Englisch heißt es "fixed cost".

Den Rest habe ich repariert, wobei Convois im Prinzip auch keine Fahrzeuge haben koennen. Danke.
Zitieren
#36
ok
if(  sint64 fix_cost = welt->scale_with_month_length((sint64)cnv->get_fix_cost())  ) {

ist original coding

aber was ist get_fix_cost?


Zitat:sint32 convoi_t::get_fixed_cost() const
{
sint32 fix_cost = 0;
for(  unsigned i = 0;  i < get_vehicle_count();  i++  ) {
fix_cost += welt->scale_with_month_length( fahr[i]->get_desc()->get_fixed_cost() );
}
return fix_cost;
}

*UPS*
Die Änderung habe ich übersehen, Verzeihung.

Wobei ich den Unterschied im Namen ganz nützlich fand, zur Unterscheidung zum vehiclel damit man nicht versehentlich die Funktion aus der  falschen Klasse erwischt.
Nicht meine Erfindung. Meine Änderung hier war Hilfsvariable umbenennen running_cost zu fix_cost entsprechend dem Funktionsnamen.

Zitat:wobei Convois im Prinzip auch keine Fahrzeuge haben koennen
Ist bei meinen Tests nicht aufgetreten. Hatte aber den Verdacht, deshalb schon "waytype_t wtyp = ignore_wt;"
Was ich ganz nett finde an der Konstruktion: Wenn man Eisenbahn Fahrzeuge als Straßenbahn fährt wird das zu den Kosten der Straßenbahn gebucht.
Da gehört das auch hin wie ich finde.

So dann passt das vorerst mal. Ich werde mal fleißig testen.

*UPS*

sint64 convoi_t::get_fixed_cost() const
{
sint64 fix_cost = 0;
FOR(array_tpl<vehicle_t*>,const v,fahr)
for(  unsigned i = 0;  i < get_vehicle_count();  i++  ) {
fix_cost += welt->scale_with_month_length( v->get_desc()->get_fixed_cost() );
}
return fix_cost;
}

gehört das Rote nicht gelöscht?
Zitieren
#37
Manchmal hasse ich C, dass da nicht Klammern als obligatorisch anschalten kann. Danke.
Zitieren
#38
wenn man im Depot ein Fahrzeug auswählt um es in den Konvoi zu stellen

Program terminated with signal SIGSEGV, Segmentation fault.
#0  obj_desc_transport_related_t::get_maintenance (this=<optimized out>) at boden/wege/../../descriptor/obj_base_desc.h:89
89              sint32 get_maintenance() const { return maintenance; }


#0  obj_desc_transport_related_t::get_maintenance (this=<optimized out>) at boden/wege/../../descriptor/obj_base_desc.h:89
#1  vehicle_desc_t::get_fixed_cost (this=<optimized out>) at descriptor/vehicle_desc.h:250
#2  convoi_t::get_fixed_cost (this=<optimized out>) at simconvoi.cc:3241
#3  0x00000000004b8cc9 in depot_frame_t::update_data (this=this@entry=0x1b410820) at gui/../tpl/quickstone_tpl.h:250
#4  0x00000000004b9a5e in depot_frame_t::build_vehicle_lists (this=0x1b410820) at gui/depot_frame.cc:783
#5  0x000000000066745e in depot_t::update_win (this=this@entry=0x1a2b79c0) at simdepot.cc:598
#6  0x00000000006a6848 in tool_change_depot_t::init (this=<optimized out>, player=<optimized out>) at simtool.cc:7396
#7  0x00000000006c142d in karte_t::local_set_tool (this=this@entry=0x2cf8a90, tool_in=tool_in@entry=0x19598b0, player=player@entry=0x18450e10) at simworld.cc:3045
#8  0x00000000006c181c in karte_t:Confusedet_tool (this=this@entry=0x2cf8a90, tool_in=tool_in@entry=0x19598b0, player=0x18450e10) at simworld.cc:3030
#9  0x0000000000665ab6 in depot_t::call_depot_tool (this=0x1a2b79c0, tool=<optimized out>, cnv=..., extra=0x16c3b308 "BR76-0") at simworld.h:1793
#10 0x00000000004b4c6f in depot_frame_t::image_from_storage_list (this=this@entry=0x1b410820, image_data=0x1a285700) at gui/../tpl/quickstone_tpl.h:188
#11 0x00000000004bac35 in depot_frame_t::action_triggered (this=0x1b410820, comp=0x1b4125d8, p=...) at gui/../tpl/vector_tpl.h:233
#12 0x000000000049bbd8 in gui_action_creator_t::call_listeners (v=..., this=0x1b4125d8) at gui/components/gui_action_creator.h:32
#13 gui_image_list_t::infowin_event (this=0x1b4125b8, ev=<optimized out>) at gui/components/gui_image_list.cc:34
#14 0x00000000004a04af in gui_scrollpane_t::infowin_event (this=0x1b412c58, ev=<optimized out>) at gui/components/gui_scrollpane.cc:168
#15 0x00000000004a13ee in gui_tab_panel_t::infowin_event (this=0x1b411d20, ev=<optimized out>) at gui/components/../../tpl/slist_tpl.h:363
#16 0x0000000000497005 in gui_container_t::infowin_event (this=this@entry=0x1b414a20, ev=ev@entry=0x7ffe88a0fe20) at gui/components/gui_container.cc:200
#17 0x00000000004db030 in gui_frame_t::infowin_event (this=this@entry=0x1b410820, ev=ev@entry=0x7ffe88a0fed0) at gui/gui_frame.cc:132
#18 0x00000000004b2f6f in depot_frame_t::infowin_event (this=0x1b410820, ev=0x7ffe88a0fed0) at gui/depot_frame.cc:1445
#19 0x000000000053fe79 in check_pos_win (ev=ev@entry=0x7ffe88a10110) at gui/simwin.cc:1521
#20 0x000000000068231e in interaction_t::process_event (this=this@entry=0x116275c0, ev=...) at siminteraction.cc:366
#21 0x00000000006829a0 in interaction_t::check_events (this=0x116275c0) at siminteraction.cc:439
#22 0x00000000006d5423 in karte_t::interactive (this=this@entry=0x2cf8a90, quit_month=quit_month@entry=2147483647) at simworld.cc:6746
#23 0x000000000068b67e in simu_main (argc=argc@entry=2, argv=argv@entry=0x7ffe88a125c8) at simmain.cc:1461
#24 0x0000000000712d50 in sysmain (argc=2, argv=0x7ffe88a125c8) at sys/simsys.cc:1098
#25 0x0000000000730323 in main (argc=<optimized out>, argv=<optimized out>) at sys/simsys_s2.cc:790
Zitieren
#39
Das ist zu kompliziert gedacht. Den Wert haben wir doch.

einfach:
sint64 convoi_t::get_fixed_cost() const
{
return -sum_fixed_costs;
}

das gleiche gilt für: convoi_t::get_running_cost() gleich ein paar Zeilen weiter unter
Zitieren
#40
Im Finanzen Fenster werden die Fixed_cost übrigens unter Instandhaltung gebucht.

Das liegt vermutlich daran:
Zitat:add_player_t::add_maintenance( get_owner(), info->get_maintenance(), info->get_waytype() );
Die Zeilen mit "add_maintenance" gehören raus, das kommt noch 2x vor.

Aber warum werden sie nicht unter Betriebskosten gebucht? Eigentlich sollte sie ja dann doppelt sein.
Zitat:get_owner()->book_running_costs( sum_fixed_costs, get_schedule()->get_waytype());
Die werden anscheinend im weiteren Verlauf der Monatsende Routine wieder gelöscht.

Ich glaube deshalb habe ich das Einbuchen an das Ende der "Monatsende" gestellt.

Edit: werden schon gebucht, am Monatsende und dann sofort verschoben.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste