www.pudn.com > Mir2Delphi.rar > grobal2.pas
unit Grobal2;
interface
uses
Math,windows;
Const
BUFFERSIZE =1024;
//版本号
// VERSION_NUMBER_0522 = 20010522;
VERSION_NUMBER_0522 = 20040522;
//客户端发送的命令
CM_SOFTCLOSE =0;
CM_QUERYUSERSTATE = 2;
CM_ADJUST_BONUS =60;
CM_QUERYUSERNAME = 80; //查询用户姓名
CM_QUERYBAGITEMS = 81; //查询包裹内容
CM_QUERYCHR = 100; //查询人物
CM_NEWCHR = 101; //新人物
CM_DELCHR = 102; //删除人物
CM_SELCHR = 103; //选择人物
CM_SELECTSERVER = 104; //选择服务器
///////////
//动作
CM_DROPITEM = 1000; //丢掉物品
CM_PICKUP = 1001; //拣东西
CM_OPENDOOR = 1002; //开门
CM_TAKEONITEM = 1003; //穿上/戴上/拿上 物品
CM_TAKEOFFITEM = 1004; //脱下物品
CM_EAT = 1006; //吃物品
CM_BUTCH = 1007; //
CM_MAGICKEYCHANGE = 1008; //改变魔法按键
CM_CLICKNPC = 1010; //点击NPC???
CM_MERCHANTDLGSELECT = 1011; // NPC Tag Click 选择商人功能窗口
CM_MERCHANTQUERYSELLPRICE = 1012; //查询出卖给商人的价格
CM_USERSELLITEM = 1013; //选择物品
CM_USERBUYITEM = 1014; //购买物品
CM_USERGETDETAILITEM = 1015; //????????????????????????
CM_DROPGOLD = 1016; //丢掉金币
CM_LOGINNOTICEOK = 1018; //进入游戏窗口确定按钮
//编组相关
CM_GROUPMODE = 1019; //编组模式
CM_CREATEGROUP = 1020; //创建编组
CM_ADDGROUPMEMBER = 1021; //添加编组成员
CM_DELGROUPMEMBER = 1022; //删除编组成员
//修理
CM_USERREPAIRITEM = 1023; //修理物品
CM_MERCHANTQUERYREPAIRCOST = 1024; //查询修理价格
//交易相关
CM_DEALTRY = 1025; //交易开始//////////////
CM_DEALADDITEM = 1026;//交易添加物品////////////
CM_DEALDELITEM = 1027; //交易删除物品////////////
CM_DEALCANCEL = 1028; //交易取消/////////////
CM_DEALCHGGOLD = 1029;//交易改变金币////////////
CM_DEALEND = 1030;//交易完毕//////////////
CM_USERSTORAGEITEM = 1031; //用户存储物品
CM_USERTAKEBACKSTORAGEITEM = 1032; //从仓库取回物品
CM_WANTMINIMAP = 1033;
CM_USERMAKEDRUGITEM = 1034; //制作毒药物品
//行会相关
CM_OPENGUILDDLG = 1035; //打开行会窗口
CM_GUILDHOME = 1036; //行会主页
CM_GUILDMEMBERLIST = 1037; //行会成员列表
CM_GUILDADDMEMBER = 1038; //添加行会成员
CM_GUILDDELMEMBER = 1039; //删除行会成员
CM_GUILDUPDATENOTICE = 1040; //更新行会信息
CM_GUILDUPDATERANKINFO = 1041; //更新行会等级/排列信息????
CM_SPEEDHACKUSER = 1043;
CM_GUILDMAKEALLY = 1044; //行会结盟
CM_GUILDBREAKALLY = 1045; //行会解盟
///////////////
//登录有关的命令
CM_PROTOCOL = 2000;
CM_IDPASSWORD = 2001; //发送用户名/密码
CM_ADDNEWUSER = 2002;
CM_CHANGEPASSWORD = 2003; //更改密码
CM_UPDATEUSER = 2004;
/////////////////////
///待定...
CM_THROW = 3005; //投掷
CM_RUSHKUNG = 3007; //
//.......end..
CM_RUSH = 3006; //
CM_FIREHIT = 3008; //烈火
CM_BACKSTEP = 3009; //走路不成功????
CM_TURN = 3010; //转
CM_WALK = 3011; //走路
CM_SITDOWN = 3012; //挖
CM_RUN = 3013; //跑
CM_HIT = 3014; //砍
CM_HEAVYHIT = 3015;
CM_BIGHIT = 3016;
CM_SPELL = 3017; //魔法
CM_POWERHIT = 3018; //攻杀
CM_LONGHIT = 3019; //刺杀
CM_DIGUP = 3020; //挖取
CM_DIGDOWN = 3021; //挖下?????????
CM_FLYAXE = 3022; //???????????????
CM_LIGHTING = 3023; //天亮?????????????
CM_WIDEHIT = 3024; //半月
CM_SAY = 3030; //说话
CM_RIDE = 3031; //骑乘???
//////////
//装备项目
U_DRESS =0; //衣服
U_WEAPON =1; //武器
U_RIGHTHAND =2; //右手
U_NECKLACE =3; //项链
U_HELMET =4; //头盔
U_ARMRINGL =5; //左手戒指
U_ARMRINGR =6; //右手戒指
U_RINGL =7; //左戒指
U_RINGR =8; //右戒指
////////以上为整理后的数据..
/////////////////////////////////////////////////
///////////////////////////////
//服务器端发送的命令
{+//****************************************** }
{ #1. Server To Client Message }
{=******************************************** }
////////////////////
////////////////////////
//待定..start
SM_SPACEMOVE_HIDE =1041;
SM_SPACEMOVE_HIDE2=1042;
SM_SPACEMOVE_SHOW =1043;
SM_SPACEMOVE_SHOW2=1044;
SM_MOVEFAIL =1045;
SM_BUTCH =1046;
SM_MAGICFIRE =1072;
SM_MAGICFIRE_FAIL = 1073;
SM_THROW =5;
SM_RUSHKUNG = 7; //
//.....end
SM_RUSH = 6; //
SM_FIREHIT = 8; //烈火
SM_BACKSTEP = 9; //走路不成功????
SM_TURN = 10; //转动方向
SM_WALK = 11; //走路
SM_SITDOWN = 12; //挖
SM_RUN = 13; //跑
SM_HIT = 14; //攻击
SM_HEAVYHIT = 15;
SM_BIGHIT =16;
SM_SPELL = 17; //使用魔法
SM_POWERHIT = 18; //攻杀
SM_LONGHIT = 19; //刺杀
SM_DIGUP = 20; //挖取
SM_DIGDOWN = 21; //挖下?????????
SM_FLYAXE = 22; //???????????????
SM_LIGHTING = 23; //天亮?????????????
SM_WIDEHIT = 24; //半月
SM_DISAPPEAR = 30; //物品消失??????
SM_STRUCK = 31; //
SM_DEATH = 32; //
SM_SKELETON = 33; // SM_DEATH 尸骨??尸体
SM_NOWDEATH = 34; //
SM_HEAR = 40; //听到说话
SM_FEATURECHANGED = 41; //容貌??特征??改变???????????
SM_USERNAME = 42; //用户名??玩家名???????
SM_WINEXP = 44; //胜利指数???杀怪获得的经验值???????????????
SM_LEVELUP = 45; //等级提升
SM_DAYCHANGING = 46; //日期正在改变????
SM_LOGON = 50; //登录注册
SM_NEWMAP = 51; //新地图
SM_ABILITY = 52; //能力
SM_HEALTHSPELLCHANGED = 53; //红血兰血 改变
SM_MAPDESCRIPTION = 54;//地图形容,地图描述
/////////////
SM_SYSMESSAGE = 100; //系统消息
SM_GROUPMESSAGE = 101; //组队消息
SM_CRY = 102; //喊
SM_WHISPER = 103; //私聊
SM_GUILDMESSAGE = 104; //行会信息
SM_ADDITEM = 200; //添加物品
// SM_ADDITEM = 165; //添加物品
SM_BAGITEMS = 201; //包裹物品
// SM_BAGITEMS = 166; //包裹物品
SM_DELITEM = 202; //删除物品????
// SM_DELITEM = 167; //删除物品????
SM_UPDATEITEM = 203;
SM_ADDMAGIC = 210; //添加魔法
SM_SENDMYMAGIC= 211; //我所会的魔法
SM_DELMAGIC = 212;
//登录、新帐号、新角色、查询角色等
SM_VERSION_AVAILABLE = 500; //
SM_CERTIFICATION_FAIL = 501; //
SM_ID_NOTFOUND = 502; //ID未发现,用户名错误
SM_PASSWD_FAIL = 503; //密码错误
SM_NEWID_SUCCESS = 504; //创建新ID成功
SM_NEWID_FAIL = 505; //新ID失败
SM_CHGPASSWD_SUCCESS = 506; //更改密码成功
SM_CHGPASSWD_FAIL = 507; //更改密码失败
SM_QUERYCHR = 520; //查询人物(2人窗口)
SM_NEWCHR_SUCCESS = 521; //创建人物成功
SM_NEWCHR_FAIL = 522; //创建人物失败
SM_DELCHR_SUCCESS = 523; //删除人物成功
SM_DELCHR_FAIL = 524; //删除人物失败
SM_STARTPLAY = 525; //开始游戏
SM_STARTFAIL = 526; //进入游戏失败
SM_QUERYCHR_FAIL = 527; //查询人物失败
SM_OUTOFCONNECTION = 528; //连接已断开
SM_PASSOK_SELECTSERVER = 529; //用户名/密码 验证通过
SM_SELECTSERVER_OK = 530; //服务器选择成功
SM_NEEDUPDATE_ACCOUNT = 531; //需要更新_说明????
SM_UPDATEID_SUCCESS = 532; //更新ID成功?????
SM_UPDATEID_FAIL = 533; //更新ID失败???????
/////////////
SM_DROPITEM_SUCCESS = 600; //丢弃物品成功
SM_DROPITEM_FAIL = 601; //丢弃物品失败
SM_ITEMSHOW = 610; //显示物品
SM_ITEMHIDE = 611; //地上的物品消失
SM_OPENDOOR_OK = 612; //开门成功
SM_OPENDOOR_LOCK = 613; //
SM_CLOSEDOOR = 614; //
SM_TAKEON_OK = 615; //穿上戴上成功
SM_TAKEON_FAIL = 616; //穿失败
SM_TAKEOFF_OK = 619; //脱下成功
SM_TAKEOFF_FAIL = 620; //脱下失败
SM_SENDUSEITEMS = 621; //身上穿戴物品
SM_WEIGHTCHANGED = 622; //背包重量改变
SM_CLEAROBJECTS = 633; //清除对象??????????
SM_CHANGEMAP = 634; //地图改变
SM_EAT_OK = 635; //吃物品成功
SM_EAT_FAIL = 636; //吃物品失败
// SM_BUTCH = 637; //
// SM_MAGICFIRE = 638; //魔法火?????????????
// SM_MAGICFIRE_FAIL = 639; //魔法火失败?????????????
SM_MAGIC_LVEXP = 640; //魔法等级
SM_DURACHANGE = 642;
SM_MERCHANTSAY = 643; //商人说话
SM_MERCHANTDLGCLOSE = 644; //商人窗口关闭
SM_SENDGOODSLIST = 645; //货物列表
SM_SENDUSERSELL = 646; //用户出售
SM_SENDBUYPRICE = 647; //购买价格
SM_USERSELLITEM_OK = 648; //用户出售物品成功
SM_USERSELLITEM_FAIL = 649; //用户出售物品失败
SM_BUYITEM_SUCCESS = 650; //用户购买物品成功
SM_BUYITEM_FAIL = 651; //用户购买失败
SM_SENDDETAILGOODSLIST = 652; //详细货物列表
SM_GOLDCHANGED = 653; //金币改变
SM_CHANGELIGHT = 654; //改变亮度????
SM_CHANGENAMECOLOR = 656; //改变宝宝颜色?????
SM_CHARSTATUSCHANGED = 657;
SM_SENDNOTICE = 658; //进入游戏弹出窗口
SM_CREATEGROUP_OK = 660; //创建编组成功
SM_CREATEGROUP_FAIL = 661; //创建编组失败
SM_GROUPCANCEL = 666; //编组取消??????????
SM_GROUPMEMBERS = 667; //编组成员
/////////////
SM_SENDUSERREPAIR=668;//2076;
SM_DEALREMOTEADDITEM = 682;//2115;
SM_DEALREMOTEDELITEM = 683;//2116;
SM_SENDUSERSTORAGEITEM=700;//2121;
SM_SAVEITEMLIST = 704;//2086;
SM_AREASTATE = 708; //地区状态
// SM_DELITEMS = 203; //删除物品??????
SM_DELITEMS = 709; //删除物品??????
SM_READMINIMAP_OK=710;//2122;
SM_READMINIMAP_FAIL=711;//2123;
SM_SENDUSERMAKEDRUGITEMLIST=712;
SM_CHANGEGUILDNAME = 750; //改变行会名称
SM_SENDUSERSTATE=751;
SM_SUBABILITY = 752;
SM_OPENGUILDDLG = 753; //打开行会窗口
SM_OPENGUILDDLG_FAIL = 754; //打开行会窗口失败
SM_SENDGUILDHOME = 755; //行会主页
SM_SENDGUILDMEMBERLIST = 756; //行会成员列表
SM_GUILDADDMEMBER_OK = 757; //行会添加成员成功
SM_GUILDADDMEMBER_FAIL = 758; //行会添加成员失败
SM_GUILDDELMEMBER_OK = 759; //行会删除成员成功
SM_GUILDDELMEMBER_FAIL = 760; //行会删除成员失败
SM_GUILDRANKUPDATE_FAIL = 761; //行会等级/排列更新失败
SM_BUILDGUILD_OK = 762; //创建行会成功
SM_BUILDGUILD_FAIL = 763; //创建行会失败
SM_MYSTATUS = 766;//131;
SM_GUILDMAKEALLY_OK = 768; //创建行会同盟成功
SM_GUILDMAKEALLY_FAIL = 769; //创建行会同盟失败
SM_GUILDBREAKALLY_OK = 770; //删除行会同盟成功
SM_GUILDBREAKALLY_FAIL = 771; //删除行会同盟失败
SM_DLGMSG = 772; //窗口消息????弹出窗口???????
/////////////
SM_RECONNECT =802;
SM_SHOWEVENT = 804; //显示事件????????
SM_HIDEEVENT = 805; //隐藏事件?????????
SM_TIMECHECK_MSG = 810;
SM_ADJUST_BONUS = 811;
SM_OPENHEALTH = 1100; //打开健康????????
SM_CLOSEHEALTH = 1101; //关闭健康???????
SM_CHANGEFACE = 1104; //
SM_RIDEHORSE = 1300; //骑马
SM_MONSTERSAY = 1501; //怪物说话
////////////////////////
////////////////////////////
//以下未处理..
SM_VERSION_FAIL =121;
SM_LAMPCHANGEDURA=241;
SM_ALIVE =263;
SM_INSTANCEHEALGUAGE=314;
SM_BREAKWEAPON=315;
//对话消息
// SM_SPACEMOVE_HIDE =1041;
// SM_SPACEMOVE_HIDE2=1042;
// SM_SPACEMOVE_SHOW =1043;
// SM_SPACEMOVE_SHOW2=1044;
// SM_MOVEFAIL =1045;
SM_HIDE =1224;
SM_GHOST=1225;
SM_EXCHGTAKEON_OK=2056;
SM_EXCHGTAKEON_FAIL=2057;
SM_SENDREPAIRCOST=2080;
SM_USERREPAIRITEM_OK=2081;
SM_USERREPAIRITEM_FAIL=2082;
SM_STORAGE_OK=2083;
SM_STORAGE_FULL=2084;
SM_STORAGE_FAIL=2085;
SM_TAKEBACKSTORAGEITEM_OK=2087;
SM_TAKEBACKSTORAGEITEM_FAIL=2088;
SM_TAKEBACKSTORAGEITEM_FULLBAG=2089;
SM_MAKEDRUG_SUCCESS=2092;
SM_MAKEDRUG_FAIL=2093;
SM_TEST=2095;
SM_GROUPMODECHANGED=2096;
SM_GROUPADDMEM_OK=2099;
SM_GROUPADDMEM_FAIL=2100;
SM_GROUPDELMEM_OK=2101;
SM_GROUPDELMEM_FAIL=2102;
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_DEALCHGGOLD_OK=2117;
SM_DEALCHGGOLD_FAIL=2118;
SM_DEALREMOTECHGGOLD=2119;
SM_DEALSUCCESS=2120;
SM_MENU_OK=2137;
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;
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
{
+0 Recog: dword
+4 Ident: word
+6 Param: word;
+8 Tag: word;
+A Series: word;
}
{ //这是原来的定义:
TDefaultMessage=packed record //Size=12
Ident :word;
Recog :integer; //识别码
Param :smallint;
Tag :smallint;
Series:smallint;
end;
}
//这是新的定义
TDefaultMessage=packed record //Size=12
Recog :integer; //识别码
Ident :word;
Param :smallint;
Tag :smallint;
Series:smallint;
end;
//Ident=SM_DAYCHANGING
// Param=DayBright
// Tag=雾的浓度:0,1,2,3
TUserInfo = packed 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;
}
//应当有44字节
TSTDITEM = packed record
// Num:byte; //名字的有效个数//源程序中这里应为name:array[0..14] of char;
// Name: array[0..13] of char;
Name: String[14];
Shape: BYTE;//Word //外形
StdMode: Byte; //物品种类(<=3时可以在快捷栏上显示)
Weight: Word; //重量
Source: Word;//
AniCount: Word;//BYTE; //
Looks: Word;//Integer; //
// SpecialPower: BYTE; //特殊用途
NeedIdentify: BYTE; //需要鉴别
DuraMax: Word;//Integer; //最大持久
AC: Word; //防
MAC: Word; //魔防
DC: Word; //攻击
MC: Word; //魔
SC: Word; //道
Need: BYTE; //
NeedLevel: BYTE; //需要等级
Price: Integer; //价格
end;
{
TClientItem=Record
s:TStdItem;
MakeIndex:Integer;
Dura:Integer;
DuraMax:Integer;
end;
}
PTClientItem=^TClientItem;
TCLIENTITEM = packed record
s: TSTDITEM;
MakeIndex: Integer; //
Dura: Word; //持久
DuraMax: Word; //最大持久
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= packed Record
Ident:integer;
Dir:Integer;
X,Y:Integer;
State:integer;
feature:integer;
saying:string;
Sound:integer;
end;
{
TChrMsg=Record
Ident:Word;
Dir:Word;
X,Y:Word;
State:Word;
feature:Word;
saying:string;
Sound:Word;
end;
}
TUserStateInfo= packed Record
UserName:String[32];
GuildName:String[32];
GuildRankName:String[32];
NameColor:Integer;
Feature:integer;
UseItems:Array[0..127] of TClientItem;
end;
TUserCharacterInfo= packed Record
Name:String;
Job:byte;
Hair:smallint;
level:Integer;
Sex:byte;
end;
TUserEntryInfo= packed 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= packed Record
Quiz2:String[32];
Answer2:String[32];
MobilePhone:String[15];
BirthDay:String[16];
end;
PTDropItem=^TDropItem;
TDropItem= packed 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;
}
TSTANDARDMAGIC = packed record //魔法
MagicID: Word; //编号
Num:byte; //这里应为MagicName:Array[0..13] of char //num 是我自己加的,表示后面名字的有效字符数.
MagicName: Array[0..12] of Char; //名称 12
EffectType: BYTE;
Effect: BYTE; //效果
Spell: Word; //魔法
MinPower: Word; //
Need: Array[0..3] of BYTE; //升级需要的等级
MaxTrain: Array[0..3] of Integer; //锻炼
MaxTrainLevel: BYTE; //最大锻炼等级
Job: BYTE;
DelayTime: Integer; //延迟时间
DefSpell: BYTE; //默认
DefMinPower: BYTE;
MaxPower: Word;
DefMaxPower: BYTE;
szDesc: Array[0..15] of Char;
end;
TCLIENTMAGIC = packed record //魔法
Key: Char; //按键
level:byte; //等级
CurTrain:integer; //当前经验
Def: TSTANDARDMAGIC;
end;
TNakedAbility=packed Record
DC,MC,SC,AC,MAC:Integer;
HP,MP:Integer;
Hit:integer;
Speed:integer;
end;
{
TShortMessage=Record
Ident:Integer;
end;
}
TShortMessage=packed record
Ident :WORD;
Msg :WORD;
end;
TCharDesc= packed Record
Feature:Integer;
Status:Integer;
end;
{//lorran modi 2004-07-12
TMessageBodyW=Record
Param1:integer;
Param2:integer;
Tag1:integer;
Tag2:integer;
end;
}
TMESSAGEBODYW = packed record
Param1: Word;
Param2: Word;
Tag1: Word;
Tag2: Word;
end ;
TMessageBodyWL=packed Record
lParam1,lParam2:longint;
lTag1,lTag2:longint;
end;
PTClientGoods=^TClientGoods;
TClientGoods=packed record
Name:string[16];
SubMenu:Integer;
Price:Integer;
Stock:integer;
Grade:integer;
end;
type
TFEATURE = packed record
Gender: BYTE;
Weapon: BYTE;
Dress: BYTE;
Hair: BYTE;
end;
function MakeDefaultMsg (msg:smallint; Recog:integer; param, tag, series:smallint):TDefaultMessage;
function UpInt(i:double):integer;
Function RACEfeature(Feature:Integer):byte;
Function WEAPONfeature(Feature:Integer):byte;
Function HAIRfeature(Feature:Integer):byte;
Function DRESSfeature(Feature:Integer):byte;
Function APPRfeature(Feature:Integer):Word;
//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:byte;Appr,Hair,Dress,Weapon:byte):Integer;
implementation
{
TDefaultMessage=packed record //Size=12
Ident :word;
Recog :integer; //识别码
Param :smallint;
Tag :smallint;
Series:smallint;
end;
+0 Recog: dword
+4 Ident: word
+6 Param: word;
+8 Tag: word;
+A Series: word;
}
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种武器(男女合计)
{ //???????
TFEATURE = record
Race: BYTE;
Weapon: BYTE;
Hair: BYTE;
Dress: BYTE;
end;
}
//$0602 1600 =100800000
Function RACEfeature(Feature:Integer):byte;
begin
result:=(LoByte(Loword(Feature)) and $3F);
end;
Function WEAPONfeature(Feature:Integer):byte;
begin
result:=HiByte(LoWord(Feature));
end;
Function HAIRfeature(Feature:Integer):byte;
begin
result:=LoByte(HiWord(Feature));
end;
Function DRESSfeature(Feature:Integer):byte;
begin
result:=HiByte(HiWord(Feature));
end;
Function APPRfeature(Feature:Integer):Word;
begin
result:=hiword(Feature) ;
// result:=Loword(Feature) ;
end;
function MakeFeature(Race:byte;Appr,Hair,Dress,Weapon:byte):Integer;
begin
result:=MakeLong( MakeWord(Race,weapon),MakeWord(Hair,Dress));
end;
end.