anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Sa 14 Jun, 2025 21:32

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo 13 Aug, 2007 17:24 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
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

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 06:39 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
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]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 07:12 
Offline
Großmeister
Großmeister

Registriert: Fr 01 Jul, 2005 18:41
Beiträge: 484
Wohnort: Saarbrücken
Geschlecht: Männlich
Im Moment fällt mir nichts Tolles ein ( jaja erstmal Kaffee schlürfen usw. :P ) jedoch höre ich von diesem Problem das erste Mal, naja sagen wir, in Zusammenhang mit einer Fehlermeldung. Da würde mich mal interessieren, welche das wär'.

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*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 09:08 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
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.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 09:38 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
$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^^

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 18:08 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
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

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 14 Aug, 2007 18:12 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
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^^

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum