📄 char.c
字号:
------------------------------------------------------------*/
static BOOL CHAR_sendWatchEvent_sendCheck( int objindex, int index,
int recvindex, int chac)
{
/* 愤坌互NPC匹锹澎手NPC及凛 仃月 */
if( OBJECT_getType( objindex) == OBJTYPE_CHARA &&
CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER &&
CHAR_getInt(recvindex, CHAR_WHICHTYPE )
!= CHAR_TYPEPLAYER )
{
return FALSE;
}
/* 平乓仿动陆及watch 反民尼永弁 仄卞蕞 */
if( OBJECT_getType( objindex) != OBJTYPE_CHARA) {
return TRUE;
}
/*
* 愤坌尺及汹五及 反 仄卞允月
*/
if( index == recvindex && chac == CHAR_ACTWALK ) {
return FALSE;
}
if( CHAR_getInt( recvindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {
/* 爵 及谛卞反 蛲分井日霜耨仄卅中 */
if( CHAR_getWorkInt( recvindex,CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE)
{
return FALSE;
}
/* 失弁扑亦件元扎 中凛 */
if( CHAR_getWorkInt( index, CHAR_WORKACTION) == -1 ) {
if( OBJECT_getType(objindex) == OBJTYPE_CHARA) {
/* 元由□ 奴分匀凶日
* 褪动陆反职及丢件田□卞汹五毛霜耨仄卅中
*/
if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE )
== CHAR_PARTY_CLIENT &&
CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE)
!= CHAR_PARTY_NONE &&
chac == CHAR_ACTWALK )
{
int found = FALSE;
int loop;
/* 阂毛譬屯月 */
for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) {
int partycharaindex = CHAR_getPartyIndex( recvindex, loop);
/* 中凶平乓仿互愤坌及由□ 奴及阂分匀凶 */
if( partycharaindex == index ) {
found = TRUE;
break;
}
}
if( found ) return FALSE;
}
/* 褪反阂及STAND毛霜耨仄卅中 */
if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE)
== CHAR_PARTY_CLIENT &&
CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE)
== CHAR_PARTY_LEADER &&
chac == CHAR_ACTSTAND)
{
int found = FALSE;
int loop;
/* 阂毛譬屯月 */
for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) {
int partycharaindex
= CHAR_getWorkInt( recvindex,
CHAR_WORKPARTYINDEX1+loop);
/* STAND仄凶平乓仿互愤坌及由□ 奴及阂分匀凶 */
if( partycharaindex == index ) {
found = TRUE;
break;
}
}
if( found ) return FALSE;
}
}
}
}
return TRUE;
}
void CHAR_sendWatchEvent( int objindex, int chac, int* opt,
int optlen,BOOL myflg )
{
int i;
int j;
int x=0,y=0,dir=0;
int floor;
int watchopt[32];
int watchoptlen=0;
typedef void (*WATCHF)(int,int,CHAR_ACTION,int,int,int,int*,int);
int index;
if( !CHECKOBJECTUSE(objindex) )return;
index = OBJECT_getIndex( objindex);
switch( OBJECT_getType(objindex) ){
case OBJTYPE_CHARA:
for( i=0; i<optlen ; i++ ) {
watchopt[i] = opt[i];
}
watchoptlen = optlen;
dir = CHAR_getInt(index,CHAR_DIR);
break;
case OBJTYPE_ITEM:
for( i=0; i<optlen ; i++ ) {
watchopt[i] = opt[i];
}
watchoptlen = optlen;
dir = 0;
break;
case OBJTYPE_GOLD:
watchopt[0] = index;
watchoptlen = 1;
dir = 0;
break;
default:
return;
}
x = OBJECT_getX(objindex);
y = OBJECT_getY(objindex);
floor = OBJECT_getFloor(objindex);
for( i=x-CHAR_DEFAULTSEESIZ/2 ; i<=x+CHAR_DEFAULTSEESIZ/2 ; i++ ){
for( j=y-CHAR_DEFAULTSEESIZ/2 ; j<=y+CHAR_DEFAULTSEESIZ/2 ; j ++ ){
OBJECT object;
for( object = MAP_getTopObj(floor,i,j) ; object ;
object = NEXT_OBJECT(object) )
{
int receiveobjindex = GET_OBJINDEX(object);
int recvindex = OBJECT_getIndex( receiveobjindex);
WATCHF watchfunc=NULL;
switch( OBJECT_getType(receiveobjindex) ){
case OBJTYPE_CHARA:
/* 愤坌丐化匹反霜耨仄卅中白仿弘互 匀化中月凛 仃月 */
if( index == recvindex && myflg == FALSE ) {
break;
}
/* watch 奶矛件玄毛粟仇允井升丹井职卞民尼永弁允月 */
if( !CHAR_sendWatchEvent_sendCheck( objindex,
index, recvindex ,
chac
))
{
break;
}
watchfunc =(WATCHF)CHAR_getFunctionPointer(
OBJECT_getIndex(receiveobjindex),
CHAR_WATCHFUNC);
break;
case OBJTYPE_ITEM:
watchfunc = (WATCHF)ITEM_getFunctionPointer(
OBJECT_getIndex(receiveobjindex),
ITEM_WATCHFUNC);
break;
case OBJTYPE_NOUSE:
case OBJTYPE_GOLD:
#ifdef _DEL_DROP_GOLD
GOLD_DeleteTimeCheckOne( receiveobjindex);
#endif
default:
break;
}
if( watchfunc == NULL )continue;
watchfunc( receiveobjindex, objindex, chac, x, y, dir,
watchopt, watchoptlen );
}
}
}
}
/*====================旦平伙====================*/
/*------------------------------------------------------------
* 旦平伙失永皿匹五月方皿夫玄戊伙毛仄扎屯月[
* 娄醒
* charaindex int 平乓仿奶件犯永弁旦
* 忒曰袄
* 岳 TRUE(1)
* 撩 ( 端卞霜日卅井匀凶日巨仿□手殖引木月) FALSE(0)
------------------------------------------------------------*/
BOOL CHAR_Skillupsend(int charaindex )
{
#if 1
// 旦玄□件巨奶斥迕卞 凳仄凶手及
int point;
int fd;
if( !CHAR_CHECKINDEX(charaindex) )return FALSE;
// 中仁勾禾奶件玄失永皿匹五月井
point = CHAR_getInt( charaindex, CHAR_SKILLUPPOINT );
fd = getfdFromCharaIndex(charaindex);
lssproto_SKUP_send(fd, point );
return TRUE;
#else
char sendbuf[128];
// 仇切日反LS2凛及手及
if(SKILL_getUpableSkillID(charaindex,sendbuf,sizeof(sendbuf))){
int fd;
fd = getfdFromCharaIndex(charaindex);
if( fd != -1 && sendbuf[0] != '\0' ){
lssproto_SKUP_send(fd,sendbuf);
return TRUE;
}
}
#endif
return FALSE;
}
/*------------------------------------------------------------
* 旦平伙失永皿允月
* 娄醒
* charaindex int 平乓仿奶件犯永弁旦
* skillid int 旦平伙ID
* 忒曰袄
* 卅仄
------------------------------------------------------------*/
void CHAR_SkillUp( int charaindex, int skillid )
{
if( !CHAR_CHECKINDEX(charaindex) )return;
/*韶氏匹中凶日匹五卅中 */
if( CHAR_getFlg(charaindex,CHAR_ISDIE) )return;
{
int SkUpTbl[] = { CHAR_VITAL, CHAR_STR, CHAR_TOUGH, CHAR_DEX };
int SendTbl[] = { CHAR_P_STRING_VITAL|CHAR_P_STRING_MAXHP|CHAR_P_STRING_DEF,
CHAR_P_STRING_STR|CHAR_P_STRING_MAXHP|CHAR_P_STRING_ATK,
CHAR_P_STRING_TOUGH|CHAR_P_STRING_MAXHP|CHAR_P_STRING_DEF,
CHAR_P_STRING_DEX|CHAR_P_STRING_MAXHP|CHAR_P_STRING_ATK|CHAR_P_STRING_QUICK
};
int cnt;
// 区民尼永弁
if( skillid < 0 || skillid >= 4 ){
return;
}
// 引分由仿丢□正失永皿匹五月井"
cnt = CHAR_getInt(charaindex,CHAR_SKILLUPPOINT);
if( cnt <= 0 )return;
CHAR_setInt( charaindex,CHAR_SKILLUPPOINT,cnt-1);
CHAR_setInt( charaindex, SkUpTbl[skillid], CHAR_getInt( charaindex, SkUpTbl[skillid] ) + 1*100 );
CHAR_complianceParameter(charaindex);
CHAR_send_P_StatusString( charaindex, SendTbl[skillid]);
}
CHAR_PartyUpdate( charaindex, CHAR_N_STRING_MAXHP );
}
INLINE void CHAR_getDXDY( int dir , int* dx, int* dy )
{
static POINT CHAR_dxdy[8]=
{
{ 0,-1}, /* */
{ 1,-1}, /* */
{ 1, 0}, /* */
{ 1, 1}, /* */
{ 0, 1}, /* */
{-1, 1}, /* */
{-1, 0}, /* */
{-1,-1}, /* */
};
VALIDATEDIR(dir);
if( dx )*dx = CHAR_dxdy[dir].x;
if( dy )*dy = CHAR_dxdy[dir].y;
}
INLINE int CHAR_getDX( int dir )
{
int tmp;
CHAR_getDXDY( dir,&tmp,NULL);
return tmp;
}
INLINE int CHAR_getDY( int dir )
{
int tmp;
CHAR_getDXDY( dir,NULL,&tmp);
return tmp;
}
/*------------------------------------------------------------
* 元穴旦及平乓仿弁正□毛 月[
* 娄醒
* objbuf int* object 匹及 index 毛医 允月
* 田永白央
* siz int objbuf 及 扔奶术
* ff int 白夫失
* fx int x
* fy int y
* 忒曰袄
* 窒蜊平乓仿互中月井[
------------------------------------------------------------*/
int CHAR_getSameCoordinateObjects(int* objbuf, int siz,int ff, int fx, int fy)
{
OBJECT object;
int findobjnum=0;
for( object = MAP_getTopObj(ff,fx,fy) ; object ;
object = NEXT_OBJECT(object ) ){
int objindex = GET_OBJINDEX(object);
if( siz <= findobjnum )break;
if( OBJECT_getType(objindex) != OBJTYPE_NOUSE )
objbuf[findobjnum++] = objindex;
}
return findobjnum;
}
/*====================平乓仿及树 毛 月烟及楮醒====================*/
/*左皿扑亦件犯□正及 侬 毛忡绣允月楮醒*/
static char CHAR_optiondataString[STRINGBUFSIZ];
/*------------------------------------------------------------
* 左皿扑亦件迕及 侬 毛综月[
* level, showstring , 熔及醒 , 飓 寞} 窒荚夫弘奶件仄凶井[
* 弁仿旦[
* 娄醒
* ch Char* 平乓仿犯□正
* 忒曰袄
* char* static 卅 毛忒允及匹戚荚及裟太请仄及凛卞反 互
* 凳今木化中月[娄醒毛公及引引忡绣仄卅中仪[
------------------------------------------------------------*/
char* CHAR_makeOptionString( Char* ch )
{
char escapeshowstring[256];
char *showstr = MAP_getfloorShowstring(ch->data[CHAR_FLOOR]);
if( ! showstr ){
CHAR_optiondataString[0] = '\0';
return CHAR_optiondataString;
} else {
#if 0 /* 动票反LS2酷 匹丐月 */
snprintf( CHAR_optiondataString,
sizeof( CHAR_optiondataString ),
"%d|%s|1|%d|%d",
ch->data[CHAR_LV],
makeEscapeString( showstr ,
escapeshowstring,sizeof(escapeshowstring) ),
ch->data[CHAR_BASEIMAGENUMBER],
ch->data[CHAR_LOGINCOUNT]);
#endif
/* 动票反StoneAge 酷 匹丐月[
dataplace|faceimg|level|hp|str|def|dex|charm|dp|earth|water|fire|wind|login|Name|Place
午卅月[
*/
{
snprintf( CHAR_optiondataString,
sizeof( CHAR_optiondataString ),
"%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%s|%s",
ch->data[CHAR_DATAPLACENUMBER],
ch->data[CHAR_FACEIMAGENUMBER],
ch->data[CHAR_LV],
ch->workint[CHAR_WORKMAXHP],
ch->workint[CHAR_WORKATTACKPOWER],
ch->workint[CHAR_WORKDEFENCEPOWER],
ch->workint[CHAR_WORKQUICK],
ch->workint[CHAR_WORKFIXCHARM],
ch->data[CHAR_DUELPOINT], /* dp, FIXME */
ch->workint[CHAR_WORKFIXEARTHAT],
ch->workint[CHAR_WORKFIXWATERAT],
ch->workint[CHAR_WORKFIXFIREAT],
ch->workint[CHAR_WORKFIXWINDAT],
ch->data[CHAR_LOGINCOUNT],
ch->string[CHAR_NAME].string,
makeEscapeString( showstr ,
escapeshowstring,
sizeof(escapeshowstring) )
);
}
}
return CHAR_optiondataString;
}
static char CHAR_statusSendBuffer[STRINGBUFSIZ];
char* CHAR_makeStatusString( int index, char* category )
{
char c = tolower( category[0] );
int strlength=0;
if( !CHAR_CHECKINDEX( index ) ) return "\0";
if( category == "\0" ){
CHAR_statusSendBuffer[0] = '\0';
return CHAR_statusSendBuffer;
}
switch( c ){
case 'p':
{
int i;
int getCharDataArray[]= {
CHAR_NAME,
CHAR_OWNTITLE,
//CHAR_FMNAME,
};
int exp = CHAR_getInt(index,CHAR_EXP );
int maxexp = CHAR_GetLevelExp( index, CHAR_getInt( index, CHAR_LV ) + 1);
int attr[4];
for( i = 0; i < 4; i ++ ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -