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

📄 sqldata.pas

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