Seite 2 von 2

Re: Spiel: wkFight

Verfasst: 17.11.2010, 14:21
von 1. FC Keller
Ich habe eben den Code so editiert, dass man wieder im Chat schreiben kann während man die Sperre hat.
Wenn man /fight eingibt wird in der Eingabezeile angezeigt wieviele Sekunden man noch gesperrt ist.

Re: Spiel: wkFight

Verfasst: 17.11.2010, 16:22
von 1. FC Keller
Ich habe das Script eben um eine HP- und eine Cooldown-Anzeige in der Onlineliste erweitert. Da ich nur im Firefox testen konnte habe ich die Version im ersten Post noch nicht ersetzt. Das folgt sobald ich weiß dass es in den anderen Browsern auch klappt.
Script:Zeigen

Code: Alles auswählen

var fightRaum="fight";
var fightKoRaum="hauptchat"; // hier hin wird man geschoben wenn man KO ist.
var fightDefaultHP=200;
var fightBefehl="/fight";
var fightCoolColor="#0000ff";
var fightHPColor="#ff0000";
var fightWeapons={
  faust:{hp:10, timeout:2500},
  schlag:{hp:9, timeout:2000},
  tritt:{hp:15, timeout:3000},
  hammer:{hp:30, users:["dg", "moni"], timeout:6000},
  atombombe:{hp:3000, users:["dg"], timeout:60000}
}

//feste Variablen des Scripts. Nicht aendern!
var fightLastRoom="";
var fightHP={};
var fightCooldown={};

function fightBefehlsAuswertung(eingabe, sender){
  if(getRoom()!=fightRaum){
    document.write("das Fight-Spiel funktioniert nur im Raum <a href='javascript:sendeText(\"/join "+fightRaum+"\")'>"+fightRaum+"</a>.");
  }
  eingabe=strip_tags(eingabe).split(" ");
  sender=strip_tags(sender);
  var weapon=eingabe[0].toLowerCase();
  if(weapon=="start"){
    if(eingabe.length==1){
      document.write("tritt dem Spiel mit "+fightDefaultHP+" HP bei.");
      if(myNick==sender)fightHP={}; //ggf. leeren falls noch daten von einer frueheren runde vorhanden sind.
      fightHP[sender.toLowerCase()]=fightDefaultHP;
      fightViewHP(sender.toLowerCase());
      if(sender!=myNick)sendeText(fightBefehl+" start "+myNick+" "+fightHP[myNick.toLowerCase()]);
    }else if(sender==eingabe[1]){
      if(typeof(fightHP[sender.toLowerCase()])=="undefined"){
    fightHP[sender.toLowerCase()]=eingabe[2];
    fightViewHP(sender.toLowerCase());
      }
      hideLine();
    }
  }else if(fightWeapons[weapon]){ // z.B. /fight hammer DG
    if(typeof(fightWeapons[weapon].users)!="undefined" && !fightWeapons[weapon].users.inArray(sender.toLowerCase()))document.write("hat versucht "+eingabe[0]+" zu verwenden.");
    else{//user darf waffe verwenden
      var nick=eingabe[1].toLowerCase();
      document.write("bek&auml;mpft "+eingabe[1]+" mit "+eingabe[0]);
      fightHP[nick]-=fightWeapons[weapon].hp;
      fightViewHP(nick);
      if(fightHP[nick]<=0){
   document.write("<br>"+nick+" geht K.O.");
   if(myNick.toLowerCase()==nick){
          sendeText("/join "+fightKoRaum);
          fightHP={};
        }
      }else{
   document.write(". &Uuml;brige HP: "+fightHP[nick]);
      }
      
      if(typeof(fightWeapons[weapon].timeout)!="undefined"){
    if(myNick==sender)blockFight((new Date()).getTime()+fightWeapons[weapon].timeout);
    fightCooldown[sender]=[(new Date()).getTime(), fightWeapons[weapon].timeout];
      }
    }
  }else{
    document.write("kein gueltiger Befehl eingegeben:"+eingabe[0].toLowerCase());
  }
}

function startFight(){
  fightHP[myNick]=fightDefaultHP;
}

function fightCheckRoom(){
  var thisRoom=getRoom();
  if(fightLastRoom!=thisRoom){
    if(thisRoom.toLowerCase()==fightRaum.toLowerCase())sendeText(fightBefehl+" start");
    fightLastRoom=thisRoom;
  }
}

function hideLine(){
  tbls=document.getElementsByTagName("table");
  tbls[tbls.length-1].style.display="none";
}

function blockFight(until){
  if((new Date()).getTime()<=until){
    setTimeout("blockFight("+until+")", 50);
    with(parent.info.document.eingabe.message){
      if(value.match(fightBefehl))value="Fight-Befehl geblockt für "+((until-(new Date()).getTime())/1000)+" Sekunden";
    }
  }else parent.info.document.eingabe.message.value="";
}

function fightCooldownFunc(){
  var now=(new Date()).getTime();
  var s, p, i;
  for(i in fightCooldown){
    if(now>=fightCooldown[i][0]+fightCooldown[i][1]){
      fightViewCool(i, 0);
      delete fightCooldown[i];
    }else{
      s=now-fightCooldown[i][0];
      p=s*100/fightCooldown[i][1];
      fightViewCool(i, parseInt(100-p));
    }
  }
  setTimeout(fightCooldownFunc,50);
}

function fightViewCool(n, p){
  var pNode, coolBar;
  if(coolBar=parent.rightFrame.document.getElementById("fightCool_"+n)){
    coolBar.style.width=p+'%';
  }else if(pNode=parent.rightFrame.document.getElementById(n)){
    coolBar=parent.rightFrame.document.createElement("div");
    coolBar.id="fightCool_"+n;
    coolBar.style.backgroundColor=fightCoolColor;
    coolBar.style.width=p+'%';
    coolBar.style.height='5px';
    pNode.appendChild(coolBar);
  }//else alert("Div nicht gefunden!");
}

function fightViewHP(n){
  var pNode, hpBar, hp, p;
  hp=fightHP[n];
  n1=getNickCase(n);
  p=parseInt(hp*100/fightDefaultHP);
  if(hpBar=parent.rightFrame.document.getElementById("fightHP_"+n1)){
    hpBar.style.width=p+'%';
  }else if(pNode=parent.rightFrame.document.getElementById(n1)){
    pNode.style.width='150px';
    hpBar=parent.rightFrame.document.createElement("div");
    hpBar.id="fightHP_"+n1;
    hpBar.style.backgroundColor=fightHPColor;
    hpBar.style.width=p+'%';
    hpBar.style.height='5px';
    pNode.appendChild(hpBar);
  }//else alert("Div nicht gefunden!");
}

function getNickCase(nick){
  nick=nick.toLowerCase();
  var ol=parent.rightFrame.document.getElementsByTagName("div");
  var i;
  for(i=0;i<ol.length;i++){
    if(ol[i].id && ol[i].id.toLowerCase()==nick)return ol[i].id;
  }
  //alert("nick "+nick+" nicht gefunden!");
}

fightCooldownFunc();
window.setInterval(fightCheckRoom, 550);
Neu sind unter anderem diese beuden Zeilen:

Code: Alles auswählen

var fightCoolColor="#0000ff";
var fightHPColor="#ff0000";
Dort könnt ihr einstellen welche Farben die beiden Balken haben.

Jetzt sieht das schon fast nach einem richtigen beat'em up aus :-)

Re: Spiel: wkFight

Verfasst: 17.11.2010, 17:19
von Maxs
Im IE klappt es einigermaßen, wenn man wieder nach der Waffe atombombe im Script das Komma entfernt :P
Nur manchmal kann es vorkommen, dass man eine Person nicht "verletzten" kann. Dann steht im Chat nur
[User1] verletzt [User2] mit [Waffe].
User1 und User2 werden entsprechend mit den Usern ersetzt und Waffe mit der entsprechenden Waffe. Das geht solange dann nicht, bis User2 mal wieder /fight start schreibt.
Außerdem wenn jemand neu hinzu kommt, dann steht im Chat der Name des Users, der schon im Raum ist. Ich denke, dass ist dazu da, um dem neuen User den Status mitzuteilen, aber das könnte man ja unischtbar machen ;)
Die Balken funktionieren Perfekt ;)

Re: Spiel: wkFight

Verfasst: 17.11.2010, 21:11
von 1. FC Keller
Das mit dem Komma und der leeren Zeile ist korrigiert.

Ich habe inzwischen in IE8 und Opera auch nochmal testen können und es schien soweit zu laufen. Daher habe ich das Script auf der ersten Seite des Threads nun durch die aktuelle Verison mit den

Re: Spiel: wkFight

Verfasst: 21.11.2010, 19:28
von nitnelav
cool,dass du das fight spiel verbessert hast ;)

Allerdings klappt es bei mir jetzt irgendwie nicht mehr... Wenn ich jetzt in den kampfraum gehe,kommt auch nicht mehr: nitnelav tritt dem Spiel mit 200 HP bei

Was könnte ich denn falsch gemacht haben? ^^

Wäre cool,wenn du / ihr mir helfen könntet o.o

Danke!

mfG nitnelav

Re: Spiel: wkFight

Verfasst: 21.11.2010, 21:39
von 1. FC Keller
Eine geschweifte Klammer hatte gefehlt. Wenn du den Code von der ersten Seite nochmal kopierst sollte es klappen.

Re: Spiel: wkFight

Verfasst: 21.11.2010, 21:52
von nitnelav
vielen dank :D es klappt jetzt...
nur irgendwie wird der gegner nicht besiegt,wenn man die atombombe benutzt o.o

EDIT: Mir ist aufgefallen,dass das nicht nur bei Atombombe ist ,sondern man kann schlicht und einfach keinen besiegen...

Re: Spiel: wkFight

Verfasst: 07.03.2012, 19:42
von Lkwmonster
Hallo,
ich habe jetzt ein problem das wenn man in den Raum geht, garnichts angezeigt wird, habe nochmal geguckt, ich habe alles richtig eingegeben trotzdem nichts zu sehen, kann mir jemand helfen?
MfG Lkwmonster