anpera.net https://anpera.homeip.net/phpbb3/ |
|
Prob in pvp arena bei Kampf mit 2 Tieren (endlosschleife) https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=3895 |
Seite 1 von 1 |
Autor: | Rikkarda [ Mo 13 Aug, 2007 17:24 ] |
Betreff des Beitrags: | Prob in pvp arena bei Kampf mit 2 Tieren (endlosschleife) |
Ich bitte davon abzusehen mir zu erzählen, dass meine Tiere bar jeder Balance sind *gg* das habe ich mit der Zeit selber festgestellt^^ jedoch kann ich meinen Bewohnern eine Totalrunterreduzierung der Tiere nicht antun^^ Eli meinte es gäbe ne Möglichkeit diese endlosschleife auszuhebeln, indem man entweder 1 Schaden zulässt oder halt dafür sorgt, dass keine schleife kommt bis die ollen Runden des Megatieres weg sind :/ nur bin ich ehrlich, so einen Eingriff trau ich mir nu net zu. Worum gehts eigentlich? Also.. in Silienta gibt es als mächtigstes Tier den Todesboten. Geht ein Spieler mit diesem Tier in die Arena ist es problemlos.. gehen aber 2 Spieler gegeneinander ins Duell die beide einen Todesboten haben landen sie in einer endlosschleife, die eine Fehlermeldung auf dieses codestück auswirft: $this->bbcode_second_pass_code('', ' if ($badguy[hitpoints]>0 && $goodguy[hitpoints]>0){ $adjustedcreaturedefense = $badguy[defense]; $creatureattack = $badguy[attack]*$creatureatkmod; $adjustedselfdefense = ($goodguy[defense] * $adjustment * $defmod); while($creaturedmg==0 && $selfdmg==0){ $atk = $goodguy[attack]*$atkmod; if (e_rand(1,20)==1) $atk*=3; $patkroll = e_rand(0,$atk); $catkroll = e_rand(0,$adjustedcreaturedefense); $creaturedmg = 0-(int)($catkroll - $patkroll); if ($creaturedmg<0) { $creaturedmg = (int)($creaturedmg/2); $creaturedmg = round($buffset[badguydmgmod]*$creaturedmg,0); } if ($creaturedmg > 0) { $creaturedmg = round($buffset[dmgmod]*$creaturedmg,0); } $pdefroll = e_rand(0,$adjustedselfdefense); $catkroll = e_rand(0,$creatureattack); $selfdmg = 0-(int)($pdefroll - $catkroll); if ($selfdmg<0) { $selfdmg=(int)($selfdmg/2); $selfdmg = round($selfdmg*$buffset[dmgmod], 0); } if ($selfdmg > 0) { $selfdmg = round($selfdmg*$buffset[badguydmgmod], 0); } } } ') ich schliesse daraus, dass er es nicht mehr schafft die Spieler gegeneinander anzurechnen, weil die Boten eben jeglichen Schaden abwerfen -.- Nun weiss ich nicht wie ich dieses Problem lösen soll OHNE die Tiere in ihrer Kampfkraft zu reduzieren, und hoffe hier ist wer, der mir erklären kann, wie ich das System in diesem Teilstück dazu bringe zumindest 1 Schaden zu verursachen. Auch wenn der Kampf dann evtl. elendig lange dauert.. ich werde natürlich meine Bewohner versuchen dazu zu bringen, die Todesboten in den Arenaställen unterzustellen und ohne zu kämpfen, nur möchte ich halt auch ungern haben, dass wenn einer diesen Hinweis überliest, dass der dann in der schleife landet -.- ich hoffe mir kann da wer aushelfen ![]() lg Rikka |
Autor: | Harthas [ Di 14 Aug, 2007 06:39 ] |
Betreff des Beitrags: | |
Vielleicht irgend etwas in folgender Art. Dass nach einer gewissen Anzahl Schleifendurchläufen die Schleife unterbrochen wird, indem man den Schaden auf 1 setzt. [php]$blubb = 0; while($creaturedmg==0 && $selfdmg==0){ $blubb++; ... ... ... ... //Vor der abschliessenden Klammer if ($blubb >50) $creaturedmg = 1; }[/php] |
Autor: | Taikun14 [ Di 14 Aug, 2007 07:12 ] |
Betreff des Beitrags: | |
Im Moment fällt mir nichts Tolles ein ( jaja erstmal Kaffee schlürfen usw. ![]() Naja was vielleicht noch drin wäre, ist eine Überprüfung, ob beide Spieler den Todesboten haben und den Schaden dann sofort auf 1 setzen. Ob ich da jetzt Müll laber', weiß ich nicht, aber 'nen Versuch isses wert. *gähn* |
Autor: | Harthas [ Di 14 Aug, 2007 09:08 ] |
Betreff des Beitrags: | |
Die Fehlermeldung hatte sie ja eigentlich bereits erwähnt: Ewigschleife. (Natürlich, der Wortlaut ist etwas anders, aber viel mehr als Ewigschleife steht da dann auch nicht mehr. Die Schleife, welche ewig läuft, wird noch angegeben, aber ansonsten nichts.) |
Autor: | Rikkarda [ Di 14 Aug, 2007 09:38 ] |
Betreff des Beitrags: | |
$this->bbcode_second_pass_code('', 'Fatal error: Maximum execution time of 30 seconds exceeded in /srv/www/htdocs/web3/html/pvparena.php on line 1458') jo dachte das würd reichen wenn ich sag endlosschleife^^ |
Autor: | Auric [ Di 14 Aug, 2007 18:08 ] |
Betreff des Beitrags: | |
Wenn ich es richtig verstanden habe, so ist hier der Buff des Tieres, also entweder $buffset['badguydmgmod'] oder $buffset['dmgmod'] die übeltäter, da sie auf 0 stehen könnten und somit jeglicher Schaden ignoriert wird. Du hast nun verschiedene möglichkeiten - zum einen könntest du die oben genannten modifikatoren bei einem nullwert auf einen nicht-nullwert zwingen, also: [php]if($buffset['badguydmgmod'] == 0) $buffset['badguydmgmod'] = 0.1; if($buffset['dmgmod'] == 0) $buffset['dmgmod'] = 0.1;[/php] Damit würdest du die Kampfkraft der Tiere nur in der Arena schwächen. Allerdings werden auf diese weise natürlich auch andere Buffs durch das "manuelle" setzen des wertes neutralisiert. Geschickter wäre es, den Tierbuff in dem Falle einfach aus der Berechnung auszuschließen oder auf einen anderen wert setzen, falls er 0 ist (Dazu fehlt mir aber gerade das Codestück ^^) Alternativ könntest du eine Lösung wählen, wie Harthas sie vorgeschlagen hat. Meiner meinung nach sollte aber der Todesbote ganz aus der Berechnung ausgeschlossen werden, da du da so absolut gar keine Balance reinbekommst. Zum abschluss noch mal eine leicht optimnierte Version des obrigen Codes - im Effekt aber das selbe, nur schöner ^^. [php]if($badguy['hitpoints']>0 && $goodguy['hitpoints']>0) { $creatureattack = $badguy['attack']*$creatureatkmod; $adjustedselfdefense = ($goodguy['defense'] * $adjustment * $defmod); while($creaturedmg==0 && $selfdmg==0) { $atk = $goodguy['attack']*$atkmod; if (e_rand(1,20)==1) $atk*=3; // Glüchstreffer $patkroll = e_rand(0,$atk); // Player-Attack $catkroll = e_rand(0,$badguy['defense']); // Crature-Defense $creaturedmg = 0-(int)($catkroll - $patkroll); // Überschuss Userangriff über Gegnerverteidigung => Schaden an Gegner if($creaturedmg<0) { // Selbst verletzt $creaturedmg = round($buffset['badguydmgmod']*$creaturedmg/2,0); }elseif($creaturedmg > 0) { // Gegner getroffen $creaturedmg = round($buffset['dmgmod']*$creaturedmg,0); } $pdefroll = e_rand(0,$adjustedselfdefense); // Player Defense $catkroll = e_rand(0,$creatureattack); // Creature-Attack $selfdmg = 0-(int)($pdefroll - $catkroll); // Überschuss Gegnerangriff über Userverteidigung => Schaden am User if ($selfdmg<0) { //Gegner selbst verletzt $selfdmg = round($selfdmg*$buffset['dmgmod']/2, 0); } elseif ($selfdmg > 0) { // Gegner hat user getroffen $selfdmg = round($selfdmg*$buffset['badguydmgmod'], 0); } } }[/php] Grüße, Auric |
Autor: | Rikkarda [ Di 14 Aug, 2007 18:12 ] |
Betreff des Beitrags: | |
ja.. wir sind auch echt am grübeln und denke wir werden allgemein die Tiere aus der Arena (pvp) ausschliessen.. weil man dann schon eher ein faires Duell hat.. soviel wird die Arena in Sili da halt auch nicht genutzt, dass ich da nun hingehen mag um alles nur wegen einem krassen Tier zu ändern.. werd mal nochmal in Ruhe drüber schlafen *gg und danke Auric für den schöneren Code den seh ich mir gleich nach dem Abendessen mal genauer an^^ |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |