📄 svclass.pas
字号:
if iRandomCount <= 0 then iRandomCount := 1;
RandomClass.AddData (pd^.rGiveItem[j].rName, ObjectName, iRandomCount);
end;
end;
end;
// pd^.rDropItem
mStr := CreateDynamicObject.GetFieldValueString (iname, 'DropItem');
for j := 0 to 5 - 1 do begin
if mStr = '' then break;
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr <> '' then begin
ItemClass.GetItemData (sStr, ItemData);
if ItemData.rname[0] <> 0 then begin
pd^.rDropItem[j].rName := StrPas (@ItemData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rDropItem[j].rCount := _StrToInt (sStr);
mStr := GetValidStr3 (mStr, sStr, ':');
iRandomCount := _StrToInt (sStr);
if iRandomCount <= 0 then iRandomCount := 1;
RandomClass.AddData (pd^.rDropItem[j].rName, ObjectName, iRandomCount);
end;
end;
end;
// pd^.rDropMop
mStr := CreateDynamicObject.GetFieldValueString (iname, 'DropMop');
for j := 0 to 5 - 1 do begin
if mStr = '' then break;
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr <> '' then begin
MonsterClass.LoadMonsterData (sStr, MonsterData);
if MonsterData.rName[0] <> 0 then begin
pd^.rDropMop[j].rName := StrPas (@MonsterData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rDropMop[j].rCount := _StrToInt (sStr);
end;
end;
end;
// pd^.rCallNpc
mStr := CreateDynamicObject.GetFieldValueString (iname, 'CallNpc');
for j := 0 to 5 - 1 do begin
if mStr = '' then break;
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr <> '' then begin
NpcClass.GetNpcData (sStr, @NpcData);
if NpcData.rName[0] <> 0 then begin
pd^.rCallNpc[j].rName := StrPas (@NpcData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rCallNpc[j].rCount := _StrToInt (sStr);
end;
end;
end;
mStr := CreateDynamicObject.GetFieldValueString (iname, 'X');
for j := 0 to 5 - 1 do begin
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr = '' then break;
pd^.rX[j] := _StrToInt (sStr);
end;
mStr := CreateDynamicObject.GetFieldValueString (iname, 'Y');
for j := 0 to 5 - 1 do begin
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr = '' then break;
pd^.rY[j] := _StrToInt (sStr);
end;
List.Add (pd);
end;
end;
CreateDynamicObject.Free;
end;
procedure LoadCreateGuild (aFileName: string; List : TList);
var
i, j: integer;
str, rdstr : string;
iname : string;
pd : PTCreateGuildData;
CreateGuildDb : TUserStringDb;
begin
if not FileExists (aFileName) then exit;
for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
List.Clear;
CreateGuildDb := TUserStringDb.Create;
CreateGuildDb.LoadFromFile (aFileName);
for j := 0 to CreateGuildDb.Count -1 do begin
iname := CreateGuildDb.GetIndexName (j);
new (pd); FillChar (pd^, sizeof(TCreateGuildData), 0);
pd^.index := j;
pd^.mName := iname;
pd^.x := CreateGuildDb.GetFieldValueInteger (iname, 'X');
pd^.y := CreateGuildDb.GetFieldValueInteger (iname, 'Y');
pd^.Sysop := CreateGuildDb.GetFieldValueString (iname, 'Sysop');
pd^.SubSysop0 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop0');
pd^.SubSysop1 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop1');
pd^.SubSysop2 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop2');
pd^.Durability := CreateGuildDb.GetFieldValueInteger (iname, 'Durability');
pd^.GuildMagic := CreateGuildDb.GetFieldValueString (iname, 'GuildMagic');
pd^.MakeDate := CreateGuildDb.GetFieldValueString (iname, 'MakeDate');
pd^.MagicExp := CreateGuildDb.GetFieldValueInteger (iname, 'MagicExp');
for i := 0 to 5-1 do begin
str := CreateGuildDb.GetFieldValueString (iname, 'Npc'+IntToStr(i));
str := GetValidStr3 (str, rdstr, ':');
pd^.GuildNpcDataArr[i].rName := rdstr;
str := GetValidStr3 (str, rdstr, ':');
pd^.GuildNpcDataArr[i].rx := _StrtoInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
pd^.GuildNpcDataArr[i].ry := _StrtoInt (rdstr);
pd^.GuildNpcDataArr[i].rIndex := i;
end;
List.Add (pd);
end;
CreateGuildDb.Free;
end;
procedure SaveCreateGuild (aFileName: string; List : TList);
var
i, j : integer;
str: string;
pd : PTCreateGuildData;
CreateGuildDb : TUserStringDb;
begin
CreateGuildDb := TUserStringDb.Create;
CreateGuildDb.LoadFromFile (aFileName);
for i := 0 to CreateGuildDb.count -1 do
CreateGuildDb.DeleteName ( CreateGuildDb.GetIndexName(0));
// CreateGuildDb.SetDbFields ('Name,X,Y,Sysop,SubSysop0,SubSysop1,SubSysop2,Durability,GuildMagic,MakeDate,MagicExp');
// 林籍捞 酒聪搁 俊矾巢... (SetDbFields 捞饶俊... free 俊辑 俊矾巢.
for j := 0 to List.Count -1 do begin
pd := List[j];
CreateGuildDb.AddName (pd^.mName);
CreateGuildDb.SetFieldValueInteger (pd^.mName, 'X', pd^.x);
CreateGuildDb.SetFieldValueInteger (pd^.mName, 'Y', pd^.y);
CreateGuildDb.SetFieldValueString (pd^.mName, 'Sysop', pd^.Sysop);
CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop0', pd^.SubSysop0);
CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop1', pd^.SubSysop1);
CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop2', pd^.SubSysop2);
CreateGuildDb.SetFieldValueInteger (pd^.mName, 'Durability', pd^.Durability);
CreateGuildDb.SetFieldValueString (pd^.mName, 'GuildMagic', pd^.GuildMagic);
CreateGuildDb.SetFieldValueString (pd^.mName, 'MakeDate', pd^.MakeDate);
CreateGuildDb.SetFieldValueInteger (pd^.mName, 'MagicExp', pd^.MagicExp);
for i := 0 to 5-1 do begin
str := pd^.GuildNpcDataArr[i].rName + ':';
str := str + IntToStr (pd^.GuildNpcDataArr[i].rx) + ':';
str := str + IntToStr (pd^.GuildNpcDataArr[i].ry) + ':';
if pd^.GuildNpcDataArr[i].rName = '' then str := '';
CreateGuildDb.SetFieldValueString (pd^.mName, 'Npc'+IntToStr(i), str);
end;
end;
CreateGuildDb.SaveToFile (aFileName);
CreateGuildDb.Free;
end;
}
function GetServerIdPointer (aServerId, atype: integer): Pointer;
begin
Result := nil;
end;
procedure StrToEffectData (var effectdata: TEffectData; astr: string);
var
str, rdstr : string;
begin
str := astr;
str := GetValidStr3 (str, rdstr, ':');
effectdata.rWavNumber := _StrToInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
effectdata.rPercent := _StrToInt (rdstr);
end;
///////////////////////////////////
// TRandomClass
///////////////////////////////////
constructor TRandomClass.Create;
begin
DataList := nil;
DataList := TList.Create;
end;
destructor TRandomClass.Destroy;
begin
Clear;
if DataList <> nil then DataList.Free;
end;
procedure TRandomClass.Clear;
var
i : Integer;
pd : PTRandomData;
begin
for i := 0 to DataList.Count - 1 do begin
pd := DataList.Items[i];
if pd <> nil then Dispose (pd);
end;
DataList.Clear;
end;
procedure TRandomClass.AddData (aItemName, aObjName : String; aCount : Integer);
var
pd : PTRandomData;
begin
if (aItemName = '') or (aObjName = '') then exit;
New (pd);
pd^.rItemName := aItemName;
pd^.rObjName := aObjName;
if aCount < 1 then pd^.rCount := 1
else pd^.rCount := aCount;
pd^.rIndex := Random (pd^.rCount);
pd^.rCurIndex := 0;
DataList.Add (pd);
end;
function TRandomClass.GetChance (aItemName, aObjName : String) : Boolean;
var
i : Integer;
pd : PTRandomData;
begin
Result := true;
for i := 0 to DataList.Count - 1 do begin
pd := DataList.Items [i];
if pd <> nil then begin
if pd^.rItemName = aItemName then begin
if pd^.rObjName = aObjName then begin
Result := false;
if pd^.rCurIndex = pd^.rIndex then Result := true;
Inc (pd^.rCurIndex);
if pd^.rCurIndex >= pd^.rCount then begin
pd^.rCurIndex := 0;
pd^.rIndex := Random (pd^.rCount);
end;
exit;
end;
end;
end;
end;
end;
///////////////////////////////////
// TSysopClass
///////////////////////////////////
constructor TSysopClass.Create;
begin
SysopDb := TUserStringDb.Create;
ReLoadFromFile;
end;
destructor TSysopClass.Destroy;
begin
SysopDb.Free;
inherited destroy;
end;
procedure TSysopClass.ReLoadFromFile;
begin
if FileExists ('sysop.sdb') then
SysopDb.LoadFromFile ('sysop.sdb');
end;
function TSysopClass.GetSysopScope (aName: string): integer;
begin
if SysopDb.Count > 0 then Result := SysopDb.GetFieldValueInteger (aName, 'SysopScope')
else Result := 0;
end;
///////////////////////////////////
// TMagicClass
///////////////////////////////////
constructor TMagicClass.Create;
begin
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('MagicClass', 20, TRUE);
MagicDb := TUserStringDb.Create;
MagicForGuildDb := TUserStringDb.Create;
ReLoadFromFile;
end;
destructor TMagicClass.Destroy;
begin
Clear;
MagicForGuildDb.Free;
MagicDb.Free;
DataList.Free;
AnsIndexClass.Free;
inherited destroy;
end;
procedure TMagicClass.Clear;
var i : integer;
begin
FillChar (SkillAddDamageArr, sizeof(SkillAddDamageArr) , 0);
FillChar (SkillAddArmorArr, sizeof(SkillAddArmorArr), 0);
for i := 0 to DataList.Count -1 do dispose (DataList[i]);
DataList.Clear;
AnsIndexClass.Clear;
end;
procedure TMagicClass.Calculate_cLifeData (pMagicData: PTMagicData);
begin
if pMagicData = nil then exit;
if pMagicData^.rName[0] = 0 then exit;
with pMagicData^ do begin
rcLifeData.DamageBody := rLifeData.damageBody + rLifeData.damageBody * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
rcLifeData.DamageHead := rLifeData.DamageHead + rLifeData.damageHead * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
rcLifeData.DamageArm := rLifeData.DamageArm + rLifeData.damageArm * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
rcLifeData.DamageLeg := rLifeData.DamageLeg + rLifeData.damageLeg * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
rcLifeData.AttackSpeed := rLifeData.AttackSpeed - rLifeData.AttackSpeed * rcSkillLevel div INI_SKILL_DIV_ATTACKSPEED;
rcLifeData.avoid := rLifeData.avoid ;// + rLifeData.avoid;
rcLifeData.recovery := rLifeData.recovery;// + rLifeData.recovery;
rcLifeData.armorBody := rLifeData.armorBody + rLifeData.armorBody * rcSkillLevel div INI_SKILL_DIV_ARMOR;
rcLifeData.armorHead := rLifeData.armorHead + rLifeData.armorHead * rcSkillLevel div INI_SKILL_DIV_ARMOR;
rcLifeData.armorArm := rLifeData.armorArm + rLifeData.armorArm * rcSkillLevel div INI_SKILL_DIV_ARMOR;
rcLifeData.armorLeg := rLifeData.armorLeg + rLifeData.armorLeg * rcSkillLevel div INI_SKILL_DIV_ARMOR;
end;
with pMagicData^ do begin
rcLifeData.Damagebody := rcLifeData.Damagebody + rcLifeData.DamageBody * MagicClass.GetSkillDamageBody (rcSkillLevel) div 100;
if rMagicType = MAGICTYPE_PROTECTING then
rcLifeData.Armorbody := rcLifeData.Armorbody + rcLifeData.ArmorBody * MagicClass.GetSkillArmorBody (rcSkillLevel) div 100;
end;
end;
procedure TMagicClass.ReLoadFromFile;
var
i, idx, sn, en : integer;
iname, mname : string;
pmd : PTMagicData;
TempDb : TUserStringDb;
begin
Clear;
TempDb := TUserStringDb.Create;
TempDb.LoadFromFile ('adddamage.sdb');
for idx := 0 to TempDb.Count -1 do begin
iname := TempDb.GetIndexName (idx);
sn := TempDb.GetFieldValueInteger (iname,'StartSkill');
en := TempDb.GetFieldValueInteger (iname,'EndSkill');
if sn <= 0 then sn := 0;
if en >= 10000 then en := 10000;
for i := sn to en do begin
SkillAddDamageArr[i].rdamagebody := TempDb.GetFieldValueInteger (iname,'DamageBody');
SkillAddDamageArr[i].rdamagehead := TempDb.GetFieldValueInteger (iname,'DamageHead');
SkillAddDamageArr[i].rdamagearm := TempDb.GetFieldValueInteger (iname,'DamageArm');
SkillAddDamageArr[i].rdamageleg := TempDb.GetFieldValueInteger (iname,'DamageLeg');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -