?? npc_warpman.c
字號:
if( NPC_Util_GetStrFromStrWithDelim( buf, "FREE", token, sizeof( token) ) == NULL) {
print("msgErr");
return;
}
//檢查玩家是否附合條件
if((NPC_ActionPassCheck(meindex,toindex,token)==TRUE) || (strstr( token, "ALLFREE")!=NULL) ) {
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, talkNo-1);
//若附合條件 取出 FreeMsg 字串
if(NPC_Util_GetStrFromStrWithDelim( buf, "FreeMsg", token, sizeof( token))==NULL)
return;
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowno = NEW_WARPMAN;
tenflg = TRUE;
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );
break;
}
}
talkNo++;
}
//無任何條件成立
if( tenflg == FALSE ) {
if( getStringFromIndexWithDelim( npcarg,"OVER",1,buf,sizeof( buf)) == FALSE )
return;
if( strstr( buf, "NOFREE") == NULL ) {
return;
}else {
strcpy( npcarg, buf);
}
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) != NULL) {
CHAR_talkToCli( toindex, meindex, token,CHAR_COLORWHITE);
return;
}
}
//送訊息給 CLI
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token );
}
#endif
//ANDY_RE
int CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr)
{
char buf[1024];
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "warp_msg", buf, sizeof( buf) ) == NULL)
return 0;
if( strcmp( buf, TalkStr) )
return 1;
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buf, sizeof( buf) ) != NULL) {
if( strstr( buf, "FALSE") != NULL ) {
}else {
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) {
NPC_ERR_DiSP( meindex, talkerindex, 1);
return 2;
}
}
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf)) == NULL )
return 2;
if( ( NPC_ActionPassCheck( meindex, talkerindex, buf ) == FALSE) ) {
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", buf,sizeof(buf)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,buf,CHAR_COLORWHITE);
}
return 2;
}else {
if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return 3;
}
CHAR_complianceParameter( talkerindex );
CHAR_send_P_StatusString( talkerindex ,
CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|
CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK|
CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|
CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH );
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf, sizeof( buf)) != NULL ){
CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORWHITE);
}
NPC_WarpMsg( meindex, talkerindex, npcarg);
NPC_NpcWarpMsg( meindex, talkerindex, npcarg);
return 4;
}
return 0;
}
BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg)
{
char buf[256];
int fl=0,x=0,y=0;
if( CHAR_CHECKINDEX( meindex ) == FALSE )
return FALSE;
if( NPC_Util_GetStrFromStrWithDelim( arg, "NPCPOINT", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:2.Invalid warpman ERR" );
return FALSE;
}
CHAR_warpToSpecificPoint( meindex, fl, x, y );
return TRUE;
}
void NPC_WarpManLoop( int meindex)
{
int born, dead;
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if( !CHAR_CHECKINDEX( meindex) ) return;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){
print("WarpMan:GetArgStrErr");
return;
}
if( !strstr( npcarg,"NEWWARPMAN") )
return;
if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){
NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
void NPC_WarpManWatch( int meobjindex, int objindex, CHAR_ACTION act,
int x,int y,int dir, int* opt,int optlen )
{
int born, dead;
int meindex, index;
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return;
index = OBJECT_getIndex( objindex);
if( !CHAR_CHECKINDEX( index) ) return;
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
meindex = OBJECT_getIndex( meobjindex);
if( !CHAR_CHECKINDEX( meindex) ) return;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){
print("WarpMan:GetArgStrErr");
return;
}
if( !strstr( npcarg,"NEWWARPMAN") )
return;
#ifdef _TREASURE_BOX
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN ){
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTTIME) < NowTime.tv_sec ){
//變回寶箱
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);
//變圖
CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,
CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,
CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));
NPC_TreasureEventRunMsg( meindex); //是否warp
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
#endif
if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){
NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
#ifdef _TREASURE_BOX
BOOL NPC_TreasureEventRunMsg( int meindex)
{
char buf[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
int fl,x,y;
if( !CHAR_CHECKINDEX( meindex ))
return FALSE;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("WarpMan:GetArgStrErr");
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_NUM", buf, sizeof( buf)) == NULL )
return FALSE;
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTNUM) < atoi( buf) ) return FALSE;
CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0);
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_POINT", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:2.Invalid warpman ERR" );
return FALSE;
}
CHAR_warpToSpecificPoint( meindex, fl, x, y );
return TRUE;
}
#endif
BOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf)
{
char buff2[64];
int randitem;
int ret;
int itemindex;
char token[128];
if(rand_j == 0) {
print("Event:由於0的介入,出現錯誤。");
return FALSE;
}
randitem = rand()%rand_j;
if(randitem == 0) randitem = rand_j;
getStringFromIndexWithDelim(buf , "," , randitem, buff2, sizeof(buff2)) ;
itemindex = ITEM_makeItemAndRegist( atoi( buff2));
if(itemindex == -1) return FALSE;
/*失奶 丞及馨笛( 濤失奶 丞 卞中木化仄引丹 */
ret = CHAR_addItemSpecificItemIndex( talker, itemindex);
if( !CHAR_CHECKITEMINDEX( talker, ret) ){
print( "npc_exchangeman.c: additem error itemindex[%d]\n", itemindex);
ITEM_endExistItemsOne( itemindex);
return FALSE;
}
if(itemindex != -1) {
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */
#endif
"EventAddItem(任務需求所得到的道具)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
sprintf(token,"收下了%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE);
CHAR_sendItemDataOne( talker, ret);
return TRUE;
}
#ifdef _NPC_ADDLEVELUP // (不可開) ANDY 外部測試機用來增加玩家等級
extern tagRidePetTable ridePetTable[296];
void NPC_LevelAndTransUp( int meindex, int charindex, int level, int skillpoint, int exp, int ridepet)
{
char szBuffer[256]="";
if( !CHAR_CHECKINDEX( charindex) )
return;
//int CHAR_LevelUpCheck( int charaindex , int toindex)
if( exp > 0 ){
int LevelUp=0;
int myexp = CHAR_getInt( charindex, CHAR_EXP);
myexp += exp;
if( myexp > 300000000 ) myexp = 300000000;
CHAR_setInt( charindex, CHAR_EXP, myexp);
snprintf( szBuffer, sizeof(szBuffer),
"(%s) 得到 EXP %d", CHAR_getUseName( charindex ), exp);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
LevelUp = CHAR_LevelUpCheck( charindex , -1);
if( LevelUp > 0 ){
snprintf( szBuffer, sizeof(szBuffer),
"(%s) 升級至 %d",
CHAR_getUseName( charindex ),
CHAR_getInt( charindex, CHAR_LV )
);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
CHAR_setInt( charindex, CHAR_SKILLUPPOINT,
CHAR_getInt( charindex, CHAR_SKILLUPPOINT) + LevelUp*3 );
CHAR_complianceParameter( charindex );
}
}
if( level > 0 ){
CHAR_setInt( charindex, CHAR_LV, level);
snprintf( szBuffer, sizeof(szBuffer),
"(%s) 等級設定為 %d",
CHAR_getUseName( charindex ), CHAR_getInt( charindex, CHAR_LV )
);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
}
if( skillpoint > 0 ){
int MySp = CHAR_getInt( charindex, CHAR_SKILLUPPOINT);
MySp += skillpoint;
CHAR_setInt( charindex, CHAR_SKILLUPPOINT, MySp);
}
if( ridepet >= 0 ){
int basepet[2][4]={ {2066,2067,2068,2069},
{2072,2073,2074,2075}};
int petTemp[]={-1,-1,-1,-1,-1};
char msgbuf[256];
int petNum=0;
int i,j=0;
int k=0, petindex,enemyarray;
petTemp[j++] = basepet[0][rand()%4];
petTemp[j++] = basepet[1][rand()%4];
for( i=0; i< arraysizeof(ridePetTable) ; i++ ){
if( CHAR_getInt( charindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].charNo ){
petTemp[j]= ridePetTable[i].petId;
j++;
if( j >= arraysizeof( petTemp) )
break;
}
}
j=0;
for( petNum=0; petNum<arraysizeof( petTemp); petNum++) {
enemyarray = ENEMY_getEnemyArrayFromId( petTemp[ petNum]); //白虎
petindex = ENEMY_createPetFromEnemyIndex( charindex, enemyarray);
if( petindex == -1 ) {
continue;
}
j++;
for( k = 1; k < 120; k ++ ){ //升級
CHAR_PetLevelUp( petindex );
CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
}
CHAR_complianceParameter( petindex );
CHAR_setInt( petindex , CHAR_HP , CHAR_getWorkInt( petindex , CHAR_WORKMAXHP ) );
snprintf( szBuffer, sizeof(szBuffer), "得到%s", CHAR_getUseName( petindex) );
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
}
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet(charindex, j);
if( !CHAR_CHECKINDEX( petindex) )
continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( charindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( charindex, msgbuf );
}
CHAR_setInt( charindex, CHAR_LEARNRIDE, ridepet);
}
CHAR_send_P_StatusString( charindex, CHAR_P_STRING_DUELPOINT|
CHAR_P_STRING_TRANSMIGRATION| CHAR_P_STRING_RIDEPET|
CHAR_P_STRING_BASEBASEIMAGENUMBER| CHAR_P_STRING_GOLD|
CHAR_P_STRING_EXP| CHAR_P_STRING_LV| CHAR_P_STRING_HP|CHAR_P_STRING_LEARNRIDE);
CHAR_Skillupsend( charindex);
}
#endif
//ANDY_END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -