📄 sqldata.pas
字号:
end;
end;
if not ExecuteSqlCmd(format('DELETE FROM guild_members WHERE GID=''%d'' LIMIT 1', [GID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete guild_members data from MySQL Error: %d', [GID]));
Exit;
end;
Result := True;;
end;
//------------------------------------------------------------------------------
// 从数据库删除组队
//------------------------------------------------------------------------------
function DeleteParty(Name: string) : Boolean;
begin
Result := False;
if not ExecuteSqlCmd(format('DELETE FROM party WHERE Name=''%s'' LIMIT 1', [addslashes(Name)])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete party data from MySQL Error: %s', [Name]));
Exit;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 保存同盟、敌对工会资料(mtype=1同盟,mtype=2敌对)
//------------------------------------------------------------------------------
function SaveGuildAllyInfo(GDID: cardinal; GuildName: String; mtype: Integer) : Boolean;
begin
Result := False;
if not ExecuteSqlCmd(Format('INSERT INTO guild_allies (GDID,GuildName,Relation) VALUES (''%d'',''%s'',''%d'')', [GDID, addslashes(GuildName), mtype])) then
begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Guild AllyInfo data error.');
exit;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 删除同盟、敌对工会资料(mtype=1同盟,mtype=2敌对)
//------------------------------------------------------------------------------
function DeleteGuildAllyInfo(GDID: cardinal; GuildName: String; mtype: Integer) : Boolean;
begin
Result := False;
if not ExecuteSqlCmd(format('DELETE FROM guild_allies WHERE GDID=''%d'' AND Name=''%s'' AND Relation=''%d'' LIMIT 1', [GDID, addslashes(GuildName), mtype])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete guild_allies data from MySQL Error: %s', [GuildName]));
Exit;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 删除工会资料
//------------------------------------------------------------------------------
function DeleteGuildInfo(GDID: cardinal) : Boolean;
begin
Result := False;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild data from MySQL: %d', [GDID]));
{删除工会资料}
if not ExecuteSqlCmd(format('DELETE FROM guild_info WHERE GDID=''%d'' LIMIT 1', [GDID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild data from MySQL Error: %d', [GDID]));
Exit;
end;
{删除工会成员资料}
if not ExecuteSqlCmd(format('DELETE FROM guild_members WHERE GDID=''%d'' LIMIT 36', [GDID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild Member data from MySQL Error: %d', [GDID]));
Exit;
end;
{删除工会头衔资料}
if not ExecuteSqlCmd(format('DELETE FROM guild_positions WHERE GDID=''%d'' LIMIT 20', [GDID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild Position data from MySQL Error: %d', [GDID]));
Exit;
end;
{删除工会开除成员记录资料}
if not ExecuteSqlCmd(format('DELETE FROM guild_banish WHERE GDID=''%d''', [GDID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild BanishInfo data from MySQL Error: %d', [GDID]));
Exit;
end;
{删除工会同盟、敌对资料}
if not ExecuteSqlCmd(format('DELETE FROM guild_allies WHERE GDID=''%d''', [GDID])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Delete Guild AllyInfo data from MySQL Error: %d', [GDID]));
Exit;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 取得帐号的人物资料
//------------------------------------------------------------------------------
function GetAccCharaData(AID: cardinal) : Boolean;
var
i : Integer;
tp : TPlayer;
begin
Result := False;
tp := Player.Objects[Player.IndexOf(AID)] as TPlayer;
if ExecuteSqlCmd(Format('SELECT GID, Name, CharaNumber FROM characters WHERE AID=''%d'' LIMIT 9', [AID])) then
begin
while not SQLDataSet.Eof do
begin
tp.CID[StrToInt(SQLDataSet.FieldValues['CharaNumber'])] := StrToInt(SQLDataSet.FieldValues['GID']);
SQLDataSet.Next;
end;
end else begin
Exit;
end;
for i:= 0 to 8 do begin
if tp.CID[i] <> 0 then begin
GetCharaData(tp.CID[i]);
end;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 取得人物的工会、组队,以及所有成员资料
//------------------------------------------------------------------------------
function GetCharaPartyGuild(GID: cardinal) : Boolean;
var
i,k : Integer;
tpa : TParty;
tc : TChara;
tg : TGuild;
begin
Result := False;
k := Chara.IndexOf(GID);
if k = -1 then exit;
tc := Chara.Objects[k] as TChara;
if tc.PartyName <> '' then begin
// 读取组队中其它队员的资料
k := PartyNameList.IndexOf(tc.PartyName);
if k <> -1 then begin
tpa := PartyNameList.Objects[k] as TParty;
for i := 0 to 11 do begin
if (tpa.MemberID[i] <> 0) AND (tpa.MemberID[i] <> tc.CID) then begin
if Chara.IndexOf(tpa.MemberID[i]) <> -1 then begin
GetCharaData(tpa.MemberID[i]);
end;
end;
end;
end;
end;
// 读取人物工会资料
if tc.GuildID <> 0 then begin
// 读取工会中其它成员的资料
k := GuildList.IndexOf(tc.GuildID);
if k <> -1 then begin
tg := GuildList.Objects[k] as TGuild;
for i := 0 to 35 do begin
if (tg.MemberID[i] <> 0) AND (tg.MemberID[i] <> tc.CID) then begin
if (Chara.IndexOf(tg.MemberID[i]) = -1) and (tg.MemberID[i] <> 0) then begin
GetCharaData(tg.MemberID[i]);
end;
end;
end;
end;
end;
Result := True;
end;
//------------------------------------------------------------------------------
// 保存人物资料
//------------------------------------------------------------------------------
function SaveCharaData(tc : TChara) : Boolean;
var
bindata : String;
j : Integer;
sl : TStringList;
begin
if (tc.ID <> 0) then begin
sl := TStringList.Create;
sl.QuoteChar := '"';
sl.Delimiter := ',';
Result := False;
with tc do begin
bindata := '(GID,Name,JID,BaseLV,BaseEXP,StatusPoint,JobLV,JobEXP,SkillPoint,Zeny,Stat1,Stat2,Options,Karma,Manner,HP,SP,DefaultSpeed,Hair,_2,_3,Weapon,Shield,Head1,Head2,Head3,HairColor,';
bindata := bindata + 'ClothesColor,STR,AGI,VIT,INTS,DEX,LUK,CharaNumber,Map,X,Y,SaveMap,SX,SY,Plag,PLv,AID) VALUES (';
bindata := bindata + IntToStr(CID);
bindata := bindata + ' ,''' + addslashes(Name) + '''';
// Colus, 20040305: JID becomes the 'proper' value.
j := JID;
if (JID > UPPER_JOB_BEGIN) then j := JID - UPPER_JOB_BEGIN + LOWER_JOB_END;
bindata := bindata + ' ,' + IntToStr(j);
bindata := bindata + ' ,' + IntToStr(BaseLV);
bindata := bindata + ' ,' + IntToStr(BaseEXP);
bindata := bindata + ' ,' + IntToStr(StatusPoint);
bindata := bindata + ' ,' + IntToStr(JobLV);
bindata := bindata + ' ,' + IntToStr(JobEXP);
bindata := bindata + ' ,' + IntToStr(SkillPoint);
bindata := bindata + ' ,' + IntToStr(Zeny);
bindata := bindata + ' ,' + IntToStr(Stat1);
bindata := bindata + ' ,' + IntToStr(Stat2);
if Option = 4 then begin
bindata := bindata + ' ,0';
end else begin
bindata := bindata + ' ,' + IntToStr(Option);
end;
bindata := bindata + ' ,' + IntToStr(Karma);
bindata := bindata + ' ,' + IntToStr(Manner);
if (HP < 0) then begin
HP := 0;
end;
bindata := bindata + ' ,' + IntToStr(HP);
bindata := bindata + ' ,' + IntToStr(SP);
bindata := bindata + ' ,' + IntToStr(DefaultSpeed);
bindata := bindata + ' ,' + IntToStr(Hair);
bindata := bindata + ' ,' + IntToStr(_2);
bindata := bindata + ' ,' + IntToStr(_3);
bindata := bindata + ' ,' + IntToStr(Weapon);
bindata := bindata + ' ,' + IntToStr(Shield);
bindata := bindata + ' ,' + IntToStr(Head1);
bindata := bindata + ' ,' + IntToStr(Head2);
bindata := bindata + ' ,' + IntToStr(Head3);
bindata := bindata + ' ,' + IntToStr(HairColor);
bindata := bindata + ' ,' + IntToStr(ClothesColor);
for j := 0 to 5 do
bindata := bindata + ' ,' + IntToStr(ParamBase[j]);
bindata := bindata + ' ,' + IntToStr(CharaNumber);
bindata := bindata + ' ,''' + addslashes(Map) + '''';
bindata := bindata + ' ,' + IntToStr(Point.X);
bindata := bindata + ' ,' + IntToStr(Point.Y);
bindata := bindata + ' ,''' + addslashes(SaveMap) + '''';
bindata := bindata + ' ,' + IntToStr(SavePoint.X);
bindata := bindata + ' ,' + IntToStr(SavePoint.Y);
bindata := bindata + ' ,' + IntToStr(Plag);
bindata := bindata + ' ,' + IntToStr(PLv);
bindata := bindata + ' ,' + IntToStr(ID);
bindata := bindata + ')';
if not ExecuteSqlCmd(Format('REPLACE INTO characters %s', [bindata])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character data error.');
Exit;
end;
bindata := '';
for j := 1 to 336 do begin
if Skill[j].Lv <> 0 then begin
if j > 1 then bindata := bindata + ',';
bindata := bindata + inttostr(j) + ',';
bindata := bindata + inttostr(Skill[j].Lv);
end;
end;
if not ExecuteSqlCmd(Format('REPLACE INTO skills (GID,skillInfo) VALUES (''%d'',''%s'')', [CID, bindata])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character Skill data error.');
Exit;
end;
{保存人物身上物品资料}
bindata := '';
for j := 1 to 100 do begin
if Item[j].ID <> 0 then begin
if j > 1 then bindata := bindata + ',';
bindata := bindata + inttostr(Item[j].ID) + ',';
bindata := bindata + inttostr(Item[j].Amount) + ',';
bindata := bindata + inttostr(Item[j].Equip) + ',';
bindata := bindata + inttostr(Item[j].Identify) + ',';
bindata := bindata + inttostr(Item[j].Refine) + ',';
bindata := bindata + inttostr(Item[j].Attr) + ',';
bindata := bindata + inttostr(Item[j].Card[0]) + ',';
bindata := bindata + inttostr(Item[j].Card[1]) + ',';
bindata := bindata + inttostr(Item[j].Card[2]) + ',';
bindata := bindata + inttostr(Item[j].Card[3]);
end;
end;
if not ExecuteSqlCmd(Format('REPLACE INTO inventory (GID,equipItem) VALUES (''%d'',''%s'')', [CID, bindata])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character Item data error.');
Exit;
end;
{保存人物手推车中物品的资料}
bindata := '';
for j := 1 to 100 do begin
if Cart.Item[j].ID <> 0 then begin
if j > 1 then bindata := bindata + ',';
bindata := bindata + inttostr(Cart.Item[j].ID) + ',';
bindata := bindata + inttostr(Cart.Item[j].Amount) + ',';
bindata := bindata + inttostr(Cart.Item[j].Equip) + ',';
bindata := bindata + inttostr(Cart.Item[j].Identify) + ',';
bindata := bindata + inttostr(Cart.Item[j].Refine) + ',';
bindata := bindata + inttostr(Cart.Item[j].Attr) + ',';
bindata := bindata + inttostr(Cart.Item[j].Card[0]) + ',';
bindata := bindata + inttostr(Cart.Item[j].Card[1]) + ',';
bindata := bindata + inttostr(Cart.Item[j].Card[2]) + ',';
bindata := bindata + inttostr(Cart.Item[j].Card[3]);
end;
end;
if not ExecuteSqlCmd(Format('REPLACE INTO cart (GID,cartitem) VALUES (''%d'',''%s'')', [CID, bindata])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character CartItem data error.');
Exit;
end;
{保存人物MEMO记录点资料}
if not ExecuteSqlCmd(Format('REPLACE INTO warpmemo (GID,mapName0,xPos0,yPos0,mapName1,xPos1,yPos1,mapName2,xPos2,yPos2) VALUES (''%d'',''%s'',''%d'',''%d'',''%s'',''%d'',''%d'',''%s'',''%d'',''%d'')', [CID, addslashes(MemoMap[0]), MemoPoint[0].X, MemoPoint[0].Y, addslashes(MemoMap[1]), MemoPoint[1].X, MemoPoint[1].Y, addslashes(MemoMap[2]), MemoPoint[2].X, MemoPoint[2].Y])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character Warp Memo data error.');
Exit;
end;
sl.Clear;
for j := 0 to tc.Flag.Count - 1 do begin
if ((Copy(tc.Flag.Names[j], 1, 1) <> '@') and (Copy(tc.Flag.Names[j], 1, 2) <> '$@')) and ((tc.Flag.Values[tc.Flag.Names[j]] <> '0') and (tc.Flag.Values[tc.Flag.Names[j]] <> '')) then begin
sl.Add(tc.Flag.Strings[j]);
end;
end;
if not ExecuteSqlCmd(Format('REPLACE INTO character_flags (GID,flagdata) VALUES (''%d'',''%s'')', [CID, sl.DelimitedText])) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '*** Save Character Flags data error.');
Exit;
end;
end;
end;
end;
//--------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -