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
![Winken ;)](./images/smilies/icon_wink.gif)
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:
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ä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(". Ü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>