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

📄 sqldata.pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 PAS
📖 第 1 页 / 共 5 页
字号:
				Exit;
			end;
		end;
		debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Load User Data From MySQL: userid = %s', [userid]));

		if not ExecuteSqlCmd(format('SELECT L.AID,L.ID,L.passwd,L.Gender,L.Mail,L.Banned,I.storeitem,I.money FROM accounts AS L LEFT JOIN storage AS I ON I.AID=L.AID WHERE L.ID=''%s'' LIMIT 1', [addslashes(userid)])) then begin
			debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Load User Data From MySQL Error: %s', [userid]));
			Exit;
		end
	end else begin
		if assigned(PlayerName) then
		begin
			if Player.IndexOf(AID) <> -1 then begin
				Result := True;
				Exit;
			end;
		end;
		debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Load User Data From MySQL: AID = %d', [AID]));

		if not ExecuteSqlCmd(format('SELECT L.AID,L.ID,L.passwd,L.Gender,L.Mail,L.Banned,I.storeitem,I.money FROM accounts AS L LEFT JOIN storage AS I ON I.AID=L.AID WHERE L.AID=''%d'' LIMIT 1', [AID])) then begin
			debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Load User Data From MySQL Error: %d', [AID]));
			Exit;
		end
	end;}

    if AID = 0 then begin
        if PlayerName.IndexOf(userid) <> -1 then begin
            tp := PlayerName.Objects[PlayerName.IndexOf(userid)] as TPlayer;
        end else begin
            tp := TPlayer.Create;
        end;
    end else begin
        if assigned(PlayerName) then begin
			if Player.IndexOf(AID) <> -1 then begin
				Result := True;
				Exit;
			end;
        end;
	end;

	if ExecuteSqlCmd(format('SELECT L.AID,L.ID,L.passwd,L.Gender,L.Mail,L.Banned,I.storeitem,I.money FROM accounts AS L LEFT JOIN storage AS I ON I.AID=L.AID WHERE L.ID=''%s'' LIMIT 1', [addslashes(userid)])) then
	begin
  SQLDataSet.First;
    if not SQLDataSet.Eof then begin


  with tp do begin
    ID := StrToInt(SQLDataSet.FieldValues['AID']);
    Name := unaddslashes(SQLDataSet.FieldValues['ID']);
    Pass := unaddslashes(SQLDataSet.FieldValues['passwd']);
    Gender := StrToInt(SQLDataSet.FieldValues['Gender']);
    Mail := unaddslashes(SQLDataSet.FieldValues['Mail']);
    Banned := StrToInt(SQLDataSet.FieldValues['Banned']);
		ver2 := 9;

		if SQLDataSet.FieldValues['storeitem'] <> '' then begin
            with SQLDataSet do begin


                sl.Clear;
                sl.DelimitedText := SQLDataSet.FieldValues['storeitem'];

                for i := 0 to ((sl.Count div 10) - 1) do begin
                    Kafra.Item[i+1].ID := strtoint(sl.Strings[0+i*10]);
                    Kafra.Item[i+1].Amount := strtoint(sl.Strings[1+i*10]);
                    Kafra.Item[i+1].Equip := strtoint(sl.Strings[2+i*10]);
                    Kafra.Item[i+1].Identify := strtoint(sl.Strings[3+i*10]);
                    Kafra.Item[i+1].Refine := strtoint(sl.Strings[4+i*10]);
                    Kafra.Item[i+1].Attr := strtoint(sl.Strings[5+i*10]);
                    Kafra.Item[i+1].Card[0] := strtoint(sl.Strings[6+i*10]);
                    Kafra.Item[i+1].Card[1] := strtoint(sl.Strings[7+i*10]);
                    Kafra.Item[i+1].Card[2] := strtoint(sl.Strings[8+i*10]);
                    Kafra.Item[i+1].Card[3] := strtoint(sl.Strings[9+i*10]);
                    Kafra.Item[i+1].Data := ItemDB.Objects[ItemDB.IndexOf(Kafra.Item[i+1].ID)] as TItemDB;
                end;

                sl.Free;

				CalcInventory(Kafra);
			end;
		end;
  end;

  for j:= 0 to 8 do begin
	  tp.CID[j] := 0;
		tp.CName[j] := '';
		tp.CData[j] := nil;
	end;

    if AID = 0 then begin
        if PlayerName.IndexOf(userid) <> -1 then begin

        end else begin
  PlayerName.AddObject(tp.Name, tp);
  Player.AddObject(tp.ID, tp);
        end;
    end;


	Result := True;
end;
    end;
end;

//------------------------------------------------------------------------------
// 取得人物资料
//------------------------------------------------------------------------------
function GetCharaData(GID: cardinal) : Boolean;
var
	i,j : Integer;
	tc  : TChara;
	ta  : TMapList;
	tp  : TPlayer;
	tpa : TParty;
	sl  : TStringList;
	str : string;
begin
	sl := TStringList.Create;
	sl.QuoteChar := '"';
	sl.Delimiter := ',';

  Result := False;

	debugout.lines.add('[' + TimeToStr(Now) + '] ' + format('Load Character Data From MySQL: CharaID = %d', [GID]));

	if ExecuteSqlCmd('SELECT C.*, M.*, S.skillInfo, I.equipItem, T.cartitem, V.flagdata FROM characters AS C ' + format('LEFT JOIN warpmemo AS M ON (C.GID=M.GID) LEFT JOIN skills AS S ON (C.GID=S.GID) LEFT JOIN inventory AS I ON (I.GID=C.GID) LEFT JOIN cart AS T ON (T.GID=C.GID) LEFT JOIN character_flags AS V ON (V.GID=C.GID) WHERE C.GID=''%d'' LIMIT 1', [GID])) then
	begin
		SQLDataSet.First;
    if not SQLDataSet.Eof then begin
	  //while not SQLDataSet.Eof do begin

      tc := TChara.Create;
      with tc do begin
				CID           := StrToInt(SQLDataSet.FieldValues['GID']);
				Name          := unaddslashes(SQLDataSet.FieldValues['Name']);
                str := Name;
				
				if assigned(CharaName) then {如果该人物已经读入,就不用再读了}
				begin
					if CharaName.IndexOf(Name) <> -1 then
					begin
                        tc := CharaName.Objects[CharaName.Indexof(str)] as TChara;
					  {Result := True;
						Exit;           }
					  //SQLDataSet.Next;
						//continue;
					end;
				end;

				JID           := StrToInt(SQLDataSet.FieldValues['JID']);
        // Colus, 20040305: JID becomes the 'proper' value.
        if (JID > LOWER_JOB_END) then JID := JID - LOWER_JOB_END + UPPER_JOB_BEGIN;

				BaseLV        := StrToInt(SQLDataSet.FieldValues['BaseLV']);
				BaseEXP       := StrToInt(SQLDataSet.FieldValues['BaseEXP']);
				StatusPoint   := StrToInt(SQLDataSet.FieldValues['StatusPoint']);
				JobLV         := StrToInt(SQLDataSet.FieldValues['JobLV']);
				JobEXP        := StrToInt(SQLDataSet.FieldValues['JobEXP']);
				SkillPoint    := StrToInt(SQLDataSet.FieldValues['SkillPoint']);
				Zeny          := StrToInt(SQLDataSet.FieldValues['Zeny']);
				Stat1         := StrToInt(SQLDataSet.FieldValues['Stat1']);
				Stat2         := StrToInt(SQLDataSet.FieldValues['Stat2']);
				Option        := StrToInt(SQLDataSet.FieldValues['Options']);
        if Option = 4 then Option := 0;
				Karma         := StrToInt(SQLDataSet.FieldValues['Karma']);
				Manner        := StrToInt(SQLDataSet.FieldValues['Manner']);
				HP            := StrToInt(SQLDataSet.FieldValues['HP']);
        if (HP < 0) then begin
          HP := 0;
        end;
				SP            := StrToInt(SQLDataSet.FieldValues['SP']);
				DefaultSpeed  := StrToInt(SQLDataSet.FieldValues['DefaultSpeed']);
				Hair          := StrToInt(SQLDataSet.FieldValues['Hair']);
				_2            := StrToInt(SQLDataSet.FieldValues['_2']);
				_3            := StrToInt(SQLDataSet.FieldValues['_3']);
				Weapon        := StrToInt(SQLDataSet.FieldValues['Weapon']);
				Shield        := StrToInt(SQLDataSet.FieldValues['Shield']);
				Head1         := StrToInt(SQLDataSet.FieldValues['Head1']);
				Head2         := StrToInt(SQLDataSet.FieldValues['Head2']);
				Head3         := StrToInt(SQLDataSet.FieldValues['Head3']);
				HairColor     := StrToInt(SQLDataSet.FieldValues['HairColor']);
				ClothesColor  := StrToInt(SQLDataSet.FieldValues['ClothesColor']);
		    ParamBase[0]  := StrToInt(SQLDataSet.FieldValues['STR']);
		    ParamBase[1]  := StrToInt(SQLDataSet.FieldValues['AGI']);
		    ParamBase[2]  := StrToInt(SQLDataSet.FieldValues['VIT']);
		    ParamBase[3]  := StrToInt(SQLDataSet.FieldValues['INTS']);
		    ParamBase[4]  := StrToInt(SQLDataSet.FieldValues['DEX']);
		    ParamBase[5]  := StrToInt(SQLDataSet.FieldValues['LUK']);
		    CharaNumber   := StrToInt(SQLDataSet.FieldValues['CharaNumber']);
		    Map           := unaddslashes(SQLDataSet.FieldValues['Map']);
		    Point.X       := StrToInt(SQLDataSet.FieldValues['X']);
		    Point.Y       := StrToInt(SQLDataSet.FieldValues['Y']);
		    SaveMap       := unaddslashes(SQLDataSet.FieldValues['SaveMap']);
		    SavePoint.X   := StrToInt(SQLDataSet.FieldValues['SX']);
		    SavePoint.Y   := StrToInt(SQLDataSet.FieldValues['SY']);
		    Plag          := StrToInt(SQLDataSet.FieldValues['Plag']);
		    PLv           := StrToInt(SQLDataSet.FieldValues['PLv']);
				PartyName     := '';
		    ID            := StrToInt(SQLDataSet.FieldValues['AID']);

				{读取MEMO记录点资料}
				for i := 0 to 2 do begin
					if SQLDataSet.FieldByName('mapName' + inttostr(1)).IsNull then continue;
					MemoMap[i]     := unaddslashes(SQLDataSet.FieldValues['mapName' + IntToStr(i)]);
					MemoPoint[i].X := StrToInt(SQLDataSet.FieldValues['xPos' + IntToStr(i)]);
					MemoPoint[i].Y := StrToInt(SQLDataSet.FieldValues['yPos' + IntToStr(i)]);

					if (MemoMap[i] <> '') and (MapList.IndexOf(MemoMap[i]) = -1) then begin
						debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid MemoMap%d "%s"', [Name, i, MemoMap[i]]));
						MemoMap[i] := '';
						MemoPoint[i].X := 0;
						MemoPoint[i].Y := 0;
					end else if MemoMap[i] <> '' then begin
						ta := MapList.Objects[MapList.IndexOf(MemoMap[i])] as TMapList;
                        if (MemoPoint[i].X < 0) or (MemoPoint[i].X >= ta.Size.X) or (MemoPoint[i].Y < 0) or (MemoPoint[i].Y >= ta.Size.Y) then begin
							debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid MemoMap%d Point "%s"[%dx%d] (%d,%d)', [Name, i, MemoMap[i], ta.Size.X, ta.Size.Y, MemoPoint[i].X, MemoPoint[i].Y]));
							MemoMap[i] := '';
							MemoPoint[i].X := 0;
							MemoPoint[i].Y := 0;
						end;
					end;
				end;

				if CID < 100001 then CID := CID + 100001;

				{检查地图是否存在}
				if MapList.IndexOf(Map) = -1 then begin
				  debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid Map "%s"', [Name, Map]));
				  Map := 'prontera';
				  Point.X := 158;
				  Point.Y := 189;
			  end;
				{检查地图坐标是否有效}
				ta := MapList.Objects[MapList.IndexOf(Map)] as TMapList;
				if (Point.X < 0) or (Point.X >= ta.Size.X) or (Point.Y < 0) or (Point.Y >= ta.Size.Y) then begin
					debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid Map Point "%s"[%dx%d] (%d,%d)',[Name, Map, ta.Size.X, ta.Size.Y, Point.X, Point.Y]));
					Map := 'prontera';
					Point.X := 158;
					Point.Y := 189;
				end;
				{检查人物记录点地图是否有效}
				if MapList.IndexOf(SaveMap) = -1 then begin
					debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid SaveMap "%s"', [Name, SaveMap]));
					SaveMap := 'prontera';
					SavePoint.X := 158;
					SavePoint.Y := 189;
				end;
				{检查人物记录点地图坐标是否有效}
				ta := MapList.Objects[MapList.IndexOf(SaveMap)] as TMapList;
				if (SavePoint.X < 0) or (SavePoint.X >= ta.Size.X) or (SavePoint.Y < 0) or (SavePoint.Y >= ta.Size.Y) then begin
					debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('%s : Invalid SaveMap Point "%s"[%dx%d] (%d,%d)', [Name, SaveMap, ta.Size.X, ta.Size.Y, SavePoint.X, SavePoint.Y]));
					SaveMap := 'prontera';
					SavePoint.X := 158;
					SavePoint.Y := 189;
				end;
        {读入所有技能资料,不知道干嘛要这么做。。。}
        for i := 0 to 336 do begin
			    if SkillDB.IndexOf(i) <> -1 then begin
				    Skill[i].Data := SkillDB.IndexOfObject(i) as TSkillDB;
			   end;
		    end;
        if (Plag <> 0) then begin
          Skill[tc.Plag].Plag := true;
        end;
				{读取人物技能等级}


                sl.Clear;
                sl.DelimitedText := SQLDataSet.FieldValues['skillInfo'];

                for i := 0 to ((sl.Count div 2) - 1) do begin
                    if (SkillDB.IndexOf(strtoint(sl.Strings[0+i*2])) <> -1) then begin
                        Skill[strtoint(sl.Strings[0+i*2])].Lv := strtoint(sl.Strings[1+i*2]);
                        Skill[strtoint(sl.Strings[0+i*2])].Card := false;
                        Skill[strtoint(sl.Strings[0+i*2])].Plag := false;
                    end;
                end;

                sl.Clear;
                sl.DelimitedText := SQLDataSet.FieldValues['equipItem'];

                for i := 0 to ((sl.Count div 10) - 1) do begin
                    Item[i+1].ID := strtoint(sl.Strings[0+i*10]);
                    Item[i+1].Amount := strtoint(sl.Strings[1+i*10]);
                    Item[i+1].Equip := strtoint(sl.Strings[2+i*10]);
                    Item[i+1].Identify := strtoint(sl.Strings[3+i*10]);
                    Item[i+1].Refine := strtoint(sl.Strings[4+i*10]);
                    Item[i+1].Attr := strtoint(sl.Strings[5+i*10]);
                    Item[i+1].Card[0] := strtoint(sl.Strings[6+i*10]);
                    Item[i+1].Card[1] := strtoint(sl.Strings[7+i*10]);
                    Item[i+1].Card[2] := strtoint(sl.Strings[8+i*10]);
                    Item[i+1].Card[3] := strtoint(sl.Strings[9+i*10]);
                    Item[i+1].Data := ItemDB.Objects[ItemDB.IndexOf(Item[i+1].ID)] as TItemDB;
                end;

                sl.Clear;
                sl.DelimitedText := SQLDataSet.FieldValues['cartitem'];

                for i := 0 to ((sl.Count div 10) - 1) do begin
                    Cart.Item[i+1].ID := strtoint(sl.Strings[0+i*10]);
                    Cart.Item[i+1].Amount := strtoint(sl.Strings[1+i*10]);
                    Cart.Item[i+1].Equip := strtoint(sl.Strings[2+i*10]);
                    Cart.Item[i+1].Identify := strtoint(sl.Strings[3+i*10]);
                    Cart.Item[i+1].Refine := strtoint(sl.Strings[4+i*10]);
                    Cart.Item[i+1].Attr := strtoint(sl.Strings[5+i*10]);
                    Cart.Item[i+1].Card[0] := strtoint(sl.Strings[6+i*10]);
                    Cart.Item[i+1].Card[1] := strtoint(sl.Strings[7+i*10]);
                    Cart.Item[i+1].Card[2] := strtoint(sl.Strings[8+i*10]);
                    Cart.Item[i+1].Card[3] := strtoint(sl.Strings[9+i*10]);
                    Cart.Item[i+1].Data := ItemDB.Objects[ItemDB.IndexOf(Cart.Item[i+1].ID)] as TItemDB;
                end;
            end;

            sl.Clear;
            sl.DelimitedText := SQLDataSet.FieldValues['flagdata'];
			for i := 0 to (sl.Count - 1) do begin
                tc.Flag.Add(sl.Strings[i]);
            end;

			CharaName.AddObject(tc.Name, tc);
		  Chara.AddObject(tc.CID, tc);

      GetPlayerData('', tc.ID);

      if Player.IndexOf(tc.ID) <> -1 then begin
			  tp := Player.Objects[Player.IndexOf(tc.ID)] as TPlayer;
			  tp.CID[tc.CharaNumber] := tc.CID;
			  tp.CName[tc.CharaNumber] := tc.Name;
			  tp.CData[tc.CharaNumber] := tc;
			  tp.CData[tc.CharaNumber].Gender := tp.Gender;
      end;
			{读取宠物资料}
			GetPetData(tc.ID);
			{读取人物工会资料}
			GetCharaGuildData(tc.CID);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -