📄 svclass.pas
字号:
ItemData.rShape := ItemDb.GetFieldValueinteger (aItemName, 'Shape');
ItemData.rActionImage := ItemDb.GetFieldValueInteger (aItemName, 'ActionImage');
ItemData.rHitMotion := ItemDb.GetFieldValueinteger (aItemName, 'HitMotion');
ItemData.rHitType := ItemDb.GetFieldValueinteger (aItemName, 'HitType');
ItemData.rKind := ItemDb.GetFieldValueinteger (aItemName, 'Kind');
ItemData.rColor := ItemDb.GetFieldValueinteger (aItemName, 'Color');
ItemData.rBoDouble := ItemDb.GetFieldValueBoolean (aItemName, 'boDouble');
ItemData.rBoColoring := ItemDb.GetFieldValueBoolean (aItemName, 'boColoring');
ItemData.rPrice := ItemDb.GetFieldValueInteger (aItemName, 'Price');
ItemData.rNeedGrade := ItemDb.GetFieldValueInteger (aItemName, 'NeedGrade');
ItemData.rSex := ItemDb.GetFieldValueInteger (aItemName, 'Sex');
ItemData.rServerId := ItemDb.GetFieldValueInteger (aItemName, 'ServerId');
ItemData.rx := ItemDb.GetFieldValueInteger (aItemName, 'X');
ItemData.ry := ItemDb.GetFieldValueInteger (aItemName, 'Y');
ItemData.rCount := 1;
Result := TRUE;
end;
function TItemClass.GetItemData (aItemName: string; var ItemData: TItemData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aItemName);
if (n = 0) or (n = -1) then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
ItemData := PTItemData (n)^;
Result := TRUE;
end;
function TItemClass.GetCheckItemData (aObjName : String; aCheckItem : TCheckItem; var ItemData: TItemData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aCheckItem.rName);
if (n = 0) or (n = -1) then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
if RandomClass.GetChance (aCheckItem.rName, aObjName) = false then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
ItemData := PTItemData (n)^;
ItemData.rCount := aCheckItem.rCount;
Result := TRUE;
end;
function TItemClass.GetChanceItemData (aStr, aObjName: string; var ItemData: TItemData): Boolean;
var
str, rdstr, iname : string;
icolor, icnt : integer;
boChance : Boolean;
begin
Result := FALSE;
str := astr;
str := GetValidStr3 (str, iname, ':');
str := GetValidStr3 (str, rdstr, ':');
icolor := _StrToInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
icnt := _StrToInt (rdstr);
{
str := GetValidStr3 (str, rdstr, ':');
iper := _StrToInt (rdstr);
}
if GetItemData (iName, ItemData) = FALSE then exit;
// 扁粮狼 iper 绰 玫盒啦捞菌绰单 捞巴阑 MonsterRandomCount 抛捞喉阑 捞侩秦辑
// 犬伏阑 沥窃. rper绰 0俊辑 30 鳖瘤狼 箭磊捞绢具 凳.
// 0 = 1/1 = 100%, 30= 1/1000000000 = ??
{
if (iper > 30) or (iper < 0) then begin
FillChar(ItemData, sizeof(TItemData),0);
exit;
end;
rcount := MonsterRandomCount[iper];
if Random (rcount) <> 0 then begin
FillChar(ItemData, sizeof(TItemData),0);
exit;
end;
}
// if (iper <> 0) and (Random (1000) > iper) then begin FillChar(ItemData, sizeof(TItemData),0); exit; end;
boChance := RandomClass.GetChance (iName, aObjName);
if boChance = false then begin
FillChar(ItemData, sizeof(TItemData),0);
exit;
end else begin
ItemData.rColor := iColor;
ItemData.rCount := iCnt;
end;
Result := TRUE;
end;
function TItemClass.GetWearItemData (astr: string; var ItemData: TItemData): Boolean;
var
str, rdstr, iname : string;
icolor, icnt :integer;
begin
Result := FALSE;
str := astr;
str := GetValidStr3 (str, iname, ':');
str := GetValidStr3 (str, rdstr, ':');
icolor := _StrToInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
icnt := _StrToInt (rdstr);
if GetItemData (iname, ItemData) = FALSE then exit;
ItemData.rColor := icolor;
ItemData.rCount := icnt;
Result := TRUE;
end;
function TItemClass.GetWearItemString (var ItemData: TItemData): string;
begin
Result := StrPas (@ItemData.rName) + ':' + IntToStr(ItemData.rcolor)+':'+IntToStr(ItemData.rCount) + ':';
end;
{
///////////////////////////////
// TDynamicObjectClass
///////////////////////////////
constructor TDynamicObjectClass.Create;
begin
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('DynamicItemClass', 20, TRUE);
LoadFromFile ('DynamicObject.Sdb');
end;
destructor TDynamicObjectClass.Destroy;
begin
Clear;
AnsIndexClass.Free;
DataList.Free;
inherited Destroy;
end;
procedure TDynamicObjectClass.Clear;
var
i : integer;
begin
for i := 0 to DataList.Count - 1 do begin
Dispose (DataList[i]);
end;
DataList.Clear;
AnsIndexClass.Clear;
end;
function TDynamicObjectClass.GetDynamicObjectData (aObjectName: String; var aObjectData: TDynamicObjectData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aObjectName);
if (n = 0) or (n = -1) then begin
FillChar (aObjectData, sizeof(TDynamicObjectData), 0);
exit;
end;
aObjectData := PTDynamicObjectData (n)^;
Result := TRUE;
end;
procedure TDynamicObjectClass.LoadFromFile (aName : String);
var
i : integer;
iName : String;
StrDB : TUserStringDb;
pd : PTDynamicObjectData;
begin
Clear;
StrDB := nil;
pd := nil;
try
StrDB := TUserStringDb.Create;
StrDB.LoadFromFile (aName);
for i := 0 to StrDb.Count - 1 do begin
iName := StrDb.GetIndexName (i);
New (pd);
pd^.rName := StrDB.GetFieldValueString (iName, 'NAME');
pd^.rKind := StrDB.GetFieldValueInteger (iName, 'KIND');
pd^.rShape := StrDB.GetFieldValueInteger (iName, 'SHAPE');
StrToEffectData (pd^.rSoundEvent, StrDB.GetFieldValueString (iName, 'SOUNDEVENT'));
StrToEffectData (pd^.rSoundSpecial, StrDB.GetFieldValueString (iName, 'SOUNDSPECIAL'));
pd^.rComment := StrDB.GetFieldValueString (iName, 'COMMENT');
DataList.Add (pd);
AnsIndexClass.Insert (Integer(pd), iName);
end;
StrDb.Free;
except
if StrDb <> nil then StrDb.Free;
if pd <> nil then Dispose (pd);
end;
end;
}
const
ITEMDRUG_DIV_VALUE = 10;
ITEMDRUG_MUL_EVENTENERGY = 10;
ITEMDRUG_MUL_EVENTINPOWER = 10;
ITEMDRUG_MUL_EVENTOUTPOWER = 10;
ITEMDRUG_MUL_EVENTMAGIC = 10;
ITEMDRUG_MUL_EVENTLIFE = 15;
ITEMDRUG_MUL_EVENTHEADLIFE = 15;
ITEMDRUG_MUL_EVENTARMLIFE = 15;
ITEMDRUG_MUL_EVENTLEGLIFE = 15;
///////////////////////////////////
// TItemDrugClass
///////////////////////////////////
constructor TItemDrugClass.Create;
begin
ItemDrugDb := TUserStringDb.Create;
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('ItemDrugClass', 20, TRUE);
ReLoadFromFile;
end;
destructor TItemDrugClass.Destroy;
begin
Clear;
AnsIndexClass.Free;
DataList.Free;
ItemDrugDb.Free;
inherited Destroy;
end;
procedure TItemDrugClass.Clear;
var i : integer;
begin
for i := 0 to DataList.Count -1 do dispose (DataList[i]);
DataList.Clear;
AnsIndexClass.Clear;
end;
procedure TItemDrugClass.ReLoadFromFile;
var
i : integer;
iname : string;
pid : PTItemDrugData;
begin
Clear;
ItemDrugDb.LoadFromFile ('itemDrug.sdb');
for i := 0 to ItemDrugDb.Count -1 do begin
iname := ItemDrugDb.GetIndexName (i);
new (pid);
LoadItemDrugData (iname, pid^);
DataList.Add (pid);
AnsIndexClass.Insert (Integer(pid), iname);
end;
end;
function TItemDrugClass.LoadItemDrugData (aItemDrugName: string; var ItemDrugData: TItemDrugData): Boolean;
begin
Result := FALSE;
FillChar (ItemDrugData, sizeof(ItemDrugData), 0);
if ItemDrugDb.GetDbString (aItemDrugName) = '' then exit;
StrPCopy (@ItemDrugData.rname, aItemDrugName);
ItemDrugData.rEventEnergy := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eEnergy') * ITEMDRUG_MUL_EVENTENERGY div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventInPower := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eInPower') * ITEMDRUG_MUL_EVENTINPOWER div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventOutPower := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eOutPower') * ITEMDRUG_MUL_EVENTOUTPOWER div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventMagic := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eMagic') * ITEMDRUG_MUL_EVENTMAGIC div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventLife := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eLife') * ITEMDRUG_MUL_EVENTLIFE div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventHeadLife := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eHeadLife') * ITEMDRUG_MUL_EVENTHEADLIFE div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventArmLife := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eArmLife') * ITEMDRUG_MUL_EVENTARMLIFE div ITEMDRUG_DIV_VALUE;
ItemDrugData.rEventLegLife := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eLegLife') * ITEMDRUG_MUL_EVENTLEGLIFE div ITEMDRUG_DIV_VALUE;
Result := TRUE;
end;
function TItemDrugClass.GetItemDrugData (aItemDrugName: string; var ItemDrugData: TItemDrugData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aItemDrugName);
if (n = 0) or (n = -1) then begin
FillChar (ItemDrugData, sizeof(ItemDrugData), 0);
exit;
end;
ItemDrugData := PTItemDrugData (n)^;
ItemDrugData.rUsedCount := 0;
Result := TRUE;
end;
///////////////////////////////////
// TMonsterClass
///////////////////////////////////
constructor TMonsterClass.Create;
begin
MonsterDb := TUserStringDb.Create;
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('Monster', 20, TRUE);
ReLoadFromFile;
end;
destructor TMonsterClass.Destroy;
begin
Clear;
AnsIndexClass.Free;
DataList.Free;
MonsterDb.Free;
inherited Destroy;
end;
procedure TMonsterClass.Clear;
var i : integer;
begin
for i := 0 to DataList.Count -1 do dispose (DataList[i]);
DataList.Clear;
AnsIndexClass.Clear;
end;
function TMonsterClass.LoadMonsterData (aMonsterName: string; var MonsterData: TMonsterData): Boolean;
var
i, iCount, iRandomCount : Integer;
str, mName, mCount, mSkill: String;
begin
Result := FALSE;
FillChar (MonsterData, sizeof(MonsterData), 0);
if MonsterDb.GetDbString (aMonsterName) = '' then exit;
StrPCopy (@MonsterData.rname, aMonsterName);
StrToEffectData (MonsterData.rSoundNormal, MonsterDb.GetFieldValueString (aMonsterName, 'SoundNormal'));
StrToEffectData (MonsterData.rSoundAttack, MonsterDb.GetFieldValueString (aMonsterName, 'SoundAttack'));
StrToEffectData (MonsterData.rSoundDie, MonsterDb.GetFieldValueString (aMonsterName, 'SoundDie'));
StrToEffectData (MonsterData.rSoundStructed, MonsterDb.GetFieldValueString (aMonsterName, 'SoundStructed'));
MonsterData.rAnimate := MonsterDb.GetFieldValueinteger (aMonsterName, 'Animate');
MonsterData.rWalkSpeed := MonsterDb.GetFieldValueinteger (aMonsterName, 'WalkSpeed');
MonsterData.rShape := MonsterDb.GetFieldValueinteger (aMonsterName, 'Shape');
MonsterData.rdamage := MonsterDb.GetFieldValueinteger (aMonsterName, 'Damage');
MonsterData.rAttackSpeed := MonsterDb.GetFieldValueinteger (aMonsterName, 'AttackSpeed');
MonsterData.ravoid := MonsterDb.GetFieldValueinteger (aMonsterName, 'Avoid');
MonsterData.rrecovery := MonsterDb.GetFieldValueinteger (aMonsterName, 'Recovery');
MonsterData.rspendlife := MonsterDb.GetFieldV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -