Quellcode der Dragonslayer-Edition
Quellcode der Dragonslayer-Edition: 0.9.7(DS V3) Ithil-Edition


Anmerkung: Dies ist nur ein Auszug aus dem Source. Ein etwas älteres, abgespecktes Release der Dragonslayer-Edition ist für jeden Interessenten frei zum Download verfügbar. Was wir uns unbedingt verbitten, ist Diebstahl unserer Arbeit ohne Nennung des Copyrights.
Falls beim Lesen des Source ein Bug entdeckt werden sollte, bitten wir um sofortige Meldung per Anfrage!


./battle.php

zurück
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
<?php

// Inventar in Kämpfen NIE anzeigen
$show_invent false;

//Anzahl der Kampfrunden die automatisch durchgeführt werden sollen
$int_rounds_to_fight=max(1,intval($_GET['auto']));

///
/// Funktionen
///

/**
 * Aktiviere Spielerbuffs
 *
 * @param string $tag welche Buffs sollen aktiviert werden (roundstart, offense, defense)
 * @return array Array mit den Ergebnissen der Buffs
 */
function activate_buffs($tag)
{
    global 
$session$badguy$out;
    
$result = array();
    
$result['invulnerable'] = 0;
    
$result['dmgmod'] = 1;
    
$result['badguydmgmod'] = 1;
    
$result['atkmod'] = 1;
    
$result['badguyatkmod'] = 1;
    
$result['defmod'] = 1;
    
$result['badguydefmod'] = 1;
    
$result['lifetap'] = array();
    
$result['dmgshield'] = array();

    if(
is_array($session['bufflist']))
    {
        foreach(
$session['bufflist'] as $key => $buff)
        {
            if (isset(
$buff['startmsg']))
            {
                
$msg $buff['startmsg'];
                
$msg str_replace('{badguy}'$badguy['creaturename'], $msg);
                
$out .= '`%'.$msg.'`0';
                unset(
$session['bufflist'][$key]['startmsg']);
            }
            
            
//Ist der gewünschte Bufftyp im aktuell bearbeiteten Buff enthalten? (roundstart, offense, defense)
            
$activate strpos($buff['activate'], $tag);
            if (
$activate !== false)
            {
                
$activate true;
            }
            
// handle strpos == 0;

            // If this should activate now and it hasn't already activated,
            // do the round message and mark it.
            
if ($activate && !$buff['used'])
            {
                
// mark it used.
                
$session['bufflist'][$key]['used'] = 1;
                
// if it has a 'round message', run it.
                
if (isset($buff['roundmsg']))
                {
                    
$msg $buff['roundmsg'];
                    
$msg str_replace('{badguy}'$badguy['creaturename'], $msg);
                    
$out .= '`)'.$msg.'`0`n';
                }
            }

            
// Now, calculate any effects and run them if needed.
            
if (isset($buff['invulnerable']))
            {
                
$result['invulnerable'] = 1;
            }
            if (isset(
$buff['atkmod']))
            {
                
$result['atkmod'] *= $buff['atkmod'];
            }
            if (isset(
$buff['badguyatkmod']))
            {
                
$result['badguyatkmod'] *= $buff['badguyatkmod'];
            }
            if (isset(
$buff['defmod']))
            {
                
$result['defmod'] *= $buff['defmod'];
            }
            if (isset(
$buff['badguydefmod']))
            {
                
$result['badguydefmod'] *= $buff['badguydefmod'];
            }
            if (isset(
$buff['dmgmod']))
            {
                
$result['dmgmod'] *= $buff['dmgmod'];
            }
            if (isset(
$buff['badguydmgmod']))
            {
                
$result['badguydmgmod'] *= $buff['badguydmgmod'];
            }
            if (!empty(
$buff['lifetap']))
            {
                
$result['lifetap'][] = $buff;
                
//array_push($result['lifetap'], $buff);
            
}
            if (isset(
$buff['damageshield']) && $buff['damageshield'] != 1)
            {
                
$result['dmgshield'][] = $buff;
                
//array_push($result['dmgshield'], $buff);
            
}
            if (!empty(
$buff['regen']) && $activate)
            {
                
// Wenn PHP-Code
                
if(is_string($buff['regen']) && strlen($buff['regen']) > 0) {
                    
$buff['regen'] = stripslashes($buff['regen']);
                    eval(
"\$buff['regen'] = $buff[regen];");
                }

                
$hptoregen = (int)$buff['regen'];
                
$hpdiff $session['user']['maxhitpoints'] - $session['user']['hitpoints'];
                
// Don't regen if we are above max hp
                
$session['user']['hitpoints'] = min($session['user']['maxhitpoints'] , $session['user']['hitpoints'] + $hptoregen);
                
/* Ichdenke die obige Linie ersetzt die folgenden komplett, oder?
                if ($hpdiff < 0)
                {
                    $hpdiff = 0;
                }
                if ($hpdiff < $hptoregen)
                {
                    $hptoregen = $hpdiff;
                }
                $session['user']['hitpoints'] += $hptoregen;
                */
                // Now, take abs value just incase this was a damaging buff
                
$hptoregen abs($hptoregen);
                if (
$hptoregen == 0)
                {
                    
$msg $buff['effectnodmgmsg'];
                }
                else
                {
                    
$msg $buff['effectmsg'];
                }
                
$msg str_replace('{badguy}'$badguy['creaturename'], $msg);
                
$msg str_replace('{damage}'$hptoregen$msg);
                
$out .= '`)'.$msg.'`0`n';

            }
            if (!empty(
$buff['minioncount']) && $activate)
            {

                
$who = -1;
                if (isset(
$buff['maxbadguydamage']) &&  $buff['maxbadguydamage'] != '')
                {
                    if (isset(
$buff['maxbadguydamage'])  && $buff['maxbadguydamage'] != '')
                    {
                        
$buff['maxbadguydamage'] = stripslashes($buff['maxbadguydamage']);
                        eval(
"\$buff['maxbadguydamage'] = $buff[maxbadguydamage];");
                    }
                    
$max $buff['maxbadguydamage'];

                    if (isset(
$buff['minbadguydamage']) && $buff['minbadguydamage'] != '')
                    {
                        
$buff['minbadguydamage'] = stripslashes($buff['minbadguydamage']);
                        eval(
"\$buff['minbadguydamage'] = $buff[minbadguydamage];");
                    }
                    
$min $buff['minbadguydamage'];
                    
$who 0;
                }
                else
                {
                    
$max $buff['maxgoodguydamage'];
                    
$min $buff['mingoodguydamage'];
                    
$who 1;
                }
                for (
$i 0$who >= && $i $buff['minioncount']; $i++)
                {
                    
$damage e_rand($min$max);

                    if (
$who == 0)
                    {
                        
$badguy['creaturehealth'] -= $damage;
                    }
                    else if (
$who == 1)
                    {
                        
$session['user']['hitpoints'] -= $damage;
                    }
                    if (
$damage 0)
                    {
                        
$msg $buff['effectfailmsg'];
                    }
                    else if (
$damage == 0)
                    {
                        
$msg $buff['effectnodmgmsg'];
                    }
                    else if (
$damage 0)
                    {
                        
$msg $buff['effectmsg'];
                    }
                    if (
$msg>'')
                    {
                        
$msg str_replace('{badguy}'$badguy['creaturename'], $msg);
                        
$msg str_replace('{goodguy}'$session['user']['name'], $msg);
                        
$msg str_replace('{damage}'$damage$msg);
                        
$out .= '`)'.$msg.'`0`n';
                    }
                }
            }
        }
    }
    return 
$result;
}

function 
process_lifetaps($ltaps$damage)
{
    global 
$session$badguy$out;

    foreach (
$ltaps as $key=>$buff)
    {
        
$healhp $session['user']['maxhitpoints'] - $session['user']['hitpoints'];
        if (
$healhp 0)
        {
            
$healhp 0;
        }
        if (
$healhp == 0)
        {
            
$msg $buff['effectnodmgmsg'];
        }
        else
        {
            if (
$healhp $damage $buff['lifetap'])
            {
                
$healhp $damage $buff['lifetap'];
            }
            if (
$healhp 0)
            {
                
$healhp 0;
            }
            if (
$damage 0)
            {
                
$msg $buff['effectmsg'];
            }
            elseif (
$damage == 0)
            {
                
$msg $buff['effectfailmsg'];
            }
            elseif (
$damage 0)
            {
                
$msg $buff['effectfailmsg'];
            }
        }
        
$session['user']['hitpoints'] += $healhp;
        
$msg str_replace('{badguy}',$badguy['creaturename'], $msg);
        
$msg str_replace('{damage}',$healhp$msg);
        if (
strlen($msg) > 0)
        {
            
$out .= '`)'.$msg.'`n';
        }
    }
}

/**
 * Bearbeitet Buffs die Schaden absorbieren
 *
 * @param array $dshield Die Buffs die Schaden absorbieren
 * @param int $damage zugefügter Schaden
 */
function process_dmgshield($dshield$damage)
{
    global 
$session$badguy$out;

    foreach (
$dshield as $key=>$buff)
    {
        
$realdamage $damage $buff['damageshield'];
        if (
$realdamage 0)
        {
            
$realdamage 0;
        }
        if (
$realdamage 0)
        {
            
$msg $buff['effectmsg'];
        }
        else if (
$realdamage == 0)
        {
            
$msg $buff['effectnodmgmsg'];
        }
        else if (
$realdamage 0)
        {
            
$msg $buff['effectfailmsg'];
        }
        
$badguy['creaturehealth'] -= $realdamage;
        
$msg str_replace('{badguy}',$badguy['creaturename'], $msg);
        
$msg str_replace('{damage}',$realdamage$msg);
        if (
$msg != '')
        {
            
$out .= '`)'.$msg.'`n';
        }
    }
}

/**
 * Lösche Buffs aus der Session die keine Runden mehr aufweisen
 */
function expire_buffs()
{
    global 
$session$badguy$out;
    if(
is_array($session['bufflist']))
    {
        foreach(
$session['bufflist'] as $key => $buff)
        {
            if (
$buff['used'])
            {
                
$session['bufflist'][$key]['used'] = 0;
                
$session['bufflist'][$key]['rounds']--;
                if (
$session['bufflist'][$key]['rounds'] <= 0)
                {
                    if (
$buff['wearoff'])
                    {
                        
$msg $buff['wearoff'];
                        
$msg str_replace('{badguy}'$badguy['creaturename'], $msg);
                        
$out .= '`)'.$msg.'`n';
                    }
                    unset(
$session['bufflist'][$key]);
                }
            }
        }
    }
}

///
/// Ende Funktionen
///

//Gegner laden
$badguy unserialize($session['user']['badguy']);
if (
$badguy['creaturelevel']==0)
{
    
$adjustment 0;
}
else
{
    
$adjustment = ($session['user']['level']/$badguy['creaturelevel']);
}

if (
$badguy['pvp'])
{
    
$adjustment=1;
}

$out '';
$hp_name = ($session['user']['alive'])?'Lebenspunkte':'Seelenpunkte';

/////////////
// FIGHT
if ($_GET['op']=='fight')
{
    
// spells
    
if ($_GET['skill']=='zauber')
    {
        
$id = (int)$_GET['itemid'];
        if(
$id == 0)
        {
            
$out .= 'Merkwürdig.. Der Zauber scheint sich in Luft aufgelöst zu haben. Immer diese Billigware..';
        }
        else
        {
            
$item item_get(' id= '.$id );

            if (!empty(
$item['battle_hook']))
            {
                
item_load_hook($item['battle_hook'],'battle',$item);
            }

            if(!
$item_hook_info['hookstop']) {
                if(
$item['buff1'] > 0) {$list .= ','.$item['buff1'];}
                if(
$item['buff2'] > 0) {$list .= ','.$item['buff2'];}
                
item_set_buffsITEM_BUFF_FIGHT $list );
                
$item['gold']=round($item['gold']*($item['value1']/($item['value2']+1)));
                
$item['gems']=round($item['gems']*($item['value1']/($item['value2']+1)));
                
$item['value1']--;
                if (
$item['value1']<=&& $item['hvalue']<=0){

                    
//Fehler, ID ist manchmal leer
                    // ID darf nicht leer sein! Wenn die ID leer ist, läuft irgendwas anderes schief
                    //if(!empty($item['id']))
                    //{
                        
item_delete(' id='.(int)$item['id']);
                    
//}
                
}
                else{
                    
item_set(' id='.$item['id'], $item);
                }
            }
        }

    }
    
// end spells
    
if ($_GET['skill']=='godmode')
    {
        
$session['bufflist']['godmode']=array('name'=>'`&GOD MODE',
        
'rounds'=>1,
        
'wearoff'=>'Du bist wieder sterblich.',
        
'atkmod'=>25,
        
'defmod'=>25,
        
'invulnerable'=>1,
        
'startmsg'=>'`n`&Du fühlst dich gottgleich`n`n',
        
'activate'=>'roundstart'
        
);
    }
    elseif (
file_exists('./module/specialty_modules/specialty_'.$_GET['skill'].'.php'))
    {
        require_once(
'./module/specialty_modules/specialty_'.$_GET['skill'].'.php');
        
$f_info 'specialty_'.$_GET['skill'].'_info';
        
$f_info();
        
$f_run 'specialty_'.$_GET['skill'].'_run';
        
$f_run('buff');
    }
}
// end if fight


