📄 npcutil.c
字号:
}
if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf))
== NULL )
{
return NULL;
}
bigcnt = 0;
insert = 0;
for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) {
int curEnemy;
int et_array;
char data[128];
ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data));
if( ret == FALSE) {
break;
}
curEnemy = ENEMY_getEnemyArrayFromId( atoi( data));
if( !ENEMY_CHECKINDEX( curEnemy) ) continue;
et_array = ENEMYTEMP_getEnemyTempArray( curEnemy );
/* 扔奶术互 五中及互中凶凛及啃及岈太赘尹 */
if( ENEMYTEMP_getInt( et_array, E_T_SIZE ) == E_T_SIZE_BIG) {
if( bigcnt >= 5 ) {
continue;
}
/* 桦赭互 卞卅匀化中凶桦宁反 木晶尹月 */
if( insert > 4 ) {
int target_et_array;
int flg = FALSE;
int j;
/* 木月桦赭毛茧允 */
for( j = 0; j < 5; j ++ ) {
/* 坞中化月及反云井仄中 */
if( !ENEMY_CHECKINDEX( NPCUtil_enemytbl[j])) break;
target_et_array = ENEMYTEMP_getEnemyTempArray(
NPCUtil_enemytbl[j]);
/* 云井仄中 */
if( !ENEMYTEMP_CHECKINDEX( target_et_array)) break;
/* 木医歹木月 */
if( ENEMYTEMP_getInt( target_et_array, E_T_SIZE)
== E_T_SIZE_NORMAL )
{
flg = TRUE;
break;
}
}
if( !flg) continue;
NPCUtil_enemytbl[insert] = NPCUtil_enemytbl[j];
NPCUtil_enemytbl[j] = curEnemy;
}
else {
NPCUtil_enemytbl[insert] = curEnemy;
}
bigcnt ++;
}
else {
NPCUtil_enemytbl[insert] = curEnemy;
}
insert ++;
}
return NPCUtil_enemytbl;
}
/*==================动票}白仿弘申永玄楮溢=============================*/
/* 奶矛件玄蔽
* 申永玄白仿弘毛 化月分仃及质
*/
void NPC_EventSetFlg(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
#ifdef _TEACHER_SYSTEM
int iGetFame = 0;
#endif
/*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/
if(shiftbit==-1) return;
array = shiftbit / 32;
shift = shiftbit % 32;
point = CHAR_getInt( talker, CHAR_ENDEVENT+array);
// Arminius 8.24 prevent wash dp
if (!(point & (1 << shift))) {
// CoolFish: Family Adv 2001/8/4
AddFMAdv(talker, shiftbit);
#ifdef _TEACHER_SYSTEM
if(shiftbit < arraysizeof(FMAdvTbl)) iGetFame = FMAdvTbl[shiftbit];
#endif
}
#ifdef _TEACHER_SYSTEM
iGetFame /= 20; // 导师获得学生所得声望的 5% (1/20)
// 检查所得的声望有没有大於0
if(iGetFame > 0){
// 检查有没有导师
if(strlen(CHAR_getChar(talker,CHAR_TEACHER_ID)) > 0 && strlen(CHAR_getChar(talker,CHAR_TEACHER_NAME)) > 0){
int iPlayernum = CHAR_getPlayerMaxNum(),i;
char szMsg[128];
// 检查导师在不在线上
for(i=0;i<iPlayernum;i++){
if(CHAR_getCharUse(i) == FALSE) continue;
if(strcmp(CHAR_getChar(talker,CHAR_TEACHER_ID),CHAR_getChar(i,CHAR_CDKEY)) == 0 &&
strcmp(CHAR_getChar(talker,CHAR_TEACHER_NAME),CHAR_getChar(i,CHAR_NAME)) == 0){
float fGetFame = (float)iGetFame/100;
// 导师在线上
CHAR_setWorkInt(i,CHAR_WORK_GET_TEACHER_FAME,CHAR_getWorkInt(i,CHAR_WORK_GET_TEACHER_FAME) + iGetFame);
sprintf(szMsg,"获得学生 %s %.2f 点声望",CHAR_getChar(talker,CHAR_NAME),fGetFame);
CHAR_talkToCli(i,-1,szMsg,CHAR_COLORYELLOW);
break;
}
}
}
}
#endif
point = point | (1 << shift);
CHAR_setInt( talker, CHAR_ENDEVENT+array, point);
}
/* 奶矛件玄蔽
* 申永玄白仿弘互 匀化月井毛譬屯月
*
* 匀化中木壬 TRUE
* 卅仃木壬 FALSE
*/
BOOL NPC_EventCheckFlg(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
/*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/
if(shiftbit==-1) return FALSE;
array = shiftbit / 32;
shift = shiftbit % 32;
point = CHAR_getInt( talker, CHAR_ENDEVENT+array);
if( (point & (1<<shift)) == (1<<shift)){
return TRUE;
}
return FALSE;
}
/* 奶矛件玄
* 申永玄白仿弘毛 化月分仃及质
*/
void NPC_NowEventSetFlg(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
/*-- -1反白仿弘卞楮溢互卅中奶矛件玄 -*/
if(shiftbit==-1) return;
array = shiftbit / 32;
shift = shiftbit % 32;
point = CHAR_getInt( talker, CHAR_NOWEVENT+array);
point = point | (1 << shift);
point = CHAR_setInt( talker, CHAR_NOWEVENT+array,point);
}
void NPC_NowEventSetFlgCls(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
if(shiftbit==-1) return;
array = shiftbit / 32;
shift = shiftbit % 32;
point = CHAR_getInt( talker, CHAR_NOWEVENT+array);
point = point ^ (1<<shift);
CHAR_setInt(talker,CHAR_NOWEVENT+array,point);
}
BOOL NPC_NowEventCheckFlg(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
if(shiftbit==-1) return FALSE;
array = shiftbit / 32;
shift = shiftbit % 32;
point = CHAR_getInt( talker, CHAR_NOWEVENT+array);
if( (point & (1<<shift)) == (1<<shift)){
return TRUE;
}
return FALSE;
}
void NPC_NowEndEventSetFlgCls(int talker,int shiftbit)
{
int point=0;
int array;
int shift;
if(shiftbit==-1) return;
array = shiftbit / 32;
shift = shiftbit % 32;
if(NPC_NowEventCheckFlg(talker,shiftbit)==TRUE){
point = CHAR_getInt( talker, CHAR_NOWEVENT+array);
point = point ^ (1<<shift);
CHAR_setInt(talker,CHAR_NOWEVENT+array,point);
}
if(NPC_EventCheckFlg(talker,shiftbit)==TRUE){
point = CHAR_getInt( talker, CHAR_ENDEVENT+array);
point = point ^ (1<<shift);
CHAR_setInt(talker,CHAR_ENDEVENT+array,point);
}
}
#ifdef _NEW_MANOR_LAW
extern struct FM_POINTLIST fmpointlist;
#endif
// CoolFish: Family Adv 2001/7/29
void AddFMAdv(int talker, int shiftbit)
{
int fmadv = 0;
char buf[256];
#ifdef _NEW_MANOR_LAW
char buf1[16];
#endif
#ifdef _FMVER21
#else
if (CHAR_getInt(talker, CHAR_FMINDEX) < 0) return;
if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) <= 0 ) return;
if (strcmp(CHAR_getChar(talker, CHAR_FMNAME), "") == 0) return;
#endif
if (shiftbit >= arraysizeof(FMAdvTbl))
return;
else
fmadv = FMAdvTbl[shiftbit];
if (fmadv <= 0) return;
sprintf(buf, "%d", fmadv);
#ifdef _PERSONAL_FAME // Arminius 8.30: 家族个人声望
CHAR_earnFame(talker, fmadv);
#endif
#ifdef _NEW_MANOR_LAW
sprintf(buf1, "%d", CHAR_getInt(talker,CHAR_FAME));
#endif
#ifdef _FMVER21
if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) > 0
&& CHAR_getInt(talker, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY)
{
// CoolFish: 2001/10/03
int fd = getfdFromCharaIndex(talker);
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(talker, CHAR_FMNAME),
CHAR_getInt(talker, CHAR_FMINDEX),
CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI),
FM_FIX_FMADV, buf,
#ifndef _NEW_MANOR_LAW
"",
#else
buf1,
#endif
// CoolFish: 2001/10/03
CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
// CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);
#ifdef _NEW_MANOR_LAW
{
int i;
for(i=0;i<FAMILY_MAXHOME;i++){
// 任何一个庄园有在挑战排程,气势值一改变就向AC要最新气势资料
if(fmpointlist.fm_inwar[i]){
saacproto_ACShowTopFMList_send(acfd, FM_TOP_MOMENTUM);
break;
}
}
}
#endif
}
#ifdef _NEW_MANOR_LAW
// 未审核通过时只更新成员气势值
else if(CHAR_getInt(talker, CHAR_FMLEADERFLAG) == FMMEMBER_APPLY){
int fd = getfdFromCharaIndex(talker);
sprintf(buf,"%d",CHAR_getInt(talker,CHAR_FAME));
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(talker,CHAR_FMNAME),
CHAR_getInt(talker,CHAR_FMINDEX),
CHAR_getWorkInt(talker,CHAR_WORKFMINDEXI),
FM_FIX_FAME,buf,"",
CHAR_getWorkInt(talker,CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#endif
#else
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(talker, CHAR_FMNAME),
CHAR_getInt(talker, CHAR_FMINDEX),
CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI),
FM_FIX_FMADV, buf, "",
CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);
#endif
}
// Robin 0817 family shop
#if 0
int addNpcFamilyTax( int meindex, int talkerindex, int income )
{
int fmindex, fmindexi, village, i;
char fmname[256], token[256], buf2[64];
int clifd = CHAR_getWorkInt( talkerindex, CHAR_WORKFD );
sprintf( buf2, "%d", income );
for( i=0 ; i<FMPOINTNUM ; i++ ) {
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, token, sizeof(token));
village = atoi(token);
if( village == CHAR_getInt( meindex, CHAR_FMINDEX ) ) {
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token));
fmindex = atoi(token);
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 6, token, sizeof(token));
strcpy(fmname, token);
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 8, token, sizeof(token));
fmindexi = atoi(token);
saacproto_ACFixFMData_send( acfd, fmname, fmindex, fmindexi,
FM_FIX_FMGOLD, buf2 , "",
CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(clifd) );
// print(" addNpcFamilyTax_fm:%s ", fmname);
return 1;
}
}
return 0;
}
#else
int addNpcFamilyTax( int meindex, int talkerindex, int income )
{
int fmindex, fmindexi, village, npc_village, i;
char fmname[256], token[256], buf2[64];
int clifd = CHAR_getWorkInt( talkerindex, CHAR_WORKFD );
switch( (int)( CHAR_getInt( meindex, CHAR_FLOOR)/100 ) )
{
case 10:
npc_village = 1;
break;
case 20:
npc_village = 2;
break;
case 30:
npc_village = 3;
break;
case 40:
npc_village = 4;
break;
#ifdef _FAMILY_MANORNUM_CHANGE
case 50:
npc_village = 5;
break;
case 60:
npc_village = 6;
break;
// Syu ADD 修正四大城无税收问题
case 71:
npc_village = 6;
break;
case 72:
npc_village = 7;
break;
case 73:
npc_village = 8;
break;
case 74:
npc_village = 9;
break;
case 70:
npc_village = 7;
break;
case 80:
npc_village = 8;
break;
case 90:
npc_village = 9;
break;
case 100:
npc_village = 10;
break;
#endif
default:
return 0;
}
sprintf( buf2, "%d", income );
for( i=0 ; i<FMPOINTNUM ; i++ ) {
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, token, sizeof(token)) == FALSE )
continue;
village = atoi(token);
if( village == npc_village ) {
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token)) == FALSE)
return 0;
fmindex = atoi(token);
// Terry add for 如果庄园没人占领则不计算
if(fmindex < 0) return 0;
// end
memset( token, 0, sizeof( token));
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 6, token, sizeof(token)) == FALSE)
return 0;
memset( fmname, 0, sizeof( fmname));
sprintf( fmname, "%s", token);
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 8, token, sizeof(token)) == FALSE )
return 0;
fmindexi = atoi(token);
saacproto_ACFixFMData_send( acfd, fmname, fmindex, fmindexi,
FM_FIX_FMGOLD, buf2 , "",
CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(clifd) );
// print(" addNpcFamilyTax_fm:%s ", fmname);
return 1;
}
}
return 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -