📄 grobal2.pas
字号:
unit Grobal2;
interface
uses
Math,windows;
Const
BUFFERSIZE =1024;
//客户端发送的命令
CM_SOFTCLOSE =0;
//登录有关的命令
CM_IDPASSWORD =1;
CM_QUERYUSERSTATE=2;
CM_ADDNEWUSER =3;
CM_UPDATEUSER =4;
CM_SELECTSERVER =5;
CM_CHANGEPASSWORD =6;
CM_NEWCHR =7;
CM_QUERYCHR =8;
CM_DELCHR =9;
CM_SELCHR =10;
CM_QUERYUSERNAME=11;
CM_SAY =22;
CM_MAGICKEYCHANGE = 30;
CM_CREATEGROUP =42;
CM_WANTMINIMAP =43;
CM_OPENGUILDDLG =45;
CM_GROUPMODE=41;
CM_ADDGROUPMEMBER =51;
CM_DELGROUPMEMBER =52;
CM_SPEEDHACKUSER =59;
CM_ADJUST_BONUS =60;
CM_QUERYBAGITEMS=62;
CM_LOGINNOTICEOK = 63;
//动作命令1
CM_TURN =4001;
CM_WALK =4002;
CM_SITDOWN =4003;
CM_RUN =4004;
CM_HIT =4005;
CM_POWERHIT =4008;
CM_LONGHIT =4009;
CM_WIDEHIT =4010;
CM_HEAVYHIT =4011;
CM_BIGHIT =4012;
CM_THROW =4013;
CM_FIREHIT =4014;
CM_SPELL =4015;
CM_CLICKNPC =3015;
//动作命令2
CM_OPENDOOR =2001;
CM_DROPITEM =2010;
CM_PICKUP =2011;
CM_TAKEONITEM =2021;
CM_TAKEOFFITEM = 2022;
CM_EAT =2023;
CM_BUTCH =2024;
CM_MERCHANTDLGSELECT =2030;
CM_MERCHANTQUERYSELLPRICE =2031;
CM_MERCHANTQUERYREPAIRCOST =2032;
CM_USERSELLITEM =2040;
CM_USERREPAIRITEM =2041;
CM_USERSTORAGEITEM =2042;
CM_USERGETDETAILITEM =2043;
CM_USERBUYITEM =2044;
CM_USERTAKEBACKSTORAGEITEM =2045;
CM_USERMAKEDRUGITEM =2046;
CM_DROPGOLD =2050;
CM_DEALTRY =2060;
CM_DEALCANCEL =2061;
CM_DEALADDITEM =2062;
CM_DEALDELITEM =2063;
CM_DEALCHGGOLD =2064;
CM_DEALEND =2069;
CM_GUILDHOME =2070;
CM_GUILDMEMBERLIST =2071;
CM_GUILDADDMEMBER =2072;
CM_GUILDDELMEMBER =2073;
CM_GUILDUPDATENOTICE =2074;
CM_GUILDUPDATERANKINFO =2075;
//装备项目
U_WEAPON =0; //武器
U_RIGHTHAND =1; //右手
U_DRESS =2; //衣服
U_HELMET =3; //头盔
U_NECKLACE =4; //项链
U_ARMRINGR =5; //右手戒指
U_ARMRINGL =6; //左手戒指
U_RINGR =7; //右戒指
U_RINGL =8; //左戒指
//服务器端发送的命令
//登录、新帐号、新角色、查询角色等
SM_NEWID_SUCCESS =101;
SM_NEWID_FAIL =102;
SM_PASSWD_FAIL =103;
SM_NEEDUPDATE_ACCOUNT =104;
SM_UPDATEID_SUCCESS =105;
SM_UPDATEID_FAIL =106;
SM_PASSOK_SELECTSERVER = 107;
SM_SELECTSERVER_OK =109;
SM_QUERYCHR =111;
SM_QUERYCHR_FAIL =112;
SM_NEWCHR_SUCCESS =113;
SM_NEWCHR_FAIL =114;
SM_CHGPASSWD_SUCCESS =115;
SM_CHGPASSWD_FAIL =116;
SM_DELCHR_SUCCESS =117;
SM_DELCHR_FAIL =118;
SM_STARTPLAY=119;
SM_STARTFAIL =120;
SM_VERSION_FAIL =121;
SM_OUTOFCONNECTION =122;
SM_RECONNECT =125;
SM_SENDNOTICE =202;
SM_MYSTATUS =131;
SM_TIMECHECK_MSG = 227;
SM_CHANGEMAP =201;
SM_AREASTATE = 228;
SM_NEWMAP =223;
SM_MAPDESCRIPTION = 229;
SM_LOGON =224;
SM_CHANGELIGHT =240;
SM_LAMPCHANGEDURA=241;
SM_LIGHTING =242;
SM_OPENDOOR_OK=249;
SM_OPENDOOR_LOCK=250;
SM_CLOSEDOOR =251;
SM_DEATH=260;
SM_NOWDEATH =261;
SM_SKELETON=262;
SM_ALIVE =263;
SM_ABILITY =264;
SM_SUBABILITY=265;
SM_DAYCHANGING=266;
SM_WINEXP =267;
SM_LEVELUP =268;
SM_HEALTHSPELLCHANGED =269;
SM_ADJUST_BONUS =280;
SM_STRUCK =310;
SM_CHANGEFACE=311;
SM_OPENHEALTH=312;
SM_CLOSEHEALTH =313;
SM_INSTANCEHEALGUAGE=314;
SM_BREAKWEAPON=315;
//对话消息
SM_CRY=316;
SM_GROUPMESSAGE =347;
SM_GUILDMESSAGE =348;
SM_WHISPER=349;
SM_HEAR=351;
SM_SYSMESSAGE=390;
SM_USERNAME =352;
SM_CHANGENAMECOLOR=353;
//移动动作
SM_TURN =1001;
SM_WALK =1002;
SM_SITDOWN =1003;
SM_RUN =1004;
SM_HIT =1005;
SM_POWERHIT =1008;
SM_LONGHIT =1009;
SM_WIDEHIT =1010;
SM_HEAVYHIT =1011;
SM_BIGHIT =1012;
SM_THROW =1013;
SM_FIREHIT =1014;
SM_SPELL =1015;
SM_BACKSTEP =1021;
SM_RUSH =1022;
SM_RUSHKUNG =1023;
SM_SPACEMOVE_HIDE =1041;
SM_SPACEMOVE_HIDE2=1042;
SM_SPACEMOVE_SHOW =1043;
SM_SPACEMOVE_SHOW2=1044;
SM_MOVEFAIL =1045;
SM_BUTCH =1046;
SM_FLYAXE =1060;
SM_MAGICFIRE =1072;
SM_MAGICFIRE_FAIL = 1073;
SM_HIDE =1224;
SM_GHOST=1225;
SM_DISAPPEAR=1226;
SM_DIGUP=1227;
SM_DIGDOWN=1228;
SM_SHOWEVENT =1229;
SM_HIDEEVENT = 1230;
SM_ADDITEM=2040;
SM_BAGITEMS =2041;
SM_UPDATEITEM=2042;
SM_DELITEM =2043;
SM_DELITEMS=2044;
SM_DROPITEM_SUCCESS=2045;
SM_DROPITEM_FAIL=2046;
SM_ITEMSHOW=2047;
SM_ITEMHIDE=2048;
SM_TAKEON_OK=2052;
SM_TAKEON_FAIL=2053;
SM_TAKEOFF_OK=2054;
SM_TAKEOFF_FAIL=2055;
SM_EXCHGTAKEON_OK=2056;
SM_EXCHGTAKEON_FAIL=2057;
SM_SENDUSEITEMS=2058;
SM_WEIGHTCHANGED=2059;
SM_GOLDCHANGED=2060;
SM_FEATURECHANGED=2061;
SM_CHARSTATUSCHANGED=2062;
SM_CLEAROBJECTS=2063;
SM_EAT_OK=2064;
SM_EAT_FAIL=2065;
SM_ADDMAGIC=2066;
SM_SENDMYMAGIC=2067;
SM_DELMAGIC=2068;
SM_MAGIC_LVEXP=2069;
SM_DURACHANGE=2070;
SM_MERCHANTSAY=2071;
SM_MERCHANTDLGCLOSE=2072;
SM_SENDGOODSLIST=2073;
SM_SENDUSERMAKEDRUGITEMLIST=2074;
SM_SENDUSERSELL=2075;
SM_SENDUSERREPAIR=2076;
SM_SENDBUYPRICE=2077;
SM_USERSELLITEM_OK=2078;
SM_USERSELLITEM_FAIL=2079;
SM_SENDREPAIRCOST=2080;
SM_USERREPAIRITEM_OK=2081;
SM_USERREPAIRITEM_FAIL=2082;
SM_STORAGE_OK=2083;
SM_STORAGE_FULL=2084;
SM_STORAGE_FAIL=2085;
SM_SAVEITEMLIST=2086;
SM_TAKEBACKSTORAGEITEM_OK=2087;
SM_TAKEBACKSTORAGEITEM_FAIL=2088;
SM_TAKEBACKSTORAGEITEM_FULLBAG=2089;
SM_BUYITEM_SUCCESS=2090;
SM_BUYITEM_FAIL=2091;
SM_MAKEDRUG_SUCCESS=2092;
SM_MAKEDRUG_FAIL=2093;
SM_SENDDETAILGOODSLIST=2094;
SM_TEST=2095;
SM_GROUPMODECHANGED=2096;
SM_CREATEGROUP_OK=2097;
SM_CREATEGROUP_FAIL=2098;
SM_GROUPADDMEM_OK=2099;
SM_GROUPADDMEM_FAIL=2100;
SM_GROUPDELMEM_OK=2101;
SM_GROUPDELMEM_FAIL=2102;
SM_GROUPCANCEL=2103;
SM_GROUPMEMBERS=2104;
SM_OPENGUILDDLG=2105;
SM_SENDGUILDMEMBERLIST=2106;
SM_OPENGUILDDLG_FAIL=2107;
SM_CHANGEGUILDNAME=2124;
SM_GUILDADDMEMBER_OK=2126;
SM_GUILDADDMEMBER_FAIL=2127;
SM_GUILDDELMEMBER_OK=2128;
SM_GUILDDELMEMBER_FAIL=2129;
SM_GUILDRANKUPDATE_FAIL=2130;
SM_GUILDMAKEALLY_OK=2131;
SM_GUILDMAKEALLY_FAIL=2132;
SM_GUILDBREAKALLY_OK=2133;
SM_GUILDBREAKALLY_FAIL=2134;
SM_DEALTRY_FAIL=2108;
SM_DEALMENU=2109;
SM_DEALCANCEL=2110;
SM_DEALADDITEM_OK=2111;
SM_DEALADDITEM_FAIL=2112;
SM_DEALDELITEM_OK=2113;
SM_DEALDELITEM_FAIL=2114;
SM_DEALREMOTEADDITEM=2115;
SM_DEALREMOTEDELITEM=2116;
SM_DEALCHGGOLD_OK=2117;
SM_DEALCHGGOLD_FAIL=2118;
SM_DEALREMOTECHGGOLD=2119;
SM_DEALSUCCESS=2120;
SM_SENDUSERSTORAGEITEM=2121;
SM_READMINIMAP_OK=2122;
SM_READMINIMAP_FAIL=2123;
SM_SENDUSERSTATE=2125;
SM_BUILDGUILD_OK=2135;
SM_BUILDGUILD_FAIL=2136;
SM_MENU_OK=2137;
SM_DLGMSG=2138;
SM_DONATE_OK=2139;
SM_DONATE_FAIL=2140;
SM_ACTION_MIN=2200;
SM_ACTION_MAX=2499;
SM_ACTION2_MIN=2500;
SM_ACTION2_MAX=2999;
RCC_MERCHANT =1;
RCC_GUARD =2;
VERSION_NUMBER_0522=522;
DEFBLOCKSIZE =16;
UNITX = 48;
UNITY = 32;
LOGICALMAPUNIT =20;
HALFX = 24;
HALFY = 16;
ET_DIGOUTZOMBI =0;
ET_PILESTONES = 1;
ET_HOLYCURTAIN = 2;
ET_FIRE= 3;
ET_SCULPEICE = 4;
STATE_STONE_MODE =0;
STATE_OPENHEATH = 1;
MAXBAGITEM = 52;
DR_UP=0;
DR_UPRIGHT =1;
DR_RIGHT =2;
DR_DOWNRIGHT =3;
DR_DOWN =4;
DR_DOWNLEFT =5;
DR_LEFT =6;
DR_UPLEFT =7;
type
TDefaultMessage=packed record //Size=12
Ident :word;
Recog :integer; //识别码
Param :smallint;
Tag :smallint;
Series:smallint;
end;
//Ident=SM_DAYCHANGING
// Param=DayBright
// Tag=雾的浓度:0,1,2,3
TUserInfo=Record
Name:String[32];
Looks:integer;
StdMode:Integer;
Shape:Integer;
end;
TStdItem=record
Name:String[16]; //物品名称
Looks:integer; //外观,即Items.WIL中的图片索引
StdMode:integer; //0/1/2/3:药, 5/6:武器,10/11:盔甲,15:头盔,22/23:戒指,24/26:手镯,19/20/21:项链
Shape:integer;
AC:Integer;
MAC:integer;
Weight:integer;
DuraMax:integer;
NeedIdentify:byte;
DC,MC,SC:Integer;
Source:integer;
Need:integer;
NeedLevel:integer;
end;
PTClientItem=^TClientItem;
TClientItem=Record
s:TStdItem;
MakeIndex:Integer;
Dura:Integer;
DuraMax:Integer;
end;
TAbility= packed record
MP,MaxMP:Integer;
HP,MaxHP:integer;
Exp,MaxExp:Integer;
Level:Integer;
Weight,MaxWeight:Integer;
WearWeight,MaxWearWeight:Integer;
HandWeight,MaxHandWeight:Integer;
AC:Integer;
MAC:Integer;
DC:Integer;
MC,SC:Integer;
end;
PTChrMsg=^TChrMsg;
TChrMsg=Record
Ident:integer;
Dir:Integer;
X,Y:Integer;
State:integer;
feature:integer;
saying:string;
Sound:integer;
end;
TUserStateInfo=Record
UserName:String[32];
GuildName:String[32];
GuildRankName:String[32];
NameColor:Integer;
Feature:integer;
UseItems:Array[0..127] of TClientItem;
end;
TUserCharacterInfo=Record
Name:String;
Job:byte;
Hair:smallint;
level:Integer;
Sex:byte;
end;
TUserEntryInfo=Record
LoginId:String[16];
Password:String[16];
UserName:String[32];
SSNo:String[18];
Quiz:String[32];
Answer:String[32];
Phone:String[15];
EMail:String[64];
end;
TUserEntryAddInfo=Record
Quiz2:String[32];
Answer2:String[32];
MobilePhone:String[15];
BirthDay:String[16];
end;
PTDropItem=^TDropItem;
TDropItem=record
Id:Integer;
X,Y:Integer;
Looks:integer;
FlashTime:LongInt;
Name:String[16];
BoFlash:Boolean;
FlashStepTime:LongInt;
FlashStep:Integer;
end;
TDef=Record
Spell:integer;
DefSpell:integer;
EffectType:Integer;
MagicId:Integer;
Effect:Integer;
DelayTime:Integer;
MagicName:String[16];
MaxTrain:Array [0..255] of integer;
end;
PTClientMagic=^TClientMagic;
TClientMagic=Record
Key:Char;
Def:TDef;
Level:Integer;
CurTrain:Integer;
end;
TNakedAbility=Record
DC,MC,SC,AC,MAC:Integer;
HP,MP:Integer;
Hit:integer;
Speed:integer;
end;
TShortMessage=Record
Ident:Integer;
end;
TMessageBodyW=Record
Param1:integer;
Param2:integer;
Tag1:integer;
Tag2:integer;
end;
TCharDesc=Record
Feature:Integer;
Status:Integer;
end;
TMessageBodyWL=Record
lParam1,lParam2:longint;
lTag1,lTag2:longint;
end;
PTClientGoods=^TClientGoods;
TClientGoods=record
Name:string[16];
SubMenu:Integer;
Price:Integer;
Stock:integer;
Grade:integer;
end;
function MakeDefaultMsg (msg:smallint; Recog:integer; param, tag, series:smallint):TDefaultMessage;
function UpInt(i:double):integer;
Function RACEfeature(Feature:word):smallint;
Function HAIRfeature(Feature:word):byte;
Function DRESSfeature(Feature:word):byte;
Function APPRfeature(Feature:word):byte;
Function WEAPONfeature(Feature:word):byte;
function MakeFeature(Race:Word;Appr,Hair,Dress,Weapon:byte):Integer;
implementation
function MakeDefaultMsg (msg:smallint; Recog:integer; param, tag, series:smallint):TDefaultMessage;
begin
result.Ident:=Msg;
result.Param:=Param;
result.Tag:=Tag;
result.Series:=Series;
result.Recog:=Recog;
end;
function UpInt(i:double):integer;
begin
result:=Ceil(i);
end;
//人物Feature属性的分解和合成,共32位,高16位为Race和Appr,
// 低16位中,最左四位表示Hair,接下来6位表示Dress,最右6位表示Weapon。
// 当Race=0时,Dress mod 2 表示性别
// Race=0时武器也分男女,男的武器应该是偶数,女的是奇数
//*******对Feature的解释可以自己定义,但Race取值至少0..90,Appr:0..9
//*******Hair最多有6种发型(3600幅图片,每600幅图片一种发型),男女各3
//*******Dress的数量好象在Hum.WIL中表示,有多少种图片就有多少种服装,Hum.WIL可以扩展
//*******Weapon的数量见Weapon.WIL,有数万幅图片,同样的,每600幅对应一个Appr,分男女
//*********例如40800幅对应68种武器(男女合计)
Function RACEfeature(Feature:word):smallint;
begin
result:=Hiword(Feature) div 10;
end;
Function HAIRfeature(Feature:word):byte;
begin
result:=(LoWord(Feature) and $F000) shr 12 ; //1111000000000000
end;
Function DRESSfeature(Feature:word):byte;
begin
result:=(LoWord(Feature) and $3F00) shr 7; //0000111111000000
end;
Function WEAPONfeature(Feature:word):byte;
begin
result:=LoWord(Feature) and $3F; //0000000000111111
end;
Function APPRfeature(Feature:word):byte;
begin
result:=hiword(Feature) mod 10;
end;
function MakeFeature(Race:Word;Appr,Hair,Dress,Weapon:byte):Integer;
begin
result:=MakeLong(((Hair And $0F)shl 12) + ((Dress And $3F) shl 6) + (Weapon And $3F) ,Race*10+Appr);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -