1 創建一個文件,如db_sqlite.cs,加入下面的代碼:
$dbname = "game/data/test.db";
// --- 定义一个全局变量$Sqlite,在以后的Sqlite DB的操作中,就主要使用它了。
$SqLite = new SqLiteObject(sqlite);
if ($SqLite == 0){
echo("ERROR: Failed to create SqLiteObject. $SqLiteObject aborted.");
return;
}
// open database
if ($SqLite.openDatabase($dbname) == 0){
echo("ERROR: Failed to open database: " @ $dbname);
echo(" Ensure that the disk is not full or write protected. $SqLiteObject aborted.");
return;
}
可以把db_sqlite.cs放在game/server/scripts/db/下。
2 SQLite DB的初始化
在game/server/scripts/db/下,创建initDB.cs,加入下面的函数。
這個方法,我是從Dreamer處學來的:
function InitializeDB(){
//This function only ever needs initialized once
//Create Tables
if($Pref::Server::RunOnce != 1){
// --- Milestone 5 <Step 1>
%query[0] = "CREATE TABLE Items (BaseType VARCHAR(30),ItemName VARCHAR(50),Category VARCHAR(20),ClassName VARCHAR(20),ShapeFile VARCHAR(255),mass VARCHAR(10),elasticity VARCHAR(10),friction VARCHAR(10),emap VARCHAR(5),pickUpName VARCHAR(50),Image VARCHAR(50),Icon VARCHAR(100),Dynamics VARCHAR(255))";
// --- MileStone 5
%query[1] = "CREATE TABLE Accounts (Name VARCHAR(20),password VARCHAR(20),Race VARCHAR(50),Level INT(11))";
// --- Milestone 4
%query[2] = "CREATE TABLE Skills (SkillName VARCHAR(15),MinLevel INT(5))";
// --- Milestone 4
%query[3] = "CREATE TABLE PlayerStats (Name VARCHAR(20), WIS INT(5),STR INT(5),STA INT(5),END INT(5),DEX INT(5),CHA INT(5),DNA VARCHAR(255))";
%query[4] = "CREATE TABLE Inventory (Name VARCHAR(20),Item VARCHAR(20),Amount INT(11))";
for(%x = 0; %x <= 4; %x++){
echo(%query[%x]);
%result = $SqLite.query(%query[%x],0);
$SqLite.clearResult(%result);
}
InitItems();
InitSkills();
$Pref::Server::RunOnce = 1;
}
}
function InitItems(){
%query[0] = "INSERT INTO Items VALUES ('ItemData','Sword','Weapon','Weapon','starter.rpg/data/shapes/weapons/swords/sword_12.dts','3','0.2','0.6','true','a sword','SwordImage','starter.rpg/data/Interface/Icons/INV_Sword_01','')";
%query[1] = "INSERT INTO Items VALUES ('ItemData','HealthKit','Health','Health','starter.rpg/data/shapes/items/healthKit.dts','1','1','0.3','true','a health kit','','starter.rpg/data/Interface/Icons/INV_Drink_01','repairAmount 50')";
%query[2] = "INSERT INTO Items VALUES ('ItemData','HealthPatch','Health','Health','starter.rpg/data/shapes/items/healthPatch.dts','1','1','0.3','true','a health patch','','starter.rpg/data/Interface/Icons/INV_Drink_01','repairAmount 20 maxInventory 0')";
%query[3] = "INSERT INTO Items VALUES ('ItemData','Crossbow','Weapon','Weapon','starter.rpg/data/shapes/crossbow/weapon.dts','3','0.2','0.6','true','a crossbow','CrossbowImage','starter.rpg/data/Interface/Icons/INV_Weapon_Bow_01','')";
for(%x = 0; %x <= 3; %x++){
echo(%query[%x]);
%result = $SqLite.query(%query[%x],0);
$SqLite.clearResult(%result);
}
}
注意函数InitializeDB(),只需在SQLite DB创建时执行一次即可。
3 在game/server/scripts/game.cs下,执行
exec("./db/InitDB.cs");
exec("./db/db_sqlite.cs");
即可。
4 使用SQLite TorqueScript函数,进行数据库的操作。(阅读次数:)