📄 svclass.pas
字号:
INI_GUILD_WOMAN_SHAPE : integer = 30;
INI_GUILD_WOMAN_ANIMATE : integer = 12;
INI_DEF_WRESTLING : string;
INI_DEF_FENCING : string;
INI_DEF_SWORDSHIP : string;
INI_DEF_HAMMERING : string;
INI_DEF_SPEARING : string;
INI_DEF_BOWING : string;
INI_DEF_THROWING : string;
INI_DEF_RUNNING : string;
INI_DEF_BREATHNG : string;
INI_DEF_PROTECTING : string;
INI_NORTH : string;
INI_NORTHEAST : string;
INI_EAST : string;
INI_EASTSOUTH : string;
INI_SOUTH : string;
INI_SOUTHWEST : string;
INI_WEST : string;
INI_WESTNORTH : string;
INI_HIDEPAPER_DELAY : Integer = 15;
INI_MAGIC_DIV_VALUE : integer = 10;
INI_ADD_DAMAGE : integer = 40;
INI_MUL_ATTACKSPEED : integer = 10;
INI_MUL_AVOID : integer = 6;
INI_MUL_RECOVERY : integer = 10;
INI_MUL_DAMAGEBODY : integer = 23;
INI_MUL_DAMAGEHEAD : integer = 17;
INI_MUL_DAMAGEARM : integer = 17;
INI_MUL_DAMAGELEG : integer = 17;
INI_MUL_ARMORBODY : integer = 7;
INI_MUL_ARMORHEAD : integer = 7;
INI_MUL_ARMORARM : integer = 7;
INI_MUL_ARMORLEG : integer = 7;
INI_MUL_EVENTENERGY : integer = 20;
INI_MUL_EVENTINPOWER : integer = 22;
INI_MUL_EVENTOUTPOWER : integer = 22;
INI_MUL_EVENTMAGIC : integer = 10;
INI_MUL_EVENTLIFE : integer = 8;
INI_MUL_5SECENERGY : integer = 20;
INI_MUL_5SECINPOWER : integer = 14;
INI_MUL_5SECOUTPOWER : integer = 14;
INI_MUL_5SECMAGIC : integer = 9;
INI_MUL_5SECLIFE : integer = 8;
INI_SKILL_DIV_DAMAGE : integer = 5000;
INI_SKILL_DIV_ARMOR : integer = 5000;
INI_SKILL_DIV_ATTACKSPEED : integer = 25000;
INI_SKILL_DIV_EVENT : integer = 5000;
function GetItemDataInfo (var aItemData: TItemData): string;
function GetMagicDataInfo (var aMagicData: TMagicData): string;
procedure GatherLifeData (var BaseLifeData, aLifeData: TLifeData);
procedure CheckLifeData (var BaseLifeData: TLifeData);
implementation
uses
uuser, uconnect, uGroup;
function GetMagicDataInfo (var aMagicData: TMagicData): string;
begin
Result := '';
if aMagicData.rName[0] = 0 then exit;
with aMagicData.rcLifeData do begin
Result := format ('%s 荐访饭骇: %s', [StrPas (@aMagicData.rName), Get10000To100 (aMagicData.rcSkillLevel)]) + #13;
if (AttackSpeed <> 0) or (Recovery <> 0) or (Avoid <> 0) then
Result := Result + format ('傍拜加档: %d 磊技焊沥: %d 雀乔: %d', [AttackSpeed, Recovery, Avoid]) + #13;
if DamageBody <> 0 then
Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[DamageBody, DamageHead, DamageArm, DamageLeg]) + #13;
if ArmorBody <> 0 then
Result := Result + format ('规绢仿: %d/%d/%d/%d',[ArmorBody, ArmorHead, ArmorArm, ArmorLeg]) + #13;
end;
{
Result := '';
if aMagicData.rName[0] = 0 then exit;
with aMagicData do begin
Result := format ('%s 荐访饭骇: %s', [StrPas (@rName), Get10000To100 (rcSkillLevel)]) + #13;
if (rLifeData.AttackSpeed <> 0) or (rLifeData.Recovery <> 0) or (rLifeData.Avoid <> 0) then
Result := Result + format ('傍拜加档: %d 磊技焊沥: %d 雀乔: %d', [rLifeData.AttackSpeed, rLifeData.Recovery, rLifeData.Avoid]) + #13;
if rLifeData.DamageBody <> 0 then
Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[rLifeData.DamageBody+rLifeData.damagebody*rcSkillLevel div INI_SKILL_DIV_DAMAGE, rLifeData.DamageHead, rLifeData.DamageArm, rLifeData.DamageLeg]) + #13;
if rLifeData.ArmorBody <> 0 then
Result := Result + format ('规绢仿: %d/%d/%d/%d',[rLifeData.ArmorBody, rLifeData.ArmorHead, rLifeData.ArmorArm, rLifeData.ArmorLeg]) + #13;
end;
}
end;
function GetItemDataInfo (var aItemData: TItemData): string;
begin
Result := '';
if aItemData.rName[0] = 0 then exit;
with aItemData do begin
Result := format ('%s 啊拜: %d', [StrPas (@rName), rPrice]) + #13;
if rDurability <> 0 then
Result := Result + format ('郴备己: %d/%d',[rCurDurability, rDurability]) + #13;
end;
with aItemData.rLifeData do begin
if (AttackSpeed <> 0) or (Recovery <> 0) or (Avoid <> 0) then
Result := Result + format ('傍拜加档: %d 磊技焊沥: %d 雀乔: %d', [-AttackSpeed, -Recovery, Avoid]) + #13;
if (DamageBody <> 0) or (DamageHead <> 0) or (DamageArm <> 0) or (DamageLeg <> 0) then
Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[DamageBody, DamageHead, DamageArm, DamageLeg]) + #13;
if (ArmorBody <> 0) or (ArmorHead <> 0) or (ArmorArm <> 0) or (ArmorLeg <> 0) then
Result := Result + format ('规绢仿: %d/%d/%d/%d',[ArmorBody, ArmorHead, ArmorArm, ArmorLeg]) + #13;
end;
end;
procedure GatherLifeData (var BaseLifeData, aLifeData: TLifeData);
begin
BaseLifeData.DamageBody := BaseLifeData.DamageBody + aLifeData.damageBody;
BaseLifeData.DamageHead := BaseLifeData.DamageHead + aLifeData.damageHead;
BaseLifeData.DamageArm := BaseLifeData.DamageArm + aLifeData.damageArm;
BaseLifeData.DamageLeg := BaseLifeData.DamageLeg + aLifeData.damageLeg;
BaseLifeData.AttackSpeed := BaseLifeData.AttackSpeed + aLifeData.AttackSpeed;
BaseLifeData.avoid := BaseLifeData.avoid + aLifeData.avoid;
BaseLifeData.recovery := BaseLifeData.recovery + aLifeData.recovery;
BaseLifeData.armorBody := BaseLifeData.armorBody + aLifeData.armorBody;
BaseLifeData.armorhead := BaseLifeData.armorHead + aLifeData.armorHead;
BaseLifeData.armorArm := BaseLifeData.armorArm + aLifeData.armorArm;
BaseLifeData.armorLeg := BaseLifeData.armorLeg + aLifeData.armorLeg;
end;
procedure CheckLifeData (var BaseLifeData: TLifeData);
begin
if BaseLifeData.damageBody < 0 then BaseLifeData.DamageBody := 0;
if BaseLifeData.DamageHead < 0 then BaseLifeData.DamageHead := 0;
if BaseLifeData.DamageArm < 0 then BaseLifeData.DamageArm := 0;
if BaseLifeData.DamageLeg < 0 then BaseLifeData.DamageLeg := 0;
if BaseLifeData.AttackSpeed < 0 then BaseLifeData.AttackSpeed := 0;
if BaseLifeData.avoid < 0 then BaseLifeData.avoid := 0;
if BaseLifeData.recovery < 0 then BaseLifeData.recovery := 0;
if BaseLifeData.ArmorBody < 0 then BaseLifeData.ArmorBody := 0;
if BaseLifeData.ArmorHead < 0 then BaseLifeData.ArmorHead := 0;
if BaseLifeData.ArmorArm < 0 then BaseLifeData.ArmorArm := 0;
if BaseLifeData.ArmorLeg < 0 then BaseLifeData.ArmorLeg := 0;
end;
{
procedure LoadCreateMonster (aFileName: string; List : TList);
var
i : integer;
iname : string;
pd : PTCreateMonsterData;
CreateMonster : TUserStringDb;
begin
for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
List.Clear;
CreateMonster := TUserStringDb.Create;
CreateMonster.LoadFromFile (aFileName);
for i := 0 to CreateMonster.Count -1 do begin
iname := CreateMonster.GetIndexName (i);
new (pd);
FillChar (pd^, sizeof(TCreateMonsterData), 0);
pd^.index := i;
pd^.mName := CreateMonster.GetFieldValueString (iname, 'MonsterName');
pd^.CurCount := 0;
pd^.Count := CreateMonster.GetFieldValueInteger (iname, 'Count');
pd^.x := CreateMonster.GetFieldValueInteger (iname, 'X');
pd^.y := CreateMonster.GetFieldValueInteger (iname, 'Y');
pd^.width := CreateMonster.GetFieldValueInteger (iname, 'Width');
pd^.Member := CreateMonster.GetFieldValueString (iName, 'Member');
List.Add (pd);
end;
CreateMonster.Free;
end;
procedure LoadCreateNpc (aFileName: string; List : TList);
var
i : integer;
iname : string;
pd : PTCreateNpcData;
CreateNpc : TUserStringDb;
begin
for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
List.Clear;
CreateNpc := TUserStringDb.Create;
CreateNpc.LoadFromFile (aFileName);
for i := 0 to CreateNpc.Count -1 do begin
iname := CreateNpc.GetIndexName (i);
new (pd);
FillChar (pd^, sizeof(TCreateNpcData), 0);
pd^.index := i;
pd^.mName := CreateNpc.GetFieldValueString (iname, 'NpcName');
pd^.CurCount := 0;
pd^.Count := CreateNpc.GetFieldValueInteger (iname, 'Count');
pd^.x := CreateNpc.GetFieldValueInteger (iname, 'X');
pd^.y := CreateNpc.GetFieldValueInteger (iname, 'Y');
pd^.width := CreateNpc.GetFieldValueInteger (iname, 'Width');
pd^.BookName := CreateNpc.GetFieldValueString (iname, 'BookName');
List.Add (pd);
end;
CreateNpc.Free;
end;
procedure LoadCreateGate (aFileName: string; List : TList);
var
i, j : integer;
iname : string;
pd : PTCreateGateData;
CreateGate : TUserStringDb;
ItemData : TItemData;
srcstr, tokenstr : String;
begin
if not FileExists (aFileName) then exit;
for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
List.Clear;
CreateGate := TUserStringDb.Create;
CreateGate.LoadFromFile (aFileName);
for i := 0 to CreateGate.Count -1 do begin
iname := CreateGate.GetIndexName (i);
new (pd);
FillChar (pd^, sizeof(TCreateGateData), 0);
pd^.index := i;
pd^.mName := CreateGate.GetFieldValueString (iname, 'GateName');
pd^.x := CreateGate.GetFieldValueInteger (iname, 'X');
pd^.y := CreateGate.GetFieldValueInteger (iname, 'Y');
pd^.targetx := CreateGate.GetFieldValueInteger (iname, 'TX');
pd^.targety := CreateGate.GetFieldValueInteger (iname, 'TY');
pd^.ejectx := CreateGate.GetFieldValueInteger (iname, 'EX');
pd^.ejecty := CreateGate.GetFieldValueInteger (iname, 'EY');
pd^.targetserverid := CreateGate.GetFieldValueInteger (iname, 'ServerId');
pd^.shape := CreateGate.GetFieldValueInteger (iname, 'Shape');
pd^.Width := CreateGate.GetFieldValueInteger (iname, 'Width');
pd^.NeedAge := CreateGate.GetFieldValueInteger (iname, 'NeedAge');
pd^.AgeNeedItem := CreateGate.GetFieldValueInteger (iname, 'AgeNeedItem');
srcstr := CreateGate.GetFieldValueString (iname, 'NeedItem');
if srcstr <> '' then begin
for j := 0 to 5 - 1 do begin
srcstr := GetValidStr3 (srcstr, tokenstr, ':');
if tokenstr = '' then break;
ItemClass.GetItemData (tokenstr, ItemData);
if ItemData.rName[0] <> 0 then begin
srcstr := GetValidStr3 (srcstr, tokenstr, ':');
ItemData.rCount := _StrToInt (tokenstr);
pd^.NeedItem[j].rName := StrPas (@ItemData.rName);
pd^.NeedItem[j].rCount := ItemData.rCount;
end;
end;
end;
pd^.Quest := CreateGate.GetFieldValueInteger (iname, 'Quest');
pd^.QuestNotice := CreateGate.GetFieldValueString (iname, 'QuestNotice');
pd^.RegenInterval := CreateGate.GetFieldValueInteger (iName, 'RegenInterval');
pd^.ActiveInterval := CreateGate.GetFieldValueInteger (iName, 'ActiveInterval');
pd^.EjectNotice := CreateGate.GetFieldValueString (iname, 'EjectNotice');
List.Add (pd);
end;
CreateGate.Free;
end;
}
procedure LoadCreateItem (aFileName: string; List : TList);
begin
end;
{
procedure LoadCreateDynamicObject (aFileName : String; List : TList);
var
i, j, iRandomCount : integer;
iName, ObjectName, ItemName, mStr, sStr : string;
DynamicObjectData : TDynamicObjectData;
pd : PTCreateDynamicObjectData;
CreateDynamicObject : TUserStringDb;
MagicData : TMagicData;
ItemData : TItemData;
MonsterData : TMonsterData;
NpcData : TNpcData;
begin
if not FileExists (aFileName) then exit;
for i := 0 to List.Count - 1 do begin
Dispose (List[i]);
end;
List.Clear;
CreateDynamicObject := TUserStringDb.Create;
CreateDynamicObject.LoadFromFile (aFileName);
for i := 0 to CreateDynamicObject.Count -1 do begin
iName := CreateDynamicObject.GetIndexName (i);
ObjectName := CreateDynamicObject.GetFieldValueString (iName, 'Name');
FillChar (DynamicObjectData, SizeOf (DynamicObjectData), 0);
DynamicObjectClass.GetDynamicObjectData (ObjectName, DynamicObjectData);
if DynamicObjectData.rName <> '' then begin
New (pd);
FillChar (pd^, sizeof(TCreateDynamicObjectData), 0);
pd^.rBasicData := DynamicObjectData;
pd^.rState := CreateDynamicObject.GetFieldValueInteger (iname, 'State');
pd^.rRegenInterval := CreateDynamicObject.GetFieldValueInteger (iname, 'RegenInterval');
pd^.rLife := CreateDynamicObject.GetFieldValueInteger (iname, 'Life');
pd^.rNeedAge := CreateDynamicObject.GetFieldValueInteger (iname, 'NeedAge');
// pd^.rNeedSkill
mStr := CreateDynamicObject.GetFieldValueString (iname, 'NeedSkill');
for j := 0 to 5 - 1 do begin
if mStr = '' then break;
mStr := GetValidStr3 (mStr, sStr, ':');
if sStr <> '' then begin
MagicClass.GetMagicData (sStr, MagicData, 0);
if MagicData.rname[0] <> 0 then begin
pd^.rNeedSkill[j].rName := StrPas (@MagicData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rNeedSkill[j].rLevel := _StrToInt (sStr);
end;
end;
end;
// pd^.rNeedItem
mStr := CreateDynamicObject.GetFieldValueString (iname, 'NeedItem');
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^.rNeedItem[j].rName := StrPas (@ItemData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rNeedItem[j].rCount := _StrToInt (sStr);
end;
end;
end;
// pd^.rGiveItem
mStr := CreateDynamicObject.GetFieldValueString (iname, 'GiveItem');
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^.rGiveItem[j].rName := StrPas (@ItemData.rName);
mStr := GetValidStr3 (mStr, sStr, ':');
pd^.rGiveItem[j].rCount := _StrToInt (sStr);
mStr := GetValidStr3 (mStr, sStr, ':');
iRandomCount := _StrToInt (sStr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -