anpera.net
https://anpera.dyndns.org/phpbb3/

NPC-Script
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=2608
Seite 1 von 1

Autor:  Montekar [ Di 06 Jun, 2006 13:30 ]
Betreff des Beitrags:  NPC-Script

Ja Hallo erstmal :-)

Ich entwickle gerade ein NPC-Script für LOGD. Dabei hab ich ein kleines Problem: Mein Bot soll ja nicht immer reden! Deswegen wäre es ja wohl dumm, eine e_rand Funktion zu nehmen weil wenn z.B. 50 User auf dem Dorfplatz sind... Kann man da was machen?

Edit: Das Script kommt ja auf den Dorfplatz


Und noch ein Problem: Der Bot soll irgendwie auf Kommentare reagieren können. Gibts da ne möglichkeit mit substr() ?

Autor:  Montekar [ Mi 07 Jun, 2006 18:08 ]
Betreff des Beitrags: 

Hallo? Hilfe...

Autor:  Amerilion [ Mi 07 Jun, 2006 23:53 ]
Betreff des Beitrags: 

Mmmm, mir fällt dazu ein das das Bot System was hier irgendwo auch schon zum download steht mit e_rand arbeitet, kannst dir das mal anschaun (Suche nach NPC, hab grad kein Elan, will ins Bett ;) )

Autor:  Montekar [ Do 08 Jun, 2006 15:27 ]
Betreff des Beitrags: 

Ja das hatt ich auch mal umgebaut aber da is wohl n Fehler drin...

Autor:  Eliwood [ Do 08 Jun, 2006 15:57 ]
Betreff des Beitrags: 

Montekar hat geschrieben:
Ja das hatt ich auch mal umgebaut aber da is wohl n Fehler drin...


Fehler suchen & beheben kommt dir aber nicht in den Sinn, nehm ich an? :?

Autor:  Amerilion [ Do 08 Jun, 2006 16:17 ]
Betreff des Beitrags: 

:???:

Nun bin ich verwirrt...

Hier der Thread mit den alten Bot Skript, einschließlich Fehlermeldung von dir


Hier die Lösung, auch von dir

:???:

Ich habs bei mir getestet, das geht mit deinem Fix... Man muss es nur noch übersetzten/anpassen...

Autor:  Montekar [ Do 08 Jun, 2006 16:26 ]
Betreff des Beitrags: 

@Eliwood:
Das is ja nicht das Problem das ich meine...
Das mit den Fehlern bekomm ich schon hin nur das da oben checkt ich hat nicht.

@Amerilion:

Das war aber nicht mein Fehler ;-)

Autor:  Montekar [ Do 08 Jun, 2006 16:30 ]
Betreff des Beitrags: 

So, ich hab jetzt was, aber da ist ein Fehler und ich find ihn nicht alleine.

$this->bbcode_second_pass_code('', '
INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','','Was ist?'

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 '' at line 1
')

So und der PHP (bzw. SQL) Teil dazu:

[php]
$sql1 = "SELECT * FROM accounts WHERE npc='1'";
$result = db_query($sql1);

$sql2="UPDATE accounts SET laston = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."', alive = '1', loggedin = '1', lasthit = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."', npccommons = '".$row['npccommons']."' WHERE login = '".$row[login]."'";
db_query($sql2);

for ($i=0;$i<db_num_rows($result);$i++) {
$row = db_fetch_assoc($result);
}

$result = db_query("SELECT section,author FROM commentary WHERE comment LIKE '%Seth%' LIMIT 1");
$row = db_fetch_assoc($result);
if ($result>0) {
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."','Was ist?'";
db_query($sql3) or die(db_error(LINK));
}
[/php]

Der obere Teil geht, nur halt nicht die "Antworte-Funktion". Kann mir da vielleicht jemand helfen?

Edit: Das ganze soll so Funktionieren, das wenn der Kommentar halt Seth enthält "fragt" Seth: Was ist?

Autor:  Auric [ Do 08 Jun, 2006 19:24 ]
Betreff des Beitrags: 

[php]$row['npccommons']."' WHERE login = '".$row[login][/php]

Diese Beiden Werte aus dem $row-rray werden glaube ich nicht initialisiert.
zwar steht
[php]$sql1 = "SELECT * FROM accounts WHERE npc='1'";
$result = db_query($sql1); [/php]
Drüber, allerdings erfolgt die auswertung nicht - $row wird also nicht initialisiert!

Autor:  Montekar [ Fr 09 Jun, 2006 08:34 ]
Betreff des Beitrags: 

Oh dann hab ich wohl nen Fehler gemacht... Was muss ich denn dann ändern? Also der Bot redet ja schonmal, das klappt...

Autor:  Harthas [ Fr 09 Jun, 2006 10:40 ]
Betreff des Beitrags: 

[php]$sql1 = "SELECT * FROM accounts WHERE npc='1'";
$result = db_query($sql1);
$row = db_fetch_assoc($result) [/php]

versuch es mal so ;)

Autor:  Montekar [ Fr 09 Jun, 2006 14:17 ]
Betreff des Beitrags: 

Danke werd ich gleich mal machen!

Autor:  Montekar [ Fr 09 Jun, 2006 16:38 ]
Betreff des Beitrags: 

Öhm... Das war schon in der Schleife drin, Auric...
Na ja egal.
Ich habe jetzt ne Funktion, die Seth immer "Was ist?" sagen lässt wenn einer der Kommentare auf dem Platz Seth enthält. Es soll aber nur der letzte "durchsucht" werden...
Kann mir jemand helfen? Warscheinlich irgendwie mit Limit 1 und dann DESC (=absteigend), aber wo soll das DESC hin?

Autor:  Eliwood [ Fr 09 Jun, 2006 16:47 ]
Betreff des Beitrags: 

$sql1 = "SELECT * FROM accounts WHERE npc='1'";
$result = db_query($sql1);

$sql2="UPDATE accounts SET laston = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."', alive = '1', loggedin = '1', lasthit = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."', npccommons = '".$row['npccommons']."' WHERE login = '".$row[login]."'";
db_query($sql2);

for ($i=0;$i<db_num_rows($result);$i++) {
$row = db_fetch_assoc($result);
}

Siehst du es? Du brauchst $row noch bevor du es überhaupt initialisiert.
"$sql2=[..]" gehört in die forschleife rein, sonst machts keinen Sinn (Und da nach der initialisierung).

Autor:  Montekar [ Fr 09 Jun, 2006 17:09 ]
Betreff des Beitrags: 

OK, das hab ich jetzt. Und wie mach ich das, das mein DP dann nicht so aussieht?

$this->bbcode_second_pass_code('', '
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
> Barde Seth fragt Waldelbenprinz Montekar: "Was ist?"
||
\/

?')

Autor:  Montekar [ So 11 Jun, 2006 19:20 ]
Betreff des Beitrags: 

*sich gegen den Kopf hau*

Au... muss natürlich anders gemacht werden
Wie schafft man es denn (mit PHP, nicht MySQL), das ein Kommentar durchsucht wird? Also ich will wissen, ob eben der letzte Kommentar Seth enthält und darauf reagieren...

Autor:  Eliwood [ So 11 Jun, 2006 20:06 ]
Betreff des Beitrags: 

Montekar hat geschrieben:
*sich gegen den Kopf hau*

Au... muss natürlich anders gemacht werden
Wie schafft man es denn (mit PHP, nicht MySQL), das ein Kommentar durchsucht wird? Also ich will wissen, ob eben der letzte Kommentar Seth enthält und darauf reagieren...


[php]if(strpos($string,'Seth') > 0) {

}[/php]

Autor:  Montekar [ Mo 12 Jun, 2006 06:48 ]
Betreff des Beitrags: 

:-D Danke!
Jetzt klappts bestimmt...

Autor:  Montekar [ Mi 14 Jun, 2006 14:39 ]
Betreff des Beitrags: 

Hallo!

Also, der Bot ist jetzt so nett und redet auch mit mir, aber manchmal antwortet er zwei mal! :???:
Kann mir da vielleicht jemand helfen?



[php]
$sql = "SELECT * FROM accounts WHERE npc='1'";
$result = db_query($sql);

for ($i=0;$i<db_num_rows($result);$i++) {

$row = db_fetch_assoc($result);
$sql2="UPDATE accounts SET laston = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."', alive = '1', loggedin = '1', lasthit = '".date("Y-m-d H:i:s",strtotime("+ 300 seconds"))."' WHERE login = '".$row['login']."'";
db_query($sql2);

}

$result = db_query("SELECT * FROM commentary ORDER BY postdate DESC LIMIT 1");
$comment = db_fetch_assoc($result);
$me=$row['login'];

if (strpos($comment['comment'],'Guten Tag Seth') >= 0 && $comment['section']==$row['npccommentary'] && $comment['author']!=$row['acctid']) {

$name = db_query("SELECT * FROM accounts WHERE acctid='".$comment['author']."'");
$autor = db_fetch_assoc($name);
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."','/me antwortet: \"Euch auch einen Guten Tag, ".$autor['name']."\"')";
db_query($sql3) or die(db_error(LINK));
$comment['comment']="/me antwortet: \"Euch auch einen Guten Tag, ".$autor['name']."\"";

} else if (strpos($comment['comment'],'Seth') >= 0 && $comment['section']==$row['npccommentary'] && $comment['author']!=$row['acctid']) {

$name = db_query("SELECT * FROM accounts WHERE acctid='".$comment['author']."'");
$autor = db_fetch_assoc($name);
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."','/mefragt ".$autor['name']."`&: \"Was ist?\"')";
db_query($sql3) or die(db_error(LINK));
$comment['comment']="/mefragt ".$autor['name']."`&: \"Was ist?\"";

} else {

if (e_rand(1,500)>490) {

switch(e_rand(1,6)){

case 1:
case 2:
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."',\"".$row['npccomment1']."\")";
db_query($sql3) or die(db_error(LINK));
$comment['comment']="";
break;

case 3:
case 4:
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."','".$row['npccomment2']."')";
db_query($sql3) or die(db_error(LINK));
$comment['comment']="";
break;

case 5:
case 6:
$sql3 ="INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'village','".$row['acctid']."',\"".$row['npccomment3']."\")";
db_query($sql3) or die(db_error(LINK));
$comment['comment']="";
break;

}
}
}
[/php]

(Sry das ich hier alle nerve, aber das war auch ersmal das letzte mal...)

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