if ($badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
{
    
$out .= '`c`b`$~ ~ ~ Kampf ~ ~ ~`0`b`c
    `n`@Du hast den Gegner `^'
.$badguy['creaturename'].'`@ entdeckt, der sich mit seiner Waffe `%'.$badguy['creatureweapon'].'`@ auf dich stürzt!`0`n`n';

    if (
$session['user']['alive'])
    {
        
$out .= '`2Level: `6'.$badguy['creaturelevel'].'`0`n';
    }
    else
    {
        
$out .= '`2Level: `6Untoter`0`n';
    }


    
//kleines Extra by Takehon: Lebenspunkteanzeige mit Grafbar, dynamisch, immer 150px breit
    
if ($session['user']['prefs']['showhpbar']==true)
    {
        
$hp_value=round($session['user']['hitpoints']);
        
$hp_maxvalue=($session['user']['alive']) ? max($session['user']['maxhitpoints'],$session['user']['hitpoints']) : ($session['user']['level'] * 50);
        
$maxwert=max($badguy['creaturehealth'],$hp_maxvalue);
        
$faktor=150/$maxwert;
        
$out .= "`b`2Beginn der Runde:`0`b
        `n<table border='0'>
        <tr>
        <td>`2"
.$badguy['creaturename']."`2's ".$hp_name.": `6".round($badguy['creaturehealth'])."&nbsp;&nbsp;`0</td>
        <td>"
.grafbar($hp_maxvalue,$badguy['creaturehealth'],round($maxwert*$faktor),10,'badguyhealth_start')."</td>
        </tr><tr>
        <td>`2DEINE "
.$hp_name.": `6".round($hp_value)."&nbsp;&nbsp;`0</td>
        <td>"
.grafbar($hp_maxvalue,$hp_value,round($hp_maxvalue*$faktor),10,'yourhealth_start')."</td>
        </tr>
        </table>`n"
;
    }
    else
    {
        
$out .= '`2`bBeginn der Runde:`b`n
        `2'
.$badguy['creaturename'].'`2\'s '.$hp_name.': `6'.round($badguy['creaturehealth']).' `0`n
        `2DEINE '
.$hp_name.': `6'.round($session['user']['hitpoints']).'`0`n';
    }

}

//Alle Buffs werden auf "unbenutzt" gesetzt
if(is_array($session['bufflist']))
{
    foreach(
$session['bufflist'] as $key => $buff)
    {
        
$session['bufflist'][$key]['used'] = 0;
    }
}

if (
$badguy['pvp'] &&
    
count($session['bufflist'])>&&
    
is_array($session['bufflist']))
{
    if (
strlen($session['user']['buffbackup'])==0)
    {
        
$out .= '`&Die Götter verbieten den Einsatz jeder Spezialfähigkeit!`n';
        
$session['user']['buffbackup']=serialize($session['bufflist']);
        
$session['bufflist']=array();
        if (
$_GET['bg']==1)
        {
            
$session['bufflist']['bodyguard'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
            ist durch einen Leibwächter geschützt!`n`n'
,
            
'name'=>'`&Leibwächter',
            
'rounds'=>5,
            
'wearoff'=>'Der Leibwächter scheint eingeschlafen zu sein.',
            
'minioncount'=>1,
            
'maxgoodguydamage'=> round($session['user']['level']>>1,0) +1,
            
'effectmsg'=>'`7{badguy}\'s Leibwächter trifft dich mit `${damage}`7 Schadenspunkten.',
            
'effectnodmgmsg'=>'`7{badguy}\'s Leibwächter versucht dich zu treffen, aber `$TRIFFT NICHT`7!',
            
'activate'=>'roundstart'
            
);
        }
        elseif (
$_GET['bg']==2)
        {
            
$session['bufflist']['heimvorteil'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
            `$hat einen gewaltigen Heimvorteil!`n`n'
,
            
'name'=>'`$Nachteil',
            
'rounds'=>20,
            
'wearoff'=>'Der Heimvorteil ist deinem Gegner nicht mehr von Vorteil.',
            
'minioncount'=>1,
            
'maxgoodguydamage'=> round($session['user']['level']+5),
            
'effectmsg'=>'`7Durch {badguy}`7\'s Heimvorteil bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
            
'effectnodmgmsg'=>'',
            
'activate'=>'roundstart'
            
);
        }
        
// Festung
        
elseif ($_GET['bg']==3)
        {
            
$session['bufflist']['festung'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
            `$hat in seiner Festung dir gegenüber einen gewaltigen Vorteil!`n`n'
,
            
'name'=>'`$Verteidigungsanlagen',
            
'rounds'=>50,
            
'wearoff'=>'Die Festung kann deinem Gegner nun auch nicht mehr helfen.',
            
'minioncount'=>2,
            
'maxgoodguydamage'=> round($session['user']['level']),
            
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
            
'effectnodmgmsg'=>'',
            
'activate'=>'roundstart'
            
);
        }
        elseif (
$_GET['bg']==4)
        
// Turm
        
{
            
$session['bufflist']['turm'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
            `$hat in seinem Turm dir gegenüber einen enormen Vorteil!`n`n'
,
            
'name'=>'`$Gute Verteidigungsanlagen',
            
'rounds'=>75,
            
'wearoff'=>'Der Turm kann deinen Gegner nun auch nicht mehr schützen.',
            
'minioncount'=>3,
            
'maxgoodguydamage'=> round($session['user']['level']/1,2)+1,
            
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
            
'effectnodmgmsg'=>'',
            
'activate'=>'roundstart'
            
);
        }
        elseif (
$_GET['bg']==5)
        
// Burg
        
{
            
$session['bufflist']['burg'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
            `$hat in seiner Burg dir gegenüber einen extremen Vorteil!`n`n'
,
            
'name'=>'`$Paranoid gute Verteidigungsanlagen',
            
'rounds'=>100,
            
'wearoff'=>'Die Burg kann deinem Gegner nun auch nicht mehr helfen.',
            
'minioncount'=>4,
            
'maxgoodguydamage'=> round($session['user']['level']/1,2)+1,
            
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
            
'effectnodmgmsg'=>'',
            
'activate'=>'roundstart'
            
);
        }
    }
}
// Run the beginning of round buffs (this also calculates all modifiers)

