Spiel: wkFight

Infos zu Spielen, Bots und Tools.
1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Spiel: wkFight

Ungelesener Beitrag von 1. FC Keller » 26.08.2010, 10:56

Hallo,

es wurde sich hier ein kleines Kampf-Spielchen für Webkicks-Chats gewünscht. Der Übersicht halber lege ich lieber ein neues Thread an (ich nehme gerne Vorschläge für den Namen an... etwas besseres ist mir gerade nicht eingefallen ^^).
Gespielt wird in einem Raum, in dem jeder auf jeden "einschlagen" kann. Aus Jugendschutzgründen bitte ich darum keine zu brutalen Bezeichnungen z.B. für die Waffen etc. zu verwenden, da ihr sonst gegen die AGB verstoßt und euere Chats geschlossen werden könnten ;)
In der Onlineliste werden 2 Balken unter jedem Nick angezeigt, die die übrigen HP und die "Cooldown-Zeit" darstellen.
Bekämpfen kann man sich dann indem man "/fight WAFFE USER" in den Chat sendet. Wer K.O. ist wird in den eingestellten K.O.-Raum verschoben. Man kann sofort wieder mit vollen HP Teilnehmen indem man wieder in den fight-Raum wechselt.
Die Waffen könnt ihr frei einstellen. Hierbei wird der Name eingestellt (bitte NUR KLEINBUCHSTABEN!). In der geschweiften Klammer kann dann hinter hp: eingestellt werden, wie viele HP die Waffe abzieht. der Timeout ("cooldown") bestimmt wie lange kein weiterer fight-Befehl gesendet weden kann. Ich empfehle hier immer mindestens 2 Sekunden einzustellen da nicht-Admins sonst wahrscheinlich oft einen flood-kick bekommen. Im optionalen Parameter users können bestimmte User eingetragen werden (EBENFALLS NUR IN KLEINBUCHSTABEN), die diese Waffe verwenden dürfen. Wenn der Parameter weggelassen wird darf die Waffe jeder benutzen.

Das folgende Script muss in eine JS-Datei gespeichert und auf einen Webspace geladen werden:
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);
var fightRaum="fight"; hier stellt ihr den Raum ein, in dem das Spiel gespielt werden kann.
var fightKoRaum="hauptchat"; hier hin wird man geschoben wenn man KO ist.
var fightDefaultHP=200; Anzahl der HP die man beim Betreten bekommt.
var fightBefehl="/fight"; Chatbefehl, mit dem gespielt wird
var fightCoolColor="#0000ff"; Farbe des "CoolDown"-Balkens (wie lange man keinen fight-Befehl senden kann)
var fightHPColor="#ff0000"; Farbe des HP-Balkens
Waffen - diese könnt ihr wie oben beschrieben anpassen.
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},
}


Das Script muss wie immer in der ersten und der dritten Ankündigung eingebunden werden:

Code: Alles auswählen

<script type="text/javascript" src="http://URL-zum-Script"></script>
Anschließend müssen die entsprechenden Räume angelegt werden (in meinem beispiel nur der Raum "fight" da man nach dem KO in den Hauptchat geschoben wird). Ein Raumthema könnt ihr zu den Räumen frei einstellen oder auch weglassen.

Und jetzt fehlt natürlich noch der Befehl, mit dem ihr euch anschließend bekriegen könnt. In meinem Beispiel müsste er "/fight" heißen. Ihr könnt aber auch einen anderen Namen wählen - er muss nur in der JS-Datei statt "/fight" eingetragen werden.

Code: Alles auswählen

<script type=text/javascript>if(parent.info){fightBefehlsAuswertung('%user%','%me%');}else{document.write('spielt das fight-Spiel')}</script>
Zuletzt geändert von 1. FC Keller am 21.11.2010, 21:32, insgesamt 4-mal geändert.
Grund: komma aus code entfernt. thx Maxs

nitnelav
Beiträge: 11
Registriert: 09.06.2010, 16:37

Re: Spiel: wkFight

Ungelesener Beitrag von nitnelav » 31.08.2010, 16:07

Hey Super ,Danke 1.FCKeller :DD

Genau so hab ichs mir vorgestellt ^^

Jetzt hab ich nur irgendwie ein Problem :S ( In solchen Sachen kenn ich mich leider nicht aus )

Hab ( glaube ich ) alles so gemacht,wie du es gesagt hattest ,allerdings ,wenn ich den Befehl benutze kommt nur mein Username und dahinter garnichts o.o

Kannst du mir da vllt, bitte helfen? danke^^

Benutzeravatar
hamigra
Beiträge: 567
Registriert: 31.08.2006, 16:02
Wohnort: Werdau
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von hamigra » 01.09.2010, 12:01

Hab auch mal getestet:
Es passiert nach Eingabe der Befehle mit unterschiedlichen Waffen nichts!
Deutsche Sprache ist Freeware, aber nicht OpenSource! Du darfst sie benutzen, aber nicht verändern.

NiciMarci
Beiträge: 74
Registriert: 17.03.2010, 13:49

Re: Spiel: wkFight

Ungelesener Beitrag von NiciMarci » 01.09.2010, 15:51

Also ich habe das Spiel nun auch selber mal seid paar tagen in Benutzung und bei uns läuft eigentlich alles super nur das manches mal anstatt der HP Punkte am Ende dann nur ein NAN kommt ? wofür? ich verstehe deswegen nicht ganz was das zu bedeuten hat aber sonst läuft es ganz gut auch mit den Erweiterung der Waffen war kein Thema...Liebe Grüsse

1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von 1. FC Keller » 01.09.2010, 15:57

