📄 usrengn.pas
字号:
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.Create;
215: Cert:=TFireBallMonster.Create;
end;
if Cert <> nil then begin
MonInitialize(Cert,sMonName);
Cert.m_PEnvir:=Map;
Cert.m_sMapName:=sMapName;
Cert.m_nCurrX:=nX;
Cert.m_nCurrY:=nY;
Cert.m_btDirection:=Random(8);
Cert.m_sCharName:=sMonName;
Cert.m_WAbil:=Cert.m_Abil;
if Random(100) < Cert.m_btCoolEye then Cert.m_boCoolEye:=True;
MonGetRandomItems(Cert); //取得怪物爆物
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -