📄 usrengn.pas
字号:
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 := pTMonItem(ItemList[i]);
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
StdItem.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
StdItem.RandomUpgradeUnknownItem(UserItem);
end;
end;
mon.m_ItemList.Add(UserItem)
end else
Dispose(UserItem);
end;
end;
end;
end;
Result := 1;
end;
//004AC404
function TUserEngine.CopyToUserItemFromName(sItemName: string; Item: pTUserItem): Boolean;
var
i: Integer;
StdItem: TItem;
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,
CM_DEALDELITEM,
CM_USERSTORAGEITEM,
CM_USERTAKEBACKSTORAGEITEM,
// CM_WANTMINIMAP,
CM_USERMAKEDRUGITEM,
// CM_GUILDHOME,
CM_GUILDADDMEMBER,
CM_GUILDDELMEMBER,
CM_GUILDUPDATENOTICE,
CM_GUILDUPDATERANKINFO:
begin
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Series,
DefMsg.Recog,
DefMsg.Param,
DefMsg.Tag,
DeCodeString(sMsg));
end;
CM_PASSWORD,
CM_CHGPASSWORD,
CM_SETPASSWORD:
begin
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Param,
DefMsg.Recog,
DefMsg.Series,
DefMsg.Tag,
DeCodeString(sMsg));
end;
CM_ADJUST_BONUS:
begin //1043
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Series,
DefMsg.Recog,
DefMsg.Param,
DefMsg.Tag,
sMsg);
end;
CM_HORSERUN,
CM_TURN,
CM_WALK,
CM_SITDOWN,
CM_RUN,
CM_HIT,
CM_HEAVYHIT,
CM_BIGHIT,
CM_POWERHIT,
CM_LONGHIT,
CM_CRSHIT,
CM_TWINHIT,
CM_WIDEHIT,
CM_FIREHIT:
begin
if g_Config.boActionSendActionMsg then
begin //使用UpdateMsg 可以防止消息队列里有多个操作
PlayObject.SendActionMsg(PlayObject,
DefMsg.Ident,
DefMsg.Tag,
LoWord(DefMsg.Recog), {x}
HiWord(DefMsg.Recog), {y}
0,
'');
end else
begin
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Tag,
LoWord(DefMsg.Recog), {x}
HiWord(DefMsg.Recog), {y}
0,
'');
end;
end;
CM_SAY:
begin
PlayObject.SendMsg(PlayObject, CM_SAY, 0, 0, 0, 0, DeCodeString(sMsg));
end;
else
begin
PlayObject.SendMsg(PlayObject,
DefMsg.Ident,
DefMsg.Series,
DefMsg.Recog,
DefMsg.Param,
DefMsg.Tag,
sMsg);
end;
end;
if PlayObject.m_boReadyRun then
begin
case DefMsg.Ident of
CM_TURN, CM_WALK, CM_SITDOWN, CM_RUN, CM_HIT, CM_HEAVYHIT, CM_BIGHIT,
CM_POWERHIT, CM_LONGHIT,
CM_WIDEHIT, CM_FIREHIT, CM_CRSHIT, CM_TWINHIT:
begin
Dec(PlayObject.m_dwRunTick, 100);
end;
end;
end;
except
MainOutMessage(sExceptionMsg);
end;
end;
//004AF728
procedure TUserEngine.SendServerGroupMsg(nCode, nServerIdx: Integer;
sMsg: string);
begin
if nServerIndex = 0 then
begin
FrmSrvMsg.SendSocketMsg(IntToStr(nCode) + '/' + EncodeString(IntToStr(nServerIdx)) + '/' + EncodeString(sMsg));
end else
begin
FrmMsgClient.SendSocket(IntToStr(nCode) + '/' + EncodeString(IntToStr(nServerIdx)) + '/' + EncodeString(sMsg));
end;
end;
function TUserEngine.AddBaseObject(sMapName: string; nX, nY: Integer; nMonRace: Integer; sMonName: string): TBaseObject; //004AD56C
var
Map: TEnvirnoment;
Cert: TBaseObject;
n1C, n20, n24: Integer;
p28: Pointer;
begin
Result := nil;
Cert := nil;
Map := g_MapManager.FindMap(sMapName);
if Map = nil then Exit;
case nMonRace of
SUPREGUARD: Cert := TSuperGuard.Create;
PETSUPREGUARD: Cert := TPetSuperGuard.Create;
ARCHER_POLICE: Cert := TArcherPolice.Create;
ANIMAL_CHICKEN:
begin
Cert := TMonster.Create;
Cert.m_boAnimal := True;
Cert.m_nMeatQuality := Random(3500) + 3000;
Cert.m_nBodyLeathery := 50;
end;
ANIMAL_DEER:
begin
if Random(30) = 0 then
begin
Cert := TChickenDeer.Create;
Cert.m_boAnimal := True;
Cert.m_nMeatQuality := Random(20000) + 10000;
Cert.m_nBodyLeathery := 150;
end else
begin
Cert := TMonster.Create;
Cert.m_boAnimal := True;
Cert.m_nMeatQuality := Random(8000) + 8000;
Cert.m_nBodyLeathery := 150;
end;
end;
ANIMAL_WOLF:
begin
Cert := TATMonster.Create;
Cert.m_boAnimal := True;
Cert.m_nMeatQuality := Random(8000) + 8000;
Cert.m_nBodyLeathery := 150;
end;
TRAINER:
begin
Cert := TTrainer.Create;
end;
MONSTER_OMA: Cert := TMonster.Create;
MONSTER_OMAKNIGHT: Cert := TATMonster.Create;
MONSTER_SPITSPIDER: Cert := TSpitSpider.Create;
83: Cert := TSlowATMonster.Create;
84: Cert := TScorpion.Create;
MONSTER_STICK: Cert := TStickMonster.Create;
86: Cert := TATMonster.Create;
MONSTER_DUALAXE: Cert := TDualAxeMonster.Create;
88: Cert := TATMonster.Create;
89: Cert := TATMonster.Create;
90: Cert := TGasAttackMonster.Create;
91: Cert := TMagCowMonster.Create;
92: Cert := TCowKingMonster.Create;
MONSTER_THONEDARK: Cert := TThornDarkMonster.Create;
MONSTER_LIGHTZOMBI: Cert := TLightingZombi.Create;
MONSTER_DIGOUTZOMBI:
begin
Cert := TDigOutZombi.Create;
if Random(2) = 0 then Cert.bo2BA := True;
end;
MONSTER_ZILKINZOMBI:
begin
Cert := TZilKinZombi.Create;
if Random(4) = 0 then Cert.bo2BA := True;
end;
97:
begin
Cert := TCowMonster.Create;
if Random(2) = 0 then Cert.bo2BA := True;
end;
MONSTER_WHITESKELETON: Cert := TWhiteSkeleton.Create;
MONSTER_SCULTURE:
begin
Cert := TScultureMonster.Create;
Cert.bo2BA := True;
end;
MONSTER_SCULTUREKING: Cert := TScultureKingMonster.Create;
MONSTER_BEEQUEEN: Cert := TBeeQueen.Create;
104: Cert := TArcherMonster.Create;
105: Cert := TGasMothMonster.Create; //楔蛾
106: Cert := TGasDungMonster.Create;
107: Cert := TCentipedeKingMonster.Create;
110: Cert := TCastleDoor.Create;
111: Cert := TWallStructure.Create;
MONSTER_ARCHERGUARD: Cert := TArcherGuard.Create;
MONSTER_ELFMONSTER: Cert := TElfMonster.Create;
MONSTER_ELFWARRIOR: Cert := TElfWarriorMonster.Create;
115: Cert := TBigHeartMonster.Create;
116: Cert := TSpiderHouseMonster.Create;
117: Cert := TExplosionSpider.Create;
118: Cert := THighRiskSpider.Create;
119: Cert := TBigPoisionSpider.Create;
120: Cert := TSoccerBall.Create;
130: Cert := TDoubleCriticalMonster.Create;
131: Cert := TRonObject.Create;
132: Cert := TSandMobObject.Create;
133: Cert := TMagicMonObject.Create;
134: Cert := TBoneKingMonster.Create;
200: Cert := TElectronicScolpionMon.Create;
201: Cert := TClone.Create;
203: Cert := TTeleMonster.Create;
206: Cert := TKhazard.Create;
208: Cert := TGreenMonster.Create;
209: Cert := TRedMonster.Create;
210: Cert := TFrostTiger.Create;
214: Cert := TFireMonster
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -