stoneage8.5/石器时代8.5客户端最新源代码/石器源码/CharTitle.cpp
2020-06-23 02:36:45 +08:00

521 lines
16 KiB
C++

#include "../systeminc/version.h"
#include "../systeminc/system.h"
#include "../systeminc/font.h"
#include "../systeminc/action.h"
#include "systeminc\sprdisp.h"
#include "systeminc\menu.h"
#include "systeminc\mouse.h"
#include "newproto\autil.h"
#include "newproto\protocol.h"
#ifdef _CHARTITLE_STR_
extern unsigned int sockfd;
typedef struct{
BOOL windowDisplay;//窗口显示;
BOOL confirmWindowDisplay;//确定窗口显示;
int crtPage;//当前页数;
int confirmImageIdx;//确定图档索引;
char intro[100][32]; //介绍
int aliasIdx[100];//称号索引
TITLE_STR title;//当前称号
TITLE_STR titledata[100];//称号数据
BOOL closeWindow;//关闭窗口;
}AliasStruct//称号数据结构;
extern int play_se(int tone, int x, int y);
AliasStruct alias; //称号;
//打开称号窗口初始化
void openAliasWindowInit()
{
/*
if(称号.窗口显示){
称号.窗口显示=FALSE;
称号.确定窗口显示=FALSE;
}else{
称号.当前页数=0;
称号.窗口显示=TRUE;
称号.确定窗口显示=FALSE;
}*/
if (alias.windowDisplay) {
alias.windowDisplay = FALSE;
alias.confirmWindowDisplay = FALSE;
}
else {
alias.crtPage = 0;
alias.windowDisplay = TRUE;
alias.confirmWindowDisplay = FALSE;
}
}
extern void PutTitleText(int x,int y,char fontPrio,TITLE_STR str,BOOL hitFlag);
//BOOL 获取称号取消窗口()
BOOL cancelAlais()
{
//return 称号.关闭窗口;
return alias.closeWindow;
}
//void 设置称号取消窗口()
void configAlaisCancelWindow()
{
/*
if(称号.关闭窗口) 称号.关闭窗口=FALSE;
else 称号.关闭窗口=TRUE;
*/
if (alias.closeWindow) alias.closeWindow = FALSE;
else alias.closeWindow = TRUE;
}
//BOOL 获取当前称号是否存在()
BOOL checkCrtAlaisExist()
{
//return 称号.title.flg;
return alias.title.flg;
}
//void 称号展示()
void alaisDisplay()
{
/*
if(称号.title.flg){
PutTitleText(78-称号.title.len/2,49,FONT_PRIO_FRONT,称号.title,0);
}
int bnt;
bnt = StockFontBuffer(18,49,1,FONT_PAL_GREEN," ",2);
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(HitFontNo == bnt){
if(称号.关闭窗口) 称号.关闭窗口=FALSE;
else 称号.关闭窗口=TRUE;
play_se(203, 320, 240);
}
}*/
if (alias.title.flg) {
PutTitleText(78 - alias.title.len / 2, 49, FONT_PRIO_FRONT, alias.title, 0);
}
int bnt;
bnt = StockFontBuffer(18, 49, 1, FONT_PAL_GREEN, " ", 2);
if (mouse.onceState & MOUSE_LEFT_CRICK > 0) {
if (HitFontNo == bnt) {
if (alias.closeWindow) alias.closeWindow = FALSE;
else alias.closeWindow = TRUE;
play_se(203, 320, 240);
}
}
}
//BOOL 人物称号处理(ACTION * pct)
BOOL characterAlaisHandle(ACTION * pct)
{
/*
int x,y;
x = pct->x;
y = pct->y + 133;
int 按钮左=-1;
int 按钮右=-1;
int 按钮关闭=-1;
int 按钮ID;
按钮左 = StockDispBuffer( x -55, y + 7, DISP_PRIO_IME3, 55250, 2 );
按钮右 = StockDispBuffer( x -20, y + 7, DISP_PRIO_IME3, 55251, 2 );
按钮关闭 = StockDispBuffer( x+40, y + 7, DISP_PRIO_IME3, 55252, 2 );
if( mouse.onceState & MOUSE_LEFT_CRICK ){
if(!称号.确定窗口显示){
if(按钮左 == HitDispNo){
if(称号.当前页数){
称号.当前页数--;
}
}
if(按钮右 == HitDispNo){
if(称号.当前页数!=19 && 称号.titledata[(称号.当前页数+1)*5].flg)
{
称号.当前页数++;
}
}
if(按钮关闭 == HitDispNo){
DeathAction(pct);
称号.窗口显示=FALSE;
称号.确定窗口显示=FALSE;
return TRUE;
}
}
}
int i=0;
int 称号图档索引;
for(;i<5;i++){
称号图档索引 = 称号.当前页数*5+i;
if(称号.titledata[称号图档索引].flg)
{
PutTitleText(380-称号.titledata[称号图档索引].len/2,43+i*0x20,FONT_PRIO_FRONT,称号.titledata[称号图档索引],0);
char 称号序号[128];
sprintf_s(称号序号,"%03d",称号图档索引+1);
StockFontBufferExt(0x130,0x2D+i*0x20,1,FONT_PAL_GREEN,称号序号,0,19);
if(!称号.确定窗口显示){
if(MakeHitBox(0x124,0x26+i*0x20,0x1B8,0x44+i*0x20,0x6D)==1){
StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号图档索引],0);
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
称号.确定图档索引=称号.称号索引[ 称号图档索引];
称号.确定窗口显示=TRUE;
}
}
}
}else break;
}
if(称号.确定窗口显示){
StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号.确定图档索引],0);
StockFontBuffer(0x130,0x118,2,0,"确定使用该称号吗?",0);
StockDispBuffer(0x16D,0x130,0x6C,55253,1);//确定窗口底图
按钮ID = StockDispBuffer(0x194,0x148,109,55252,2);//关闭
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(按钮ID == HitDispNo){
称号.确定窗口显示=FALSE;
称号.确定图档索引=0;
}
}
按钮ID = StockDispBuffer(0x148,0x148,109,55254,2);//确定
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(按钮ID == HitDispNo){
int checksum=0;
char buf[1024*4];
memset(buf,0,1024*4);
checksum += util_mkint(buf, 称号.确定图档索引);
util_mkint(buf, checksum);
util_SendMesg(sockfd, LSSPROTO_CHARTITLE_SEND, buf);
称号.确定窗口显示=FALSE;
称号.确定图档索引=0;
}
}
}
return FALSE;
*/
int x,y;
x = pct->x;
y = pct->y + 133;
int buttonLeft=-1;
int buttonRight=-1;
int buttonClose=-1;
int buttonID;
buttonLeft = StockDispBuffer( x -55, y + 7, DISP_PRIO_IME3, 55250, 2 );
buttonRight = StockDispBuffer( x -20, y + 7, DISP_PRIO_IME3, 55251, 2 );
buttonClose = StockDispBuffer( x+40, y + 7, DISP_PRIO_IME3, 55252, 2 );
if( mouse.onceState & MOUSE_LEFT_CRICK ){
if(!alias.confirmWindowDisplay){
if(buttonLeft == HitDispNo){
if(alias.crtPage){
alias.crtPage--;
}
}
if(buttonRight == HitDispNo){
if(alias.crtPage!=19 && alias.titledata[(alias.crtPage+1)*5].flg)
{
alias.crtPage++;
}
}
if(buttonClose == HitDispNo){
DeathAction(pct);
alias.windowDisplay=FALSE;
alias.confirmWindowDisplay=FALSE;
return TRUE;
}
}
}
int i=0;
int aliasImageIdx;
for(;i<5;i++){
aliasImageIdx = alias.crtPage*5+i;
if(alias.titledata[aliasImageIdx].flg)
{
PutTitleText(380- alias.titledata[aliasImageIdx].len/2,43+i*0x20,FONT_PRIO_FRONT, alias.titledata[aliasImageIdx],0);
char aliasSerial[128];
sprintf_s(aliasSerial,"%03d", aliasImageIdx +1);
StockFontBufferExt(0x130,0x2D+i*0x20,1,FONT_PAL_GREEN, aliasSerial,0,19);
if(!alias.confirmWindowDisplay){
if(MakeHitBox(0x124,0x26+i*0x20,0x1B8,0x44+i*0x20,0x6D)==1){
StockFontBuffer(0x123,0xD1,2,0, alias.intro[aliasImageIdx],0);
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
alias.confirmImageIdx=alias.aliasIdx[aliasImageIdx];
alias.confirmWindowDisplay=TRUE;
}
}
}
}else break;
}
if(alias.confirmWindowDisplay){
StockFontBuffer(0x123,0xD1,2,0, alias.intro[alias.confirmImageIdx],0);
StockFontBuffer(0x130,0x118,2,0,"确定使用该称号吗?",0);
StockDispBuffer(0x16D,0x130,0x6C,55253,1);//确定窗口底图
buttonID = StockDispBuffer(0x194,0x148,109,55252,2);//关闭
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(buttonID == HitDispNo){
alias.confirmWindowDisplay=FALSE;
alias.confirmImageIdx=0;
}
}
buttonID = StockDispBuffer(0x148,0x148,109,55254,2);//确定
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(buttonID == HitDispNo){
int checksum=0;
char buf[1024*4];
memset(buf,0,1024*4);
checksum += util_mkint(buf, alias.confirmImageIdx);
util_mkint(buf, checksum);
util_SendMesg(sockfd, LSSPROTO_CHARTITLE_SEND, buf);
alias.confirmWindowDisplay=FALSE;
alias.confirmImageIdx=0;
}
}
}
return FALSE;
}
extern void getCharTitleSplit( char *str,TITLE_STR* title);
void (char *)
{
char [126],[1024],[1024],[4000],[126];
memset(,0,126);
memset(,0,1024);
memset(,0,1024);
memset(,0,4000);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",1,,126);
getStringFromIndexWithDelim_body((char *) ,(char *)"|",1,,126);
int titleindex = atoi();
extern char* FreeGetTitleStr(int id);
if(titleindex>0) getCharTitleSplit(FreeGetTitleStr(titleindex),&.title);
else memset(&.title,0,sizeof(TITLE_STR));
getStringFromIndexWithDelim_body((char *) ,(char *)"|",2,,126);
int = atoi();
if(!=0){
memset(&.titledata,0,sizeof(.titledata[0])*100);
memset(&.,0,sizeof(int)*100);
memset(&.,0,32*100);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",2,,1024);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",3,,4000);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",4,,1024);
int i=0;
extern char* FreeGetTitleStr(int id);
for(i;i<;i++){
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
titleindex = atoi();
getCharTitleSplit(FreeGetTitleStr(titleindex),&.titledata[i]);
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
.[i]=atoi();
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
sprintf_s(.[i],32,"%s",);
}
}
}
void ()
{
memset(&,0,sizeof());
}
#endif
#ifdef _CHARTITLE_
extern unsigned int sockfd;
typedef struct{
int ;
ACTION *[5];
ACTION * ;
int ;
BOOL ;
int [100];
int [100];
char [100][32];
int ;
BOOL ;
int ;
};
;
void ()
{
int i=0;
for(i;i<5;i++){
if(.[i]){
if(.[i]) DeathAction(.[i]);
.[i]=0;
}
}
}
void ()
{
if(.){
();
.=FALSE;
.=FALSE;
}else{
.=0;
.=TRUE;
.=FALSE;
}
}
void ()
{
if(.)
if(!.){
if(. < 100000){
. = 0;
StockDispBuffer(0x7F,0x40,109,.,0);
}else{
. = MakeAnimDisp(0x7F,0x59,.,0);
}
}else if(*(int *)(.+0x140)!= .){
DeathAction(.);
if(. < 100000){
. = 0;
StockDispBuffer(0x7F,0x40,109,.,0);
}else{
. = MakeAnimDisp(0x7F,0x59,.,0);
}
}
}
BOOL (ACTION * pct)
{
int x,y;
x = pct->x;
y = pct->y + 133;
int =-1;
int =-1;
int =-1;
int ID;
= StockDispBuffer( x -55, y + 7, DISP_PRIO_IME3, 55250, 2 );
= StockDispBuffer( x -20, y + 7, DISP_PRIO_IME3, 55251, 2 );
= StockDispBuffer( x+40, y + 7, DISP_PRIO_IME3, 55252, 2 );
if( mouse.onceState & MOUSE_LEFT_CRICK ){
if(!.){
if( == HitDispNo){
if(.){
.--;
();
}
}
if( == HitDispNo){
if(.!=19 && .[(.+1)*5]){
.++;
();
}
}
if( == HitDispNo){
DeathAction(pct);
();
.=FALSE;
.=FALSE;
return TRUE;
}
}
}
int i=0;
int ;
for(;i<5;i++){
= .*5+i;
if(.[]){
if(!.[i]){
if(.[] < 100000){
.[i] = 0;
StockDispBuffer(0x16D+20,0x35+i*0x20,109,.[],0);
}else{
.[i] = MakeAnimDisp(0x16D+20,0x35+i*0x20,.[],0);
}
}else if(.==0) StockDispBuffer(0x16D,0x35+i*0x20,109,.[],0);
char [128];
sprintf_s(,"%03d",+1);
StockFontBufferExt(0x130,0x2D+i*0x20,1,FONT_PAL_GREEN,,0,16);
if(!.){
if(MakeHitBox(0x124,0x26+i*0x20,0x1B8,0x44+i*0x20,0x6D)==1){
StockFontBuffer(0x123,0xD1,2,0,.[],0);
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
.=.[ ];
.=TRUE;
}
}
}
}else break;
}
if(.){
StockFontBuffer(0x123,0xD1,2,0,.[.],0);
StockFontBuffer(0x130,0x118,2,0,"确定使用该称号吗?",0);
StockDispBuffer(0x16D,0x130,0x6C,55253,1);//确定窗口底图
ID = StockDispBuffer(0x194,0x148,109,55252,2);//关闭
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(ID == HitDispNo){
.=FALSE;
.=0;
}
}
ID = StockDispBuffer(0x148,0x148,109,55254,2);//确定
if(mouse.onceState & MOUSE_LEFT_CRICK>0){
if(ID == HitDispNo){
int checksum=0;
char buf[1024*4];
memset(buf,0,1024*4);
checksum += util_mkint(buf, .);
util_mkint(buf, checksum);
util_SendMesg(sockfd, LSSPROTO_CHARTITLE_SEND, buf);
.=FALSE;
.=0;
}
}
}
return FALSE;
}
void (ACTION* ID)//结束显示动画
{
.=FALSE;
();
if(.) DeathAction(.);
.=0;
DeathAction(ID);
}
void (char *)
{
char [126],[1024],[1024],[4000],[126];
memset(,0,126);
memset(,0,1024);
memset(,0,1024);
memset(,0,4000);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",1,,126);
getStringFromIndexWithDelim_body((char *) ,(char *)"|",1,,126);
int = atoi();
if() .=;
getStringFromIndexWithDelim_body((char *) ,(char *)"|",2,,126);
int = atoi();
if(!=0){
memset(&.,0,sizeof(int)*100);
memset(&.,0,sizeof(int)*100);
memset(&.,0,32*100);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",2,,1024);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",3,,4000);
getStringFromIndexWithDelim_body((char *) ,(char *)"#@",4,,1024);
int i=0;
for(i;i<;i++){
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
.[i]=atoi();
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
.[i]=atoi();
getStringFromIndexWithDelim_body((char *),(char *)"|",i+1,,126);
sprintf_s(.[i],32,"%s",);
}
}
}
void ()
{
memset(&,0,sizeof());
}
#endif