?? objhero.pas
字號(hào):
Dec(nDura, 1000);
if nDura <= 0 then begin
nDura := 0;
m_UseItems[I].Dura := nDura;
if m_btRaceServer = RC_HEROOBJECT then begin
HeroObject := THeroObject(Self);
HeroObject.SendDelItems(@m_UseItems[I]);
end; //004C0310
m_UseItems[I].wIndex := 0;
RecalcAbilitys();
end else begin //004C0331
m_UseItems[I].Dura := nDura;
end;
if tDura <> Round(nDura / 1000 {1.03}) then begin
SendMsg(Self, RM_HERODURACHANGE, I, nDura, m_UseItems[I].DuraMax, 0, '');
end;
//break;
end; //004C0397
// end;//004C0397
end; //004C0397 if pSItem <> nil then begin
end; //if UseItems[i].wIndex > 0 then begin
end; // for i:=Low(UseItems) to High(UseItems) do begin
end;
procedure THeroObject.DoDamageWeapon(nWeaponDamage: Integer);
var
nDura, nDuraPoint: Integer;
HeroObject: THeroObject;
StdItem: pTStdItem;
begin
if m_UseItems[U_WEAPON].wIndex <= 0 then Exit;
nDura := m_UseItems[U_WEAPON].Dura;
nDuraPoint := Round(nDura / 1.03);
Dec(nDura, nWeaponDamage);
if nDura <= 0 then begin
nDura := 0;
m_UseItems[U_WEAPON].Dura := nDura;
if m_btRaceServer = RC_HEROOBJECT then begin
HeroObject := THeroObject(Self);
HeroObject.SendDelItems(@m_UseItems[U_WEAPON]);
StdItem := UserEngine.GetStdItem(m_UseItems[U_WEAPON].wIndex);
//004C195A
{if StdItem.NeedIdentify = 1 then
AddGameDataLog ('3' + #9 +
m_sMapName + #9 +
IntToStr(m_nCurrX) + #9 +
IntToStr(m_nCurrY) + #9 +
m_sCharName + #9 +
//UserEngine.GetStdItemName(m_UseItems[U_WEAPON].wIndex) + #9 +
StdItem.Name + #9 +
IntToStr(m_UseItems[U_WEAPON].MakeIndex) + #9 +
BoolToIntStr(m_btRaceServer = RC_PLAYOBJECT) + #9 +
'0'); }
end;
m_UseItems[U_WEAPON].wIndex := 0;
SendMsg(Self, RM_HERODURACHANGE, U_WEAPON, nDura, m_UseItems[U_WEAPON].DuraMax, 0, '');
end else begin //004C199D
m_UseItems[U_WEAPON].Dura := nDura;
end;
if (nDura / 1.03) <> nDuraPoint then begin
SendMsg(Self, RM_HERODURACHANGE, U_WEAPON, m_UseItems[U_WEAPON].Dura, m_UseItems[U_WEAPON].DuraMax, 0, '');
end;
end;
procedure THeroObject.StruckDamage(nDamage: Integer);
var
I: Integer;
nDam: Integer;
nDura, nOldDura: Integer;
HeroObject: THeroObject;
StdItem: pTStdItem;
bo19: Boolean;
begin
if nDamage <= 0 then Exit;
nDam := Random(10) + 5;
if m_wStatusTimeArr[POISON_DAMAGEARMOR {1 0x62}] > 0 then begin
nDam := Round(nDam * (g_Config.nPosionDamagarmor / 10) {1.2});
nDamage := Round(nDamage * (g_Config.nPosionDamagarmor / 10) {1.2});
end;
bo19 := False;
if m_UseItems[U_DRESS].wIndex > 0 then begin
nDura := m_UseItems[U_DRESS].Dura;
nOldDura := Round(nDura / 1000);
Dec(nDura, nDam);
if nDura <= 0 then begin
if m_btRaceServer = RC_HEROOBJECT then begin
HeroObject := THeroObject(Self);
HeroObject.SendDelItems(@m_UseItems[U_DRESS]);
StdItem := UserEngine.GetStdItem(m_UseItems[U_DRESS].wIndex);
//004BE088
{if StdItem.NeedIdentify = 1 then
AddGameDataLog ('3' + #9 +
m_sMapName + #9 +
IntToStr(m_nCurrX) + #9 +
IntToStr(m_nCurrY) + #9 +
m_sCharName + #9 +
//UserEngine.GetStdItemName(m_UseItems[U_DRESS].wIndex) + #9 +
StdItem.Name + #9 +
IntToStr(m_UseItems[U_DRESS].MakeIndex) + #9 +
BoolToIntStr(m_btRaceServer = RC_PLAYOBJECT) + #9 +
'0'); }
m_UseItems[U_DRESS].wIndex := 0;
FeatureChanged();
end;
m_UseItems[U_DRESS].wIndex := 0;
m_UseItems[U_DRESS].Dura := 0;
bo19 := True;
end else begin
m_UseItems[U_DRESS].Dura := nDura;
end;
if nOldDura <> Round(nDura / 1000) then begin
SendMsg(Self, RM_HERODURACHANGE, U_DRESS, nDura, m_UseItems[U_DRESS].DuraMax, 0, '');
end;
end;
for I := Low(THumanUseItems) to High(THumanUseItems) do begin
if (m_UseItems[I].wIndex > 0) and (Random(8) = 0) then begin
nDura := m_UseItems[I].Dura;
nOldDura := Round(nDura / 1000);
Dec(nDura, nDam);
if nDura <= 0 then begin
if m_btRaceServer = RC_HEROOBJECT then begin
HeroObject := THeroObject(Self);
HeroObject.SendDelItems(@m_UseItems[I]);
StdItem := UserEngine.GetStdItem(m_UseItems[I].wIndex);
//004BE2B8
{if StdItem.NeedIdentify = 1 then
AddGameDataLog ('3' + #9 +
m_sMapName + #9 +
IntToStr(m_nCurrX) + #9 +
IntToStr(m_nCurrY) + #9 +
m_sCharName + #9 +
//UserEngine.GetStdItemName(m_UseItems[i].wIndex) + #9 +
StdItem.Name + #9 +
IntToStr(m_UseItems[i].MakeIndex) + #9 +
BoolToIntStr(m_btRaceServer = RC_PLAYOBJECT) + #9 +
'0'); }
m_UseItems[I].wIndex := 0;
FeatureChanged();
end;
m_UseItems[I].wIndex := 0;
m_UseItems[I].Dura := 0;
bo19 := True;
end else begin
m_UseItems[I].Dura := nDura;
end;
if nOldDura <> Round(nDura / 1000) then begin
SendMsg(Self, RM_HERODURACHANGE, I, nDura, m_UseItems[I].DuraMax, 0, '');
end;
end;
end;
if bo19 then RecalcAbilitys();
DamageHealth(nDamage);
end;
function THeroObject.ClientDropItem(sItemName: string;
nItemIdx: Integer): Boolean;
var
I: Integer;
UserItem: pTUserItem;
StdItem: pTStdItem;
sUserItemName: string;
sCheckItemName: string;
begin
Result := False;
{if not TPlayObject(m_Master).m_boClientFlag then begin
if TPlayObject(m_Master).m_nStep = 8 then Inc(TPlayObject(m_Master).m_nStep)
else TPlayObject(m_Master).m_nStep := 0;
end; }
if g_Config.boInSafeDisableDrop and InSafeZone then begin
SendMsg(g_ManageNPC, RM_MENU_OK, 0, Integer(Self), 0, 0, g_sCanotDropInSafeZoneMsg);
Exit;
end;
if not m_boCanDrop then begin
SendMsg(g_ManageNPC, RM_MENU_OK, 0, Integer(Self), 0, 0, g_sCanotDropItemMsg);
Exit;
end;
if Pos(' ', sItemName) > 0 then begin //折分物品名稱(信件物品的名稱后面加了使用次數(shù))
GetValidStr3(sItemName, sItemName, [' ']);
end;
for I := m_ItemList.Count - 1 downto 0 do begin
if m_ItemList.Count <= 0 then Break;
UserItem := m_ItemList.Items[I];
if (UserItem <> nil) and (UserItem.MakeIndex = nItemIdx) then begin
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem = nil then Continue;
//sItem:=UserEngine.GetStdItemName(UserItem.wIndex);
//取自定義物品名稱
sUserItemName := '';
if UserItem.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem.MakeIndex, UserItem.wIndex);
if sUserItemName = '' then
sUserItemName := UserEngine.GetStdItemName(UserItem.wIndex);
if CompareText(sUserItemName, sItemName) = 0 then begin
if Assigned(PlugInEngine.CheckCanDropItem) then begin
sCheckItemName := StdItem.Name;
if not PlugInEngine.CheckCanDropItem(Self, PChar(sCheckItemName), True) then Break;
end;
if g_Config.boControlDropItem and (StdItem.Price < g_Config.nCanDropPrice) then begin
m_ItemList.Delete(I);
Dispose(UserItem);
Result := True;
Break;
end;
if DropItemDown(UserItem, 1, False, nil, m_Master) then begin
m_ItemList.Delete(I);
Dispose(UserItem);
Result := True;
Break;
end;
end;
end;
end;
if Result then WeightChanged();
end;
procedure THeroObject.RepairAllItem();
var
nWhere: Integer;
sCheckItemName: string;
StdItem: pTStdItem;
begin
for nWhere := Low(THumanUseItems) to High(THumanUseItems) do begin
if m_UseItems[nWhere].wIndex > 0 then begin
StdItem := UserEngine.GetStdItem(m_UseItems[nWhere].wIndex);
if StdItem <> nil then begin
if (m_UseItems[nWhere].DuraMax > m_UseItems[nWhere].Dura) and (StdItem.StdMode <> 43) then begin
if Assigned(PlugInEngine.CheckCanRepairItem) then begin
sCheckItemName := StdItem.Name;
if not PlugInEngine.CheckCanRepairItem(m_Master, PChar(sCheckItemName), False) then Continue;
end;
m_UseItems[nWhere].Dura := m_UseItems[nWhere].DuraMax;
SendMsg(Self, RM_HERODURACHANGE, nWhere, m_UseItems[nWhere].Dura, m_UseItems[nWhere].DuraMax, 0, '');
end;
end;
end;
end;
end;
procedure THeroObject.ClientHeroUseItems(nItemIdx: Integer; sItemName: string); //英雄吃藥
function GetUnbindItemName(nShape: Integer): string;
var
I: Integer;
begin
Result := '';
for I := 0 to g_UnbindList.Count - 1 do begin
if Integer(g_UnbindList.Objects[I]) = nShape then begin
Result := g_UnbindList.Strings[I];
Break;
end;
end;
end;
function GetUnBindItems(sItemName: string; nCount: Integer): Boolean;
var
I: Integer;
UserItem: pTUserItem;
begin
Result := False;
for I := 0 to nCount - 1 do begin
New(UserItem);
if UserEngine.CopyToUserItemFromName(sItemName, UserItem) then begin
m_ItemList.Add(UserItem);
//if m_btRaceServer = RC_PLAYOBJECT then
SendAddItem(UserItem);
Result := True;
end else begin
Dispose(UserItem);
Break;
end;
end;
end;
function FoundUserItem(Item: pTUserItem): Boolean;
var
I: Integer;
UserItem: pTUserItem;
begin
Result := False;
for I := 0 to m_ItemList.Count - 1 do begin
UserItem := m_ItemList.Items[I];
if UserItem = Item then begin
Result := True;
Break;
end;
end;
end;
var
I: Integer;
boEatOK: Boolean;
boSendUpDate: Boolean;
UserItem: pTUserItem;
StdItem: pTStdItem;
UserItem34: TUserItem;
sMapName: string;
nCurrX, nCurrY: Integer;
begin
boEatOK := False;
boSendUpDate := False;
StdItem := nil;
if m_boCanUseItem then begin
if not m_boDeath then begin
for I := m_ItemList.Count - 1 downto 0 do begin
if m_ItemList.Count <= 0 then Break;
UserItem := m_ItemList.Items[I];
if (UserItem <> nil) and (UserItem.MakeIndex = nItemIdx) then begin
UserItem34 := UserItem^;
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then begin
if not m_PEnvir.AllowStdItems(UserItem.wIndex) then begin
SysMsg(Format(g_sCanotMapUseItemMsg, [StdItem.Name]), c_Red, t_Hint);
Break;
end;
case StdItem.StdMode of
0, 1, 3: begin //藥
if EatItems(StdItem) then begin
m_ItemList.Delete(I);
DisPoseAndNil(UserItem);
boEatOK := True;
end;
Break;
end;
2: begin //修復(fù)神水
case StdItem.Shape of
1: begin
if UserItem.Dura > 0 then begin
if UserItem.Dura >= 100 then begin
Dec(UserItem.Dura, 100);
end else begin
UserItem.Dura := 0;
end;
RepairAllItem();
boEatOK := True;
end;
if UserItem.Dura > 0 then begin
boSendUpDate := True;
boEatOK := False;
end;
end;
end;
end;
4: begin //書
if ReadBook(StdItem) then begin
m_ItemList.Delete(I);
DisPoseAndNil(UserItem);
boEatOK := True;
if (m_MagicErgumSkill <> nil) and (not m_boUseThrusting) then begin
ThrustingOnOff(True);
//SendSocket(nil, '+LNG');
end;
if (m_MagicBanwolSkill <> nil) and (not m_boUseHalfMoon) then begin
HalfMoonOnOff(True);
//SendSocket(nil, '+WID');
end;
end;
end;
31: begin //解包物品
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -