\n";
$line .= "\t
`^Name:`0 ".$this->name."
\n";
$line .= "\t
`^Erstellt von:`0 ".$this->erstellername."
\n";
$line .= "\t
`^Spieler, die diesen NPC verwenden dürfen:`0
";
$plogins = $this->playerLogins();
foreach($this->getAllPlayers() as $key => $val) {
$line .= "\t\t".$val.", ";
addnav('',"bio.php?char=".$plogins[$key]."&ret=".urlencode($_SERVER['REQUEST_URI']));
}
$line .= "\t
\n";
$line .= "\t
`^Beschreibung des NPCs: `0
\n".str_replace("\n","\n\t\t",$this->text)."\n\t
\n";
return $line;
}
public function printRow($rowclass) {
$in = array($rowclass,$this->name,$this->erstellerlogin,URLEncode($_SERVER['REQUEST_URI']),$this->erstellername,implode(', ',$this->getAllPlayers()),$this->getLink());
return vsprintf("
| %s | `7%s`0 | %s | Bio | ",$in);
}
public function previewRead($name,$text,$ersteller,$avatar='') {
$this->name = $name;
$this->text = $text;
$this->ersteller = $ersteller;
$this->avatar = $avatar;
$res = db_query("SELECT `name`,`login` FROM `accounts` WHERE `acctid` = ".$ersteller." LIMIT 1") or die(db_error());
$usr = db_fetch_assoc($res);
$this->erstellerlogin = $usr['login'];
$this->erstellername = $usr['name'];
$this->players = array($ersteller=>$usr['name']);
}
/*** * * * * * * * * * * * * * * * * * * * * * * * * ***
* Getter & Setter
*** * * * * * * * * * * * * * * * * * * * * * * * * ***/
public function getLink() {
return "npc.php?op=bio&id=".$this->id."&ret=".URLEncode($_SERVER['REQUEST_URI']);
}
public function change($what,$to) {
if (self::buy($what)) {
$this->{strtolower($what)} = nl2br($to);
db_query("UPDATE `npc` SET `".strtolower($what)."`='".nl2br($to)."' WHERE `id`=".$this->id." LIMIT 1");
return true;
} else return false;
}
public function getAllPlayers($refresh=false) {
if(empty($this->players) || $refresh===true) {
$result = db_query("SELECT `acctid`, `name` FROM `accounts` a INNER JOIN `z_npc` ON `a`.`acctid` = `z_npc`.`user_id` WHERE `npc_id`=".$this->id);
for($i=0,$max=db_num_rows($result);$i<$max;$i++) {
$row = db_fetch_assoc($result);
$this->players[$row['acctid']] = $row['name'];
}
}
return $this->players;
}
public function getName() { return $this->name; }
public function getId() { return $this->id; }
public function getErsteller() { return $this->ersteller; }
public function getErstellerName() { return $this->erstellername; }
public function getErstellerLogin() { return $this->erstellerlogin; }
public function getText() { return $this->text; }
public function getAvatar() { return $this->avatar; }
/*** * * * * * * * * * * * * * * * * * * * * * * * * ***
* Statische Methoden
*** * * * * * * * * * * * * * * * * * * * * * * * * ***/
public static function create($name,$text,$ersteller,$avatar='',$vater=0) {
if (self::canbuy()) {
db_query("INSERT INTO `npc`(`name`,`text`,`ersteller`,`avatar`,`vater`) VALUES ('".$name."','".$text."',".$ersteller.",'".$avatar."',".$vater.")") or die(db_error());
$res = db_fetch_assoc(db_query("SELECT `id` FROM `npc` WHERE `name`='".$name."' LIMIT 1"));
$npc = new npc($res['id']);
$user = array($ersteller);
$npc->grantAcces($user,true);
return $npc;
} else return false;
}
public static function getActOf($userid,$asID=true) {
$result = db_query("SELECT `npc`,`prefs` FROM `accounts` WHERE `acctid`=".$userid." LIMIT 1") or die(db_error(LINK));
$usr = db_fetch_assoc($result);
$npc = 0;
if($usr['npc']) { // User darf NPCs benutzen
$prefs = unserialize($usr['prefs']);
if($prefs['akt_npc'] != 0) { // User hat gewählten NPC
$sql = "SELECT `npc_id` FROM `z_npc` WHERE `npc_id`=".$prefs['akt_npc']." AND `user_id`=".$userid." LIMIT 1";
$result = db_query($sql);
if(db_num_rows($result) > 0) $npc = $prefs['akt_npc'];
}
if($npc == 0) { // Ersten NPC aus der Liste der Verfuegbaren fue diesen User waehlen
$all = self::getAllOf($userid);
$npc = $all[0];
}
}
if($asID == false && $npc != 0) $npc = new self($npc);
return $npc;
}
public static function getAllOf($userid,$asID=true) {
$result = db_query("SELECT `acctid`, `npc` FROM `accounts` WHERE `acctid`=".$userid." LIMIT 1") or die(db_error(LINK));
$usr = db_fetch_assoc($result);
$npcs = array();
if($usr['npc'] > 0 || !$userid) {
$sql = "SELECT `n`.`id` FROM `npc` AS n, `z_npc` AS z WHERE `n`.`id`=`z`.`npc_id` ".($userid?"AND `z`.`user_id`=".$userid:'GROUP BY `n`.`id`');
$result = db_query($sql) or die(db_error(LINK));
while($row = db_fetch_assoc($result)) {
if($asID) $npcs[] = $row['id'];
else $npcs[] = new self($row['id']);
}
}
return $npcs;
}
public static function getCost($of='BUY') {
return array(
'price' => getsetting(self::GS_COST_PREFIX.strtoupper($of),0),
'cur' => self::getCurrency(),
);
}
public static function getCurrency() {
return getsetting('NPC_CURRENCY','dp');
}
public static function canbuy($what='BUY',$usernr=0) {
$cost = self::getCost($what);
if($usernr == 0) {
global $session;
$user = &$session['user'];
} else {
$sql = "SELECT `acctid`, ".($cost['cur']=='rp'?"`rpboni`":"`donation`")." FROM `accounts` WHERE `acctid`=".$usernr." LIMIT 1";
$user = db_fetch_assoc(db_query($sql));
}
$toProof = ($cost['cur']=='rp'?'rpboni':'donation');
$return = false;
if($user[$toProof] >= $cost['price']) $return = true;
return $return;
}
public static function buy($what='BUY',$usernr=0) {
$result = 0;
if(self::canbuy($what,$usernr)) {
$result = 1;
$cost = self::getCost(strtoupper($what));
$p = ($cost['cur']=='rp'?'rpboni':'donation');
if($usernr != 0) {
db_query("UPDATE `accounts` SET `".$p."`=`".$p."`-".$cost['price']." WHERE `acctid`=".$usernr." LIMIT 1");
} else {
global $session;
$session['user'][$p] -= $cost['price'];
}
}
return $result;
}
public static function activate($usernr=0) {
$match = false;
if(self::buy('ACTIVATE',$usernr)) {
if($usernr != 0) {
db_query("UPDATE `accounts` SET `npc`=1 WHERE `acctid`=".$usernr." LIMIT 1");
} else {
global $session;
$session['user']['npc'] = 1;
}
$match = true;
}
return $match;
}
public static function previewCreate($name,$text,$ersteller,$avatar='') {
$npc = new npc(null);
$npc->previewRead($name,$text,$ersteller,$avatar);
return $npc;
}
}
?>