// Alle $int_rounds_to_fight Kampfrunden abarbeiten
for ($int_rounds_to_fight$int_rounds_to_fight 0$int_rounds_to_fight--)
{
    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
    {
        
//Wetterbeeinflussung
        
if ($session['user']['alive'] && $session['user']['buffbackup']=='')
        {
            if (
e_rand(1,6)==2)
            {
                
//Auswirkung des Wetters auf den User im Kampf abholen
                
$arr_battle_influence_buff Weather::get_battle_influence_buff();
                
                if(
count($arr_battle_influence_buff) > 0)
                {
                    
$session['bufflist']['weather'] =& $arr_battle_influence_buff;
                }
                                
            }
        }
        
//Wetterbeeinflussung

        // GILDENmod
        
if (is_array($guild_buffs))
        {
            
$session['bufflist'] = array_merge($session['bufflist'],$guild_buffs);
        }
        
// END Gildenmod

        //Buffing am Rundenstart
        
$buffset         activate_buffs('roundstart');
        
$creaturedefmod    $buffset['badguydefmod'];
        
$creatureatkmod    $buffset['badguyatkmod'];
        
$atkmod            $buffset['atkmod'];
        
$defmod            $buffset['defmod'];
    }

    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
    {
        if (
$badguy['pvp'])
        {
            
$adjustedcreaturedefense $badguy['creaturedefense'];
        }
        else
        {
            
$adjustedcreaturedefense = ($creaturedefmod*$badguy['creaturedefense'] / ($adjustment*$adjustment));
        }
        
$creatureattack $badguy['creatureattack']*$creatureatkmod;
        
$adjustedselfdefense = ($session['user']['defence'] * $adjustment $defmod);
        
// Wenn kein Schaden entsteht, irgendwann abbrechen: Sonst Endlosschleife
        
$int_iterations 0;
        while (
$creaturedmg==&& $selfdmg==0)
        {
            
//---------------------------------
            
$atk $session['user']['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)
            {
                
//output("`#DEBUG: Initial (<0) creature damage $creaturedmg`n");
                
$creaturedmg = (int)($creaturedmg>>1);
                
//output("`#DEBUG: Modified (<0) creature damage $creaturedmg`n");
                
$creaturedmg round($buffset['badguydmgmod']*$creaturedmg,0);
                
//output("`#DEBUG: Modified (<0) creature damage $creaturedmg`n");
            
}
            if (
$creaturedmg 0)
            {
                
//output("`#DEBUG: Initial (>0) creature damage $creaturedmg`n");
                
$creaturedmg round($buffset['dmgmod']*$creaturedmg,0);
                
//output("`#DEBUG: Modified (>0) creature damage $creaturedmg`n");
            
}
            
//output("`#DEBUG: Attack score: $atk`n");
            //output("`#DEBUG: Creature Defense Score: $adjustedcreaturedefense`n");
            //output("`#DEBUG: Player Attack roll: $patkroll`n");
            //output("`#DEBUG: Creature Defense roll: $catkroll`n");
            //output("`#DEBUG: Final Creature Damage: $creaturedmg`n");
            
$pdefroll e_rand(0,$adjustedselfdefense);
            
$catkroll e_rand(0,$creatureattack);
            
$selfdmg 0-(int)($pdefroll $catkroll);
            if (
$selfdmg<0)
            {
                
//output("`#DEBUG: Initial (<0) self damage $selfdmg`n");
                
$selfdmg=(int)($selfdmg>>1);
                
//output("`#DEBUG: Modified (<0) self damage $selfdmg`n");
                
$selfdmg round($selfdmg*$buffset['dmgmod'], 0);
                
//output("`#DEBUG: Modified (<0) self damage $selfdmg`n");
            
}
            if (
$selfdmg 0)
            {
                
//output("`#DEBUG: Initial (>0) self damage $selfdmg`n");
                
$selfdmg round($selfdmg*$buffset['badguydmgmod'], 0);
                
//output("`#DEBUG: Modified (>0) self damage $selfdmg`n");
            
}
            
//output("`#DEBUG: Defense score: $adjustedselfdefense`n");
            //output("`#DEBUG: Creature Attack score: $creatureattack`n");
            //output("`#DEBUG: Player Defense roll: $pdefroll`n");
            //output("`#DEBUG: Creature Attack roll: $catkroll`n");
            //output("`#DEBUG: Final Player damage: $selfdmg`n");
            //output("`#DEBUG: count: $int_rounds_to_fight`n");
            
$int_iterations++;
            if(
$int_iterations 100)
            {
                break;
            }
        }
    }
    else
    {
        
$creaturedmg=0;
        
$selfdmg=0;
        
$int_rounds_to_fight=0;
    }
    
// Handle god mode's invulnerability
    
if ($buffset['invulnerable'])
    {
        
$creaturedmg abs($creaturedmg);
        
$selfdmg = -abs($selfdmg);
    }

    if (
e_rand(1,3)==&&
        (
$_GET['op']=='search' ||
        (
$badguy['pvp'] && $_GET['act']=='attack')))
    {
        
// Beginn: LP feststellen
        
$badguy['starthp'] = $badguy['creaturehealth'];
        
$badguy['actor_starthp'] = $session['user']['hitpoints'];

        if (
$badguy['pvp'])
        {
            
$out .= '`b`^'.$badguy['creaturename'].'`$\'s Fähigkeiten erlauben deinem Gegner den ersten Schlag!`0`b`n`n';
        }
        else
        {
            
$out .= '`b`^'.$badguy['creaturename'].'`$ überrascht dich und hat den ersten Schlag!`0`b`n`n';
        }
        
$_GET['op']='run';
        
$surprised=true;
    }
    else
    {
        if (
$_GET['op']=='search')
        {
            
$out .= '`b`$Dein Können erlaubt dir den ersten Angriff!`0`b`n`n';
            
// Beginn: LP feststellen
            
$badguy['starthp'] = $badguy['creaturehealth'];
            
$badguy['actor_starthp'] = $session['user']['hitpoints'];
        }
        
$surprised=false;
    }

    if (
$_GET['op']=='fight' || $_GET['op']=='run')
    {
        if (
$_GET['op']=='fight')
        {
            if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
            {
                
$buffset activate_buffs('offense');
                if (
$atk $session['user']['attack'])
                {
                    if (
$atk $session['user']['attack']*3)
                    {
                        if (
$atk>$session['user']['attack']*4)
                        {
                            
$out .= '`&`bDu holst zu einem <font size="+1">MEGA</font> Powerschlag aus!!!`b`n';
                        }
                        else
                        {
                            
$out .= '`&`bDu holst zu einem DOPPELTEN Powerschlag aus!!!`b`n';
                        }
                    }
                    else
                    {
                        if (
$atk>($session['user']['attack']<<1))
                        {
                            
$out .= '`&`bDu holst zu einem Powerschlag aus!!!`b`0`n';
                        }
                        elseif (
$atk>$session['user']['attack']*1.25)
                        {
                            
$out .= '`7`bDu holst zu einem kleinen Powerschlag aus!`b`0`n';
                        }
                    }
                }
                if (
$creaturedmg==0)
                {
                    
$out .= '`4Du versuchst `^'.$badguy['creaturename'].'`4 zu treffen, aber `$TRIFFST NICHT!`n';
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_dmgshield($buffset['dmgshield'], 0);
                    }
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_lifetaps($buffset['lifetap'], 0);
                    }
                }
                else if (
$creaturedmg<0)
                {
                    
$out .= '`4Du versuchst `^'.$badguy['creaturename'].'`4 zu treffen, aber der `$ABWEHRSCHLAG `4trifft dich mit `$'.(0-$creaturedmg).'`4 Schadenspunkten!`n';
                    
$badguy['diddamage']=1;
                    
$session['user']['hitpoints']+=$creaturedmg;
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
                    }
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_lifetaps($buffset['lifetap'],$creaturedmg);
                    }
                }
                else
                {
                    
$out .= '`4Du triffst `^'.$badguy['creaturename'].'`4 mit `^'.$creaturedmg.'`4 Schadenspunkten!`n';
                    
$badguy['creaturehealth']-=$creaturedmg;
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
                    }
                    if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                    {
                        
process_lifetaps($buffset['lifetap'],$creaturedmg);
                    }
                }
                if (
$creaturedmg>$session['user']['punch'])
                {
                    
$session['user']['punch']=$creaturedmg;
                    
$out .= '`@`b`c--- DAS WAR DEIN BISHER HÄRTESTER SCHLAG! ---`c`b`n';
                }
            }
        }
        else if (
$_GET['op']=='run' && !$surprised)
        {
            
$out .= '`4Du bist zu beschäftigt damit wegzulaufen wie ein feiger Hund und kannst nicht gegen `^'.$badguy['creaturename'].'`4 kämpfen.`n';
        }
        
