📄 npc_eventaction.c
字号:
// 设定职业等级 1
CHAR_setInt( toindex, PROFESSION_LEVEL, 1 );
switch( p_class ){
case PROFESSION_CLASS_FIGHTER: value = 0; skill_id = 37; break; // 勇士
case PROFESSION_CLASS_WIZARD: value = 10; skill_id = 1; break; // 巫师
case PROFESSION_CLASS_HUNTER: value = 25; skill_id = 47; break; // 猎人
default: break;
}
/*
// 给第一个职业技能
if( skill_id != -1 ){
if( PROFESSION_SKILL_ADDSK( toindex, skill_id, 10 ) == -1 ) return FALSE;
}
*/
// 给1点技能点数
CHAR_setInt(toindex, PROFESSION_SKILL_POINT, 1 );
CHAR_send_P_StatusString( toindex, CHAR_P_STRING_DUELPOINT );
// 增加抗性
for( i=0; i<3; i++ )
CHAR_setInt( toindex, PROFESSION_FIRE_R+i, CHAR_getInt( toindex, PROFESSION_FIRE_R+i) + value );
// 巫师增加MP上限
if( p_class == PROFESSION_CLASS_WIZARD ){
CHAR_setInt( toindex , CHAR_MAXMP , 150 );
}
// 欢迎讯息
if( NPC_Util_GetStrFromStrWithDelim( buf1, "OK_MSG", buf2, sizeof( buf2) ) == NULL){
sprintf( buf2, "欢迎加入" );
CHAR_talkToCli( toindex, -1, buf2, CHAR_COLORYELLOW);
}
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));
}
#if 1 // Robin add 消除职业
else if( p_class == PROFESSION_CLASS_NONE)
{
int i, value = 0;
int skill_id = -1;
print(" ====清除职业==== ");
// 还原点数
//if( PROFESSION_RESTORE_POINT( toindex ) != 1 ) return FALSE;
#ifdef _CHANNEL_MODIFY
if(CHAR_getInt(toindex,PROFESSION_CLASS) > 0){
int i,pclass = CHAR_getInt(toindex,PROFESSION_CLASS) - 1;
for(i=0;i<getFdnum();i++){
if(*(piOccChannelMember + (pclass * getFdnum()) + i) == toindex){
*(piOccChannelMember + (pclass * getFdnum()) + i) = -1;
break;
}
}
}
#endif
// 设定职业归零
CHAR_setInt( toindex, PROFESSION_CLASS, p_class );
// 设定职业等级 0
CHAR_setInt( toindex, PROFESSION_LEVEL, 0 );
// 技能点数归零
CHAR_setInt(toindex, PROFESSION_SKILL_POINT, 0 );
// 还原抗性
for( i=0; i<3; i++ )
CHAR_setInt( toindex, PROFESSION_FIRE_R+i, /*CHAR_getInt( toindex, PROFESSION_FIRE_R+i) + value*/0 );
// 还原巫师MP上限
CHAR_setInt( toindex , CHAR_MAXMP , 100 );
// 删除所有技能
CHAR_CHAT_DEBUG_delsk( toindex, "all" );
// ?? Andy add
CHAR_setInt( toindex , ATTACHPILE, 0);
// 清除任务旗标
NPC_NowEndEventSetFlgCls( toindex, 145);
NPC_NowEndEventSetFlgCls( toindex, 146);
NPC_NowEndEventSetFlgCls( toindex, 147);
CHAR_sendStatusString( toindex , "S");
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));
}
#endif
else
{
return FALSE;
}
}
#endif
#ifdef _TREASURE_BOX
if( NPC_Util_GetStrFromStrWithDelim( buf1, "TREASURE_EVENT", buf2, sizeof( buf2) ) != NULL) {
if( strstr( buf2, "OPEN") != NULL){
if( NPC_Util_GetStrFromStrWithDelim( buf1, "TREASURE_TIME", buf2, sizeof( buf2) ) == NULL)
return FALSE;
//NPC_TIME_EVENTMODE = CHAR_NPCWORKINT6,// 1
//NPC_TIME_EVENTTIME = CHAR_NPCWORKINT7,
CHAR_setWorkInt( meindex, CHAR_NPCWORKINT6, NPC_EVENTMODE_OPEN );
CHAR_setWorkInt( meindex, CHAR_NPCWORKINT7, NowTime.tv_sec+atoi( buf2) );
//变图
//NPC_TIME_EVENONBBI = CHAR_NPCWORKINT8,
CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,
CHAR_getWorkInt( meindex, CHAR_NPCWORKINT8));
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,
CHAR_getWorkInt( meindex, CHAR_NPCWORKINT8));
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
#endif
#ifdef _NPC_ADDLEVELUP
if( NPC_Util_GetStrFromStrWithDelim( buf1, "SetLevel", buf2, sizeof( buf2) ) != NULL) {
NPC_ActionLevelAndTransUp( meindex, toindex, atoi(buf2), 0, 0, -1);
}
if( NPC_Util_GetStrFromStrWithDelim( buf1, "AddExps", buf2, sizeof( buf2) ) != NULL) {
NPC_ActionLevelAndTransUp( meindex, toindex, 0, 0, atoi(buf2), -1);
}
if( NPC_Util_GetStrFromStrWithDelim( buf1, "AddSkillPoint", buf2, sizeof( buf2) ) != NULL) {
NPC_ActionLevelAndTransUp( meindex, toindex, 0, atoi(buf2), 0, -1);
}
if( NPC_Util_GetStrFromStrWithDelim( buf1, "SetRideType", buf2, sizeof( buf2) ) != NULL) {
NPC_ActionLevelAndTransUp( meindex, toindex, 0, 0, 0, atoi(buf2));
}
#endif
#ifdef _NPC_ADDWARPMAN1
/* if( NPC_Util_GetStrFromStrWithDelim( buf1, "PartyCount", buf2, sizeof( buf2) ) != NULL) {
//取得组队人数
int partys=0;
int leaderindex=-1;
int flg=0; //0:等於 1:大於等於 2:小於等於 3:大於 4:小於 5:不等於
char Head[32],buf3[32];
leaderindex = toindex;
if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){
partys = 0;
}else if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ){
leaderindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1);
if( CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ){
int i;
for( i=0; i<5; i++) {
int pindex = CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYINDEX1+i);
if( !CHAR_CHECKINDEX( pindex) )
partys++;
}
}
}
memset( Head, 0, sizeof( Head));
memset( buf3, 0, sizeof( buf3));
if( strstr( buf2, "=" ) != NULL ){
strcpy( Head, "=");
flg = 0;
if( strstr( buf2, ">") != NULL ){
strcat( Head, ">");
flg = 1;
}else if( strstr( buf2, "<") != NULL ){
strcat( Head, "<");
flg = 2;
}else if( strstr( buf2, "!") != NULL ) {
strcat( Head, "!");
flg = 5;
}
}else if(strstr( buf2, "<") != NULL){
strcpy( Head, "<");
flg = 4;
}else if(strstr( buf2, ">") != NULL){
strcpy( Head, ">");
flg = 3;
}
Head[ strlen( Head)+1] = 0;
if( NPC_Util_GetStrFromStrWithDelim( buf2, Head, buf3, sizeof( buf3) ) != NULL) {
if( flg == 0 )
if( atoi(buf3) != partys ) return FALSE;
else if( flg == 1 )
if( atoi(buf3) < partys ) return FALSE;
else if( flg == 2 )
if( atoi(buf3) > partys ) return FALSE;
else if( flg == 3 )
if( atoi(buf3) <= partys ) return FALSE;
else if( flg == 4 )
if( atoi(buf3) >= partys ) return FALSE;
else if( flg == 5 )
if( atoi(buf3) == partys ) return FALSE;
}
}*/
#endif
ActionNpc_WarpPoint( meindex, toindex, buf1);
return TRUE;
}
BOOL Action_PartyCheck( int meindex, int talker)
{
if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
return FALSE;
}
return TRUE;
}
BOOL NPC_ActionAddGold( int talker, int Golds)
{
CHAR_AddGold( talker, Golds);
return TRUE;
}
BOOL NPC_ActionDelGold( int talker,char *buf)
{
int Golds=0;
int PGold=0;
if( buf == NULL ) return FALSE;
Golds = atoi( buf);
PGold = CHAR_getInt( talker, CHAR_GOLD);
if( PGold < Golds ) {
CHAR_talkToCli( talker, -1, "你身上的钱不够喔!", CHAR_COLORYELLOW);
return FALSE;
}else {
char buf1[256];
sprintf( buf1, "交出%d石币", Golds);
CHAR_talkToCli( talker, -1, buf1, CHAR_COLORYELLOW);
}
CHAR_setInt( talker, CHAR_GOLD, PGold-Golds);
CHAR_send_P_StatusString( talker , CHAR_P_STRING_GOLD);
return TRUE;
}
// WON ADD
BOOL NPC_ActionAddGold2( int talker,char *buf)
{
int Golds=0;
int PGold=0;
int MaxGold = 0;
int total_gold = 0;
if( buf == NULL ) return FALSE;
Golds = atoi( buf);
PGold = CHAR_getInt( talker, CHAR_GOLD);
MaxGold = CHAR_getMaxHaveGold( talker );
total_gold = PGold + Golds;
if( total_gold > MaxGold ) total_gold = MaxGold;
CHAR_setInt( talker, CHAR_GOLD, total_gold );
CHAR_send_P_StatusString( talker , CHAR_P_STRING_GOLD);
return TRUE;
}
BOOL NPC_ActionDelPet( int talker, char *buf)
{
int petsel;
int petindex=0, k=1;
int fd = getfdFromCharaIndex( talker );
char msgbuf[64], szPet[128],buff2[256],buff3[256];
char buf2[256],buff1[256];
int defpet;
int petno,kNum,find=0,petLv=0,flg=-1;
while( getStringFromIndexWithDelim(buf , "," , k, buff1, sizeof( buff1)) !=FALSE ) {
k++;
if( strstr( buff1,"-") != NULL ) {
getStringFromIndexWithDelim(buff1,"-",2,buff3,sizeof(buff3));
getStringFromIndexWithDelim(buff1,"-",1,buf2,sizeof(buf2));
if( strstr( buf2,"!") != NULL ) {
flg = 0;
getStringFromIndexWithDelim(buf2,"!=",2,buff2,sizeof(buff2));
}else if( strstr( buf,"<") != NULL ) {
flg = 1;
getStringFromIndexWithDelim(buf2,"<",2,buff2,sizeof(buff2));
}else if( strstr( buf,">") != NULL ) {
flg = 2;
getStringFromIndexWithDelim(buf2,">",2,buff2,sizeof(buff2));
}else if( strstr( buf,"=") != NULL) {
flg = 3;
getStringFromIndexWithDelim(buf2,"=",2,buff2,sizeof(buff2));
}else
return FALSE;
petLv = atoi( buff2);
}
continue;
if(strstr(buff3,"*")!=NULL){
getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2));
petno = atoi(buf2);
getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2));
kNum = atoi(buf2);
}else {
petno = atoi( buff3);
kNum = 30;
}
//andy_log
print("petno:%d kNum:%d \n ", petno, kNum);
find =0;
for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++) {
petindex = CHAR_getCharPet( talker, petsel);
if( !CHAR_CHECKINDEX(petindex)) continue;
if(CHAR_getInt( petindex, CHAR_PETID) != petno )continue;
switch( flg) {
case 0:
if( CHAR_getInt( petindex, CHAR_LV ) != petLv ) {
}else {
continue;
}
break;
case 1:
if( CHAR_getInt( petindex, CHAR_LV ) < petLv ) {
}else {
continue;
}
break;
case 2:
if( CHAR_getInt( petindex, CHAR_LV ) > petLv ) {
}else {
continue;
}
break;
case 3:
if( CHAR_getInt( petindex, CHAR_LV ) != petLv )continue;
break;
}
petindex = CHAR_getCharPet( talker, petsel);
if( !CHAR_CHECKINDEX(petindex) )
continue;
if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
continue;
defpet = CHAR_getInt( talker, CHAR_DEFAULTPET);
if(defpet == petsel) {
CHAR_setInt( talker, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME));
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW);
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"TenseiDel",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_setCharPet( talker, petsel, -1);
CHAR_endCharOneArray( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", petsel);
CHAR_sendStatusString( talker, szPet );
find++;
if( find >= kNum )
break; //条件数目皆删除完
}
}
return TRUE;
}
#ifdef _NPC_NewDelPet
BOOL NPC_ActionNewDelPet( int toindex, char *msg)
{
int i,petindex=0,petlev,petnum,petcount,mypetlevel,petid;
char buf[32],buf2[32];
int flg=0,count=0;
//比较方式
if ( strstr( msg, "=" ) )
flg = 0;
else if( strstr( msg, "<" ) )
flg = 1;
else
flg = 2;
//等级
if ( getStringFromIndexWithDelim( msg, "-", 1, buf, sizeof( buf )) ){
char cmp[12];
if( flg == 0 )
strcpy(cmp,"=");
else if( flg == 1 )
strcpy(cmp,"<");
else
strcpy(cmp,">");
if ( getStringFromIndexWithDelim( buf, cmp, 2, buf2, sizeof( buf2 )) ){
petlev = atoi(buf2);
}
else
return FALSE;
}
else
return FALSE;
//宠物编号
if ( getStringFromIndexWithDelim( msg, "-", 2, buf, sizeof( buf )) ){
if ( getStringFromIndexWithDelim( buf, "*", 1, buf2, sizeof( buf2 )) ){
petnum = atoi( buf2 );
}
else
return FALSE;
}
else
return FALSE;
//数量
if ( getStringFromIndexWithDelim( msg, "-", 2, buf, sizeof( buf )) ){
if ( getStringFromIndexWithDelim( buf, "*", 2, buf2, sizeof( buf2 )) ){
petcount = atoi( buf2 );
}
else
return FALSE;
}
else
return FALSE;
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){
BOOL cmp=FALSE;
petindex = CHAR_getCharPet( toindex, i);
petid = CHAR_getInt( petindex, CHAR_PETID);
mypetlevel = CHAR_getInt( petindex, CHAR_LV);
if( flg == 0 )
if( mypetlevel == petlev ) cmp = TRUE;
if( flg == 1 )
if( mypetlevel < petlev ) cmp = TRUE;
if( flg == 2 )
if( mypetlevel > petlev ) cmp = TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -