Schneeball-Schlacht

Glare
Titel: Schneeball-Schlacht
Version: 1.0
Beschreibung: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Name des Hacks: Schneeballschlacht für 2.1
+
+Geschrieben von: Glare
+
+Demo: ab 1.12. auf http://www.NieWiederAlleine.de
+
+Voraussetzungen: WBB 2.1.x
+ Guthabenhack 1.9.x von Lasall
+
+Was macht der Hack: Mit diesem Hack könnt ihr euren Usern eine
+ Schneeballschlacht bieten. In den jeweiligen
+ Profilen können Schneebälle geworfen werden.
+ Nach 10 Treffern ist ein User eingefroren und
+ kann erst wieder mitmachen wenn er aufgetaut
+ wurde.
+
+Copyright: Dieser Hack darf nur von mir (Glare) angeboten
+ werden. Support gibt es im Supportthread, nicht
+ per PN, Mail oder ICQ!
+ Das Copyright darf nicht verändert oder ent-
+ fernt werden!!!
+
+Distanzierung:
+ Ich übernehme keine Haftung für eventuelle Schäden,
+ Fehler oä., die mit der Benutzung dieses Hacks
+ entstehen könnten. Ich weise ausdrücklich daraufhin,
+ daß der Einbau auf eigene Gefahr geschieht.
+ Deshalb gilt: Backup der Datenbank und der Dateien
+ machen!!!!! Es gibt keinen Anspruch auf Support,
+ Gewährleistung und Ersatz.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Neue Version vom 30.11.04 hochgeladen.

Geändert:

Alles auf Sprachvariablen umgestellt
Schneemenge läßt sich im Profil ändern
Infoseite verbessert
Config Datei eingefügt, womit sich die Werte verstellen lassen
Guthaben Edit-Fehler behoben
.
.
.
?
----
Demo: http://www.NieWiederAlleine.de

weiter zum Download
maxii
Was meinst du, funtz das auch im 2.2.0
Glare
Keine Ahnung, habe noch nie ein 2.2.x genutzt
brendy
Gibt es kein direktes Bild?
Glare
Ein direktes Bild? Was meinst du damit? verwirrt
Lasall
Er meint bestimmt nen Screenshot?

Sollte auch auf wbb 2.2 laufen, aber nicht bei register_globals = off ...
maxii
Zitat:
Original von Lasall
aber nicht bei register_globals = off ...


wie meinst du das gernau ??
Lasall
Zitat:
Original von maxii
Zitat:
Original von Lasall
aber nicht bei register_globals = off ...


wie meinst du das gernau ??


Zitat:
Register_Globals ist eine PHP interne Option die automatisch globale Variablen unter ihrem Eigen-Namen zur Verfügung stellt. Typisches Beispiel: Ein Formular hat ein Textfeld "eingabe" - bei register_globals=on steht im Empfängerskript unter $eingabe der eingegebene Wert zr Verfügung.

Das scheinbar so gemütliche System hat schwerwiegende Nachteile: Werte werden ohne Prüfung übernommen. $eingabe wird genutzt, gleich ob der Wert aus einem Skript stammt, per GET oder POST übermittelt wurde. Darum gibt es seit 4.1 die Variablen _GET, _POST etc in denen diese Variablen auch zur Verfügung stehen - und man weiss genau worauf man zugreift! So steht das Feld "eingabe" bei einem Formular das per POST arbeitet danach unter $_POST['eingabe'] zur Verfügung

Es ist somit nicht mehr möglich, per GET einen Wert unterzuschieben, da er explizit in der POST variable gesucht wird. Das spricht für saubereren Code und weniger Sicherheitslücken
Power_Baer
edit

kann gelöscht werden sry
stepreis
erstmal danke für die umsetzung und das zur verfügung stellen...

hab aber gleich ein paar sachen...

zum einen gibt diese zeile in der sql

Zitat:
ENGINE=MyISAM DEFAULT CHARSET=latin1;


eine fehlermeldung beim importieren aus...

zum andern habe ich für mich jetzt mal einiges ein bisschen mehr ans wbb-design angepasst...

SchneeballSchlacht-Info

stelle ich auch gerne zur verfügung, wenn interesse besteht...

dann ist der teil im profile.tpl nicht ganz richtig...

bisher:

Zitat:
<if($sameuser != 1)><then>
<span class="smallfont">Du hast noch $wbbuserdata[schneevorrat] Gramm Schnee. $user_info[username] wurde <if($user_info[schneehit]==0)><then>noch</then><else>schon</else></if> $user_info[schneehit] mal getroffen.</span>
</then></if>


ergibt als anzeige im profil bei 0 / mehreren treffern:

username wurde noch 0 mal getroffen / username wurde schon 4 mal getroffen

wenn man dies so einsetzt:

Zitat:
<if($sameuser != 1)><then>
<span class="smallfont">Du hast noch $wbbuserdata[schneevorrat] Gramm Schnee. $user_info[username] wurde <if($user_info[schneehit]==0)><then><b>noch nicht</b></then><else>schon $user_info[schneehit] mal</else></if> getroffen.</span>
</then></if>


