mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-21 00:18:43 +00:00
#1470 initial achievement tracker
--HG-- branch : gsoc2012-achievements
This commit is contained in:
parent
a71989e70f
commit
41ce43d4b9
9 changed files with 374 additions and 0 deletions
94
code/web/app/app_achievements/_AchWebParser/AchWebParser.php
Normal file
94
code/web/app/app_achievements/_AchWebParser/AchWebParser.php
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
<?php
|
||||||
|
error_reporting(E_ALL ^ E_NOTICE);
|
||||||
|
ini_set("display_errors","1");
|
||||||
|
|
||||||
|
require_once("class/mySQL_class.php");
|
||||||
|
require_once("conf.php");
|
||||||
|
require_once("inlcude/functions_inc.php");
|
||||||
|
|
||||||
|
$logfile = false;
|
||||||
|
if($CONF['logging'] == true) {
|
||||||
|
$logfile = fopen($CONF['logfile'].'.'.date("Ymd",time()).'.txt','a');
|
||||||
|
}
|
||||||
|
|
||||||
|
//create database connection
|
||||||
|
$DBc = new mySQL($CONF['mysql_error']);
|
||||||
|
$DBc->connect($CONF['mysql_server'],$CONF['mysql_user'],$CONF['mysql_pass'],$CONF['mysql_database']);
|
||||||
|
|
||||||
|
#MISSING: mode -> single, cron, debug
|
||||||
|
|
||||||
|
require_once("class/DataSourceHandler_class.php");
|
||||||
|
require_once("class/DataSource_abstract.php");
|
||||||
|
|
||||||
|
//create datasource handler
|
||||||
|
$_DATA = new DataSourceHandler();
|
||||||
|
foreach($CONF['data_source'] as $elem) { //populate
|
||||||
|
require_once("source/".$elem."/".$elem."_class.php");
|
||||||
|
eval('$tmp = new '.$elem.'();');
|
||||||
|
$_DATA->registerDataSource($tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#MISSING: fetch candidates
|
||||||
|
|
||||||
|
foreach() {
|
||||||
|
#MISSING: fetch objectives to evaluate
|
||||||
|
foreach() {
|
||||||
|
#MISSING: fetch atoms
|
||||||
|
foreach() {
|
||||||
|
#MISSING: evaluate atoms
|
||||||
|
}
|
||||||
|
#MISSING: evaluate objective
|
||||||
|
}
|
||||||
|
#MISSING: evaluate perk
|
||||||
|
}
|
||||||
|
|
||||||
|
#WORKPAD:####
|
||||||
|
|
||||||
|
Trigger:
|
||||||
|
by value
|
||||||
|
(by event)
|
||||||
|
|
||||||
|
Sources:
|
||||||
|
XML
|
||||||
|
valuecache
|
||||||
|
(Achievement Service)
|
||||||
|
(Mirror Service)
|
||||||
|
|
||||||
|
|
||||||
|
VALUE dappers = c_money
|
||||||
|
if(dappers >= 5000) {
|
||||||
|
GRANT
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE tmp = c_fame[scorchers]
|
||||||
|
if(tmp == 0) {
|
||||||
|
DENY:3600
|
||||||
|
}
|
||||||
|
|
||||||
|
EVENT:player_death
|
||||||
|
ON player_death {
|
||||||
|
UNLOCK
|
||||||
|
}
|
||||||
|
|
||||||
|
#############
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#MISSING: self call on cron mode
|
||||||
|
if() {
|
||||||
|
$fp = fsockopen($CONF['self_host'], 80, $errno, $errstr, 30);
|
||||||
|
if(!$fp) {
|
||||||
|
logf("ERROR: self call; socket: ".$errstr." (."$errno.")");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$out = "GET ".$CONF['self_path']." HTTP/1.1\r\n";
|
||||||
|
$out .= "Host: ".$CONF['self_host']."\r\n";
|
||||||
|
$out .= "Connection: Close\r\n\r\n";
|
||||||
|
|
||||||
|
fwrite($fp, $out);
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
?>
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
class DataSourceHandler {
|
||||||
|
private $source;
|
||||||
|
private $alloc;
|
||||||
|
|
||||||
|
function DataSourceHandler() {
|
||||||
|
$this->source = array();
|
||||||
|
$this->alloc = array();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function registerDataSource($src) {
|
||||||
|
$i = sizeof($this->source);
|
||||||
|
$this->source[$i] = $src;
|
||||||
|
foreach($src->getTypes() as $elem) {
|
||||||
|
if(!is_array($this->alloc[$elem])) {
|
||||||
|
$this->alloc[$elem] = array();
|
||||||
|
}
|
||||||
|
//add to list
|
||||||
|
$this->alloc[$elem][$src->getPriority($elem)] = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getData($type,$field,$ident) {
|
||||||
|
return $this->getDataSource($type)->getData($type,$field,$ident);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getDataSource($type) {
|
||||||
|
//find the highest priority datasource for given type
|
||||||
|
if(!$this->alloc[$type]) {
|
||||||
|
return false; //unknown type
|
||||||
|
}
|
||||||
|
$pos = array_keys($this->alloc[$type]);
|
||||||
|
if(sizeof($pos) == 0) {
|
||||||
|
return false; //no datasource for type // should not happen since type is defined by datasource
|
||||||
|
}
|
||||||
|
return $this->alloc[$type][$pos[0]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
abstract class DataSource {
|
||||||
|
private $types = array();
|
||||||
|
private $priority = array();
|
||||||
|
private $write = false;
|
||||||
|
#MISSING: offered values
|
||||||
|
|
||||||
|
function DataSource() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTypes() {
|
||||||
|
return $this->types;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPriority($type) {
|
||||||
|
return $this->priority[$type];
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract function getData($type,$ident,$field = array());
|
||||||
|
|
||||||
|
abstract function writeData($type,$ident,$field = array(),$value = array());
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,151 @@
|
||||||
|
<?php
|
||||||
|
class mySQL {
|
||||||
|
var $DBc;
|
||||||
|
var $DBstats;
|
||||||
|
var $cached;
|
||||||
|
|
||||||
|
function mre($in) {
|
||||||
|
if(is_array($in)) {
|
||||||
|
foreach($in as $key=>$elem) {
|
||||||
|
$in[$key] = mysql_real_escape_string(stripslashes($elem));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$in = mysql_real_escape_string(stripslashes($in));
|
||||||
|
}
|
||||||
|
return $in;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mySQL($err=false) {
|
||||||
|
$this->DBstats = array();
|
||||||
|
$this->DBc = false;
|
||||||
|
if($err === "DIE" || $err === "PRINT" || $err === "ALERT" || $err === "HIDE") {
|
||||||
|
$this->DBerror = $err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->DBerror = "HIDE";
|
||||||
|
}
|
||||||
|
$this->resetStats();
|
||||||
|
$this->cached = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect($ip,$user,$pass,$db=false) {
|
||||||
|
$this->DBc = mysql_pconnect($ip,$user,$pass) or $this->error(mysql_error());
|
||||||
|
if($db) {
|
||||||
|
$this->database($db);
|
||||||
|
}
|
||||||
|
$this->resetStats();
|
||||||
|
}
|
||||||
|
|
||||||
|
function database($db) {
|
||||||
|
mysql_select_db($db,$this->DBc) or $this->error(mysql_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetStats() {
|
||||||
|
$this->DBstats['query'] = 0;
|
||||||
|
$this->DBstats['error'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getStats() {
|
||||||
|
return $this->DBstats;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendSQL($query,$handling="PLAIN",$buffer=false) { // can be INSERT, DELETE, UPDATE, ARRAY, NONE, PLAIN
|
||||||
|
#if($this->cached !== false) {
|
||||||
|
#$this->unlinkSql($this->cached);
|
||||||
|
#}
|
||||||
|
|
||||||
|
if($buffer === false && $handling !== "PLAIN") {
|
||||||
|
$res = mysql_unbuffered_query($query,$this->DBc) or $this->error(mysql_error(),$query);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$res = mysql_query($query,$this->DBc) or $this->error(mysql_error(),$query);
|
||||||
|
}
|
||||||
|
|
||||||
|
#$this->cached = $res;
|
||||||
|
|
||||||
|
$this->DBstats['query']++;
|
||||||
|
|
||||||
|
if($res) {
|
||||||
|
if($handling === "INSERT") {
|
||||||
|
$tmp = mysql_insert_id($this->DBc) or $this->error(mysql_error());;
|
||||||
|
$this->unlinkSql($res);
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
elseif($handling === "DELETE" || $handling === "UPDATE") {
|
||||||
|
$tmp = mysql_affected_rows($this->DBc) or $this->error(mysql_error());
|
||||||
|
$this->unlinkSql($res);
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
elseif($handling === "ARRAY") {
|
||||||
|
$tmp = $this->parseSql($res);
|
||||||
|
$this->unlinkSql($res);
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
elseif($handling === "NONE") {
|
||||||
|
$this->unlinkSql($res);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
mysql_free_result($res);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function unlinkSql($res) {
|
||||||
|
@mysql_free_result($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function parseSql($res) {
|
||||||
|
$data = array();
|
||||||
|
$k = 0;
|
||||||
|
while($tmp = mysql_fetch_array($res,MYSQL_ASSOC)) {
|
||||||
|
$data[$k] = $tmp;
|
||||||
|
$k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNext($res) {
|
||||||
|
if($res) {
|
||||||
|
if($tmp = mysql_fetch_array($res,MYSQL_ASSOC)) {
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function error($error,$query = false) {
|
||||||
|
$this->DBstats['error']++;
|
||||||
|
|
||||||
|
if($query != false) {
|
||||||
|
$error .= " -->|".$query."|<--";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch($this->DBerror) {
|
||||||
|
case 'DIE':
|
||||||
|
die($error);
|
||||||
|
break;
|
||||||
|
case 'PRINT':
|
||||||
|
echo "<br><b>".$error."</b><br>";
|
||||||
|
break;
|
||||||
|
case 'ALERT':
|
||||||
|
echo "<script language='javascript'>\n<!--\nalert(\"database error:\\n".mysql_real_escape_string($error)."\");\n// -->\n</script>";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
flush();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
function logf($txt,$nl = true) {
|
||||||
|
global $logfile;
|
||||||
|
if($logfile) {
|
||||||
|
if($nl) {
|
||||||
|
$txt .= "\n";
|
||||||
|
}
|
||||||
|
fwrite($logfile,"[".date('H:i:s',time())."] ".$txt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function logi($txt,$i = 1) {
|
||||||
|
$tmp = "";
|
||||||
|
for($v=0;$v<$i;$v++) {
|
||||||
|
$tmp .= " ";
|
||||||
|
}
|
||||||
|
return $tmp."> ".$txt;
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
class ValueCache extends DataSource {
|
||||||
|
function ValueCache() {
|
||||||
|
$this->types[] = "c_cache";
|
||||||
|
|
||||||
|
$this->write = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getData($type,$ident,$field) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeData($type,$ident,$field = array(),$value = array()) {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
if($type == "c_cache") {
|
||||||
|
$DBc->sendSQL("INSERT INTO ach_player_valuecache () VALUES () ON DUPLICATE KEY UPDATE ");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
class XMLapi extends DataSource {
|
||||||
|
function XMLapi() {
|
||||||
|
$this->types[] = "c_stats";
|
||||||
|
$this->types[] = "c_items";
|
||||||
|
|
||||||
|
$this->write = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getData() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeData() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
Loading…
Reference in a new issue