anpera.net
https://anpera.homeip.net/phpbb3/

Buffs sammeln, aber wie?
https://anpera.homeip.net/phpbb3/viewtopic.php?f=25&t=5364
Seite 1 von 1

Autor:  Saaxa [ Di 11 Okt, 2011 21:28 ]
Betreff des Beitrags:  Buffs sammeln, aber wie?

hiho, ich sitz schon tagelang an einer multiplayer-dungeon, klappt durchaus gut (prototyp muss noch an unsinn gekürzt werden aber der kampf an sich funzt)

stehe aber vor einem problem...
ich möchte, wenn mehrere spieler in der dungeon sind, die buffs aller sammeln (mountbuff, violets buff, etc) und dann auf alle wieder verteilen.... leider werden bei mir zZt 'nur' die buffs an alle geschickt, von dem der gerade eine aktion ausführt...
Bsp:
"Ich geh rein in den kampf incl Mount+Violets Buff, ein weitere Spieler nutz dann grad 'Regeneration'.... dann bekommen alle den Buff 'Regeneration', aber die eigenen Buffs sind weg...."

meine idee ist eig die buffs aller in table `dungeon` spalte `bufflist` zu sammeln und bei jeden neuen seitenaufruf sendet der user sein/e Buff/s zum table und aktualisiert gleichzeit seine eigenen buffs (ohne das buffs doppelt vorkommen)
also $session[bufflist]['mp1'][name]='Regeneration' darf nur 1x vorhanden sein
allerdings kann $session[bufflist]['mount'] öfter vorkommen, da sie sich durch verschiedene tiere im namen unterscheiden
s:4:"name";s:15:"Biss des Wolfes"
s:4:"name";s:9:"Hundebiss" etc


hat wer mein vorhaben verstanden und kann mir weiterhelfen???

Autor:  Jack [ Di 11 Okt, 2011 21:35 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

*scratch* .. Vielleicht versuchen es irgendwie Rundenbasiert zu machen?

Also wagen wir 3 Spieler sind drin..

Spieler 1 macht xy -> wird abgespeichert in der Tabelle
Spieler 2 macht zz -> abgespeichert
Spieler 3 macht pp -> abgespeichert

So hier prüfen ob alle 3 was getan haben.. und dann erst die Buffs auslesen und ausführen

Autor:  Saaxa [ Di 11 Okt, 2011 22:02 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Jack hat geschrieben:
*scratch* .. Vielleicht versuchen es irgendwie Rundenbasiert zu machen?

Also wagen wir 3 Spieler sind drin..

Spieler 1 macht xy -> wird abgespeichert in der Tabelle
Spieler 2 macht zz -> abgespeichert
Spieler 3 macht pp -> abgespeichert

So hier prüfen ob alle 3 was getan haben.. und dann erst die Buffs auslesen und ausführen


zZt hab ich autorefresh (alle 2sek bis meine oder moster hp down sind) und bei jedem seitenaufbau

--->
$sql = "SELECT * FROM accounts WHERE loggedin = 1 AND location = '101'
ORDER BY level DESC;
";
$query =db_query($sql);

while($row = db_fetch_assoc($query)){
$sql = "UPDATE accounts SET bufflist='".addslashes($session[user][bufflist])."' WHERE location='101'";
db_query($sql) or die(db_error(LINK));
}
<---

denke mal das mein fehler bei SET bufflist='".addslashes($session[user][bufflist])."' liegt.
gibt es eine möglichkeit buffs zu addieren, statt alles zu überschreiben?

Autor:  Eliwood [ Mi 12 Okt, 2011 05:57 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

1) Über eine Tabelle "addbuff" und dem Aufrug bei jeder einzelnen Person, um das Buff-Array des aktuellen Users zu verändern
2) Du schreibts das ganze Buffsystem um (was eh mal getan werden müsste) und sorgst dafür, dass die Buffs eh in einer Tabelle liegen - und mit User-ID aktiv bei einem Spieler sind und ohne User-ID (also ähnlich wie bei den Items) als Prototyp funktionieren.

Autor:  Saaxa [ Do 13 Okt, 2011 21:14 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

hmmmm, hört sich nach noch mehr arbeit an als ich damit eh schon hatte :(

werd mal die Buffs auf ein paar wenige verringern (buffs die den spieler heilen zB) und diese buffs mal versuchen als item(zauber) zu schicken an einen, nicht alle... die werden dann bei eintreffen automatisch ausgelöst und danach das item wieder gelöscht...

das müsste bestimmt leichter sein als alle fähigkeiten umzuschreiben...

meld mich wenn ich soweit bin zurück^^

Edit: FERTIG!!!

habe nun testbuffs(arrays) erstellt und sie in meine dungeon eingebaut...

sieht nun so aus:
PHP:
nach xxxx tests funzt es bestens, buffs kommen alle beim ausgewählten user an....
werde daraus noch eine function mit sämtlichen spezialfähigkeiten bauen, die die fightnav für dungeons ersetzen wird...

if ($HTTP_GET_VARS[buffen]=="test"){
$acctid=$HTTP_GET_VARS[acctid];
$buff = array("name"=>"`1Verteidigungsaura`0","rounds"=>10,"defmod"=>1.1,"activate"=>"roundstart");
$buff=serialize($buff);
db_query("INSERT INTO items (owner,class,buff) VALUES ($acctid,'Buff','$buff')");
redirect($gotolink);
}
if ($HTTP_GET_VARS[buffen]=="test2"){
$acctid=$HTTP_GET_VARS[acctid];
$buff = array("name"=>"`2Aura der Offensive`0","rounds"=>10,"atkmod"=>1.1,"activate"=>"roundstart");
$buff=serialize($buff);
db_query("INSERT INTO items (owner,class,buff) VALUES ($acctid,'Buff','$buff')");
redirect($gotolink);
}

$sql="SELECT * FROM items WHERE class='Buff' AND owner=".$session[user][acctid]." ORDER BY id";
$result=db_query($sql);
for ($i=0;$i<db_num_rows($result);$i++){
$row = db_fetch_assoc($result);
if (strlen($row[buff])>8){
$row[buff]=unserialize($row[buff]);
if ($row['class']='Buff') $session[bufflist][$row[buff][name]]=$row[buff];
db_query("DELETE FROM items WHERE id=$row[id]");
}
}

$sql = "SELECT login,level,name,acctid FROM accounts WHERE acctid<>'".$session[user][acctid]."' AND loggedin = 1 AND location = '101' AND laston>'".date("Y-m-d H:i:s",strtotime("-".getsetting("LOGINTIMEOUT",900)." seconds"))."' ORDER BY level DESC;
";
$query =db_query($sql);

while($row = db_fetch_assoc($query)){
addnav("TESTBUFF");
addnav("`^".$row[name]."`1Test1","test.php?op=fight&buffen=test&acctid=".HTMLEntities($row['acctid']));
addnav("`^".$row[name]."`2Test2","test.php?op=fight&buffen=test2&acctid=".HTMLEntities($row['acctid']));
}


Arrays jetzt noch alle möglichen erstellen, links anpassen und abfragen davor wie zB
if ($session[user][darkartuses]>4 && $session[user][macht]>74 )

oki, damit kann thema geschlossen werden
Dank euch dennoch für antworten, auch wenn ich buffs net mehr sammel, sondern einzel vergebe

Autor:  MySql [ Fr 21 Okt, 2011 22:31 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Darf ich Dir nahe legen, dass $HTTP_{...}_VARS veraltet ist? Nutze doch bitte $_{...}.

PHP:
$get = $HTTP_GET_VARS['get'];
$get = $_GET['get'];


Desweiteren benutze doch bitte Single oder Double Quotes. (Bei den Variablen)


PHP:
$var[var];
=
$var['var']; ($var["var"];)


My.

P.S: Ich lasse den Thread geöffnet, da es eventuell andere User gibt, die ähnliche Fragen oder Probleme haben und sich dann hier melden können.

Autor:  Saaxa [ So 23 Okt, 2011 21:27 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

geb dir recht mit veraltet, aber da ich faul bin und meine dungeon ohne probleme laufen, belass ich es erst mal dabei^^
steht natürlich jedem frei wie perfekt sein code ist.
ich geh nach meinem prinzip, da ich sql oder php nie gelernt habe

ich geh nach folgendem vor:
if (weisse Seite) {
--> schauen, woran es liegt
--> evtl Fehler beheben
}else{
--> so lassen, wie es ist
}

Autor:  Harthas [ Mo 24 Okt, 2011 07:19 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Dieser Ansatz ist natürlich nicht schlecht, denn "Never change a running system!".
Allerdings läufst du so in noch grössere Probleme, sollte dein Hosting-Anbieter irgendwann einmal sein Hosting-System updaten. (Sollte aber bei einem guten Provider vorher angekündigt werden ;))

Autor:  Saaxa [ Mo 24 Okt, 2011 23:05 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

$HTTP_GET_VARS in $_GET, etc ändern bekomm ich hin...
aber mit
Zitat:
$var[var];
=
$var['var']; ($var["var"];)

kann ich nichts anfangen.
wie man merkt, habe ich NULL plan von PHP. Ich bastel nur gern und hab mir selbst durch lesen, lesen, lesen und testen das nötigste beigebracht. Mittlerweil schreib ich selber scripte, die problemlos laufen auch wenn sie vielleicht mit veralteten befehlen ausgeführt werden.
Aber auch da werde ich noch zu lernen^^ (ist halt nur hobby) ;)

Autor:  Linus [ Di 25 Okt, 2011 15:33 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Hmja, manch Einer macht hier auf dicke Hose, und vergisst dabei wie klein er selbst mal angefangen hat! ;)

Also mal zum mit schreiben: In deinem Beispiel repräsentiert $row ein Array. $row['name'] und $row['class'] sind Felder aus diesem Array. name und class sind Arrayschlüssel. Zu beachten ist, dass mann Arryschlüssel immer quoten sollte, also in Singelquotes einschließen, um eine Verwechselung mit evtl. definierten Konstanten zu vermeiden!

addnav("`^".$row[name]."`1Test1",.... ist also keine korrekte Schreibweise

addnav("`^".$row['name']."`1Test1",.... wäre richtig

Autor:  Saaxa [ Mi 26 Okt, 2011 17:33 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

also ist mit
$var[var];
=
$var['var']; ($var["var"];)

gemeint das ich zB $session[user][acctid] in $session['user']['acctid'] ändern sollte?

Autor:  Eliwood [ Mi 26 Okt, 2011 17:35 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Ja. Ich hatte dazu irgendwo mal n'erklärenden Artikel geschrieben - nur keine Ahnung mehr, wo der rumliegt. Egal, die Kurzversion:

Strings müssen mit Quotes (Also Single Quotes (eigentlich Minutenstriche bei Gradangaben), ', oder den Double Quotes (eigentlich die Sekundenstriche, im Zusammenhang mit dem imperialien Masseinheiten auch das Zeichen für eine Angabe in Zoll)) umgeben werden, damit der Interpreter, also das Programm, das deinen Code ausführt, weiss, dass es auch eine Zeichenkette ist.
Die Quotes werden erstmal benötigt, um Sätze (mit Leerzeichen, Sonderzeichen und ähnlichem) von Programmcode unterscheidbar zu machen. Jetzt ist es aber so, dass Einwort-Zeichenketten weder Sonder- noch Leerzeichen haben - und deshalb eigentlich auch keine Quotes bräuchte, um den Zusammenhang der Kette kennzuzeichnen.

Benötigt es aber trotzdem. In jeder Programmiersprache - und vor allem bei Interpretersprachen wie bei PHP. Für PHP sind nämlich Zeichenketten ohne Quotes, die keine folgende Klammern haben, nämlich zuerst einmal eine Konstante. Also was ähnliches wie eine Variable, nur ohne $-Zeichen und mit einem festen Wert, der sich niemals während einem Script ändern kann. PHP ist aber so... sagen wir mal, zu gutmüdig, und nimmt, wenn die Konstante nicht definiert ist, dass es sich nur um vergessene Quotes handelt. Deshalb funktioniert auch der in LoGD verbreitete Code ohne "Probleme" (zumindest, wenn man Fehlermeldungen unterdrückt).

Jetzt stell dir aber mal folgendes Beispiel vor:
$this->bbcode_second_pass_code('', '
$user['gold'] = 2300;
$user['gems'] = 5;
')
Wir können nun Tests laufen lassen:
$this->bbcode_second_pass_code('', 'print $user['gold']; // Gibt 2300 aus
print $user['gems']; // Gibt 5 aus
print $user[gold]; // Gibt 2300 aus
print $user[gems]; // Gibt 5 aus.')
Funktioniert scheinbar. Steht aber irgendwo im Code folgendes:
$this->bbcode_second_pass_code('', 'define('gold', 'gems');')
Ändert sich die Ausgabe, die danach kommt:
$this->bbcode_second_pass_code('', 'print $user['gold']; // Gibt 2300 aus
print $user['gems']; // Gibt 5 aus
print $user[gold]; // Gibt 5 aus (!)
print $user[gems]; // Gibt 5 aus.')
Das liegt daran, dass gold nun eine Konstante ist und den Wert 'gems' beinhaltet, also greift die zweitletzte Zeile nicht den Wert des Golds, sondern den der Edelsteine ab.

Autor:  Saaxa [ Mi 26 Okt, 2011 17:38 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

verstanden :)

Autor:  Eliwood [ Mi 26 Okt, 2011 17:48 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Saaxa hat geschrieben:
verstanden :)


Beachte bitte meinen Edit ;)

Autor:  Saaxa [ Mi 26 Okt, 2011 20:20 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

sinn verstanden, aber nach umsetzung.... AAAAAH!

academy.php: überall bei $session[user][...], $row[...] ein ' gesetzt und alle $HTTP_GET_VARS in $_GET geändert.

und nun
PHP:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/......./html/sfinger/academy.php on line 236


line 236:
PHP:
output("`vDer alter Zauberer begutachtet '.$row['name'].'`v. Dann überreicht er dir sorgfältig abgezählt ".($row['gold']?"`^'.$row['gold'].' `vGold":"")." ".($row['gems']?"`#'.$row['gems'].'`v Edelsteine":"")." und lässt den Zauber verschwinden. Wörtlich. ");


sollt ich nun noch was beachten?
vorher waren sämtliche "gems", "gold", etc ohne '

Autor:  Eliwood [ Mi 26 Okt, 2011 20:43 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

Saaxa hat geschrieben:
sinn verstanden, aber nach umsetzung.... AAAAAH!

academy.php: überall bei $session[user][...], $row[...] ein ' gesetzt und alle $HTTP_GET_VARS in $_GET geändert.

und nun
PHP:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/......./html/sfinger/academy.php on line 236


line 236:
PHP:
output("`vDer alter Zauberer begutachtet '.$row['name'].'`v. Dann überreicht er dir sorgfältig abgezählt ".($row['gold']?"`^'.$row['gold'].' `vGold":"")." ".($row['gems']?"`#'.$row['gems'].'`v Edelsteine":"")." und lässt den Zauber verschwinden. Wörtlich. ");


sollt ich nun noch was beachten?
vorher waren sämtliche "gems", "gold", etc ohne '


Oh... An diese Möglichkeit hab ich nicht gedacht. Du musst mit Variablen innerhalb von Strings aufpassen - da setzt man normalerweise keine Quotes, oder Eckklammern drum herum. Immerhin hast du erkannt, dass du die Strings unterbrechen solltest, um eine Variable zu setzen, machst aber den Fehler, dass du einen String, der in Double-Quotes stehst, mit Single-Quotes versuchst umzubrechen.

Hats du keinen Editor mit Syntax-Hervorhebung? Da würdest du den Fehler nämlich entdecken, da die String-Farbe sich trotz deines "Endes" nicht ändert im Editor. Richtig wäre es:

PHP:
output("`vDer alter Zauberer begutachtet ".$row['name']."`v. Dann überreicht er dir sorgfältig abgezählt ".($row['gold']?"`^".$row['gold']." `vGold":"")." ".($row['gems']?"`#".$row['gems']."`v Edelsteine":"")." und lässt den Zauber verschwinden. Wörtlich. ");


Oder (alternativ):
PHP:
output("`vDer alter Zauberer begutachtet {$row['name']}`v. Dann überreicht er dir sorgfältig abgezählt ".($row['gold']?"`^{$row['gold']} `vGold":"")." ".($row['gems']?"`#{$row['gems']}`v Edelsteine":"")." und lässt den Zauber verschwinden. Wörtlich. ");

Autor:  Saaxa [ Mi 26 Okt, 2011 20:55 ]
Betreff des Beitrags:  Re: Buffs sammeln, aber wie?

hab mich bisher gut mit normalen editor von windows geschlagen^^
wenn datei-übergreifend arbeite, dann nutz ich auch mal TextPad (an html mit phase 5 html-editor)

oki doki, dank dir eli für dein bemühen
werde datei nochmal bearbeiten und erneut uppen


EDIT:
Zitat:
Lektion gelernt (hoff ich^^)
Klappt!

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/