ergibt als anzeige im profil bei 0 / mehreren treffern:

username wurde noch nicht getroffen / username wurde schon 4 mal getroffen

jetzt bin ich im moment noch ein wenig am tüfteln, da ich die userpage eingebaut habe und wenn bei mir im board jemand auf ein profil von einem user klickt - und dieser hat eine userpage eingerichtet, landet man auch gleich in der userpage und nicht im profil... hat der user keine userpage eingerichtet kommt man ganz normal ins profil...

damit hat der hack hier auch ein problem, wenn man im profil eines users einen schneeball wirft...

bei schnee kaufen wird bei mir im dropdown feld nichts angezeigt...

da ich das erweiterte profil eingebaut habe (2-spaltig von Piti auf http://www.generation2002.de), habe ich mir den teil für das profile.tpl mal komplett angepasst... auf wunsch poste ich das dann gerne hier mit hinein...
sieht jetzt wie im Bildanhang bei mir im profil aus:

grüssle vom step
chSamy
Hi könntest du die erweiterung für das Profil von Piti bitte bei g2002 auch in die Datenbank eintragen den ich glaube dort gehört es dann hin oder poste es dort im Support Thread währe eine nette sache.
stepreis
hm...

bin mir da nicht ganz so sicher, ob es da hingehört...
da es ja eher zu diesem hack hier gehört...
und dann doch in die readme von diesem hack mit hinein sollte...

"glare" kann sich ja mal äussern... ob er das mit aufnehmen will...

der einzufügende teil würde dann so aussehen:

Zitat:
erweitertes Profil von Piti bearbeiten:

Suche:

<tr align="left">
<td style="width:30" class="tableb" align="left" nowrap="nowrap"><span class="smallfont">{$lang->items['LANG_MEMBERS_PROFILE_LASTACTIVITY']}</span
></td>
<td style="width:70%" class="tablea" align="left"><span class="smallfont">$la_date <span class="{time}">$la_time</span></span></td>
</tr>


Dadrunter:

<tr>
<td style="width:30%" class="tableb" align="left" valign="top">
<span class="smallfont"><b>Schneeball-Schlacht</b></span>
<br /><br />
<img src="./images/snow$user_info[schneehit].gif">
</td>
<td style="width:70%" class="tablea" align="left">
<if($sameuser != 1)><then>
<span class="smallfont">Du hast noch $wbbuserdata[schneevorrat] Gramm Schnee. $user_info[username] wurde <if($user_info[schneehit]==0)><then><b>noch nicht</b></then><else>schon $user_info[schneehit] mal</else></if> getroffen.</span>
</then></if>
<br /><hr />
<form name="form1" method="post" action="./winterevent.php?action=do&sid=$session[hash]">
<span class="smallfont">
<input type="hidden" name="from" value="$wbbuserdata[userid]">
<if($notenoughforsnowball != 1 && $sameuser != 1 && $opferfrown != 1 && $werferfrown != 1)><then>
<input type="radio" name="what" value="Schneeball" checked> Schneeball werfen (kostet 25 Gramm)
</then></if>
<if($notenoughforsnowball == 1)><then><br />- Du hast nicht genug Schnee zum werfen.</then></if>
<if($sameuser == 1)><then><br />- Du kannst Dich nicht selber bewerfen.</then></if>
<if($opferfrown == 1)><then><br />- $user_info[username] ist eingefroren.</then></if>
<if($werferfrown == 1)><then><br />- Du bist eingefroren, warte bis Dich jemand auftaut.</then></if>
<if($notenoughfordrink != 1 && $sameuser!= 1 && $opferfrown == 1 && $werferfrown != 1)><then>
<input type="radio" name="what" value="Trinken"> heißes Getränk (kostet 200 Gramm)<br /></span>
</then></if>
<br /><br />
<input type="hidden" name="against" value="$user_info[userid]">
<if($notenoughforsnowball != 1 && $sameuser!= 1 && $werferfrown != 1)><then>
<input type="submit" value="Schneeball werfen!">
</then></if>
</form>
</then></if>
<br /><hr /><br />
<form name="form10" method="post" action="./winterevent.php?action=buysnow&sid=$session[hash]">
<span class="smallfont">Schnee kaufen: <select name="buysnow"><option>$buysnow</option> </select>
Gramm. (100 Credits je 100 Gramm)</span>
<input type="hidden" name="buyer" value="$wbbuserdata[userid]">
<input type="hidden" name="opfer" value="$user_info[userid]">
<input type="submit" value="Kaufen">
</form>
<br /><hr /><br />
<span class="normallfont"><b>Historie von $user_info[username]</b> (Nur die neuesten 20 Einträge)</span><br />
<span class="smallfont">$snow_viewbit</span><br />
<span class="smallfont"><b><a href="./profile.php?userid=$user_info[userid]&action=snowhist&sid=$session[
hash]" target="_blank">Die komplette Historie</a></b></span>
</td>
</tr>


in der winterevent.php habe ich auch das NWA durch $master_board_name ersetzt...

grüssle vom step

p.s.:
die änderung durch die userpage erweiterung sieht wie folgt aus:

Zitat:
öffne: profile.php

Suche:

$userid=intval($_GET['userid']);

darunter einfügen:

$userabfrage = $db->query_first("SELECT userid FROM bb".$n."_userpages WHERE userid='$userid'");
if($userabfrage['userid']==$userid && $profil==0){
header("LOCATION: userpage_show.php?action=showpage&type=showgb&userid=$userid&sid=$session[h
ash]");
exit();
}else


das ganze müsste man doch nur in eine abfrage setzen, wenn die aufzurufende durch winterevent erfolgte, dann mache diese überprüfung nicht und gehe gleich wieder ins profil...
vielleicht hat "glare" ja auch noch ne lösung dafür :-)
Glare
Ich werde mich heut nachmittag mal dran setzen.

Zu dem leeren Dropdown-Feld: Hast du denn den Guthaben-Hack von Lasall installiert?

Zitat:
+Voraussetzungen: WBB 2.1.x
+ Guthabenhack 1.9.x von Lasall
Marvin
Hallo,

habe alles so eingebaut und der Guthabenhack ist auch drin, aber wenni ch auf ein Profil klicke kommt:

Zitat:
SQL-DATABASE ERROR

Database error in WoltLab Burning Board (2.1.5): Invalid SQL: SELECT * FROM bb1_snow WHERE opferid = 1 ORDER BY snowid DESC LIMIT 0,20
mysql error: Table 'test.bb1_snow' doesn't exist
mysql error number: 1146
mysql version: 4.0.20a-debug-log
php version: 4.3.7
Date: 22.11.2004 @ 12:17
Script: /forum/profile.php?userid=1&sid=
Referer: http://127.0.0.1/forum/


Möchte ich die .sql-Datei per phpMyAdmin einfügen kommt:

Zitat:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=latin1' at line 9


Was muss ich denn da ändern ?

Vielen Dank.
stepreis
@marvin

die tabelle bb1_snow existiert nicht bei dir...

importiere die sql datei nicht übers acp sondern per phpmyadmin...
und bei mir hat es mit dieser funktioniert:

Zitat:
CREATE TABLE bb1_snow (
snowid int(11) NOT NULL auto_increment,
`time` int(11) NOT NULL default '0',
opferid int(11) NOT NULL default '0',
werferid int(11) NOT NULL default '0',
werfername varchar(50) NOT NULL default '',
`action` int(11) NOT NULL default '0',
PRIMARY KEY (snowid)
)

ALTER TABLE `bb1_users` ADD `schneevorrat` INT(11) DEFAULT '1000' NOT NULL;
ALTER TABLE `bb1_users` ADD `schneehit` INT(11) DEFAULT '0' NOT NULL;


wenn du die sql schon importiert hast und der fehler trotzdem kommt schau in deiner db nach ob die tabelle bb1_snow vorhanden ist und ob in der tabelle bb1_users ganz unten die beiden felder schneevorrat und schneehit drin sind...

@glare

guthaben hack ist natürlich vorhanden, da ja auch vorraussetzung :-)
die fehlerhafte anzeige kam durch den eingesetzten teil in der profile.php von der userpage erweiterung...
hab die weiterleitung in die userpage_show mal auskommentiert und nun funktioniert das alles...
liegt also generell nicht am hack, sondern daran, dass er mit dieser weiterleitung nicht klar kommt...

grüssle vom step
Marvin
Ja, danke stepreis. So hatte ich das dann auch gemacht mit der MySQL.
stepreis
smile na dann ist ja alles gut...

@glare

was ich noch nützlich finden würde, wäre eine übersicht, aller teilnehmenden user...
eine kleine auflistung der user die bereits einen schneeball geworfen haben oder von einem getroffen wurden...
und da hinter steht dann zum beispiel der aktuelle zustand (eingefroren, 5 mal getroffen oder so)...
und wenn man es dann noch ein bisschen komfortabler machen möchte, könnte man noch ne auflistungsoption zur verfügung stellen großes Grinsen
sortieren nach usernamen, eingefroren oder anzahl der treffer großes Grinsen


p.s. kaum 10 stunden online der hack und alle sind se eingefroren bei mir großes Grinsen
Glare
Hmm, da ja alle nötigen Daten in der bbX_snow drinstehen, sollte die Übersicht kein Problem sein. Ich werde mal schauen ob ich heute abend dazu komme.

Wie sieht es denn bisher mit der Nutzbarkeit aus?
Sind die Zufallsfunktionen ok, oder stören die eher?
Wie kommt der Hack bei deinen Usern an?
visionZ
Geht der auch fürs wBB 2.0?
Und wie siehts mit Firefox aus?
Glare
Natürlich läuft er mit Firefox!

Hmm, 2.0? Glaub ich nicht...