Das Problem mit dem NaN kann ich bestätigen.. das kommt vom JS selbst z.B. wenn man versucht von einem Wert der keine Zahl ist etwas zu subtrahieren (abkürzung für "not a number" - "keine Zahl") - so wie es hier hin und wieder aufgrund eines Fehlers im Script passiert.
Woher das Problem genau kommt muss ich mir nochmal ansehen.
Wenn es gar nicht funktioniert könnte das evtl. am Browser liegen... ich habe nur im aktuellen Firefox getestet.

NiciMarci
Beiträge: 74
Registriert: 17.03.2010, 13:49

Re: Spiel: wkFight

Ungelesener Beitrag von NiciMarci » 01.09.2010, 16:17

ah das schonmal gut zu wissen habe es mit firefox getestet dann einmal mit Iexplorer und googlechrome alle zeigten mir diesen fehler aber auch nur bei einer person kam dann der fehler mit dem NAN und wo wir es nur zu zweit gespielt hatten kam es beim zweiten user nur egal wie oft wir es getestet haben ...der erste bekam seine Hp weniger der zweite nur NAN...aber wird sich schon finden habe bei mir die js so : http://file1.npage.de/005776/45/html/fight.js vielleicht ist da ja auch nur der fehler drin..xD

nitnelav
Beiträge: 11
Registriert: 09.06.2010, 16:37

Re: Spiel: wkFight

Ungelesener Beitrag von nitnelav » 01.09.2010, 17:17

jop,also ich habe es ja schonmal mit Keller getestet:
Funktioniert nicht mit IE
Funktioniert mit Firefox*
vllt. auch noch mit anderen Browsern
*Mit Firefox bekommt immer der,der als letztes den Room betreten hat als HP NaN angezeigt.

Aber vielen Dank 1.FC Keller ,dass du dir die Mühe machst und es dir nochmal anschaust^^


mfG nitnelav

Benutzeravatar
hamigra
Beiträge: 567
Registriert: 31.08.2006, 16:02
Wohnort: Werdau
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von hamigra » 01.09.2010, 22:49

Warum es nicht funktionierte war mein Fehler.
Ich hatte den Raum 'Fight' genannt statt 'fight' und hätte es in der js auch groß schreiben müssen. :cry:
Deutsche Sprache ist Freeware, aber nicht OpenSource! Du darfst sie benutzen, aber nicht verändern.

1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von 1. FC Keller » 01.09.2010, 22:50

In Zeile 30 hat ein kleines Päärchen Klammern gefehlt:
fightHP[sender.toLowerCase()]=eingabe[2];
Hab leider gerade wieder nur den aktuellen FF zum testen... vielleicht klappts mit dieser Korrektur ja sogar im IE.
Auf jeden Fall sollte damit das Problem mit den NaN-Werten erledigt sein.

Benutzeravatar
hamigra
Beiträge: 567
Registriert: 31.08.2006, 16:02
Wohnort: Werdau
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von hamigra » 02.09.2010, 07:44

FF und Google funktioniert.
IE 8 nicht.
Deutsche Sprache ist Freeware, aber nicht OpenSource! Du darfst sie benutzen, aber nicht verändern.

nitnelav
Beiträge: 11
Registriert: 09.06.2010, 16:37

Re: Spiel: wkFight

Ungelesener Beitrag von nitnelav » 02.09.2010, 19:07

mhh erstmal danke 1.FC Keller :D

nur leider hab ich ein problem:

es klappt alles super,nur wenn mich einer angrefit kommt noch das problem mit NaN :(
:(

Was könnte ich noch ändern?

mfG nitnelav

1. FC Keller
Moderator
Beiträge: 866
Registriert: 04.07.2004, 17:10
Wohnort: heimat:// Thüringen.Deutschland.eu/ Zeulenroda
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von 1. FC Keller » 03.09.2010, 11:45

hast dus mal mit cache leeren versucht?
ich war in deinem chat und es funktioniert einwandfrei.

nitnelav
Beiträge: 11
Registriert: 09.06.2010, 16:37

Re: Spiel: wkFight

Ungelesener Beitrag von nitnelav » 05.09.2010, 14:51

oh ja danke,jetzt klappts^^ vieeeelen dank für alles :DDDD

Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Re: Spiel: wkFight

Ungelesener Beitrag von Maxs » 15.09.2010, 05:50

Ich habe den Fehler gefunden, warum es im IE nicht funktioniert(e). Es ist ein kleiner Leichtsinnsfehler, den der IE nicht verzeiht... Passiert mir aber auch öfters, wenn ich scripte.
In Zeile 10 steht:
atombombe:{hp:3000, users:["dg"], timeout:60000},
Das "," muss weg, da danach ja kein Argument (weiß nicht wie genau man das im Objekt nennt) im Objekt mehr kommt. Es kommt danach in der Zeile später die Klammer } und deshalb darf kein Komma mehr dastehen, denn der JavaScript-Interpreter vom IE ist so streng und erwartet noch etwas. Die anderen Browser verzeihen den Fehler, der IE nicht.
Um es einfach für andere auszudrücken, entfernt einfach das Komma da :)
Und immer daran denken, dass bei dem letzten Argument (?), also nach der letzten Waffe, bei "var fightWeapons={...}" kein Komma stehen darf.
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

nitnelav
Beiträge: 11
Registriert: 09.06.2010, 16:37

Re: Spiel: wkFight

Ungelesener Beitrag von nitnelav » 01.11.2010, 19:34

ich hätte da noch ne frage ^^

Wäre es theoretisch möglich das so zu machen,dass man ,währenddessen dem cooldown einer attacke nur keine attacken benutzen kann aber trotzdem andere sachen schreiben kann?

wäre cool :D

mfg nitnelav

Antworten

Wer ist online?

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