?? npc_roomadminnew.c
字號:
#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"
/*
* 尕 遣支今氏 By Kawata
*
* 酷 汔卞 凳及啃踏五 仄兇 互鍍中午 丹及匹踏五卅云仄
*/
enum{
/* 左□弁撲亦件 區 */
CHAR_WORKINT_RANGE = CHAR_NPCWORKINT1,
/* 戚及蠡濠凜棉 */
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,
};
/* 犯□正白央奶伙毛傘 允月犯奴伊弁玄伉[ls2/src/lss 井日及鍬覆隙爛 */
#define NPC_ROOMADMINNEW_DATADIR "roomadmin/"
/* 犯□正白央奶伙及傀艦閡 */
#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 \
"%s %s %s的活動,截止日%d分前。"
#define NPC_ROOMADMINNEW_MSG_CLOSE \
"。。。已截止。"
#define NPC_ROOMADMINNEW_MSG_NONE \
"很可惜本次沒有人獲得房間的擁有權。"
#define NPC_ROOMADMINNEW_MSG_CONGRATULATION \
"恭喜您!%s獲得房間的所有權!%s的金錢全部被徵收了。%s請向管理員詢問房間暗號。"
#define NPC_ROOMADMINNEW_MSG_PRINTPASSWD_NONE \
"由於你未持有房間因此沒有暗號。"
#define NPC_ROOMADMINNEW_MSG_DSPPASSWD1 \
"你的房間是 %s %s %s。"
#define NPC_ROOMADMINNEW_MSG_DSPPASSWD2 \
"房間的暗號是 「%s 」。只要在對著門說話時在與尾加上「...」,別人就看不見了??!"
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION_NONE \
"本日的活動結束。"
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION1 \
"接下來的房間是 %s %s %s。"
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION2 \
"截止日是 %d:%d 。到截止日為止還有%2d小時%02d分。"
#define NPC_ROOMADMINNEW_MSG_DSPNEXTAUCTION3 \
"最低得標金額是 %s 。"
#define NPC_ROOMADMINNEW_MSG_RANKING_INFO \
"這是高額得標者排行榜。"
#define NPC_ROOMADMINNEW_MSG_RANKING \
"Rank %2d:%4d/%02d/%02d %8d GOLD %s%s "
/* 仇及NPC及丟永本□斥縉 */
#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];
/* 憤坌及棟喱及蟈 及玉失互請 曉互月引匹仇及NPC反綜岳今木卅中 */
for( i = 3; ; i ++ ) {
if( getStringFromIndexWithDelim(argstr, "|" , i , buf,sizeof(buf) )) {
if( NPC_DoorSearchByName( buf) < 0 ) {
print( "admin not created.在密碼門做好之前先等待。\n");
return FALSE;
}
}
else{
break;
}
}
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
/* 賡渝祭質 */
/* type本永玄 */
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);
/* 手仄手及凜及啃卞hun互穴奶瓜旦及凜反ㄟ卞 允 */
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 ) {
strcpy( msgbuff, "號室");
}
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 {
/* >蠡戶濠曰引仄兇= */
strcpy( buff, NPC_ROOMADMINNEW_MSG_CLOSE);
CHAR_setWorkInt( meindex, CHAR_WORKINT_PRINTCLOSETIME, 0);
}
/* 仇及白夫失卞中月諦蟈夠卞霜耨 */
NPC_RoomAdminNew_SendMsgThisFloor( meindex, buff);
}
}
/* 蠡戶濠勻兇凜及質 */
if( hun == 0 ) {
NPC_RoomAdminNew_CloseProc( meindex);
}
}
/************************************************
* 仄井仃日木兇凜及質
************************************************/
void NPC_RoomAdminNewTalked( int meindex , int talkerindex , char *msg ,
int color )
{
/* 皿伊奶乩□互玉失穴件及1弘伉永玉動 卅日 殺允月[ */
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);
/* 竟癲樊失伉 */
if( pindex != -1) {
/* ㄠ莢匹 仃月伙□皿匹允 */
while( 1) {
char passwd[9];
int doorindex;
doorindex = NPC_DoorSearchByName(
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM));
/* 由旦伐□玉毛戲岳允月 */
NPC_RoomAdminNew_CreatePasswd( passwd, sizeof( passwd));
/* 白央奶伙卞仇及諦及 平□]平乓仿 ] 盒 ]由旦毛踏五 戈 */
if( NPC_RoomAdminNew_WriteDataFile( meindex, pindex,
CHAR_getWorkChar( meindex, CHAR_WORKCHAR_NEXTROOM),
passwd, 1)
== FALSE)
{
break;
}
/* 玉失卞由旦毛本永玄 */
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);
/* 竟癲樊反中引六氏丟永本□斥 */
snprintf( buff, sizeof(buff),
NPC_ROOMADMINNEW_MSG_NONE);
}
/* 仇及白夫失卞中月諦蟈夠卞霜耨 */
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);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -