getAllPlayers())).")"; $res = db_query($sql) or die(db_error()); $ret = array(); for($i=0,$max=db_num_rows($res);$i<$max;$i++) { $row = db_fetch_assoc($res); $ret[$row['acctid']] = $row['login']; } return $ret; } /*** * * * * * * * * * * * * * * * * * * * * * * * * *** * Öffentliche Methoden *** * * * * * * * * * * * * * * * * * * * * * * * * ***/ public function __construct($id) { if(!empty($id)) { $row = db_fetch_assoc(db_query("SELECT npc.*, accounts.name AS erstellername, accounts.login AS erstellerlogin FROM `npc` INNER JOIN `accounts` ON npc.ersteller = accounts.acctid WHERE `id`=".$id)); foreach($row as $key=>$val) $this->{$key} = $val; } } public function grantAcces($to=array(),$dontpay=false) { $canbuy = true; if(!$dontpay) $canbuy = self::buy('GRANT'); if(!empty($to) && $canbuy) { $sql = "INSERT INTO `z_npc`(`user_id`,`npc_id`) VALUES "; for ($i=0,$max=count($to);$i<$max;$i++) { if($i) $sql .= ", "; $sql .= "(".$to[$i].",".$this->id.")"; } db_query($sql); } } public function printBio() { if(!empty($this->id)) { page_header("NPC-Beschreibung für ".preg_replace("'[`].'","",$this->name)); $line = "`c`b`#NPC-Beschreibung für ".$this->name."`0`b`c`n"; } $line .= "
\n\t
\n"; if(!empty($this->avatar)) { $pic_size = @getimagesize($this->avatar); $line .= "\t\t200?"height='200' ":'').($pic_size[0]>200?"width='200' ":''); $line .= "alt='".preg_replace("'[`].'","",$this->name)."' style='margin : 0; padding : 0;'>\n"; } else { output("\t\t(kein Bild)\n"); } $line .= "\t
\n
\n"; $line .= "
\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%sBio",$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; } } ?>