chuyiwen_gmsv/npc/npc_roomadminnew.c

968 lines
28 KiB
C
Raw Normal View History

2016-12-24 08:45:52 +08:00
#include "version.h"
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
#include "object.h"
#include "char.h"
#include "char_base.h"
#include "char_data.h"
#include "net.h"
#include "npcutil.h"
#include "handletime.h"
#include "readmap.h"
#include "npc_roomadminnew.h"
#include "npc_door.h"
/*
*
*/
enum{
CHAR_WORKINT_RANGE = CHAR_NPCWORKINT1,
2017-01-13 23:37:03 +08:00
/* 戚及蠡濠凛棉 */
2016-12-24 08:45:52 +08:00
CHAR_WORKINT_NEXTTIME = CHAR_NPCWORKINT2,
CHAR_WORKINT_PRINTCLOSETIME = CHAR_NPCWORKINT3,
CHAR_WORKINT_SEARCHROOMTIME = CHAR_NPCWORKINT4,
};
enum {
CHAR_WORKCHAR_MYNAME = CHAR_NPCWORKCHAR1,
CHAR_WORKCHAR_NEXTROOM = CHAR_NPCWORKCHAR2,
};
enum {
CHAR_WORKCHAR_ADMNAME = CHAR_NPCWORKCHAR1,
};
#define NPC_ROOMADMINNEW_DATADIR "roomadmin/"
2017-01-13 23:37:03 +08:00
/* 犯□正白央奶伙及傀舰阂 */
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_EXTENSION ".room"
#define NPC_ROOMADMINNEW_RANKING_EXTENSION ".score"
#define NPC_ROOMADMINNEW_RANKING_EXTENSION_TMP ".score.tmp"
#define NPC_ROOMADMINNEW_SCOREFILE ".score"
#define NPC_ROOMADMINNEW_PRINTCLOSETIME_DEFAULT 5
#define NPC_ROOMADMINNEW_MSG_CLOSE_BEFORE \
2017-01-13 23:37:03 +08:00
"%s %s %s的活动截止日%d分前。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_CLOSE \
2017-01-13 23:37:03 +08:00
"。。。已截止。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_NONE \
2017-01-13 23:37:03 +08:00
"很可惜本次没有人获得房间的拥有权。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_CONGRATULATION \
2017-01-13 23:37:03 +08:00
"恭喜您!%s获得房间的所有权%s的金钱全部被徵收了。%s请向管理员询问房间暗号。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_PRINTPASSWD_NONE \
2017-01-13 23:37:03 +08:00
"由於你未持有房间因此没有暗号。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPPASSWD1 \
2017-01-13 23:37:03 +08:00
"你的房间是 %s %s %s。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPPASSWD2 \
2017-01-13 23:37:03 +08:00
"房间的暗号是 「%s 」。只要在对着门说话时在与尾加上「...」,别人就看不见了唷!"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE \
2017-01-13 23:37:03 +08:00
"本日的活动结束。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1 \
2017-01-13 23:37:03 +08:00
"接下来的房间是 %s %s %s。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2 \
2017-01-13 23:37:03 +08:00
"截止日是 %d:%d 。到截止日为止还有%2d小时%02d分。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3 \
2017-01-13 23:37:03 +08:00
"最低得标金额是 %s 。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_RANKING_INFO \
2017-01-13 23:37:03 +08:00
"这是高额得标者排行榜。"
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSG_RANKING \
"Rank %2d:%4d/%02d/%02d %8d GOLD %s%s "
2017-01-13 23:37:03 +08:00
/* 仇及NPC及丢永本□斥缙 */
2016-12-24 08:45:52 +08:00
#define NPC_ROOMADMINNEW_MSGCOLOR CHAR_COLORWHITE
#define NPC_RANKING_MSGCOLOR CHAR_COLORWHITE
#define NPC_ROOMADMINNEW_2WEEK 60*60*24*14
static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex);
static void NPC_RoomAdminNew_DspRoomPasswd( int meindex, int adminindex, int talkerindex);
static BOOL NPC_RoomAdminNew_SetNextAuction( int meindex);
static BOOL NPC_RoomAdminNew_WriteDataFile( int meindex, int pindex, char *roomname,
char *passwd, BOOL flg);
static void NPC_RoomAdminNew_CreatePasswd( char *passwd, int passlen);
static void NPC_RoomAdminNew_SendMsgThisFloor( int index, char *buff);
static int NPC_RoomAdminNew_SearchPlayerHasMostMoney( int meindex);
static void NPC_RoomAdminNew_CloseProc( int meindex);
static int NPC_RoomAdminNew_WriteScoreFile( int meindex, int pindex);
static void NPC_RoomAdminNew_ReadScoreFile( int meindex, int talkerindex,
char *admname);
/************************************************
************************************************/
BOOL NPC_RoomAdminNewInit( int meindex )
{
int i;
char buf[256];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
for( i = 3; ; i ++ ) {
if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) {
if( NPC_DoorSearchByName( buf) < 0 ) {
2017-01-13 23:37:03 +08:00
print( "admin not created.在密码门做好之前先等待。\n");
2016-12-24 08:45:52 +08:00
return FALSE;
}
}
else{
break;
}
}
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
2017-01-13 23:37:03 +08:00
/* type本永玄 */
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEROOMADMIN);
getStringFromIndexWithDelim(argstr, "|" , 1 , buf,sizeof(buf) );
CHAR_setWorkInt( meindex , CHAR_WORKINT_RANGE , atoi( buf ));
if( !getStringFromIndexWithDelim(argstr, "|" , 2 , buf,sizeof(buf) )) {
print( "arg err.admin not created.\n");
return( FALSE);
}
CHAR_setWorkChar( meindex , CHAR_WORKCHAR_MYNAME , buf);
CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0);
NPC_RoomAdminNew_SetNextAuction( meindex);
return TRUE;
}
/************************************************
************************************************/
void NPC_RoomAdminNewLoop( int meindex )
{
int hun;
if( CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) == 0 ) {
struct tm tm1,tm2;
time_t t;
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
t = CHAR_getWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME);
memcpy( &tm2, localtime( &t),
sizeof( tm2));
if( tm1.tm_year != tm2.tm_year ||
tm1.tm_mday != tm2.tm_mday ||
tm1.tm_mon != tm2.tm_mon )
{
NPC_RoomAdminNew_SetNextAuction( meindex);
}
return;
}
hun = ceil((double)(CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME) -
NowTime.tv_sec) / 60.0);
if( hun < 0 ) hun = 0;
if( hun < NPC_ROOMADMINNEW_PRINTCLOSETIME_DEFAULT ) {
if( hun != CHAR_getWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME)) {
char buff[256];
if( hun != 0 ) {
char buf2[1024];
char msgbuff[16];
char argstr2[NPC_UTIL_GETARGSTR_BUFSIZE];
int doorindex;
doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2));
getStringFromIndexWithDelim( argstr2, "|" , 9 ,
buf2,sizeof(buf2) );
if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
2017-01-13 23:37:03 +08:00
strcpy( msgbuff, "号室");
2016-12-24 08:45:52 +08:00
}
else {
msgbuff[0] = '\0';
}
snprintf( buff, sizeof(buff),
NPC_ROOMADMINNEW_MSG_CLOSE_BEFORE,
buf2,
CHAR_getChar( doorindex, CHAR_NAME),
msgbuff,
hun);
CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, hun);
}
else {
2017-01-13 23:37:03 +08:00
/* >蠡户濠曰引仄凶= */
2016-12-24 08:45:52 +08:00
strcpy( buff, NPC_ROOMADMINNEW_MSG_CLOSE);
CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0);
}
2017-01-13 23:37:03 +08:00
/* 仇及白夫失卞中月谛蝈够卞霜耨 */
2016-12-24 08:45:52 +08:00
NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff);
}
}
if( hun == 0 ) {
NPC_RoomAdminNew_CloseProc( meindex);
}
}
/************************************************
************************************************/
void NPC_RoomAdminNewTalked( int meindex , int talkerindex , char *msg ,
int color )
{
if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;
/*NPC_RoomAdminNew_DspRoomPasswd( meindex, talkerindex);*/
NPC_RoomAdminNew_DspNextAuction( meindex, talkerindex);
}
/*-----------------------------------------------
*----------------------------------------------*/
static void NPC_RoomAdminNew_CloseProc( int meindex)
{
int pindex;
char buff[256];
char pname[32];
int failed = TRUE;
pindex = NPC_RoomAdminNew_SearchPlayerHasMostMoney( meindex);
2017-01-13 23:37:03 +08:00
/* 竟癫樊失伉 */
2016-12-24 08:45:52 +08:00
if( pindex != -1) {
while( 1) {
char passwd[9];
int doorindex;
doorindex = NPC_DoorSearchByName(
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
2017-01-13 23:37:03 +08:00
/* 由旦伐□玉毛戏岳允月 */
2016-12-24 08:45:52 +08:00
NPC_RoomAdminNew_CreatePasswd( passwd, sizeof( passwd));
if( NPC_RoomAdminNew_WriteDataFile( meindex, pindex,
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM),
passwd, 1)
== FALSE)
{
break;
}
2017-01-13 23:37:03 +08:00
/* 玉失卞由旦毛本永玄 */
2016-12-24 08:45:52 +08:00
if( NPC_DoorSetPasswd( doorindex, passwd) == -1 ) {
break;
}
CHAR_setWorkInt( doorindex, CHAR_WORKDOOREXPIRETIME,
CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME)
+ NPC_ROOMADMINNEW_2WEEK);
NPC_RoomAdminNew_WriteScoreFile( meindex, pindex);
CHAR_setInt( pindex, CHAR_GOLD, 0);
CHAR_send_P_StatusString( pindex , CHAR_P_STRING_GOLD);
strcpy( pname, CHAR_getChar( pindex, CHAR_NAME));
snprintf( buff, sizeof(buff),
NPC_ROOMADMINNEW_MSG_CONGRATULATION, pname, pname, pname);
failed = FALSE;
break;
}
}
if( failed) {
NPC_RoomAdminNew_WriteDataFile( meindex, -1, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM), NULL, 0);
2017-01-13 23:37:03 +08:00
/* 竟癫樊反中引六氏丢永本□斥 */
2016-12-24 08:45:52 +08:00
snprintf( buff, sizeof(buff),
NPC_ROOMADMINNEW_MSG_NONE);
}
2017-01-13 23:37:03 +08:00
/* 仇及白夫失卞中月谛蝈够卞霜耨 */
2016-12-24 08:45:52 +08:00
NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff);
NPC_RoomAdminNew_SetNextAuction( meindex);
}
/*-----------------------------------------------
*----------------------------------------------*/
static int NPC_RoomAdminNew_SearchPlayerHasMostMoney( int meindex)
{
int i,j, range;
int fl,x,y, gold;
int doorindex;
int topindex;
fl = CHAR_getInt( meindex, CHAR_FLOOR);
x = CHAR_getInt( meindex, CHAR_X);
y = CHAR_getInt( meindex, CHAR_Y);
range = CHAR_getWorkInt( meindex , CHAR_WORKINT_RANGE);
topindex = -1;
doorindex = NPC_DoorSearchByName( CHAR_getWorkChar( meindex,
CHAR_WORKCHAR_NEXTROOM));
gold = atoi( CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT));
for( i = x-range ; i <= x+range ; i++ ){
for( j = y-range ; j <= y+range ; j ++ ){
OBJECT object;
for( object = MAP_getTopObj( fl, i,j); object;
object = NEXT_OBJECT(object) )
{
int objindex = GET_OBJINDEX( object);
if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){
int index;
index = OBJECT_getIndex(objindex);
if( CHAR_getInt( index,
CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER )
{
if( CHAR_getInt( index, CHAR_GOLD) >= gold ) {
if( topindex == -1 ) {
topindex = index;
}
else {
int nowgold,topgold;
nowgold = CHAR_getInt( index, CHAR_GOLD );
topgold = CHAR_getInt( topindex, CHAR_GOLD);
if( nowgold > topgold ) {
topindex = index;
}
else if( nowgold == topgold ) {
2017-01-13 23:37:03 +08:00
/* 域踝卅日伊矛伙互斓中谛 */
2016-12-24 08:45:52 +08:00
int nowlv, toplv;
nowlv = CHAR_getInt( index, CHAR_LV );
toplv = CHAR_getInt( topindex, CHAR_LV);
if( nowlv < toplv ) {
topindex = index;
}
2017-01-13 23:37:03 +08:00
/* 公木匹手荸瑁仄卅中氏卅日仿件母丞元扎*/
/* index互燮及谛互切斤匀午尕厍分仃升 */
2016-12-24 08:45:52 +08:00
else if( nowlv == toplv ) {
if( RAND( 0,1)) {
topindex = index;
}
}
}
}
}
}
}
}
}
}
return( topindex);
}
/*-----------------------------------------------
2017-01-13 23:37:03 +08:00
* index及白夫失卞中月皿伊奶乩
2016-12-24 08:45:52 +08:00
*----------------------------------------------*/
static void NPC_RoomAdminNew_SendMsgThisFloor( int index, char *buff)
{
int i, fl;
int playernum = CHAR_getPlayerMaxNum();
fl = CHAR_getInt( index, CHAR_FLOOR);
for( i = 0; i < playernum; i ++ ) {
if( CHAR_getInt( i, CHAR_FLOOR) == fl ) {
if( CHAR_getInt( i, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {
CHAR_talkToCli( i, index, buff, NPC_ROOMADMINNEW_MSGCOLOR);
}
}
}
}
/*-----------------------------------------------
*----------------------------------------------*/
static void NPC_RoomAdminNew_CreatePasswd( char *passwd, int passlen)
{
2017-01-13 23:37:03 +08:00
#define NPC_ROOMADMINNEW_RAND() ( (rand() /256) % 32768 ) /* 256匹喃月及反刭醒及 撙及凶户 */
2016-12-24 08:45:52 +08:00
int i;
char *candidates[]= {
"A","B","D", "E","F","G","H", "J","K","L","M", "N","P","Q","R",
"T","W","X","Y", "a","b","d","e", "f","g","m","n", "q","r","t",
"0","1","2", "3","4","5","6", "7","8","9"
};
strcpy( passwd , "");
for(i = 0;i < passlen -1 ; i++){
strcat( passwd , candidates[ NPC_ROOMADMINNEW_RAND() % (sizeof( candidates)/sizeof(candidates[0])) ] );
}
#undef NPC_ROOMADMINNEW_RAND
}
/*-----------------------------------------------
*
*
* cdkey|charaname|passwd|expiretime
*
*
*----------------------------------------------*/
static BOOL NPC_RoomAdminNew_WriteDataFile( int meindex, int pindex,
char *roomname,
char *passwd, int flg)
{
char *cdkey;
char charaname[32*2];
char expiretime[64];
char filename[128];
char outbuf[1024];
FILE *fp_src;
strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
/*strcat( filename, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));*/
strcat( filename, roomname);
strcat( filename, NPC_ROOMADMINNEW_EXTENSION);
if( flg) {
//getcdkeyFromCharaIndex( pindex, cdkey, sizeof(cdkey ));
cdkey = CHAR_getChar( pindex, CHAR_CDKEY);
makeEscapeString( CHAR_getChar( pindex, CHAR_NAME),
charaname, sizeof( charaname));
2017-01-13 23:37:03 +08:00
/* 渝蜃濠木凛棉 */
2016-12-24 08:45:52 +08:00
snprintf( expiretime, sizeof( expiretime), "%d",
CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME)
2017-01-13 23:37:03 +08:00
+ NPC_ROOMADMINNEW_2WEEK /* ㄡ葱棉詨 */
2016-12-24 08:45:52 +08:00
);
2017-01-13 23:37:03 +08:00
/* 犯伉立正匹仁仁月 */
2016-12-24 08:45:52 +08:00
snprintf( outbuf, sizeof( outbuf), "%s|%s|%s|%s|",
cdkey, charaname, passwd, expiretime);
fp_src = fopen( filename, "w");
if( !fp_src) {
print( "[%s:%d] File Open Error\n", __FILE__, __LINE__);
return FALSE;
}
fputs( outbuf, fp_src);
fclose( fp_src);
}
else {
unlink( filename);
}
return TRUE;
}
/*-----------------------------------------------
*----------------------------------------------*/
BOOL NPC_RoomAdminNew_ReadFile( char *roomname, NPC_ROOMINFO *data)
{
FILE *fp;
char line[1024];
char buf2[128];
char filename[128];
strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
strcat( filename, roomname);
strcat( filename, NPC_ROOMADMINNEW_EXTENSION);
fp = fopen( filename, "r");
if( !fp) return FALSE;
fgets( line, sizeof( line), fp);
2017-01-13 23:37:03 +08:00
/* 犯□正本永玄 */
2016-12-24 08:45:52 +08:00
getStringFromIndexWithDelim( line, "|" , 1 , buf2,sizeof(buf2) );
strcpy( data->cdkey, buf2);
getStringFromIndexWithDelim( line, "|" , 2 , buf2,sizeof(buf2) );
strcpy( data->charaname, makeStringFromEscaped( buf2));
getStringFromIndexWithDelim( line, "|" , 3 , buf2,sizeof(buf2) );
strcpy( data->passwd, buf2);
getStringFromIndexWithDelim( line, "|" , 4 , buf2,sizeof(buf2) );
if( strcmp( buf2, "max") == 0 ) {
data->expire = 0xffffffff;
}
else {
data->expire = atoi( buf2);
}
fclose( fp);
return TRUE;
}
/*-----------------------------------------------
*----------------------------------------------*/
static BOOL NPC_RoomAdminNew_SetNextAuction( int meindex)
{
int i, j;
int hitindex = -1;
int charnum = CHAR_getCharNum();
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
struct tm tmwk;
memcpy( &tmwk, localtime( ( time_t *)&NowTime.tv_sec), sizeof( tmwk));
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
*/
for( i = CHAR_getPlayerMaxNum()+ CHAR_getPetMaxNum();
i < charnum;
i ++ )
{
if( CHAR_getInt( i, CHAR_WHICHTYPE) != CHAR_TYPEDOOR) {
continue;
}
if( CHAR_getWorkInt( i, CHAR_WORKDOORPASSFLG) == 0 ) {
continue;
}
for( j = 3; ; j ++ ) {
int rc;
char *doorname;
char buf[256];
int dataexist;
NPC_ROOMINFO data;
rc = getStringFromIndexWithDelim( argstr, "|" , j,
buf,sizeof(buf) );
if( rc != TRUE ) {
break;
}
doorname = CHAR_getWorkChar( i, CHAR_WORKDOORNAME);
if( strcmp( buf, doorname ) != 0 ) {
continue;
}
if( atoi( CHAR_getWorkChar( i, CHAR_WORKDOORWEEK)) != tmwk.tm_wday) {
break;
}
2017-01-13 23:37:03 +08:00
/* 域杀赓渝祭 */
2016-12-24 08:45:52 +08:00
memset( &data, 0, sizeof( data));
if( NPC_RoomAdminNew_ReadFile( doorname, &data) ) {
struct tm tmdoor;
2017-01-13 23:37:03 +08:00
*
2016-12-24 08:45:52 +08:00
*/
if( data.expire < NowTime.tv_sec) {
NPC_RoomAdminNew_WriteDataFile( meindex, -1,doorname, NULL, 0);
2017-01-13 23:37:03 +08:00
/* 玉失手五木中卞*/
2016-12-24 08:45:52 +08:00
NPC_DoorSetPasswd( i, "8hda8iauia90494jasd9asodfasdf89");
CHAR_setWorkInt( i, CHAR_WORKDOOREXPIRETIME, 0xffffffff);
break;
}
memcpy( &tmdoor, localtime( ( time_t *)&data.expire), sizeof( tmdoor));
if( tmdoor.tm_mon != tmwk.tm_mon ||
tmdoor.tm_mday != tmwk.tm_mday)
{
break;
}
dataexist = TRUE;
}
else {
dataexist = FALSE;
}
if( tmwk.tm_hour > atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))){
break;
}
if( tmwk.tm_hour == atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR))) {
if( tmwk.tm_min >= atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE))) {
break;
}
}
2017-01-13 23:37:03 +08:00
/* 仇仇引匹五凶日午曰丐尹内仇及玉失反戚钒疡卞请月凤伞互
2016-12-24 08:45:52 +08:00
*/
if( hitindex == -1 ) {
hitindex = i;
}
else {
if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR))
> atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR)))
{
hitindex = i;
}
else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR))
== atoi( CHAR_getWorkChar( i, CHAR_WORKDOORHOUR)))
{
if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE))
> atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE)))
{
hitindex = i;
}
else if( atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE))
== atoi( CHAR_getWorkChar( i, CHAR_WORKDOORMINUTE)))
{
NPC_ROOMINFO datawk;
int hitindexdataexist;
hitindexdataexist = NPC_RoomAdminNew_ReadFile(
CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME),
&datawk);
if( hitindexdataexist < dataexist ) {
hitindex = i;
}
}
}
}
}
}
if( hitindex > 0 ) {
2017-01-13 23:37:03 +08:00
/* 钒疡凛棉毛本永玄 */
2016-12-24 08:45:52 +08:00
tmwk.tm_sec = 0;
tmwk.tm_min = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORMINUTE));
tmwk.tm_hour = atoi( CHAR_getWorkChar( hitindex, CHAR_WORKDOORHOUR));
CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, mktime( &tmwk));
CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM,
CHAR_getWorkChar( hitindex, CHAR_WORKDOORNAME));
}
else {
CHAR_setWorkInt( meindex, CHAR_WORKINT_NEXTTIME, 0);
CHAR_setWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM,"" );
}
2017-01-13 23:37:03 +08:00
/* 腹绸凛棉毛本永玄 */
2016-12-24 08:45:52 +08:00
CHAR_setWorkInt( meindex, CHAR_WORKINT_SEARCHROOMTIME, NowTime.tv_sec);
return( TRUE);
}
/*-----------------------------------------------
*----------------------------------------------*/
static void NPC_RoomAdminNew_DspRoomPasswd( int index, int adminindex, int talkerindex)
{
int i, rc, flg = FALSE;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char argstr2[NPC_UTIL_GETARGSTR_BUFSIZE];
char *cdkey;
char buf[128];
char buff[16];
char buf2[1024];
NPC_ROOMINFO info;
//getcdkeyFromCharaIndex( talkerindex, cdkey, sizeof(cdkey));
cdkey = CHAR_getChar( talkerindex, CHAR_CDKEY);
NPC_Util_GetArgStr( adminindex, argstr, sizeof( argstr));
for( i = 3; ; i ++ ) {
if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) {
rc = NPC_RoomAdminNew_ReadFile( buf, &info);
if( rc == TRUE ) {
if( strcmp( info.cdkey, cdkey) == 0 &&
strcmp( info.charaname,
CHAR_getChar( talkerindex, CHAR_NAME)) == 0 )
{
int doorindex;
char msgbuf[256];
doorindex = NPC_DoorSearchByName( buf);
NPC_Util_GetArgStr( doorindex, argstr2, sizeof( argstr2));
getStringFromIndexWithDelim( argstr2, "|" , 9 ,
buf2,sizeof(buf2) );
if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
2017-01-13 23:37:03 +08:00
strcpy( buff, "号室");
2016-12-24 08:45:52 +08:00
}
else {
buff[0] = '\0';
}
2017-01-13 23:37:03 +08:00
/* 丢永本□斥本永玄 */
2016-12-24 08:45:52 +08:00
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPPASSWD1,
buf2,
CHAR_getChar( doorindex, CHAR_NAME),
buff
);
2017-01-13 23:37:03 +08:00
/* 丢永本□斥霜耨 */
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( talkerindex, index,msgbuf,
NPC_ROOMADMINNEW_MSGCOLOR);
2017-01-13 23:37:03 +08:00
/* 丢永本□斥本永玄 */
2016-12-24 08:45:52 +08:00
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPPASSWD2,
CHAR_getWorkChar(doorindex, CHAR_WORKDOORPASSWD)
);
2017-01-13 23:37:03 +08:00
/* 丢永本□斥霜耨 */
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( talkerindex, index,msgbuf,
NPC_ROOMADMINNEW_MSGCOLOR);
flg = TRUE;
}
}
}
else {
break;
}
}
if( !flg) {
CHAR_talkToCli( talkerindex, index,
NPC_ROOMADMINNEW_MSG_PRINTPASSWD_NONE,
NPC_ROOMADMINNEW_MSGCOLOR);
}
}
/*-----------------------------------------------
*----------------------------------------------*/
static void NPC_RoomAdminNew_DspNextAuction( int meindex, int talkerindex)
{
char msgbuf[2048];
time_t closetime;
closetime = CHAR_getWorkInt( meindex, CHAR_WORKINT_NEXTTIME);
if( closetime == 0 ) {
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE
);
CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
}
else {
int doorindex;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buff[16];
struct tm tmwk;
int difftime;
doorindex = NPC_DoorSearchByName(
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
NPC_Util_GetArgStr( doorindex, argstr, sizeof( argstr));
getStringFromIndexWithDelim(argstr, "|" , 9 , explain,sizeof(explain));
if( strlen(CHAR_getChar( doorindex, CHAR_NAME) ) != 0 ) {
2017-01-13 23:37:03 +08:00
strcpy( buff, "号室");
2016-12-24 08:45:52 +08:00
}
else {
buff[0] = '\0';
}
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1,
explain,
CHAR_getChar( doorindex, CHAR_NAME),
buff
);
CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
2017-01-13 23:37:03 +08:00
/* 蠡户濠曰凛棉 */
2016-12-24 08:45:52 +08:00
memcpy( &tmwk, localtime( &closetime), sizeof( tmwk));
difftime = closetime - NowTime.tv_sec;
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2,
tmwk.tm_hour,
tmwk.tm_min,
difftime / 3600,
(difftime % 3600) / 60
);
CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
2017-01-13 23:37:03 +08:00
/* 票蜃嗯喊 */
2016-12-24 08:45:52 +08:00
snprintf( msgbuf, sizeof( msgbuf),
NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3,
CHAR_getWorkChar( doorindex, CHAR_WORKDOORGOLDLIMIT)
);
CHAR_talkToCli( talkerindex, meindex,msgbuf, NPC_ROOMADMINNEW_MSGCOLOR);
}
}
/*-----------------------------------------------
*
*
* gold|time|cdkey|charaname|owntitle
*
*----------------------------------------------*/
static int NPC_RoomAdminNew_WriteScoreFile( int meindex, int pindex)
{
#define NPC_RANKING_DEFAULT 10
int ret = 0;
char *cdkey;
char charaname[32*2],owntitle[32*2];
char filename_dest[128],filename[128];
char outbuf[1024], line[1024];
FILE *fp_src, *fp_dest;
strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
strcat( filename, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_MYNAME));
strcpy( filename_dest, filename);
strcat( filename, NPC_ROOMADMINNEW_RANKING_EXTENSION);
strcat( filename_dest, NPC_ROOMADMINNEW_RANKING_EXTENSION_TMP);
//getcdkeyFromCharaIndex( pindex , cdkey , sizeof(cdkey ));
cdkey = CHAR_getChar( pindex, CHAR_CDKEY);
makeEscapeString( CHAR_getChar( pindex, CHAR_NAME),
charaname, sizeof( charaname));
makeEscapeString( CHAR_getChar( pindex, CHAR_OWNTITLE),
owntitle, sizeof( owntitle));
2017-01-13 23:37:03 +08:00
/* 犯伉立正匹仁仁月 */
2016-12-24 08:45:52 +08:00
snprintf( outbuf, sizeof( outbuf), "%d|%d|%s|%s|%s|\n",
CHAR_getInt( pindex, CHAR_GOLD),
CHAR_getWorkInt( meindex,CHAR_WORKINT_NEXTTIME),
cdkey, charaname, owntitle );
fp_dest = fopen( filename_dest, "w");
if( !fp_dest) return -1;
fp_src = fopen( filename, "r");
if( !fp_src ) {
fclose( fp_dest);
fp_src = fopen( filename, "w");
if( !fp_src) return -1;
fputs( outbuf, fp_src);
fclose( fp_src);
return 1;
}
else {
int cnt = 1;
char buf[128];
while( fgets( line, sizeof( line), fp_src)) {
getStringFromIndexWithDelim( line, "|" , 1 , buf,sizeof(buf) );
if( ret == 0 ) {
if( atoi( buf) < CHAR_getInt( pindex, CHAR_GOLD) ) {
fputs( outbuf, fp_dest);
fputs( line, fp_dest);
ret = cnt;
cnt ++;
}
else {
2017-01-13 23:37:03 +08:00
/* 公木动陆反公及引引踏仁 */
2016-12-24 08:45:52 +08:00
fputs( line, fp_dest);
}
}
else {
2017-01-13 23:37:03 +08:00
/* 公木动陆反公及引引踏仁 */
2016-12-24 08:45:52 +08:00
fputs( line, fp_dest);
}
cnt ++;
if( cnt > NPC_RANKING_DEFAULT ) break;
}
2017-01-13 23:37:03 +08:00
/* 仿件平件弘互ㄠㄟ蜊公欠匀化中卅中凛 */
2016-12-24 08:45:52 +08:00
if( ret == 0 && cnt <= NPC_RANKING_DEFAULT ) {
fputs( outbuf, fp_dest);
ret = cnt;
}
}
fclose( fp_src);
fclose( fp_dest);
fp_src = fopen( filename_dest, "r");
if( !fp_src) return -1;
fp_dest = fopen( filename, "w");
if( !fp_dest) {
fclose( fp_src);
return -1;
}
while( fgets( line, sizeof( line), fp_src)) {
fputs( line, fp_dest);
}
fclose( fp_dest);
fclose( fp_src);
return( ret);
#undef NPC_RANKING_DEFAULT
}
/*-----------------------------------------------
*
*
*----------------------------------------------*/
static void NPC_RoomAdminNew_ReadScoreFile( int meindex, int talkerindex,
char *admname)
{
int cnt;
char filename[128];
char line[1024];
FILE *fp;
strcpy( filename, NPC_ROOMADMINNEW_DATADIR);
strcat( filename, admname);
strcat( filename, NPC_ROOMADMINNEW_RANKING_EXTENSION);
fp = fopen( filename, "r");
if( !fp) return;
cnt = 1;
while( fgets( line, sizeof( line), fp)) {
int gold,bidtime;
char charaname[32],owntitle[32];
char tmp[64];
char outbuf[1024], buf[256];
struct tm tmwk;
getStringFromIndexWithDelim( line, "|" , 1 , buf,sizeof(buf) );
gold = atoi(buf);
getStringFromIndexWithDelim( line, "|" , 2 , buf,sizeof(buf) );
bidtime = atoi(buf);
getStringFromIndexWithDelim( line, "|" , 4 , buf,sizeof(buf) );
strcpy( charaname, makeStringFromEscaped( buf));
getStringFromIndexWithDelim( line, "|" , 5 , buf,sizeof(buf) );
strcpy( owntitle, makeStringFromEscaped( buf));
if( strlen( owntitle) != 0 ) {
strcpy( tmp, "[");
strcat( tmp, owntitle);
strcat( tmp, "] ");
strcpy( owntitle, tmp);
}
else {
strcpy( owntitle, " ");
}
memcpy( &tmwk, localtime( (time_t *)&bidtime), sizeof( tmwk));
snprintf( outbuf, sizeof( outbuf),
NPC_ROOMADMINNEW_MSG_RANKING,
cnt,
tmwk.tm_year + 1900,
tmwk.tm_mon+1,
tmwk.tm_mday,
gold,charaname,owntitle
);
CHAR_talkToCli( talkerindex, meindex,outbuf,
NPC_RANKING_MSGCOLOR);
cnt ++;
}
fclose( fp);
}
/************************************************
************************************************/
BOOL NPC_RankingInit( int meindex )
{
char buf[256];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
2017-01-13 23:37:03 +08:00
/* type本永玄 */
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPERANKING);
if( !getStringFromIndexWithDelim(argstr, "|" , 1 , buf,sizeof(buf) )) {
print( "arg err.rankingNPC not created.\n");
return( FALSE);
}
CHAR_setWorkChar( meindex , CHAR_WORKCHAR_ADMNAME , buf);
return TRUE;
}
/************************************************
************************************************/
void NPC_RankingTalked( int meindex , int talkerindex , char *msg ,
int color )
{
if(NPC_Util_CharDistance( talkerindex, meindex ) > 1)return;
CHAR_talkToCli( talkerindex, meindex,
NPC_ROOMADMINNEW_MSG_RANKING_INFO,
NPC_RANKING_MSGCOLOR);
NPC_RoomAdminNew_ReadScoreFile( meindex, talkerindex,
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_ADMNAME));
}
/************************************************
************************************************/
BOOL NPC_PrintpassmanInit( int meindex )
{
char buf[256];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
2017-01-13 23:37:03 +08:00
/* type本永玄 */
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEPRINTPASSMAN);
if( !getStringFromIndexWithDelim(argstr, "|" , 1 , buf,sizeof(buf) )) {
print( "arg err.passmanNPC not created.\n");
return( FALSE);
}
CHAR_setWorkChar( meindex , CHAR_WORKCHAR_ADMNAME , buf);
return TRUE;
}
/************************************************
************************************************/
void NPC_PrintpassmanTalked( int meindex , int talkerindex , char *msg ,
int color )
{
int i;
int charnum;
if(NPC_Util_CharDistance( talkerindex, meindex ) > 2)return;
charnum = CHAR_getCharNum();
for(i= CHAR_getPlayerMaxNum() +CHAR_getPetMaxNum();
i<charnum;
i++){
if( CHAR_getCharUse(i) &&
CHAR_getInt( i ,CHAR_WHICHTYPE) == CHAR_TYPEROOMADMIN ){
if( strcmp( CHAR_getWorkChar(i,CHAR_WORKCHAR_MYNAME),
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_ADMNAME))
==0 )
{
break;
}
}
}
if( i < charnum ) {
NPC_RoomAdminNew_DspRoomPasswd( meindex, i, talkerindex);
}
else {
2017-01-13 23:37:03 +08:00
CHAR_talkToCli( talkerindex, meindex, "。。。", NPC_RANKING_MSGCOLOR);
2016-12-24 08:45:52 +08:00
}
}
/* end of roomadminnew */