⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fusionsql.pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                                                                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 + -