513 lines
12 KiB
C
513 lines
12 KiB
C
#include "version.h"
|
||
#include <string.h>
|
||
#include "common.h"
|
||
#include "char_base.h"
|
||
#include "npc_janken.h"
|
||
#include "npcutil.h"
|
||
#include "char.h"
|
||
#include "lssproto_serv.h"
|
||
#include "buf.h"
|
||
#include "function.h"
|
||
#include "readmap.h"
|
||
#include "object.h"
|
||
#include "log.h"
|
||
|
||
/*
|
||
*元扎氏仃氏
|
||
*/
|
||
static void NPC_Janken_selectWindow( int meindex, int talker, int num);
|
||
void NPC_JnakenJudge(int meindex,int talker,int sel);
|
||
BOOL NPC_JankenEntryItemCheck(int talker,char *buf);
|
||
BOOL NPC_JankenEntryItemDel(int talker,char *buf);
|
||
void NPC_WarpPointGet(int meindex,int talker,int *fl,int *x,int *y,int judge);
|
||
|
||
|
||
/*********************************
|
||
* 赓渝质
|
||
*********************************/
|
||
BOOL NPC_JankenInit( int meindex )
|
||
{
|
||
|
||
//正奶皿毛本永玄
|
||
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEJANKEN );
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
|
||
/*********************************
|
||
* 仄井仃日木凶凛及质
|
||
*********************************/
|
||
void NPC_JankenTalked( int meindex , int talkerindex , char *szMes ,
|
||
int color )
|
||
{
|
||
/* 皿伊奶乩□卞覆仄化分仃 杀允月 */
|
||
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
|
||
return;
|
||
}
|
||
|
||
/* ㄠ弘伉永玉动 及心 */
|
||
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
|
||
|
||
NPC_Janken_selectWindow(meindex, talkerindex, 0);
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
/******************************
|
||
* 公木冗木及质 卞坌仃月
|
||
******************************/
|
||
static void NPC_Janken_selectWindow( int meindex, int talker, int num)
|
||
{
|
||
|
||
char token[1024];
|
||
char buf[32];
|
||
int fd = getfdFromCharaIndex( talker);
|
||
int buttontype=0;
|
||
int windowtype=0;
|
||
int windowno=0;
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
|
||
|
||
/*--它奶件玉它正奶皿丢永本□斥互云云中及匹燮卞涩烂--*/
|
||
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
|
||
|
||
/*--涩烂白央奶伙毛 心 心--*/
|
||
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
||
print("NPC_janken Init: GetArgStrErr");
|
||
return ;
|
||
}
|
||
|
||
|
||
switch( num)
|
||
{
|
||
case 0:
|
||
|
||
/*-- 旦正□玄及丢永本□斥互 仃木壬巨仿□ 憎 --*/
|
||
if(NPC_Util_GetStrFromStrWithDelim( argstr, "MainMsg", token, sizeof( token)) == NULL)
|
||
{
|
||
print("Janken:MainMsg:%s", CHAR_getChar( meindex, CHAR_NAME));
|
||
return ;
|
||
}
|
||
|
||
/*--蓟 --*/
|
||
buttontype = WINDOW_BUTTONTYPE_YESNO;
|
||
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
||
windowno = CHAR_WINDOWTYPE_JANKEN_START;
|
||
break;
|
||
|
||
|
||
case 1:
|
||
|
||
//失奶 丞及民尼永弁
|
||
if(NPC_Util_GetStrFromStrWithDelim( argstr, "EntryItem", buf, sizeof( buf))!= NULL) {
|
||
|
||
if(NPC_JankenEntryItemCheck(talker,buf) == FALSE)
|
||
{
|
||
NPC_Janken_selectWindow(meindex, talker, 3);
|
||
}
|
||
|
||
//巨件玄伉迕及失奶 丞毛绰轮
|
||
if(NPC_JankenEntryItemDel(talker,buf) == FALSE){
|
||
print("元扎氏仃氏ERR:失奶 丞壅仄卞仄匀天中");
|
||
}
|
||
}
|
||
|
||
|
||
/*--蓟 --*/
|
||
sprintf(token," 剪刀石头布!!\n"
|
||
"\n\n 《 石头 》"
|
||
"\n\n 《 剪刀 》"
|
||
"\n\n 《 布 》"
|
||
);
|
||
|
||
buttontype=WINDOW_BUTTONTYPE_NONE;
|
||
windowtype=WINDOW_MESSAGETYPE_SELECT;
|
||
windowno=CHAR_WINDOWTYPE_JANKEN_MAIN;
|
||
break;
|
||
|
||
case 2:
|
||
/*--丐中仇蓟 --*/
|
||
//sprintf(token," 丐中仇匹″″\n"
|
||
sprintf(token," 平手再来!!\n"
|
||
"\n\n 《 石头 》"
|
||
"\n\n 《 剪刀 》"
|
||
"\n\n 《 布 》"
|
||
);
|
||
|
||
buttontype=WINDOW_BUTTONTYPE_NONE;
|
||
windowtype=WINDOW_MESSAGETYPE_SELECT;
|
||
windowno=CHAR_WINDOWTYPE_JANKEN_MAIN;
|
||
break;
|
||
|
||
case 3:
|
||
/*-- 旦正□玄及丢永本□斥互 仃木壬巨仿□ 憎 --*/
|
||
NPC_Util_GetStrFromStrWithDelim( argstr, "NoItem", token, sizeof( token));
|
||
|
||
buttontype=WINDOW_BUTTONTYPE_OK;
|
||
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
|
||
windowno=CHAR_WINDOWTYPE_JANKEN_END;
|
||
|
||
break;
|
||
|
||
}
|
||
|
||
|
||
// makeEscapeString( token, escapedname, sizeof(escapedname));
|
||
/*-仇仇匹霜耨允月--*/
|
||
lssproto_WN_send( fd, windowtype,
|
||
buttontype,
|
||
windowno,
|
||
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
||
token);
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
/*********************************
|
||
* 它奴件玉它丢永本□斥卞覆允月质
|
||
*********************************/
|
||
void NPC_JankenWindowTalked( int meindex, int talkerindex,
|
||
int seqno, int select, char *data)
|
||
{
|
||
/* ㄠ弘伉永玉动 及心 */
|
||
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
|
||
|
||
switch( seqno){
|
||
case CHAR_WINDOWTYPE_JANKEN_START:
|
||
|
||
if(select==WINDOW_BUTTONTYPE_YES){
|
||
NPC_Janken_selectWindow(meindex, talkerindex, 1);
|
||
}
|
||
break;
|
||
|
||
case CHAR_WINDOWTYPE_JANKEN_MAIN:
|
||
if (atoi(data) >= 3){
|
||
NPC_JnakenJudge(meindex,talkerindex,atoi(data) );
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
/*
|
||
*斥乓件弗件及 烂
|
||
*/
|
||
void NPC_JnakenJudge(int meindex,int talker,int sel)
|
||
{
|
||
int player=-1;
|
||
int jankenman;
|
||
char j_char[3][8]={" 石头 "," 剪刀 "," 布 "};
|
||
char token[1024];
|
||
int shouhai = 0;
|
||
int fd = getfdFromCharaIndex( talker);
|
||
int fl=0,x=0,y=0;
|
||
|
||
|
||
if(sel == 3) player = 0; //弘□
|
||
if(sel == 5) player = 1; //民亦平
|
||
if(sel == 7) player = 2; //由□
|
||
|
||
jankenman = rand()%3;
|
||
|
||
switch(jankenman){
|
||
case 0:
|
||
if(player == 2){
|
||
shouhai = 1;
|
||
}else if(player == 1){
|
||
shouhai = 2;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
if(player == 0){
|
||
shouhai = 1;
|
||
}else if(player == 2){
|
||
shouhai = 2;
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
if(player == 1){
|
||
shouhai = 1;
|
||
}else if(player == 0){
|
||
shouhai = 2;
|
||
}
|
||
break;
|
||
}
|
||
|
||
if(shouhai == 1){
|
||
//Change add 玩家猜胜了给的道具
|
||
NPC_JankenItemGet( meindex, talker, "WinItem" );
|
||
|
||
NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 0);
|
||
|
||
snprintf( token, sizeof( token ) ,
|
||
" ~ 结 果 ~ \n\n"
|
||
" %16s %-16s\n"
|
||
" [%s] VS [%s]\n\n\n"
|
||
" %-16s 胜利",
|
||
CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME),
|
||
j_char[jankenman],j_char[player],
|
||
CHAR_getChar(talker,CHAR_NAME)
|
||
);
|
||
|
||
// CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN );
|
||
|
||
//伐□皿
|
||
CHAR_warpToSpecificPoint(talker, fl, x, y);
|
||
|
||
// 匀凶午五反>减少=及失弁扑亦件毛允月[
|
||
CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX), CHAR_ACTPLEASURE,NULL,0,TRUE);
|
||
CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTPLEASURE);
|
||
|
||
}else if(shouhai == 2){
|
||
|
||
//Change add 玩家猜输了给的道具
|
||
NPC_JankenItemGet( meindex, talker, "LoseItem" );
|
||
|
||
NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 1);
|
||
snprintf( token, sizeof( token ) ,
|
||
" ~ 结 果 ~ \n\n"
|
||
" %16s %-16s\n"
|
||
" [%s] VS [%s]\n\n\n"
|
||
" %-16s 输了",
|
||
CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME),
|
||
j_char[jankenman],j_char[player],
|
||
CHAR_getChar(talker,CHAR_NAME)
|
||
);
|
||
// CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN );
|
||
|
||
//伐□皿
|
||
CHAR_warpToSpecificPoint(talker, fl, x, y);
|
||
|
||
// 仃凶午五反> 仄中=失弁扑亦件毛允月
|
||
CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX), CHAR_ACTSAD,NULL,0,TRUE);
|
||
CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTSAD);
|
||
|
||
|
||
}else{
|
||
//仇仇卞仁月午丐中仇
|
||
NPC_Janken_selectWindow( meindex, talker, 2);
|
||
return;
|
||
}
|
||
|
||
//霜耨
|
||
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
|
||
WINDOW_BUTTONTYPE_OK,
|
||
CHAR_WINDOWTYPE_JANKEN_END,
|
||
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
||
token);
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
/*
|
||
*伐□皿燮毛GET允月[
|
||
*/
|
||
void NPC_WarpPointGet(int meindex,int talker,int *fl,int *x,int *y,int judge)
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char *strbuf[2] = {"WinWarp","LoseWarp"};
|
||
char buf[64];
|
||
char buf2[32];
|
||
|
||
/*--涩烂白央奶伙毛 心 心--*/
|
||
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
||
print("NPC_janken Init: GetArgStrErr");
|
||
return ;
|
||
}
|
||
|
||
|
||
/*--伐□皿燮毛潸 --*/
|
||
NPC_Util_GetStrFromStrWithDelim( argstr, strbuf[judge], buf, sizeof( buf));
|
||
getStringFromIndexWithDelim(buf,",",1,buf2,sizeof(buf2));
|
||
*fl=atoi(buf2);
|
||
getStringFromIndexWithDelim(buf,",",2,buf2,sizeof(buf2));
|
||
*x=atoi(buf2);
|
||
getStringFromIndexWithDelim(buf,",",3,buf2,sizeof(buf2));
|
||
*y=atoi(buf2);
|
||
|
||
|
||
}
|
||
|
||
/*
|
||
*--失奶 丞及民尼永弁分仃毛垫丹
|
||
*/
|
||
BOOL NPC_JankenEntryItemCheck(int talker,char *buf)
|
||
{
|
||
|
||
char buf2[512];
|
||
char buf3[256];
|
||
int id=0;
|
||
BOOL flg = FALSE;
|
||
int i;
|
||
int itemindex;
|
||
int itemno;
|
||
int kosuu;
|
||
int cnt=0;
|
||
int k=1;
|
||
|
||
while(getStringFromIndexWithDelim(buf , "," , k, buf2, sizeof(buf2))
|
||
!=FALSE )
|
||
{
|
||
flg = FALSE;
|
||
k++;
|
||
|
||
if(strstr(buf2,"*") != NULL){
|
||
cnt = 0;
|
||
getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3));
|
||
itemno = atoi(buf3);
|
||
getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3));
|
||
kosuu = atoi(buf3);
|
||
|
||
for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){
|
||
itemindex = CHAR_getItemIndex( talker , i );
|
||
if( ITEM_CHECKINDEX(itemindex) ){
|
||
id = ITEM_getInt(itemindex ,ITEM_ID );
|
||
if(itemno == id){
|
||
cnt++;
|
||
if(cnt == kosuu){
|
||
flg = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(flg == FALSE)
|
||
{
|
||
return FALSE;
|
||
}
|
||
}else{
|
||
itemno = atoi(buf2);
|
||
|
||
for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){
|
||
itemindex = CHAR_getItemIndex( talker , i );
|
||
if( ITEM_CHECKINDEX(itemindex) ){
|
||
id = ITEM_getInt(itemindex ,ITEM_ID );
|
||
if(itemno == id){
|
||
flg = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(flg == FALSE)
|
||
{
|
||
return FALSE;
|
||
}
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
BOOL NPC_JankenEntryItemDel(int talker,char *buf)
|
||
{
|
||
|
||
int i = 1, j = 1,k = 1;
|
||
char buff3[128];
|
||
char buf2[32];
|
||
int itemindex;
|
||
|
||
while(getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){
|
||
k++;
|
||
if(strstr(buff3, "*") !=NULL){
|
||
int itemno;
|
||
int kosuu;
|
||
int id;
|
||
int cnt=0;
|
||
getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2));
|
||
itemno = atoi(buf2);
|
||
getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2));
|
||
kosuu = atoi(buf2);
|
||
for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ){
|
||
itemindex = CHAR_getItemIndex( talker , i );
|
||
if( ITEM_CHECKINDEX(itemindex) ){
|
||
id=ITEM_getInt(itemindex ,ITEM_ID );
|
||
if(itemno==id){
|
||
cnt++;
|
||
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
|
||
"QuizDelItem(猜谜->交出道具)",
|
||
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)
|
||
);
|
||
CHAR_DelItem( talker, i);
|
||
if(cnt == kosuu){
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
/*--蓟氏分 寞及失奶 丞毛蓟请---*/
|
||
for( j = 0 ; j < CHAR_MAXITEMHAVE ; j++){
|
||
itemindex = CHAR_getItemIndex( talker ,j);
|
||
|
||
if( ITEM_CHECKINDEX(itemindex) ){
|
||
if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){
|
||
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
|
||
"QuizDelItem(猜谜->交出道具)",
|
||
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)
|
||
);
|
||
CHAR_DelItem( talker, j);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL NPC_JankenItemGet(int meindex,int talker, char *wl)
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf[64];
|
||
|
||
/*--涩烂白央奶伙毛 心 心--*/
|
||
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
||
print("NPC_janken ItemGet: GetArgStrErr");
|
||
return FALSE;
|
||
}
|
||
|
||
if(NPC_Util_GetStrFromStrWithDelim( argstr, wl, buf, sizeof( buf) ) !=NULL){
|
||
NPC_EventAddItem( meindex, talker, buf);
|
||
}
|
||
}
|
||
|