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

📄 uguild.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 4 页
字号:
         SelfData.GuildNpc[i].rName := aName;
         SelfData.GuildNpc[i].rX := aX;
         SelfData.GuildNpc[i].rY := aY;
         SelfData.GuildNpc[i].rSex := aSex;

         GuildNpc := TGuildNpc.Create;
         GuildNpc.SetManagerClass (Manager);

         GuildNpc.Initial (Self, aName, aX, aY, aSex);

         if (SelfData.GuildMagic <> '') and (boAddGuildMagic = false) then begin
            GuildNpc.boMagicNpc := true;
            StrPCopy (@GuildNpc.BasicData.Guild, SelfData.GuildMagic);
            MagicClass.GetMagicData (SelfData.GuildMagic, GuildNpc.GuildMagicData, SelfData.MagicExp);
            boAddGuildMagic := true;
         end;
         DieGuildNpcList.Add (GuildNpc);
         
         Result := TRUE;
         exit;
      end;
   end;
end;

function  TGuildObject.FieldProc (hfu: Longint; Msg: word; var SenderInfo: TBasicData; var aSubData: TSubData): Integer;
var
   i, n, percent : integer;
//   xx, yy: word;
   str1, str2, str3: string;
   str, gname : string;
   sayer, objectname, gradename: string;
   SubData: TSubData;
   BO: TBasicObject;
   GuildNpc : TGuildNpc;
begin
   Result := PROC_FALSE;
   if isRangeMessage ( hfu, Msg, SenderInfo) = FALSE then exit;
   Result := inherited FieldProc (hfu, Msg, Senderinfo, aSubData);
   if Result = PROC_TRUE then exit;

   case Msg of
      FM_ADDITEM:
         begin
            if SelfData.Name = '' then Exit;
            
            if aSubData.ItemData.rKind = ITEM_KIND_DUMMY then begin
               if GuildNpcList.Count + DieGuildNpcList.Count >= MAX_GUILDNPC_COUNT then begin
                  BocSay ('歹捞惑 父甸荐 绝嚼聪促.');
                  exit;
               end;
               i := 0;
               while true do begin
                  if aSubData.ItemData.rSex = 2 then begin
                     gName := INI_GUILD_NPCWOMAN_NAME + IntToStr(i);
                     if GetGuildNpcByName (gName) = -1 then begin
                        AddGuildNpc (gName, BasicData.X, BasicData.Y, 2);
                        Result := PROC_TRUE;
                        break;
                     end;
                  end else begin
                     gName := INI_GUILD_NPCMAN_NAME + IntToStr(i);
                     if GetGuildNpcByName (gName) = -1 then begin
                        AddGuildNpc (gName, BasicData.X, BasicData.Y, 1);
                        Result := PROC_TRUE;
                        break;
                     end;
                  end;
                  Inc (i);
               end;
            end;
         end;
      FM_HIT :
         begin
            if SelfData.Name <> '' then begin
               if isHitedArea (SenderInfo.dir, SenderInfo.x, SenderInfo.y, aSubData.HitData.HitFunction, percent) then begin
                  UserList.GuildSay (SelfData.Name, SelfData.Name + ': ' + format ('%s阑 穿啊 锭赋聪促.',[INI_GUILD_STONE]));
                  Dec (SelfData.Durability, DEC_GUILD_DURA_BY_HIT);
                  if SelfData.Durability <= 0 then begin
                     // FboAllowDelete := TRUE;
                  end;
                  n := SelfData.Durability;
                  if n > SelfData.MaxDurability then n := SelfData.MaxDurability;
                  BocSay (IntToStr (n));
                  SubData.TargetId := SenderInfo.id;
                  for i := 0 to GuildNpcList.Count - 1 do begin
                     GuildNpc := GuildNpcList.Items [i];
                     if GuildNpc.FieldProc (NOTARGETPHONE, FM_GUILDATTACK, BasicData, SubData) = PROC_TRUE then begin
                        break;
                     end;
                  end;
               end;
            end;
{
            xx := SenderInfo.x; yy := SenderInfo.y;
            GetNextPosition (SenderInfo.dir, xx, yy);
            if (BasicData.x = xx) and (BasicData.y = yy) then begin
               UserList.GuildSay (GuildName, GuildName+ ': '+format ('%s阑 穿啊 锭赋聪促.',[INI_GUILD_STONE]));
               Dec (GuildDurability, DEC_GUILD_DURA_BY_HIT);
               BocSay (IntToStr (GuildDurability));
               SubData.TargetId := SenderInfo.id;
               for i := 0 to AnsList.Count -1 do
                  if TGuildNpc (AnsList[i]).FieldProc (NOTARGETPHONE, FM_GUILDATTACK, BasicData, SubData) = PROC_TRUE then break;
            end;
}
         end;
      FM_PICKUP :
         begin
            if FboAllowDelete then exit;
            if (SelfData.Name = '') and (SelfData.Sysop <> '') then begin
               if (StrPas (@SenderInfo.Name) = SelfData.Sysop) then begin
                  ItemClass.GetItemData (INI_Guild_STONE, SubData.ItemData);
                  SignToItem (SubData.ItemData, Manager.ServerID, SenderInfo, '');
                  SubData.ServerId := Manager.ServerId;
                  if TFieldPhone(Manager.Phone).SendMessage (SenderInfo.id, FM_ADDITEM, BasicData, SubData) = PROC_TRUE then begin
                     FboAllowDelete := TRUE;
                     exit;
                  end;
               end;
            end;
         end;
      FM_SAY :
         begin
            if FboAllowDelete then exit;
            if SenderInfo.id = BasicData.id then exit;

            if StrPas (@SenderInfo.Name) = SelfData.Sysop then begin
               str := GetWordString (aSubData.SayString);
               if ReverseFormat (str, '%s: %s 巩颇甫 父电促', str1, str2, str3, 2) then begin
                  if (not isFullHangul (str2)) or (not isGrammarID(str2)) or (Length(str2) > 12) or (Length(str2) < 2) then begin
                     BocSay ( '巩颇捞抚捞 肋给登菌嚼聪促.');
                     exit;
                  end;
                  SubData.ServerId := Manager.ServerId;
                  StrPCopy (@SubData.SubName, Str1);
                  StrPCopy (@SubData.GuildName, Str2);
                  if TFieldPhone (Manager.Phone).SendMessage (MANAGERPHONE, FM_ALLOWGUILDNAME, BasicData, SubData) = PROC_FALSE then begin
                     BocSay ( '捞固 巩颇捞抚捞 乐芭唱,');
                     BocSay ( '何巩林唱 巩林肺 殿废登绢 乐嚼聪促.');
                     BocSay ( '巩颇甫 父甸 荐 绝嚼聪促.');
                     exit;
                  end else begin
                     BocChangeProperty;
                  end;
                  exit;
               end;
            end;
            if SelfData.Name = '' then exit;

            str := GetwordString (aSubData.SayString);
            if Pos ('呕硼 矫难林技夸',str) > 0 then begin
               str := GetValidStr3 (str, sayer, ':');
               // 2000.09.18 NPC狼 捞抚苞 User狼 捞抚捞 鞍阑锭 八祸坷幅滚弊 荐沥 by Lee.S.G
               // 呕硼绰 RACE_HUMAN俊辑父 蜡瓤窍促
               Bo := GetViewObjectByName (sayer, RACE_HUMAN);
               if Bo = nil then exit;
               if not (Bo is TUser) then exit;
               TUser(Bo).GuildName := '';
               TUser(Bo).GuildGrade := '';
               StrPCopy(@TUser(Bo).BasicData.Guild, '');
               TUser(Bo).BocChangeProperty;
               BocSay ('呕硼 登菌嚼聪促.');
               exit;
            end;

            str := GetWordString (aSubData.SayString);
            if Pos ('力疙 矫难林技夸', str) > 0 then begin
               str := GetValidStr3 (str, sayer, ':');
               Bo := GetViewObjectByName (sayer, RACE_HUMAN);
               if Bo = nil then exit;
               if not (Bo is TUser) then exit;
               if (sayer <> SelfData.SubSysop[0]) and (sayer <> SelfData.SubSysop[1]) and (sayer <> SelfData.SubSysop[2]) then begin
                  BocSay ('何巩林俊 烙疙登绢 乐瘤 臼嚼聪促.');
                  exit;
               end;
               if sayer = SelfData.SubSysop[0] then SelfData.SubSysop[0] := ''
               else if sayer = SelfData.SubSysop[1] then SelfData.SubSysop[1] := ''
               else if sayer = SelfData.SubSysop[2] then SelfData.SubSysop[2] := '';
               BocSay ('何巩林俊辑 力疙 登菌嚼聪促.');
               exit;
            end;

            str := GetwordString (aSubData.SayString);
            if ReverseFormat (str, '%s: ', sayer, str2, str3, 1) then begin
               if (sayer <> SelfData.Sysop) and (sayer <> SelfData.SubSysop[0])
                  and (sayer <> SelfData.SubSysop[1]) and (sayer <> SelfData.SubSysop[2]) then exit;
            end;

            if ReverseFormat (str, '%s: %s丛阑 傍拜茄促', sayer, objectname, str3, 2) then begin
               Bo := GetViewObjectByName (objectname, RACE_HUMAN);
               if Bo = nil then begin BocSay (format ('%s丛篮 绝嚼聪促.',[objectname])); exit; end;
               if not (Bo is TUser) then begin BocSay (format ('%s丛篮 荤侩磊啊 酒凑聪促.',[objectname])); exit; end;
               if BO.BasicData.Feature.rfeaturestate = wfs_die then exit;
               SubData.TargetId := BO.BasicData.id;
               for i := 0 to GuildNpcList.Count - 1 do begin
                  GuildNpc := GuildNpcList.Items [i];
                  Bo := GetViewObjectByID (GuildNpc.BasicData.ID);
                  if Bo <> nil then begin
                     GuildNpc.FieldProc (NOTARGETPHONE, FM_GUILDATTACK, BasicData, SubData);
                  end;
               end;
               exit;
            end;
            if ReverseFormat (str, '%s: 傍拜阑 肛冕促', sayer, objectname, str3, 1) then begin
               SubData.TargetId := 0;
               for i := 0 to GuildNpcList.Count - 1 do begin
                  GuildNpc := GuildNpcList.Items [i];
                  GuildNpc.FieldProc (NOTARGETPHONE, FM_GUILDATTACK, BasicData, SubData);
               end;
               exit;
            end;
            if ReverseFormat (str, '%s: %s丛阑 啊涝矫挪促', sayer, objectname, str3, 2) then begin
               // 2000.09.18 NPC狼 捞抚苞 User狼 捞抚捞 鞍阑锭 八祸坷幅滚弊 荐沥 by Lee.S.G
               // 啊涝篮 RACE_HUMAN俊辑父 蜡瓤窍促
               Bo := GetViewObjectByName (objectname, RACE_HUMAN);
               if Bo = nil then begin BocSay (format ('%s丛篮 绝嚼聪促.',[objectname])); exit; end;
               if not (Bo is TUser) then begin BocSay (format ('%s丛篮 荤侩磊啊 酒凑聪促.',[objectname])); exit; end;
               if TUser(Bo).GuildName = SelfData.Name then begin BocSay (format ('%s丛篮 啊涝登绢 乐嚼聪促.',[objectname])); exit; end;
               if TUser(Bo).GuildName <> '' then begin BocSay (format ('%s丛篮 促弗 巩颇 涝聪促.',[objectname])); exit; end;
               TUser(Bo).GuildName := SelfData.Name;
               // 2000.09.16 巩林唱 何巩林狼 啊涝矫 巩颇檬籍狼 郴备己阑 刘啊矫虐扁 困秦
               // GetUserGrade() 甫 龋免茄促 by Lee.S.G
               TUser(Bo).GuildGrade := GetUserGrade (objectname);
               StrPCopy (@TUser(Bo).BasicData.Guild, SelfData.Name);
               GuildUserList.AddUser (objectname);
               TUser(Bo).BocChangeProperty;
               BocSay (format ('%s丛阑 啊涝矫淖嚼聪促.',[objectname]));
            end;
            if ReverseFormat (str, '%s: %s丛阑 呕硼矫挪促', sayer, objectname, str3, 2) then begin
               if GuildUserList.DelUser (objectname) then begin
                  BocSay (format ('%s丛阑 呕硼矫淖嚼聪促.',[objectname]));
                  SubData.ServerId := Manager.ServerId;
                  StrPCopy (@SubData.SubName, objectname);
                  StrPCopy (@SubData.GuildName, SelfData.Name);
                  TFieldPhone (Manager.Phone).SendMessage (MANAGERPHONE, FM_REMOVEGUILDMEMBER, BasicData, SubData);

                  // 2000.09.18 NPC狼 捞抚苞 User狼 捞抚捞 鞍阑锭 八祸坷幅滚弊 荐沥 by Lee.S.G
                  // 呕硼绰 RACE_HUMAN俊辑父 蜡瓤窍促
                  {
                  Bo := GetViewObjectByName (objectname, RACE_HUMAN);
                  if Bo = nil then exit;
                  if not (Bo is TUser) then exit;
                  TUser (Bo).GuildName := '';
                  // 2000.09.16 GuildGrade档 窃膊 檬扁拳 矫挪促 by Lee.S.G
                  TUser (Bo).GuildGrade := '';
                  StrPCopy (@TUser (Bo).BasicData.Guild, '');
                  TUser(Bo).BocChangeProperty;
                  }
               end else begin
                  BocSay (format ('%s丛篮 啊涝登绢乐瘤 臼嚼聪促.',[objectname]));
               end;
            end;
            if ReverseFormat (str, '%s: %s丛狼 流窃篮 %s捞促', sayer, objectname, gradename, 3) then begin
               if (not isFullHangul (gradename)) or (not isGrammarID(gradename)) or (Length(gradename) > 12) or (Length(gradename) < 2) then begin
                  BocSay ( '流氓捞抚捞 肋给登菌嚼聪促.');
                  exit;
               end;

               if GuildUserList.IsGuildUser (objectname) then begin
                  BocSay (format ('林绢柳 流氓篮 %s 涝聪促.',[gradename]));
                  GuildUserList.SetGradeName (objectname, gradename);
               end else begin
                  BocSay (format ('%s丛篮 啊涝登绢乐瘤 臼嚼聪促.',[objectname]));
               end;
            end;

            if ReverseFormat (str, '%s: %s丛阑 何巩林肺 烙疙茄促', sayer, objectname, str3, 2) then begin
               if sayer <> SelfData.Sysop then exit;
               // 2000.09.18 NPC狼 捞抚苞 User狼 捞抚捞 鞍阑锭 八祸坷幅滚弊 荐沥 by Lee.S.G
               // 何巩林绰 RACE_HUMAN俊辑父 蜡瓤窍促
               Bo := GetViewObjectByName (objectname, RACE_HUMAN);
               if Bo = nil then begin BocSay (format ('%s丛篮 绝嚼聪促.',[objectname])); exit; end;
               if not (Bo is TUser) then begin BocSay (format ('%s丛篮 荤侩磊啊 酒凑聪促.',[objectname])); exit; end;
               if TUser (Bo).GuildName <> SelfData.Name then begin BocSay (format ('%s丛篮 巩盔捞 酒凑聪促.',[objectname])); exit; end;

               if (objectname = SelfData.SubSysop[0]) or (objectname = SelfData.SubSysop[1]) or (objectname = SelfData.SubSysop[2]) then begin
                  BocSay (format ('%s丛篮 捞固 何巩林 涝聪促.',[objectname]));
                  exit;
               end;

               if (SelfData.SubSysop[0] <> '') and (SelfData.SubSysop[1] <> '') and (SelfData.SubSysop[2] <> '') then begin
                  BocSay ('歹 捞惑 烙疙且 荐 绝嚼聪促.');
                  BocSay ( format ('何巩林绰 %s, %s, %s丛涝聪促.', [SelfData.SubSysop[0],SelfData.SubSysop[1],SelfData.SubSysop[2]]));
                  exit;
               end;

               // 2000.09.20 促弗 巩颇狼 巩林唱 何巩林绰 何巩林肺 烙疙瞪荐 绝促 by Lee.S.G
               SubData.ServerId := Manager.ServerId;
               StrPCopy (@SubData.SubName, objectname);
               StrPCopy (@SubData.GuildName, '');
               if TFieldPhone(Manager.Phone).SendMessage (MANAGERPHONE, FM_ALLOWGUILDSYSOPNAME, BasicData, SubData) = PROC_FALSE then begin
                  BocSay ( '捞固 促弗 巩颇狼 何巩林唱 巩林肺 ');
                  BocSay ( '殿废登绢 乐嚼聪促.');
                  Exit;
               end;
               
               if SelfData.SubSysop[0] = '' then begin SelfData.SubSysop[0] := objectname; BocSay(format ('%s丛阑 烙疙沁嚼聪促.',[objectname])); exit; end;
               if SelfData.SubSysop[1] = '' then begin SelfData.SubSysop[1] := objectname; BocSay(format ('%s丛阑 烙疙沁嚼聪促.',[objectname])); exit; end;
               if SelfData.SubSysop[2] = '' then begin SelfData.SubSysop[2] := objectname; BocSay(format ('%s丛阑 烙疙沁嚼聪促.',[objectname])); exit; end;
            end;
            if ReverseFormat (str, '%s: %s丛阑 何巩林俊辑 力疙茄促', sayer, objectname, str3, 2) then begin
               if sayer <> SelfData.Sysop then exit;
               if SelfData.SubSysop[0] = objectname then begin SelfData.SubSysop[0] := ''; BocSay(format ('%s丛阑 力疙沁嚼聪促.',[objectname])); exit; end;
               if SelfData.SubSysop[1] = objectname then begin SelfData.SubSysop[1] := ''; BocSay(format ('%s丛阑 力疙沁嚼聪促.',[objectname])); exit; end;
               if SelfData.SubSysop[2] = objectname then begin SelfData.SubSysop[2] := ''; BocSay(format ('%s丛阑 力疙沁嚼聪促.',[objectname])); exit; end;
               BocSay (format ('%s丛篮 何巩林啊 酒凑聪促.',[objectname]));
            end;

            if ReverseFormat (str, '%s: 巩颇沥焊', str1, str2, str3, 1) then begin
               BocSay ('巩颇器凉沥焊');
               for i := 0 to GuildNpcList.Count -1 do begin
                  GuildNpc := GuildNpcList.Items [i];
                  str := StrPas(@GuildNpc.BasicData.Name);
                  str := str + '  x:' + IntToStr (GuildNpc.BasicData.X);
                  str := str + '  y:' + IntToStr (GuildNpc.BasicData.Y);
                  BocSay (str);
               end;
               n := SelfData.Durability;
               if n > SelfData.MaxDurability then n := SelfData.MaxDurability;
               BocSay (format ('巩颇檬籍 : %d/%d',[n, SelfData.MaxDurability]));
               exit;
            end;
         end;
   end;
end;

procedure TGuildObject.Initial;
var
   i : Integer;
   GuildNpc : TGuildNpc;
   MagicData : TMagicData;
begin
   inherited Initial (SelfData.Name, SelfData.Name);

   LoadFromFile (SelfData.Name);

   FGuildName := SelfData.Name;
   DuraTick := mmAnsTick;

   // if (SelfData.MaxDurability = 0) or (SelfData.MaxDurability = 110000) then begin
   // SelfData.MaxDurability := MAX_GUILD_DURA;
   // end;

   BasicData.id := GetNewStaticItemId;
   BasicData.x := SelfData.X;
   BasicData.y := SelfData.Y;
   BasicData.ClassKind := CLASS_GUILDSTONE;
   BasicData.Feature.rrace := RACE_STATICITEM;
   BasicData.Feature.rImageNumber := 67;
   BasicData.Feature.rImageColorIndex := 0;

   MagicClass.GetMagicData (SelfData.GuildMagic, MagicData, SelfData.MagicExp);
   if MagicData.rName [0] = 0 then begin
      SelfData.GuildMagic := '';
      SelfData.MagicExp := 0;
   end;

   boAddGuildMagic := false;

   DieGuildNpcList.Clear;
   for i := 0 to MAX_GUILDNPC_COUNT - 1 do begin
      if SelfData.GuildNpc[i].rName = '' then continue;

      GuildNpc := TGuildNpc.Create;
      if Manager <> nil then begin
         GuildNpc.SetManagerClass (Manager);
      end;
      GuildNpc.Initial (Self, SelfData.GuildNpc[i].rName, SelfData.GuildNpc[i].rX, SelfData.GuildNpc[i].rY, SelfData.GuildNpc[i].rSex);

      if (SelfData.GuildMagic <> '') and (boAddGuildMagic = false) then begin
         GuildNpc.boMagicNpc := true;
         StrPCopy (@GuildNpc.BasicData.Guild, SelfData.GuildMagic);
         MagicClass.GetMagicData (SelfData.GuildMagic, GuildNpc.GuildMagicData, SelfData.MagicExp);
         boAddGuildMagic := true;
      end;
      DieGuildNpcList.Add (GuildNpc);
   end;
end;

procedure TGuildObject.StartProcess;
var
   SubData : TSubData;
begin
   inherited StartProcess;

   TFieldPhone(Manager.Phone).RegisterUser (BasicData.id, FieldProc, BasicData.X, BasicData.Y);
   TFieldPhone(Manager.Phone).SendMessage (0, FM_CREATE, BasicData, SubData);
end;

procedure TGuildObject.EndProcess;
var
   i : integer;
   SubData : TSubData;
   GuildNpc : TGuildNpc;
begin
   if FboRegisted = FALSE then exit;

   for i := DieGuildNpcList.Count - 1 downto 0 do begin

⌨️ 快捷键说明

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