// We need to check both user health and creature health. Otherwise the user
        // can win a battle by a RIPOSTE after he has gone <= 0 HP.
        //-- Gunnar Kreitz
        
if ($badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
        {
            
$buffset activate_buffs('defense');
            if (
$selfdmg==0)
            {
                
$out .= '`^'.$badguy['creaturename'].'`4 versucht dich zu treffen, aber `$TRIFFT NICHT!`n';
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_dmgshield($buffset['dmgshield'], 0);
                }
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_lifetaps($buffset['lifetap'], 0);
                }
            }
            else if (
$selfdmg<0)
            {
                
$out .= '`^'.$badguy['creaturename'].'`4 versucht dich zu treffen, aber dein `^ABWEHRSCHLAG`4 trifft mit `^'.(0-$selfdmg).'`4 Schadenspunkten!`n';
                
$badguy['creaturehealth']+=$selfdmg;
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_lifetaps($buffset['lifetap'], -$selfdmg);
                }
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_dmgshield($buffset['dmgshield'], $selfdmg);
                }
            }
            else
            {
                
$out .= '`^'.$badguy['creaturename'].'`4 trifft dich mit `$'.$selfdmg.'`4 Schadenspunkten!`n';
                
$session['user']['hitpoints']-=$selfdmg;
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_dmgshield($buffset['dmgshield'], $selfdmg);
                }
                if (
$badguy['creaturehealth']>&& $session['user']['hitpoints']>0)
                {
                    
process_lifetaps($buffset['lifetap'], -$selfdmg);
                }
                
$badguy['diddamage']=1;
            }
            
// Specialfähigkeiten des Badguy:
            
if ($badguy['creaturehealth']>&& $session['user']['hitpoints']>&&
            
$badguy['starthp'] > && $badguy['actor_starthp'] > && !$badguy['pvp'] && !$badguy['acctid']
            && isset(
$badguy['special_func']) )
            {
                
$badguy_hp_diff round($badguy['creaturehealth']/$badguy['starthp'],2);
                
$actor_hp_diff round($session['user']['hitpoints']/$badguy['actor_starthp'],2);
                
$diff $badguy_hp_diff $actor_hp_diff;
                
// Wenn es schlecht für Badguy ausschaut
                
if ($diff 0)
                {
                    
// Feststellen, ob Spieler stark gebufft
                    // -2 wegen Multiplikatoren: 1 = Basis, zwei Werte hier
                    
$buffs_actor $atkmod $defmod 2;
                    
$buffs_badguy - ($creatureatkmod $creaturedefmod);
                    
$buffs_actor += $buffs_badguy;
                    if (
$buffs_actor $badguy['special_minbuff'])
                    {
                        if (
$badguy['special_uses'] > 0)
                        {
                            
// Special einsetzen!
                            
$badguy['special_func']( $badguy );
                        }
                    }
                    
// END stark gebufft
                
}
                
// END Diff groß genug
            
}
            
// END Special vorhanden
        
}
    }
    
expire_buffs();


    
$creaturedmg=0;
    
$selfdmg=0;
    if (
$int_rounds_to_fight>&& $session['user']['hitpoints']>&& $badguy['creaturehealth']>0)
    {
        
$out .= '`2`bNächste Runde:`b`n';
    }
    if (
$session['user']['hitpoints']<=|| $badguy['creaturehealth']<=0)
    {
        
$int_rounds_to_fight=-1;
    }

    if (
$badguy['creaturehealth']<=&& $session['user']['hitpoints']>0)
    {
        
$victory=true;
        
$defeat=false;
        
$int_rounds_to_fight=0;
    }
    else
    {
        if (
$session['user']['hitpoints']<=0)
        {
            
$defeat=true;
            
$victory=false;
            
$int_rounds_to_fight=0;
        }
        else
        {
            
$defeat=false;
            
$victory=false;
        }
    }
}

if (
$session['user']['hitpoints']>&&
$badguy['creaturehealth']>&&
(
$_GET['op']=='fight' || $_GET['op']=='run'))
{

    
//kleines Extra by Takehon: Lebenspunkteanzeige mit Grafbar, dynamisch, immer 150px breit
    
if ($session['user']['prefs']['showhpbar']==true)
    {
        
$hp_value=round($session['user']['hitpoints']);
        
$hp_maxvalue=($session['user']['alive'])?max($session['user']['maxhitpoints'],$session['user']['hitpoints']):($session['user']['level'] * 50);
        
$maxwert=max($badguy['creaturehealth'],$hp_maxvalue);
        
$faktor=150/$maxwert;
        
$out .= "`2`bEnde der Runde:`b`0
        `n<table border='0'>
        <tr>
        <td>`2"
.$badguy['creaturename']."`2's ".$hp_name.": `6".round($badguy['creaturehealth'])."&nbsp;&nbsp;`0</td>
        <td>"
.grafbar($hp_maxvalue,$badguy['creaturehealth'],round($maxwert*$faktor),10,'badguyhealth_end')."</td>
        </tr><tr>
        <td>`0`2DEINE "
.$hp_name.": `6".round($hp_value)."&nbsp;&nbsp;`0</td>
        <td>"
.grafbar($hp_maxvalue,$hp_value,round($hp_maxvalue*$faktor),10,'yourhealth_end')."</td>
        </tr>
        </table>`n"
;
    }
    else
    {
        
$out .= '`2`bEnde der Runde:`b`n
        `2'
.$badguy['creaturename'].'`2\'s '.$hp_name.': `6'.round($badguy['creaturehealth']).' `0`n
        `2DEINE '
.$hp_name.': `6'.round($session['user']['hitpoints']).'`0`n';
    }
}

if (
$victory || $defeat)
{
    
// Unset the bodyguard buff at the end of the fight.
    // Without this, the bodyguard persists *and* the older buffs are held
    // off for a while! :/
    
if (isset($session['bufflist']['bodyguard']))
    {
        unset(
$session['bufflist']['bodyguard']);
    }
    if (isset(
$session['bufflist']['weather']))
    {
        unset(
$session['bufflist']['weather']);
    }
    if (isset(
$session['bufflist']['heimvorteil']))
    {
        unset(
$session['bufflist']['heimvorteil']);
    }
    if (isset(
$session['bufflist']['festung']))
    {
        unset(
$session['bufflist']['festung']);
    }
    if (isset(
$session['bufflist']['turm']))
    {
        unset(
$session['bufflist']['turm']);
    }
    if (isset(
$session['bufflist']['burg']))
    {
        unset(
$session['bufflist']['burg']);
    }

    if (!
is_array($session['bufflist']) || count($session['bufflist']) <= 0)
    {
        if (!
$badguy['maze'])
        {
            
$session['bufflist'] = unserialize($session['user']['buffbackup']);
        }
        if (
is_array($session['bufflist']))
        {
            if (
count($session['bufflist'])>&& $badguy['pvp'])
            {
                
$out .= '`&Die Götter gewähren dir wieder alle deine speziellen Fähigkeiten.`n`n';
            }
        }
        else
        {
            
$session['bufflist'] = array();
        }
    }
    if (!
$badguy['maze'])
    {
        
$session['user']['buffbackup'] = "";
    }
    
$session['user']['badguy'] = '';
    
$session['user']['hitpoints']=max(0,$session['user']['hitpoints']);
}
else
{
    
$session['user']['badguy']=serialize($badguy);
}

output($out);
?>
0.9.7(DS V3) Ithil-Edition