📄 main.pas
字号:
unit Main;interfaceuses Windows, MMSystem, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls, IniFiles, WinSock, ComCtrls, List32, Login, CharaSel, Script, Game, Path, Database, Common;type TfrmMain = class(TForm) sv1 :TServerSocket; sv2 :TServerSocket; sv3 :TServerSocket; cmdStart :TButton; cmdStop :TButton; txtDebug :TMemo; DBsaveTimer :TTimer; Edit1: TEdit; Button1: TButton; procedure DBsaveTimerTimer(Sender: TObject);{U0x003b僐僐傑偱} procedure FormCreate(Sender: TObject); //edited by The Harbinger -- darkWeiss version procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormResize(Sender: TObject); procedure MonsterSpawn(tm:TMap; ts:TMob; Tick:cardinal); //edited by The Harbinger -- darkWeiss version procedure MobSpawn(tm:TMap; ts:TMob; Tick:cardinal); //added by The Harbinger -- darkWeiss version procedure MonsterDie(tm:TMap; tc:TChara; ts:TMob; Tick:cardinal); //edited by The Harbinger -- darkWeiss version{捛壛} procedure StatCalc1(tc:TChara; ts:TMob; Tick:cardinal); //edited by The Harbinger -- darkWeiss version procedure StatCalc2(tc:TChara; tc1:TChara; Tick:cardinal); //added by The Harbinger -- darkWeiss version function CharaMoving(tc:TChara;Tick:cardinal) : boolean; //edited by The Harbinger -- darkWeiss version procedure CharaSplash(tc:TChara;Tick:cardinal); procedure CharaSplash2(tc:TChara;Tick:cardinal); //added by The Harbinger -- darkWeiss version procedure CharaAttack(tc:TChara;Tick:cardinal); //edited by The Harbinger -- darkWeiss version procedure CharaAttack2(tc:TChara;Tick:cardinal); //added by The Harbinger -- darkWeiss version procedure CharaPassive(tc:TChara;Tick:cardinal); //edited by The Harbinger -- darkWeiss version function NPCAction(tm:TMap;tn:TNPC;Tick:cardinal) : Integer; procedure MobAI(tm:TMap;ts:TMob;Tick:cardinal); //edited by The Harbinger -- darkWeiss version procedure MobMoveL(tm:TMap;Tick:cardinal); function MobMoving(tm:TMap;ts:TMob;Tick:cardinal) : Integer; //edited by The Harbinger -- darkWeiss version procedure MobAttack(tm:TMap;ts:TMob;Tick:cardinal); //edited by The Harbinger -- darkWeiss version procedure StatEffect(tm:TMap; ts:TMob; Tick:Cardinal); procedure CreateField(tc:TChara; Tick:Cardinal); procedure SkillEffect(tc:TChara; Tick:Cardinal);{捛壛僐僐傑偱}{僉儏乕儁僢僩} procedure PetMoving( tc:TChara; _Tick:cardinal );{僉儏乕儁僢僩偙偙傑偱} procedure DamageCalc1(tm:TMap; tc:TChara; ts:TMob; Tick:cardinal; Arms:byte = 0; SkillPer:integer = 0; AElement:byte = 0; HITFix:integer = 0); //edited by The Harbinger -- darkWeiss version procedure DamageCalc2(tm:TMap; tc:TChara; ts:TMob; Tick:cardinal; SkillPer:integer = 0; AElement:byte = 255; HITFix:integer = 0); //added by The Harbinger -- darkWeiss version procedure DamageCalc3(tm:TMap; tc:TChara; tc1:TChara; Tick:cardinal; Arms:byte = 0; SkillPer:integer = 0; AElement:byte = 0; HITFix:integer = 0); //edited by The Harbinger -- darkWeiss version function DamageProcess1(tm:TMap; tc:TChara; ts:TMob; Dmg:integer; Tick:cardinal;isBreak:Boolean = True) : Boolean; //edited by The Harbinger -- darkWeiss version function DamageProcess2(tm:TMap; tc:TChara; tc1:TChara; Dmg:integer; Tick:cardinal;isBreak:Boolean = True) : Boolean; //added by The Harbinger -- darkWeiss version procedure sv1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure sv1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure sv2ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv2ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv2ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure sv2ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure sv3ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv3ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure sv3ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure sv3ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure cmdStartClick(Sender: TObject); //edited by The Harbinger -- darkWeiss version procedure cmdStopClick(Sender: TObject); procedure button1Click(Sender: TObject); private { Private 愰尵 } public { Public 愰尵 } end;const REALTIME_PRIORITY_CLASS = $100; HIGH_PRIORITY_CLASS = $80; ABOVE_NORMAL_PRIORITY_CLASS = $8000; NORMAL_PRIORITY_CLASS = $20; BELOW_NORMAL_PRIORITY_CLASS = $4000; IDLE_PRIORITY_CLASS = $40;var frmMain :TfrmMain; Priority :cardinal; TickCheckCnt :byte; i :integer; j :integer; w :word; TickCheck :array[0..9] of cardinal; dmg :array[0..7] of integer;implementation{$R *.dfm}//==============================================================================procedure TfrmMain.FormCreate(Sender: TObject);var sl :TStringList; sl1 :TStringList; ini :TIniFile; PriorityClass :cardinal; begin Randomize; timeBeginPeriod(1); timeEndPeriod(1); SetLength(TrueBoolStrs, 4); TrueBoolStrs[0] := '1'; TrueBoolStrs[1] := '-1'; TrueBoolStrs[2] := 'true'; TrueBoolStrs[3] := 'True'; SetLength(FalseBoolStrs, 3); FalseBoolStrs[0] := '0'; FalseBoolStrs[1] := 'false'; FalseBoolStrs[2] := 'False'; //NowAccountID := 0; NowUsers := 0; NowLoginID := 0; NowItemID := 1000; NowMobID := 1000000; NowCharaID := 0; //NowNPCID := 50000;{僉儏乕儁僢僩} NowPetID := 0;{僉儏乕儁僢僩偙偙傑偱} AppPath := ExtractFilePath(ParamStr(0)); DebugOut := txtDebug; Caption := 'darkWeiss 00:00:00:00 Current User Count: 0 / 0'; //ExtractFileName(ChangeFileExt(ParamStr(0), '')); ScriptList := TStringList.Create; ItemDB := TIntList32.Create; ItemDB.Sorted := true; ItemDBName := TStringList.Create; ItemDBName.CaseSensitive := True;{傾僀僥儉惢憿捛壛} MaterialDB := TIntList32.Create; MaterialDB.Sorted := true;{傾僀僥儉惢憿捛壛僐僐傑偱} MobDB := TIntList32.Create; MobDB.Sorted := true; MobDBName := TStringList.Create; MobDBName.CaseSensitive := True; SlaveDBName := TStringList.Create; SlaveDBName.CaseSensitive := True; MArrowDB := TIntList32.Create; MArrowDB.Sorted := true; KafraDB := TIntList32.Create; KafraDB.Sorted := true; BannedDB := TStringList.Create; BannedDB.CaseSensitive := True; IDTableDB := TIntList32.Create; IDTableDB.Sorted := true; SkillDB := TIntList32.Create; PlayerName := TStringList.Create; PlayerName.CaseSensitive := True; Player := TIntList32.Create; CharaName := TStringList.Create; CharaName.CaseSensitive := True; Chara := TIntList32.Create; CharaPID := TIntList32.Create;{僷乕僥傿乕婡擻捛壛} PartyNameList := TStringList.Create; PartyNameList.CaseSensitive := True; CastleList := TStringList.Create; CastleList.CaseSensitive := True; EmpList := TStringList.Create; EmpList.CaseSensitive := True;{僷乕僥傿乕婡擻捛壛僐僐傑偱}{僠儍僢僩儖乕儉婡擻捛壛} ChatRoomList := TIntList32.Create;{僠儍僢僩儖乕儉婡擻捛壛僐僐傑偱}{業揦僗僉儖捛壛} VenderList := TIntList32.Create;{業揦僗僉儖捛壛僐僐傑偱}{庢堷婡擻捛壛} DealingList := TIntList32.Create;{庢堷婡擻捛壛僐僐傑偱}{僉儏乕儁僢僩} PetDB := TIntList32.Create; PetList := TIntList32.Create;{僉儏乕儁僢僩偙偙傑偱}{巵{敔捛壛} SummonMobList := TIntList32.Create; SummonIOBList := TIntList32.Create; SummonIOVList := TIntList32.Create; SummonICAList := TIntList32.Create; SummonIGBList := TIntList32.Create;{巵{敔捛壛僐僐傑偱}{NPC僀儀儞僩捛壛} ServerFlag := TStringList.Create; MapInfo := TStringList.Create;{NPC僀儀儞僩捛壛僐僐傑偱}{僊儖僪婡擻捛壛} GuildList := TIntList32.Create; GSkillDB := TIntList32.Create;{僊儖僪婡擻捛壛僐僐傑偱} Map := TStringList.Create; MapList := TStringList.Create; sl := TStringList.Create; sl.QuoteChar := '"'; sl.Delimiter := ','; ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); sl.Clear; ini.ReadSectionValues('Server', sl); sl1 := TStringList.Create; sl1.Delimiter := '.'; sl1.DelimitedText := sl.Values['IP']; if sl1.Count = 4 then begin ServerIP := cardinal(inet_addr(PChar(sl.Values['IP']))); end else begin ServerIP := cardinal(inet_addr('127.0.0.1')); //ServerIP := $0100007f; end; sl1.Free; if sl.IndexOfName('Name') <> -1 then begin ServerName := sl.Values['Name']; end else begin ServerName := 'darkWeiss'; end; if sl.IndexOfName('NPCID') <> -1 then begin DefaultNPCID := StrToInt(sl.Values['NPCID']); end else begin DefaultNPCID := 50000; end; NowNPCID := DefaultNPCID; if sl.IndexOfName('sv1port') <> -1 then begin sv1port := StrToInt(sl.Values['sv1port']); end else begin sv1port := 6900; end; sv1.Port := sv1port; if sl.IndexOfName('sv2port') <> -1 then begin sv2port := StrToInt(sl.Values['sv2port']); end else begin sv2port := 6121; end; sv2.Port := sv2port; if sl.IndexOfName('sv3port') <> -1 then begin sv3port := StrToInt(sl.Values['sv3port']); end else begin sv3port := 5121; end; sv3.Port := sv3port; if sl.IndexOfName('WarpDebug') <> -1 then begin WarpDebugFlag := StrToBool(sl.Values['WarpDebug']); end else begin WarpDebugFlag := false; end; if sl.IndexOfName('BaseExpMultiplier') <> -1 then begin BaseExpMultiplier := StrToInt(sl.Values['BaseExpMultiplier']); end else begin BaseExpMultiplier := 1; end; if sl.IndexOfName('JobExpMultiplier') <> -1 then begin JobExpMultiplier := StrToInt(sl.Values['JobExpMultiplier']); end else begin JobExpMultiplier := 1; end; if sl.IndexOfName('DisableMonsterActive') <> -1 then begin DisableMonsterActive := StrToBool(sl.Values['DisableMonsterActive']); end else begin DisableMonsterActive := false; end; if sl.IndexOfName('AutoStart') <> -1 then begin AutoStart := StrToBool(sl.Values['AutoStart']); end else begin AutoStart := false; end; //AutoStart := true; if sl.IndexOfName('DisableLevelLimit') <> -1 then begin DisableLevelLimit := StrToBool(sl.Values['DisableLevelLimit']); end else begin DisableLevelLimit := false; end; if sl.IndexOfName('EnableMonsterKnockBack') <> -1 then begin EnableMonsterKnockBack := StrToBool(sl.Values['EnableMonsterKnockBack']); end else begin EnableMonsterKnockBack := false; end; if sl.IndexOfName('DisableEquipLimit') <> -1 then begin DisableEquipLimit := StrToBool(sl.Values['DisableEquipLimit']); end else begin DisableEquipLimit := false; end; if sl.IndexOfName('DropMultiplier') <> -1 then begin DropMultiplier := StrToInt(sl.Values['DropMultiplier']); end else begin DropMultiplier := 1; end; if sl.IndexOfName('DisableFleeDown') <> -1 then begin DisableFleeDown := StrToBool(sl.Values['DisableFleeDown']); end else begin DisableFleeDown := false; end; if sl.IndexOfName('DisableSkillLimit') <> -1 then begin DisableSkillLimit := StrToBool(sl.Values['DisableSkillLimit']); end else begin DisableSkillLimit := false; end;{U0x008a_fix} if sl.IndexOfName('DefaultZeny') <> -1 then begin DefaultZeny := StrToInt(sl.Values['DefaultZeny']); end else begin DefaultZeny := 300; end; if sl.IndexOfName('DefaultMap') <> -1 then begin DefaultMap := sl.Values['DefaultMap']; end else begin DefaultMap := 'new_zone01'; end; if sl.IndexOfName('DefaultPoint_X') <> -1 then begin DefaultPoint_X := StrToInt(sl.Values['DefaultPoint_X']); end else begin DefaultPoint_X := 50; end; if sl.IndexOfName('DefaultPoint_Y') <> -1 then begin DefaultPoint_Y := StrToInt(sl.Values['DefaultPoint_Y']); end else begin DefaultPoint_Y := 100; end; if sl.IndexOfName('GMCheck') <> -1 then begin GMCheck := StrToIntDef(sl.Values['GMCheck'],0); end else begin GMCheck := $FF; end; if sl.IndexOfName('DebugCMD') <> -1 then begin DebugCMD := StrToIntDef(sl.Values['DebugCMD'],0); end else begin DebugCMD := $FFFF; end; if sl.IndexOfName('DeathBaseLoss') <> -1 then begin DeathBaseLoss := StrToInt(sl.Values['DeathBaseLoss']); end else begin DeathBaseLoss := 1; end; if sl.IndexOfName('DeathJobLoss') <> -1 then begin DeathJobLoss := StrToInt(sl.Values['DeathJobLoss']); end else begin DeathJobLoss := 1; end; if sl.IndexOfName('MonsterMob') <> -1 then begin MonsterMob := StrToBool(sl.Values['MonsterMob']); end else begin MonsterMob := false; end; if sl.IndexOfName('SummonMonsterExp') <> -1 then begin SummonMonsterExp := StrToBool(sl.Values['SummonMonsterExp']); end else begin SummonMonsterExp := false; end; if sl.IndexOfName('SummonMonsterAgo') <> -1 then begin SummonMonsterAgo := StrToBool(sl.Values['SummonMonsterAgo']); end else begin SummonMonsterAgo := false; end; if sl.IndexOfName('SummonMonsterName') <> -1 then begin SummonMonsterName := StrToBool(sl.Values['SummonMonsterName']); end else begin SummonMonsterName := false; end; if sl.IndexOfName('SummonMonsterMob') <> -1 then begin SummonMonsterMob := StrToBool(sl.Values['SummonMonsterMob']); end else begin SummonMonsterMob := false; end; if sl.IndexOfName('GlobalGMsg') <> -1 then begin GlobalGMsg := sl.Values['GlobalGMsg']; end else begin GlobalGMsg := 'Guild Base $mapname has been taken by $guildname guild.'; end; if sl.IndexOfName('MapGMsg') <> -1 then begin MapGMsg := sl.Values['MapGMsg']; end else begin MapGMsg := 'Empelium Has Been Destroyed'; end;{U0x008a_fix_end} sl.Clear; ini.ReadSectionValues('Option', sl); if sl.IndexOfName('Left') <> -1 then begin FormLeft := StrToInt(sl.Values['Left']); end else begin FormLeft := 0; end; Left := FormLeft; if sl.IndexOfName('Top') <> -1 then begin FormTop := StrToInt(sl.Values['Top']); end else begin FormTop := 0; end; Top := FormTop; if sl.IndexOfName('Width') <> -1 then begin FormWidth := StrToInt(sl.Values['Width']); end else begin FormWidth := 500;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -