📄 usrengn.pas
字号:
dwProcessNpcTimeMin := GetTickCount - dwRunTick;
if dwProcessNpcTimeMin > dwProcessNpcTimeMax then
dwProcessNpcTimeMax := dwProcessNpcTimeMin;
end;
//004ADE3C
function TUserEngine.RegenMonsterByName(sMAP: string; nX, nY: Integer;
sMonName: string): TBaseObject;
var
nRace : Integer;
BaseObject : TBaseObject;
n18 : Integer;
MonGen : pTMonGenInfo;
begin
nRace := GetMonRace(sMonName);
BaseObject := AddBaseObject(sMAP, nX, nY, nRace, sMonName);
if BaseObject <> nil then
begin
n18 := m_MonGenList.Count - 1;
if n18 < 0 then
n18 := 0;
MonGen := m_MonGenList.Items[n18];
MonGen.CertList.Add(BaseObject);
BaseObject.m_PEnvir.AddObject(1);
BaseObject.m_boAddToMaped := True;
// MainOutMessage(format('MonGet Count:%d',[MonGen.CertList.Count]));
end;
Result := BaseObject;
end;
procedure TUserEngine.Run; //004B20B8
var
code:Integer;
resourcestring
sExceptionMsg = '[Exception] TUserEngine::Run';
begin
CalceTime := GetTickCount;
try
if (GetTickCount() - dwShowOnlineTick) > g_Config.dwConsoleShowUserCountTime
then
begin
dwShowOnlineTick := GetTickCount();
NoticeManager.LoadingNotice;
MainOutMessage('在线数: ' + IntToStr(GetUserCount));
code:=1;
g_CastleManager.Save;
code:=2;
end;
if (GetTickCount() - dwSendOnlineHumTime) > 10000 then
begin
dwSendOnlineHumTime := GetTickCount();
code:=3;
FrmIDSoc.SendOnlineHumCountMsg(GetOnlineHumCount);
end;
except
on E: Exception do
begin
MainOutMessage(sExceptionMsg+' code='+Inttostr(code));
{$IF SHowErr = 1}
MainOutMessage(E.Message);
{$IFEND}
end;
end;
end;
function TUserEngine.GetStdItem(nItemIdx: Integer): pTStdItem; //004AC2F8
begin
Result := nil;
Dec(nItemIdx);
if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then
begin
Result := StdItemList.Items[nItemIdx];
if Result.Name = '' then
Result := nil;
end;
end;
function TUserEngine.GetStdItem(sItemName: string): pTStdItem; //004AC348
var
i : Integer;
StdItem : pTStdItem;
begin
Result := nil;
if sItemName = '' then
exit;
for i := 0 to StdItemList.Count - 1 do
begin
StdItem := StdItemList.Items[i];
if CompareText(StdItem.Name, sItemName) = 0 then
begin
Result := StdItem;
break;
end;
end;
end;
function TUserEngine.GetStdItemWeight(nItemIdx: Integer): Integer; //004AC2B0
var
StdItem : pTStdItem;
begin
Dec(nItemIdx);
if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then
begin
StdItem := StdItemList.Items[nItemIdx];
Result := StdItem.Weight;
end
else
begin
Result := 0;
end;
end;
function TUserEngine.GetStdItemName(nItemIdx: Integer): string; //004AC1AC
begin
Result := '';
Dec(nItemIdx);
if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then
begin
Result := pTStdItem(StdItemList.Items[nItemIdx]).Name;
end
else
Result := '';
end;
function TUserEngine.FindOtherServerUser(sName: string;
var nServerIndex): Boolean;
begin
Result := False;
end;
//004AEA00
procedure TUserEngine.CryCry(wIdent: Word; pMap: TEnvirnoment; nX, nY,
nWide: Integer; btFColor, btBColor: Byte; sMsg: string);
var
i : Integer;
PlayObject : TPlayObject;
begin
for i := 0 to m_PlayObjectList.Count - 1 do
begin
PlayObject := TPlayObject(m_PlayObjectList.Objects[i]);
if not PlayObject.m_boGhost and
(PlayObject.m_PEnvir = pMap) and
(PlayObject.m_boBanShout) and
(abs(PlayObject.m_nCurrX - nX) < nWide) and
(abs(PlayObject.m_nCurrY - nY) < nWide) then
begin
//PlayObject.SendMsg(nil,wIdent,0,0,$FFFF,0,sMsg);
PlayObject.SendMsg(nil, wIdent, 0, btFColor, btBColor, 0, sMsg);
end;
end;
end;
procedure TUserEngine.DemoRun;
begin
Run();
end;
function TUserEngine.MonGetRandomItems(mon: TBaseObject): Integer; //004AD2E8
var
i : Integer;
ItemList : TMyList;
iname : string;
MonItem : pTMonItemInfo;
UserItem : pTUserItem;
StdItem : pTStdItem;
Monster : pTMonInfo;
begin
ItemList := nil;
for i := 0 to MonsterList.Count - 1 do
begin
Monster := MonsterList.Items[i];
if CompareText(Monster.sName, mon.m_sCharName) = 0 then
begin
ItemList := Monster.ItemList;
break;
end;
end;
if ItemList <> nil then
begin
for i := 0 to ItemList.Count - 1 do
begin
MonItem := pTMonItemInfo(ItemList[i]);
Randomize;
if Random(MonItem.MaxPoint) <= MonItem.SelPoint then
begin
if CompareText(MonItem.ItemName, sSTRING_GOLDNAME) = 0 then
begin
mon.m_nGold := mon.m_nGold + (MonItem.Count div 2) +
Random(MonItem.Count);
end
else
begin
//蜡聪农 酒捞袍 捞亥飘....
iname := '';
////if (BoUniqueItemEvent) and (not mon.BoAnimal) then begin
//// if GetUniqueEvnetItemName (iname, numb) then begin
//numb; //iname
//// end;
////end;
if iname = '' then
iname := MonItem.ItemName;
New(UserItem);
if CopyToUserItemFromName(iname, UserItem) then
begin
UserItem.Dura := ROUND((UserItem.DuraMax / 100) * (20 +
Random(80)));
StdItem := GetStdItem(UserItem.wIndex);
////if pstd <> nil then
//// if pstd.StdMode = 50 then begin //惑前鼻
//// pu.Dura := numb;
//// end;
if Random(g_Config.nMonRandomAddValue {10}) = 0 then
RandomUpgradeItem(UserItem);
if StdItem.StdMode in [15, 19, 20, 21, 22, 23, 24, 26] then
begin
if (StdItem.Shape = 130) or (StdItem.Shape = 131) or (StdItem.Shape
= 132) then
begin
GetUnknowItemValue(UserItem);
end;
end;
mon.m_ItemList.Add(UserItem)
end
else
DisPose(UserItem);
end;
end;
end;
end;
Result := 1;
end;
procedure TUserEngine.RandomUpgradeItem(item: pTUserItem); //004AD0C8
var
StdItem : pTStdItem;
begin
Randomize;
StdItem := GetStdItem(item.wIndex);
if StdItem = nil then
exit;
case StdItem.StdMode of
5, 6: ItemUnit.RandomUpgradeWeapon(item); //004AD14A
10, 11: ItemUnit.RandomUpgradeDress(item);
19: ItemUnit.RandomUpgrade19(item);
20, 21, 24: ItemUnit.RandomUpgrade202124(item);
26: ItemUnit.RandomUpgrade26(item);
22: ItemUnit.RandomUpgrade22(item);
23: ItemUnit.RandomUpgrade23(item);
15: ItemUnit.RandomUpgradeHelMet(item);
end;
end;
procedure TUserEngine.GetUnknowItemValue(item: pTUserItem); //004AD1D4
var
StdItem : pTStdItem;
begin
StdItem := GetStdItem(item.wIndex);
if StdItem = nil then
exit;
case StdItem.StdMode of
15: ItemUnit.UnknowHelmet(item);
22, 23: ItemUnit.UnknowRing(item);
24, 26: ItemUnit.UnknowNecklace(item);
end;
end;
//004AC404
function TUserEngine.CopyToUserItemFromName(sItemName: string; item:
pTUserItem): Boolean;
var
i : Integer;
StdItem : pTStdItem;
begin
Result := False;
if sItemName <> '' then
begin
for i := 0 to StdItemList.Count - 1 do
begin
StdItem := StdItemList.Items[i];
if CompareText(StdItem.Name, sItemName) = 0 then
begin
FillChar(item^, SizeOf(TUserItem), #0);
item.wIndex := i + 1;
item.MakeIndex := GetItemNumber();
item.Dura := StdItem.DuraMax;
item.DuraMax := StdItem.DuraMax;
Result := True;
break;
end;
end;
end;
end;
procedure TUserEngine.ProcessUserMessage(PlayObject: TPlayObject; DefMsg:
pTDefaultMessage; Buff: PChar); //004B232C
var
sMsg : string;
resourcestring
sExceptionMsg =
'[Exception] TUserEngine::ProcessUserMessage..';
begin
if (DefMsg = nil) then
exit;
try
if Buff = nil then
sMsg := ''
else
sMsg := StrPas(Buff);
case DefMsg.Ident of
CM_SPELL:
begin //3017
//if PlayObject.GetSpellMsgCount <=2 then //如果队排里有超过二个魔法操作,则不加入队排
if g_Config.boSpellSendUpdateMsg then
begin //使用UpdateMsg 可以防止消息队列里有多个操作
PlayObject.SendUpdateMsg(PlayObject,
DefMsg.Ident,
DefMsg.Tag,
LoWord(DefMsg.Recog),
HiWord(DefMsg.Recog),
MakeLong(DefMsg.Param,
DefMsg.Series),
'');
end
else
begin
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Tag,
LoWord(DefMsg.Recog),
HiWord(DefMsg.Recog),
MakeLong(DefMsg.Param,
DefMsg.Series),
'');
end;
end;
CM_QUERYUSERNAME:
begin //80
PlayObject.SendMsg(PlayObject, DefMsg.Ident, 0, DefMsg.Recog,
DefMsg.Param {x}, DefMsg.Tag {y}, '');
end;
CM_DROPITEM,
CM_TAKEONITEM,
CM_TAKEOFFITEM,
CM_1005,
CM_MERCHANTDLGSELECT,
CM_MERCHANTQUERYSELLPRICE,
CM_USERSELLITEM,
CM_USERBUYITEM,
CM_USERGETDETAILITEM,
CM_CREATEGROUP,
CM_ADDGROUPMEMBER,
CM_DELGROUPMEMBER,
CM_USERREPAIRITEM,
CM_MERCHANTQUERYREPAIRCOST,
CM_DEALTRY,
CM_DEALADDITEM,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -