📄 fusionsql.pas
字号:
Attr := 0;
Card[0] := $FF00;
Card[2] := tpe.PetID mod $10000;
Card[3] := tpe.PetID div $10000;
end;
except
end;
end else begin
tc := Chara.IndexOfObject(tpe.CharaID) as TChara;
if tpe.Cart = 0 then begin
try
with tc.Item[tpe.Index] do begin
Attr := tpe.Incubated;
Card[0] := $FF00;
Card[2] := tpe.PetID mod $10000;
Card[3] := tpe.PetID div $10000;
end;
except
end;
end else begin
try
with tc.Cart.Item[tpe.Index] do begin
Attr := 0;
Card[0] := $FF00;
Card[2] := tpe.PetID mod $10000;
Card[3] := tpe.PetID div $10000;
end;
except
end;
end;
end;
end;
end;
SQLDataSet.Next;
end;
end else begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Pet data loading error...');
Exit;
end;
Result := True;
end;
function Load_Guilds(GID: cardinal) : Boolean;
var
query : string;
tc : TChara;
tg : TGuild;
tgb : TGBan;
tgl : TGRel;
i, j : integer;
sl : TStringList;
guildkey : Boolean;
addkey : Boolean;
begin
sl := TStringList.Create;
sl.QuoteChar := '"';
sl.Delimiter := ',';
Result := False;
guildkey := False;
addkey := True;
query := 'SELECT G.*, M.* FROM guild_info AS G LEFT JOIN guild_members AS M ON (G.GDID=M.GDID) WHERE M.GID = '''+inttostr(GID)+''' LIMIT 1';
if (MySQL_Query(query)) then begin
while not SQLDataSet.Eof do begin
guildkey := True;
tg := TGuild.Create;
with tg do begin
ID := StrToInt(SQLDataSet.FieldValues['GDID']);
if assigned (GuildList) then begin
if (GuildList.IndexOf(tg.ID) <> -1) then begin
tg := GuildList.Objects[GuildList.IndexOf(tg.ID)] as TGuild;
addkey := False;
end;
end;
if (ID > NowGuildID) then NowGuildID := ID;
Name := (SQLDataSet.FieldValues['Name']);
LV := StrToInt(SQLDataSet.FieldValues['LV']);
EXP := StrToInt(SQLDataSet.FieldValues['EXP']);
GSkillPoint := StrToInt(SQLDataSet.FieldValues['GSkillPoint']);
Notice[0] := (SQLDataSet.FieldValues['Subject']);
Notice[1] := (SQLDataSet.FieldValues['Notice']);
Agit := (SQLDataSet.FieldValues['Agit']);
Emblem := StrToInt(SQLDataSet.FieldValues['Emblem']);
Present := StrToInt(SQLDataSet.FieldValues['Present']);
DisposFV := StrToInt(SQLDataSet.FieldValues['DisposFV']);
DisposRW := StrToInt(SQLDataSet.FieldValues['DisposRW']);
for i := 10000 to 10004 do begin
if (GSkillDB.IndexOf(i) <> -1) then begin
GSkill[i].Data := GSkillDB.IndexOfObject(i) as TSkillDB;
end;
end;
sl.Clear;
sl.DelimitedText := SQLDataSet.FieldValues['skill'];
for i := 0 to ((sl.Count div 2) - 1) do begin
if (GSkillDB.IndexOf(strtoint(sl.Strings[0+i*2])) <> -1) then begin
GSkill[strtoint(sl.Strings[0+i*2])].Lv := strtoint(sl.Strings[1+i*2]);
GSkill[strtoint(sl.Strings[0+i*2])].Card := false;
end;
end;
end;
if (addkey) then begin
GuildList.AddObject(tg.ID, tg);
end;
SQLDataSet.Next;
end;
end;
if (guildkey) then begin
with tg do begin
query := 'SELECT * FROM guild_members WHERE GDID = '''+inttostr(tg.ID)+'''';
if (MySQL_Query(query)) then begin
i := 0;
while not SQLDataSet.Eof do begin
if i > 35 then break;
MemberID[i] := StrToInt(SQLDataSet.FieldValues['GID']);
MemberPos[i] := StrToInt(SQLDataSet.FieldValues['PositionID']);
MemberEXP[i] := StrToInt(SQLDataSet.FieldValues['MemberExp']);
if (MemberID[i] <> 0) then Inc(RegUsers, 1);
inc(i);
SQLDataSet.Next;
end;
end;
query := 'SELECT * FROM guild_positions WHERE GDID = '''+inttostr(tg.ID)+''' LIMIT 20';
if (MySQL_Query(query)) then begin
i := 0;
while not SQLDataSet.Eof do begin
PosName[i] := (SQLDataSet.FieldValues['PosName']);
PosInvite[i] := StrToBool(SQLDataSet.FieldValues['PosInvite']);
PosPunish[i] := StrToBool(SQLDataSet.FieldValues['PosPunish']);
PosEXP[i] := StrToInt(SQLDataSet.FieldValues['PosEXP']);
inc(i);
SQLDataSet.Next;
end;
end;
query := 'SELECT * FROM guild_banish WHERE GDID = '''+inttostr(tg.ID)+'''';
if (MySQL_Query(query)) then begin
i := 0;
while not SQLDataSet.Eof do begin
tgb := TGBan.Create;
tgb.Name := (SQLDataSet.FieldValues['MemberName']);
tgb.AccName := (SQLDataSet.FieldValues['MemberAccount']);
tgb.Reason := (SQLDataSet.FieldValues['Reason']);
GuildBanList.AddObject(tgb.Name, tgb);
SQLDataSet.Next;
end;
end;
query := 'SELECT * FROM guild_allies WHERE GDID = '''+inttostr(tg.ID)+'''';
if (MySQL_Query(query)) then begin
i := 0;
while not SQLDataSet.Eof do begin
tgl := TGRel.Create;
tgl.ID := StrToInt(SQLDataSet.FieldValues['GDID']);
tgl.GuildName := (SQLDataSet.FieldValues['GuildName']);
if (SQLDataSet.FieldValues['Relation'] = 1) then RelAlliance.AddObject(tgl.GuildName, tgl)
else RelHostility.AddObject(tgl.GuildName, tgl);
SQLDataSet.Next;
end;
end;
tc := Chara.Objects[Chara.IndexOf(GID)] as TChara;
for j := 0 to 35 do begin
if MemberID[j] = tc.CID then begin
tc.GuildName := Name;
tc.GuildID := tg.ID;
tc.ClassName := PosName[MemberPos[j]];
tc.GuildPos := j;
Member[j] := tc;
if (j = 0) then MasterName := tc.Name;
SLV := SLV + tc.BaseLV;
break;
end;
end;
for j := 0 to 35 do begin
if MemberID[j] <> 0 then begin
i := Chara.IndexOf(MemberID[j]);
if i = -1 then begin
Load_Characters(tg.MemberID[j]);
end;
if i <> -1 then begin
i := Chara.IndexOf(MemberID[j]);
tc := Chara.Objects[i] as TChara;
tc.GuildName := Name;
tc.GuildID := ID;
tc.ClassName := PosName[MemberPos[j]];
tc.GuildPos := j;
Member[j] := tc;
if (j = 0) then MasterName := tc.Name;
SLV := SLV + tc.BaseLV;
end;
end;
end;
end;
end;
Result := True;
guildkey := False;
sl.Free;
end;
function Preload_GuildMembers() : Boolean;
var
query : string;
tc : TChara;
addkey : Boolean;
begin
addkey := True;
query := 'SELECT C.GID, C.Name, C.BaseLV FROM characters AS C LEFT JOIN guild_members AS G ON (C.GID=G.GID) WHERE C.GID <> 0';
if MySQL_Query(query) then begin
debugout.lines.add('[' + TimeToStr(Now) + '] ' + 'Pre-Loading Character Data for Guilds');
SQLDataSet.First;
while not SQLDataSet.Eof do begin
tc := TChara.Create;
tc.CID := StrToInt(SQLDataSet.FieldValues['GID']);
tc.Name := SQLDataSet.FieldValues['Name'];
if assigned (CharaName) then begin
if (CharaName.IndexOf(tc.Name) <> -1) then begin
tc := CharaName.Objects[CharaName.IndexOf(tc.Name)] as TChara;
addkey := False;
end;
end;
tc.BaseLV := StrToInt(SQLDataSet.FieldValues['BaseLV']);
if (addkey) then begin
CharaName.AddObject(tc.Name, tc);
Chara.AddObject(tc.CID, tc);
end;
SQLDataSet.Next;
end;
end;
debugout.lines.add('[' + TimeToStr(Now) + '] ' + '-- Completed.');
end;
function Create_Account(username: String; userpass: String; sex: integer) : Boolean;
var
query : string;
i : integer;
begin
query := 'select * from accounts where ID = '''+username+'''';
if MySQL_Query(query) then begin
if sqldataset.RecordCount = 0 then begin
query := 'select * from accounts';
if MySQL_Query(query) then begin
i := 100100 + sqldataset.RecordCount;
query := 'insert into accounts values ('''+inttostr(i)+''', '''+username+''', '''+userpass+''', '''+inttostr(sex)+''', ''-@-'', '''', '''')';
MySQL_Query(query);
end;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -