Sry Kanibal, mir kam was wichtiges dazwischen. Ich versuche dich morgen oder irgendwo in o. g. Channels zu erwischen. Danke schonmal im Voraus!
Edit: 18:18 Uhr und 20:20 Uhr. :>
Wenn's nicht dauernd crashen würde, würd ich es täglich spielen! \o/
Hab mir den Fehler mal angeschaut: Der Engine-Crash kann immer dann auftreten, wenn ein Objekt den Inhalt seines Containers bearbeitet während er gelöscht wird. Ein Beispiel:
Man hat ein Container-Objekt container und zwei Inhaltsobjekte contents1 und contents2. contents1 hat in seinem Script einen Destruction()
-Callback der das contents2-Objekt aus dem Container herausholt:protected func Destruction() { FindObject(CTS2)->Exit(); }
Das Szenarioscript sieht wie folgt aus:func Initialize()
{
var container = CreateObject(CTNR, 0, 0, NO_OWNER);
// Reihenfolge muss manchmal vertauscht werden
container->CreateContents(CTS1);
container->CreateContents(CTS2);
container->RemoveObject();
}
Dann passiert Folgendes:
1) C4Object::AssignRemoval()
wird für container aufgerufen, es ist also this==container.
2) Darin wird die verkettete Liste der Inhaltsobjekte durchlaufen und die Objekte entfernt, indem C4Object::AssignRemoval()
rekursiv für diese Objekte aufgerufen wird.
3) clnk
zeigt jetzt auf das Contents-Listenelement für contents1 und next
auf das für contents2.
4) Man befindet sich also wieder in C4Object::AssignRemoval()
, diesmal aber für this==contents1.
5) Darin wird der Destruction()
-Scriptcallback aufgerufen.
6) Destruction()
ruft Exit(contents2)
auf, wodurch C4ObjectList::Remove(contents2)
ausgeführt wird.
7) Dort wird das Element für contents2 aus der Contents-Liste entfernt und freigegeben.
8) Wieder zurück in C4Object::AssignRemoval()
für this==container, aber diesmal im nächsten Schleifendurchlauf. Hier wird nun clnk=next
ausgeführt.
9) next
wurde in 3) auf das Contents-Listenelement von contents2 gesetzt. In 7) wurde es aber freigegeben!
10) Ab hier sollte nun irgendwann die Engine abstürzen, da versucht wird, den Zeiger auf contents2 aus dem freigegebenen Listenelement zu lesen.
Um den Fehler zu beheben muss die Schleife zum Entfernen der Inhaltsobjekte bei jedem Durchlauf wieder von vorne anfangen (da die Liste ja durch Scriptcallbacks verändert worden sein könnte):// Kill contents
C4Object *cobj; C4ObjectLink *clnk,*next;
while ((clnk = Contents.First) && (cobj = clnk->Obj))
{
next = clnk->Next;
if (fExitContents)
{
cobj->Exit(x, y);
}
else
{
Contents.Remove(cobj);
cobj->AssignRemoval();
}
}
Eine andere Lösung (zumindest für das Szenario) ist, den Scriptbug zu beheben, der zu dem Enginefehler führt: Im Szenarioscript wird beim Relaunch nicht geprüft, ob der aktuelle Spieler noch lebt. Das lässt sich beheben indem manif (!GetPlayerName(iPlr)) return;
in die erste Zeile von RelaunchPlayer()
schreibt.
Ui, dass ich damals sowas fundamentales vergessen hab… :sad:
Gibt es noch mehr konkrete Änderungswünsche?
Ich würde das ganze dann mal updaten, da ja Nachfrage zu bestehen scheint.
\o/
Könnt's ja demnächst nochmal spielen aber bisher ist das Game echt verdammt nice. :o
Edit:
Hab früher immer gern mit dem Raketenwerfer gespammt, weil der so imba ist und man nicht mal stirbt, wenn man mit dem Ding auf den Boden unter sich schießt, wenn dabei ein anderer Spieler getötet wird.
Und ab und zu kann man den Schnee nicht weggaben und ich hab kA, warum. :s
Wie sieht's aus?
Hab aber ein paar BugsHazard_Weapons1.6.c4d…
[…]
Raketen (MIAP) überladen.
Raketen (MIAM) überladen.
WARNING: Unexpected value "CanDig"! (in section "DefCore", after line 0, Hazard_Weapons1.6.c4d\HazardClonk.c4d\DefCore.txt)
HazardClonk (HZCK) überladen.
Killstatistik (HHKS) überladen.
[…]
48 Definitionen geladen.
Kasernenstadt 2v1.9.6.c4s…
Spielregelwahl (CHOS) überladen.
ERROR: '}' expected, but found identifier (in Damage, Kasernenstadt 2v1.9.6.c4s\GasBottle.c4d\Script.c:30:13)
Gasflasche (GSBO) überladen.
Ein neues Objekt (ENAM) überladen.
Ein neues Objekt (GSAM) überladen.
6 Definitionen geladen.
ERROR: direct object call: function ConDesc not found (in ContextUseEquipment, Hazard.c4d\Libraries.c4d\Functionalities.c4d\UseGear.c4d\Script.c:83:34)
ERROR: direct object call: function ConUse not found (in UseEquipment, Hazard.c4d\Libraries.c4d\Functionalities.c4d\UseGear.c4d\Script.c:167:21)
ERROR: direct object call: function ConDesc not found (in ContextUseEquipment, Hazard.c4d\Libraries.c4d\Functionalities.c4d\UseGear.c4d\Script.c:83:34)
(as #appendto/#include to Hazard_Weapons1.6.c4d\HazardClonk.c4d\Script.c)
ERROR: direct object call: function ConUse not found (in UseEquipment, Hazard.c4d\Libraries.c4d\Functionalities.c4d\UseGear.c4d\Script.c:167:21)
(as #appendto/#include to Hazard_Weapons1.6.c4d\HazardClonk.c4d\Script.c)
WARNING: Error getting Action TimeOver: StartCall function 'BlowUp' (Hazard_Weapons1.6.c4d\Weapons.c4d\GrenadeLauncher.c4d\Splitgrenade.c4d\Script.c)
C4AulScriptEngine linked - 57395 lines, 1 warning, 4 errors
[…]
Erstellung der Landschaft…
ERROR: Object loading(section "Object", after line 61): Objekt vom Typ GT8D nicht platziert.
ERROR: Object loading(section "Object", after line 124): Objekt vom Typ GT8D nicht platziert.
ERROR: Object loading(section "Object", after line 144): Objekt vom Typ GT8D nicht platziert.
ERROR: Object loading(section "Object", after line 184): Objekt vom Typ GT8D nicht platziert.
ERROR: Object loading(section "Object", after line 222): Objekt vom Typ GT8D nicht platziert.
[…]
Spiel gestartet.
Spielerbeitritt: [FP] DManstrator
ERROR: expression expected, but found end of file (eval in Hazard.c4d\Structural.c4d\Furniture.c4d\Lights.c4d\AlertLight.c4d\Script.c:0:0)
ERROR: expression expected, but found end of file (eval in Hazard.c4d\Structural.c4d\Furniture.c4d\Lights.c4d\AlertLight.c4d\Script.c:0:0)
ERROR: expression expected, but found end of file (eval in Hazard.c4d\Structural.c4d\Furniture.c4d\Lights.c4d\AlertLight.c4d\Script.c:0:0)
ERROR: expression expected, but found end of file (eval in Hazard.c4d\Effects.c4d\Light.c4d\Script.c:0:0)
ERROR: expression expected, but found end of file (eval in Hazard.c4d\Effects.c4d\Light.c4d\Script.c:0:0)
[FP] DManstrator wählt jetzt die Spielkonfiguration, bitte noch etwas Geduld
[…]
ERROR: Object call: target is zero!
by: ResetCH() (obj Marik #2174) (Hazard_Weapons1.6.c4d\Weapons.c4d\Weapon.c4d\HazardAppend.c4d\Script.c:220)
by: UpdateCharge() (obj Marik #2174) (Hazard_Weapons1.6.c4d\Weapons.c4d\Weapon.c4d\HazardAppend.c4d\Script.c:100)
by: Ejection(Granatenpack #2281) (obj Marik #2174) (Hazard_Weapons1.6.c4d\HazardClonk.c4d\Script.c:2620)
by: DoDmg(80,2,Marik #2174,1) (obj Projektil #2463) (Hazard_Weapons1.6.c4d\System.c4g\Damage.c:52)
by: BulletStrike(Marik #2174) (obj Projektil #2463) (Hazard.c4d\Items.c4d\Weapons.c4d\Weapon.c4d\Shot.c4d\Script.c:198)
by: HitObject(Marik #2174) (obj Projektil #2463) (Hazard.c4d\Items.c4d\Weapons.c4d\Weapon.c4d\Shot.c4d\Script.c:191)
by: FxHitCheckTimer(Projektil #2463,1,1) (def Projektil) (Hazard.c4d\Items.c4d\Weapons.c4d\Weapon.c4d\Shot.c4d\Script.c:289)
<c 16dff>[FP] DManstrator</c> (<c f40000><Team 1></c>) hatte <c ffffff>Tester</c> (<c c800><Team 2></c>) direkt im Visier.
Letzterer Error wurde durch einen Kill mit einer Waffe, die Schrotflintenpatronen benutzt, erzeugt.
Hatte die Kasernenstadt 2v1.9.6.c4s (Sebastian Müller) gehostet, weil diese eine Beachreibung der Waffen hatte. Habe auch noch Kasernenstadt 2.c4s (Sebastian Müller) und Kasernenstadt 22.c4s (Kai Doerflinger).
So close…