OSDN Git Service

#17689 - Extract skill data.
authormumin <mumincacao@users.sourceforge.jp>
Wed, 2 Sep 2009 14:17:06 +0000 (23:17 +0900)
committermumin <mumincacao@users.sourceforge.jp>
Wed, 2 Sep 2009 14:17:06 +0000 (23:17 +0900)
13 files changed:
documents/changes.en.txt
documents/changes.ja.txt
trust_path/modules/sd3rd/class/Enum.class.php
trust_path/modules/sd3rd/class/handler/Kind.class.php [new file with mode: 0644]
trust_path/modules/sd3rd/class/handler/Skill.class.php [new file with mode: 0644]
trust_path/modules/sd3rd/class/handler/SkillElement.class.php [new file with mode: 0644]
trust_path/modules/sd3rd/class/handler/Target.class.php [new file with mode: 0644]
trust_path/modules/sd3rd/class/updater/UpdateUtils.class.php
trust_path/modules/sd3rd/class/updater/dispose/Backup.class.php
trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php [new file with mode: 0644]
trust_path/modules/sd3rd/class/updater/prepare/RefreshTable.class.php
trust_path/modules/sd3rd/class/updater/prepare/SetupContext.class.php
trust_path/modules/sd3rd/sql/mysql.sql

index 6fa86ec..7752db0 100644 (file)
@@ -1,3 +1,4 @@
+#17689 - Extract skill data.
 #18507 - Typo at costume column name.
 #18506 - Constructor has not compatibility at 5.2.x and 5.3.x.
 #18505 - Invalid table name at databae schema.
index 54352f6..f97aced 100644 (file)
@@ -1,3 +1,4 @@
+#17689 - \82·\82«\82é\82Å\81`\82½\82Ì\92\8a\8fo\8f\88\97\9d\82ð\92Ç\89Á
 #18507 - \82±\82·\97p\82Ä\81[\82Ô\82é\82Ì\82©\82ç\82Þ\96¼\82ª\82¨\82©\82µ\82©\82Á\82½\82Ì\82Å\8fC\90³
 #18506 - 5.3 \8cn\82Å\82Í\82­\82ç\82·\96¼\82±\82ñ\82·\82Æ\82ç\82­\82½\82Ì\93®\8dì\82ª\95Ï\82í\82Á\82Ä\82½\82Ì\82Å\8fC\90³
 #18505 - \82Å\81[\82½\82×\81[\82·\8d\\91¢\82ª\8aÔ\88á\82Á\82Ä\82½\82Ì\82Å\8fC\90³
index fd70298..95a5a6a 100644 (file)
@@ -18,6 +18,10 @@ interface Sd3rd_HANDLER
     const ABILITY = 'Ability';
     const CHAR = 'Char';
     const COSTUME = 'Costume';
+    const KIND = 'Kind';
+    const SKILL = 'Skill';
+    const SKILL_ELEMENT = 'SkillElement';
+    const TARGET = 'Target';
     const UPDATE = 'Update';
 }
 
diff --git a/trust_path/modules/sd3rd/class/handler/Kind.class.php b/trust_path/modules/sd3rd/class/handler/Kind.class.php
new file mode 100644 (file)
index 0000000..7f5a1d3
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @file
+ * @package sd3rd
+ * @version $Id$
+**/
+
+if(!defined('XOOPS_ROOT_PATH'))
+{
+    exit;
+}
+
+require_once SD3RD_TRUST_PATH . '/class/AbstractMasterHandler.class.php';
+
+/**
+ * Sd3rd_KindObject
+**/
+class Sd3rd_KindObject extends XoopsSimpleObject
+{
+    /**
+     * __construct
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function __construct()
+    {
+        $this->initVar('kind_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('kind_name', XOBJ_DTYPE_STRING, '', false, 20);
+    }
+}
+
+/**
+ * Sd3rd_KindHandler
+**/
+class Sd3rd_KindHandler extends Sd3rd_AbstractMasterHandler
+{
+    public /*** string ***/ $mTable = '{dirname}_kind';
+    public /*** string ***/ $mPrimary = 'kind_id';
+    public /*** string ***/ $mClass = 'Sd3rd_KindObject';
+    protected /*** string ***/ $_mIdColumn = 'kind_id';
+    protected /*** string ***/ $_mValueColumn = 'kind_name';
+}
+
+?>
diff --git a/trust_path/modules/sd3rd/class/handler/Skill.class.php b/trust_path/modules/sd3rd/class/handler/Skill.class.php
new file mode 100644 (file)
index 0000000..e34577e
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+/**
+ * @file
+ * @package sd3rd
+ * @version $Id$
+**/
+
+if(!defined('XOOPS_ROOT_PATH'))
+{
+    exit;
+}
+
+require_once SD3RD_TRUST_PATH . '/class/AbstractMasterHandler.class.php';
+
+/**
+ * Sd3rd_SkillObject
+**/
+class Sd3rd_SkillObject extends XoopsSimpleObject
+{
+    /**
+     * __construct
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function __construct()
+    {
+        $this->initVar('skill_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('skill_name', XOBJ_DTYPE_STRING, '', false, 50);
+        $this->initVar('description', XOBJ_DTYPE_STRING, '', false, 255);
+        $this->initVar('range', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('target_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('kind_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('tp', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('register_time', XOBJ_DTYPE_INT, '', false);
+    }
+}
+
+/**
+ * Sd3rd_SkillHandler
+**/
+class Sd3rd_SkillHandler extends Sd3rd_AbstractMasterHandler
+{
+    public /*** string ***/ $mTable = '{dirname}_skill';
+    public /*** string ***/ $mPrimary = 'skill_id';
+    public /*** string ***/ $mClass = 'Sd3rd_SkillObject';
+    protected /*** string ***/ $_mIdColumn = 'skill_id';
+    protected /*** string ***/ $_mValueColumn = 'skill_name';
+    
+    /**
+     * Create new record at master data.
+     * 
+     * @param   mixed{} $values
+     * @param   bool    $force
+     * 
+     * @return  void
+    **/
+    protected function _appendMaster(/*** mixed{} ***/ $values,/*** bool ***/ $force)
+    {
+        $element = $values['element'];
+        unset($values['element']);
+        parent::_appendMaster($values,$force);
+        $this->_setElement($this->getId($values[$this->_mValueColumn]),$element,$force);
+    }
+    
+    /**
+     * _setElement
+     * 
+     * @param   int     $skillId
+     * @param   int[]   $element
+     * @param   bool    $force
+     * 
+     * @return  void
+    **/
+    protected function _setElement(/*** int ***/ $skillId,/*** int[] ***/ $element,/*** bool ***/ $force = false)
+    {
+        static $handler = null;
+        if($handler === null)
+        {
+            $handler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL_ELEMENT);
+        }
+        $obj =& $handler->create();
+        $obj->set('skill_id',$skillId);
+        foreach($element as $elementId)
+        {
+            $obj->set('element_id',$elementId);
+            $obj->setNew();
+            if(!$handler->insert($obj,$force))
+            {
+                throw new Sd3rd_QueryErrorException('Cannot insert skill element data.');
+            }
+        }
+    }
+}
+
+?>
diff --git a/trust_path/modules/sd3rd/class/handler/SkillElement.class.php b/trust_path/modules/sd3rd/class/handler/SkillElement.class.php
new file mode 100644 (file)
index 0000000..0c95da8
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @file
+ * @package sd3rd
+ * @version $Id$
+**/
+
+if(!defined('XOOPS_ROOT_PATH'))
+{
+    exit;
+}
+
+/**
+ * Sd3rd_SkillElementObject
+**/
+class Sd3rd_SkillElementObject extends XoopsSimpleObject
+{
+    /**
+     * __construct
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function __construct()
+    {
+        $this->initVar('skill_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('element_id', XOBJ_DTYPE_INT, '', false);
+    }
+}
+
+/**
+ * Sd3rd_SkillElementHandler
+**/
+class Sd3rd_SkillElementHandler extends XoopsObjectGenericHandler
+{
+    public /*** string ***/ $mTable = '{dirname}_skill_element';
+    public /*** string ***/ $mPrimary = 'skill_id';
+    public /*** string ***/ $mClass = 'Sd3rd_SkillElementObject';
+
+    /**
+     * __construct
+     * 
+     * @param   XoopsDatabase  &$db
+     * @param   string  $dirname
+     * 
+     * @return  void
+    **/
+    public function __construct(/*** XoopsDatabase ***/ &$db,/*** string ***/ $dirname)
+    {
+        $this->mTable = strtr($this->mTable,array('{dirname}' => $dirname));
+        parent::__construct($db);
+    }
+}
+
+?>
diff --git a/trust_path/modules/sd3rd/class/handler/Target.class.php b/trust_path/modules/sd3rd/class/handler/Target.class.php
new file mode 100644 (file)
index 0000000..7e20278
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @file
+ * @package sd3rd
+ * @version $Id$
+**/
+
+if(!defined('XOOPS_ROOT_PATH'))
+{
+    exit;
+}
+
+require_once SD3RD_TRUST_PATH . '/class/AbstractMasterHandler.class.php';
+
+/**
+ * Sd3rd_TargetObject
+**/
+class Sd3rd_TargetObject extends XoopsSimpleObject
+{
+    /**
+     * __construct
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function __construct()
+    {
+        $this->initVar('target_id', XOBJ_DTYPE_INT, '', false);
+        $this->initVar('target_name', XOBJ_DTYPE_STRING, '', false, 10);
+    }
+}
+
+/**
+ * Sd3rd_TargetHandler
+**/
+class Sd3rd_TargetHandler extends Sd3rd_AbstractMasterHandler
+{
+    public /*** string ***/ $mTable = '{dirname}_target';
+    public /*** string ***/ $mPrimary = 'target_id';
+    public /*** string ***/ $mClass = 'Sd3rd_TargetObject';
+    protected /*** string ***/ $_mIdColumn = 'target_id';
+    protected /*** string ***/ $_mValueColumn = 'target_name';
+}
+
+?>
index d5458fd..07fed55 100644 (file)
@@ -385,6 +385,24 @@ class Sd3rd_UpdateUtils
             throw new Sd3rd_QueryErrorException('Cannot delete objects.',array('type' => $type,'criteria' => $cri));
         }
     }
+    
+    /**
+     * Cleanup related table.
+     * 
+     * @param   Enum    $base
+     * @param   Enum    $target
+     * 
+     * @return  void
+    **/
+    public static function cleanupTable(/*** Enum ***/ $base,/*** Enum ***/ $target)
+    {
+        $sql = 'DELETE `t` FROM `%1$s` AS t LEFT JOIN `%2$s` AS b USING (`%3$s`) WHERE `b`.`%3$s` IS NULL';
+        $handler = self::getHandler($base);
+        if(!$handler->db->queryF(sprintf($sql,self::convertTableName($target),$handler->mTable,$handler->mPrimary)))
+        {
+            throw new Sd3rd_QueryErrorException('Cannot cleanup table.',array('base' => $base,'target' => $target));
+        }
+    }
     #endregion
 }
 
index 5a80d79..7282b1d 100644 (file)
@@ -211,6 +211,10 @@ class Sd3rd_BackupDispose extends Sd3rd_AbstractFilter
             Sd3rd_HANDLER::ABILITY,
             Sd3rd_HANDLER::CHAR,
             Sd3rd_HANDLER::COSTUME,
+            Sd3rd_HANDLER::KIND,
+            Sd3rd_HANDLER::SKILL,
+            Sd3rd_HANDLER::SKILL_ELEMENT,
+            Sd3rd_HANDLER::TARGET,
             Sd3rd_HANDLER::UPDATE
         );
     }
diff --git a/trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php b/trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php
new file mode 100644 (file)
index 0000000..546051d
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @file
+ * @package sd3rd
+ * @version $Id$
+**/
+
+if(!defined('XOOPS_ROOT_PATH'))
+{
+    exit();
+}
+
+/**
+ * Extract process for Chardata at weapon skill
+**/
+class Sd3rd_WSkill_DataChar extends Sd3rd_AbstractParser
+{
+    protected /*** Sd3rd_SkillHandler ***/ $_mHandler = null;
+    protected /*** Sd3rd_TargetHandler ***/ $_mTargetHandler = null;
+    protected /*** Sd3rd_SkillElementHandler ***/ $_mElementHandler = null;
+    protected /*** Sd3rd_KindHandler ***/ $_mKindHandler = null;
+    
+    /**
+     * Constructor of this process.
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function __construct()
+    {
+        $this->_mHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL);
+        $this->_mTargetHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::TARGET);
+        $this->_mElementHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL_ELEMENT);
+        $this->_mKindHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::KIND);
+    }
+    
+    /**
+     * Latest main process.
+     * 
+     * @param   void
+     * 
+     * @return  void
+    **/
+    public function executeLatest()
+    {
+        $data = Sd3rd_UpdateUtils::parseByRegex($this->_mSource,"/\('(?P<name>[^']+)','(?P<desc>[^']*)','?(?P<range>[-\d\.]+)'?,'(?P<target>[^']+)','[\d,]+','?(?P<element>[-\d,]+)'?,'(?P<kind>[^']+)',(?P<tp>\d+),(?P<cnt>\d+)\)/");
+        $targetId = $this->_mTargetHandler->getId($data['target'],array(),true);
+        $kindId = $this->_mKindHandler->getId($data['kind'],array(),true);
+        $id = $this->_mHandler->getId($data['name'],array('description' => $data['desc'],'range' => $data['range'],'target_id' => $targetId,'element' => explode(',',$data['element']),'kind_id' => $kindId,'tp' => $data['tp'],'register_time' => $this->_mUpdateTime),true);
+    }
+}
+
+?>
index b9f6712..765ad33 100644 (file)
@@ -18,6 +18,7 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter
     protected /*** Enum[] ***/ $_mRegisterTableList = array();
     protected /*** Enum[] ***/ $_mUpdateTableList = array();
     protected /*** Enum[] ***/ $_mTruncateTableList = array();
+    protected /*** Enum[][] ***/ $_mCleanupTableList = array();
     
     /**
      * Get process priority.
@@ -44,6 +45,7 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter
         $this->_refreshTableList($this->_mRegisterTableList,'DELETE FROM `%s` WHERE `register_time` >= %d');
         $this->_refreshTableList($this->_mUpdateTableList,'DELETE FROM `%s` WHERE `update_time` >= %d');
         $this->_refreshTableList($this->_mTruncateTableList,'TRUNCATE TABLE `%s`');
+        array_walk($this->_mCleanupTableList,create_function('$v','call_user_func_array(array("Sd3rd_UpdateUtils","cleanupTable"),$v);'));
     }
     
     /**
@@ -75,9 +77,10 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter
     **/
     public function executeLatest()
     {
-        $this->_mRegisterTableList = array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME);
+        $this->_mRegisterTableList = array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME,Sd3rd_HANDLER::SKILL);
         $this->_mUpdateTableList = array(Sd3rd_HANDLER::UPDATE);
         $this->_mTruncateTableList = array(Sd3rd_HANDLER::CHAR);
+        $this->_mCleanupTableList = array(array(Sd3rd_HANDLER::SKILL,Sd3rd_HANDLER::SKILL_ELEMENT));
     }
     
     /**
@@ -93,6 +96,10 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter
             Sd3rd_HANDLER::ABILITY,
             Sd3rd_HANDLER::CHAR,
             Sd3rd_HANDLER::COSTUME,
+            Sd3rd_HANDLER::KIND,
+            Sd3rd_HANDLER::SKILL,
+            Sd3rd_HANDLER::SKILL_ELEMENT,
+            Sd3rd_HANDLER::TARGET,
             Sd3rd_HANDLER::UPDATE
         );
     }
index 9c79b1f..a84839e 100644 (file)
@@ -36,7 +36,7 @@ class Sd3rd_SetupContextPrepare extends Sd3rd_AbstractFilter
     **/
     public function executeLatest()
     {
-        foreach(array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME) as $table)
+        foreach(array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME,Sd3rd_HANDLER::KIND,Sd3rd_HANDLER::SKILL,Sd3rd_HANDLER::TARGET) as $table)
         {
             Sd3rd_UpdateUtils::getHandler($table)->setupMaster();
         }
index 7585a23..1be39b9 100644 (file)
@@ -42,6 +42,36 @@ CREATE TABLE `{prefix}_{dirname}_costume` (
   PRIMARY KEY  (`costume_id`)
 ) ENGINE=MyISAM;
 
+CREATE TABLE `{prefix}_{dirname}_kind` (
+  `kind_id` tinyint(3) unsigned NOT NULL auto_increment,
+  `kind_name` varchar(20) NOT NULL,
+  PRIMARY KEY  (`kind_id`)
+) ENGINE=MyISAM;
+
+CREATE TABLE `{prefix}_{dirname}_skill` (
+  `skill_id` smallint(5) unsigned NOT NULL auto_increment,
+  `skill_name` varchar(50) NOT NULL,
+  `description` varchar(255) NOT NULL,
+  `range` tinyint(4) NOT NULL,
+  `target_id` tinyint(3) unsigned NOT NULL,
+  `kind_id` tinyint(3) unsigned NOT NULL,
+  `tp` tinyint(3) unsigned NOT NULL,
+  `register_time` int(10) unsigned NOT NULL,
+  PRIMARY KEY  (`skill_id`)
+) ENGINE=MyISAM;
+
+CREATE TABLE `{prefix}_{dirname}_skill_element` (
+  `skill_id` smallint(5) unsigned NOT NULL,
+  `element_id` tinyint(4) NOT NULL,
+  PRIMARY KEY  (`skill_id`,`element_id`)
+) ENGINE=MyISAM;
+
+CREATE TABLE `{prefix}_{dirname}_target` (
+  `target_id` tinyint(3) unsigned NOT NULL auto_increment,
+  `target_name` varchar(10) NOT NULL,
+  PRIMARY KEY  (`target_id`)
+) ENGINE=MyISAM;
+
 CREATE TABLE `{prefix}_{dirname}_update` (
   `update_time` int(10) unsigned NOT NULL,
   PRIMARY KEY  (`update_time`)