?? char.c.bak
字號:
#include "version.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h> // shan
#include <ctype.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include "common.h"
#include "char_base.h"
#include "char_data.h"
#include "char.h"
#include "lssproto_serv.h"
#include "item.h"
#include "item_event.h"
#include "buf.h"
#include "object.h"
#include "map_deal.h"
#include "saacproto_cli.h"
#include "readmap.h"
#include "handletime.h"
#include "char_event.h"
#include "npccreate.h"
#include "addressbook.h"
#include "item_event.h"
#include "magic_base.h"
#include "magic.h"
#include "chatmagic.h"
#include "configfile.h"
#include "log.h"
#include "anim_tbl.h"
#include "encount.h"
#include "battle.h"
#include "pet_skill.h"
#include "util.h"
#include "enemy.h"
#include "npcutil.h"
#include "pet.h"
#include "family.h"
#include "defend.h"
#ifdef _NPCSERVER_NEW
#include "npcserver.h"
#endif
#ifdef _DEATH_CONTEND
#include "deathcontend.h"
#endif
#include "correct_bug.h"
#ifdef _JOBDAILY
#include "npc_checkman.h"
#endif
#ifdef _CHAR_PROFESSION // WON ADD 人物職業欄位
#include "profession_skill.h"
#endif
#ifdef _CHATROOMPROTOCOL // (不可開) Syu ADD 聊天室頻道
#include "chatroom.h"
#endif
extern int channelMember[FAMILY_MAXNUM][FAMILY_MAXCHANNEL][FAMILY_MAXMEMBER];
extern int familyMemberIndex[FAMILY_MAXNUM][FAMILY_MAXMEMBER];
extern tagRidePetTable ridePetTable[146];
extern int BATTLE_getRidePet( int charaindex );
#ifdef _CHANNEL_MODIFY
extern int InitOccChannel(void);
#endif
#ifdef _ANGEL_SUMMON
extern int checkIfAngelByName( char* nameinfo);
extern char* getMissionNameInfo( int charaindex, char* nameinfo);
extern void CHAR_sendAngelMark( int objindex, int flag);
extern int checkIfOnlyAngel( int charaindex);
extern void selectAngel( int charaindex, int heroindex, int mission, int gm_cmd);
#endif
extern void GOLD_DeleteTimeCheckOne( int objindex);
// WON ADD 修正道具的設定問題
void fix_item_bug(int charaindex, int i);
/*====================平乓仿及綜岳卞楮允月楮醒====================*/
/*------------------------------------------------------------
* 綜岳允月凜及左皿撲亦件及襖毛澀爛仄方丹午允月[
* 婁醒
* ch Char* 澀爛燮及平乓仿及犯□正
* option char* 弁仿奶失件玄井日仁月犯□正
* 忒曰襖
* 岳 TRUE
* 撩 FALSE
------------------------------------------------------------*/
static BOOL CHAR_makeCharFromOptionAtCreate( Char* ch ,
int vital, int str, int tgh, int dex,
int earth, int water, int fire, int wind)
{
/* 躲嶺及腹據毛墊丹 */
int para[4];
int attr[4];
int i;
int parasum,attrsum;
int cnt;
para[0] = vital;
para[1] = str;
para[2] = tgh;
para[3] = dex;
attr[0] = earth;
attr[1] = water;
attr[2] = fire;
attr[3] = wind;
#define MAXPARAMETER 20
#define PKMAXPARAMETER 300
parasum = 0;
/*
* 允屯化及犯□正及 卞 - 反丐勻化反卅日卅中仄
* 瑕丐孔木及儀毛嗶尹化云中化 及襖手譯尹卅中
*/
for( i = 0; i < arraysizeof( para); i ++ ) {
if( para[i] < 0 || para[i] > MAXPARAMETER )return FALSE;
parasum += para[i];
}
#ifdef _NEW_PLAYER_CF //新手出生配置
if( parasum > MAXPARAMETER ) return FALSE;
#else
if( parasum != MAXPARAMETER ) return FALSE;
#endif
/*#ifdef _NEW_TESTSERVER //測試伺服
if( parasum > MAXPARAMETER ) return FALSE;
#else
if( parasum != MAXPARAMETER ) return FALSE;
#endif*/
#undef MAXPARAMETER
#define MAXATTRIBUTE 10
cnt = 0;
attrsum = 0;
/* 簞嶺及民尼永弁毛允月 */
for( i = 0; i < arraysizeof( para); i ++ ) {
if( attr[i] < 0 || attr[i] > MAXATTRIBUTE )return FALSE;
attrsum += attr[i];
if( attr[i] > 0 ) cnt ++;
}
/* 寧煌襖反10 */
if( attrsum != MAXATTRIBUTE ) return FALSE;
/* 2勾方曰聶仁喃曰癲化日木化中兇日蟯 */
if( cnt > 2 ) return FALSE;
/* 菅簞嶺反喃曰癲化日木卅中 */
if( attr[0] > 0 && attr[2] > 0 ) return FALSE;
if( attr[1] > 0 && attr[3] > 0 ) return FALSE;
#undef MAXATTRIBUTE
/* 戊疋□ */
ch->data[CHAR_VITAL] = vital*100;
ch->data[CHAR_STR] = str*100;
ch->data[CHAR_TOUGH] = tgh*100;
ch->data[CHAR_DEX] = dex*100;
ch->data[CHAR_EARTHAT] = attr[0] * 10;
ch->data[CHAR_WATERAT] = attr[1] * 10;
ch->data[CHAR_FIREAT] = attr[2] * 10;
ch->data[CHAR_WINDAT] = attr[3] * 10;
#ifdef _NEWOPEN_MAXEXP
ch->data[CHAR_OLDEXP] = 0;
#endif
ch->data[CHAR_EXP] = 0;
#ifdef _NEW_PLAYER_CF //新手出生配置
ch->data[CHAR_TRANSMIGRATION] = getNewplayertrans();
ch->data[CHAR_GOLD] = getNewplayergivegold();;
ch->data[CHAR_LV] = getNewplayerlv();//120;
// ch->data[CHAR_LEARNRIDE] = 200;
// ch->data[CHAR_LASTTALKELDER] = (rand()%10)>5?35:36;//34;
// ch->data[CHAR_SKILLUPPOINT] = 616;//600;
#ifdef _75_TEST
ch->data[CHAR_TRANSEQUATION] = (100 << 16) + 650;
#endif
#ifdef _NEW_RIDEPETS
//ch->data[CHAR_LOWRIDEPETS] = 0xffffffff;
#endif
#endif
/*#ifdef _NEW_TESTSERVER //測試伺服
ch->data[CHAR_SKILLUPPOINT] = "";//600;
ch->data[CHAR_TRANSMIGRATION] = 5;
ch->data[CHAR_GOLD] = CHAR_MAXGOLDHAVE;
ch->data[CHAR_LV] = 140;//120;
ch->data[CHAR_LEARNRIDE] = 200;
// ch->data[CHAR_LASTTALKELDER] = (rand()%10)>5?35:36;//34;
ch->data[CHAR_SKILLUPPOINT] = 616;//600;
#ifdef _75_TEST
ch->data[CHAR_TRANSEQUATION] = (100 << 16) + 650;
#endif
#ifdef _NEW_RIDEPETS
//ch->data[CHAR_LOWRIDEPETS] = 0xffffffff;
#endif
#endif*/
#ifdef _PETSKILL_BECOMEPIG
ch->data[CHAR_BECOMEPIG] = -1;
ch->data[CHAR_BECOMEPIG_BBI] = 100250;
#endif
ch->data[CHAR_LASTLEAVETIME] = 0;
return TRUE;
}
#ifdef _HELP_NEWHAND
void CHAR_loginAddItemForNew( int charindex )
{
int emptyitemindexinchara, itemindex;
int i;
char msgbuf[128];
for( i = 0; i < 15; i ++ ) {
emptyitemindexinchara = CHAR_findEmptyItemBox( charindex );
if( emptyitemindexinchara < 0 ){
sprintf( msgbuf, "空間欄位不足。" );
CHAR_talkToCli( charindex, -1, msgbuf, CHAR_COLORYELLOW);
return;
}
if(getNewplayergiveitem(i)==-1)continue;
itemindex = ITEM_makeItemAndRegist( getNewplayergiveitem(i) );
if( itemindex != -1 ){
CHAR_setItemIndex( charindex, emptyitemindexinchara, itemindex );
ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1);
ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,charindex);
CHAR_sendItemDataOne( charindex, emptyitemindexinchara);
}
}
print("Get New Hand Item");
}
#endif
void CHAR_createNewChar( int clifd, int dataplacenum, char* charname ,
int imgno,int faceimgno,
int vital,int str,int tgh,int dex,
int earth,int water,int fire,int wind,
int hometown , char *cdkey )
{
Char ch, *chwk;
int charaindex, petindex;
int enemyarray;
char szKey[256];
/*#ifdef _NEW_TESTSERVER //測試伺服
int add_pet[]={0,0,0,0,0};
#endif*/
#ifdef _NEW_PLAYER_CF //新手出生配置
int add_pet[]={0,0,0,0,0};
#endif
#ifdef _DELBORNPLACE //Syu ADD 6.0 統一出生於新手村
int BornPet = hometown;
if( getMuseum() )
hometown = 1;
#endif
memset(&ch,0,sizeof(Char));
if( !CHAR_checkPlayerImageNumber( imgno)) {
lssproto_CreateNewChar_send( clifd ,FAILED, "" );
CONNECT_setState( clifd, NOTLOGIN );
return;
}
if( !CHAR_checkFaceImageNumber( imgno, faceimgno)) {
lssproto_CreateNewChar_send( clifd ,FAILED, "" );
CONNECT_setState( clifd, NOTLOGIN );
return;
}
CHAR_getDefaultChar(&ch,imgno);
ch.data[CHAR_WALKINTERVAL] = getWalksendinterval();
if( CHAR_getInitElderPosition( &ch ,hometown) == FALSE ){
lssproto_CreateNewChar_send( clifd ,FAILED, "" );
CONNECT_setState( clifd, NOTLOGIN );
return;
}else if( MAP_checkCoordinates( ch.data[CHAR_FLOOR], ch.data[CHAR_X],
ch.data[CHAR_Y] ) == FALSE ){
lssproto_CreateNewChar_send( clifd ,FAILED, "");
CONNECT_setState( clifd, NOTLOGIN );
return;
}
strcpysafe( ch.string[CHAR_NAME].string ,
sizeof(ch.string[CHAR_NAME].string),
charname);
if( CHAR_getNewImagenumberFromEquip( imgno,0) == -1 ){
lssproto_CreateNewChar_send( clifd ,FAILED, "");
CONNECT_setState( clifd, NOTLOGIN );
return;
}
ch.data[CHAR_BASEIMAGENUMBER] = imgno;
ch.data[CHAR_BASEBASEIMAGENUMBER] = imgno;
ch.data[CHAR_FACEIMAGENUMBER] = faceimgno;
ch.data[CHAR_DATAPLACENUMBER] = dataplacenum;
#ifdef _FM_JOINLIMIT
ch.data[CHAR_FMTIMELIMIT] = 0;
#endif
#ifdef _NEWSAVE
ch.data[CHAR_SAVEINDEXNUMBER] = -1;
#endif
ch.data[CHAR_HP] = 0x7fffffff;
ch.data[CHAR_CHARM] = 60;
ch.data[CHAR_MAXMP] = ch.data[CHAR_MP] = 100;
strcpysafe( ch.string[CHAR_CDKEY].string,
sizeof( ch.string[CHAR_CDKEY].string), cdkey );
// Robin 0724
ch.data[CHAR_RIDEPET] = -1;
ch.data[CHAR_LEARNRIDE] = 0;
#ifdef _NEW_RIDEPETS
ch.data[CHAR_LOWRIDEPETS] = 0;
#endif
#ifdef _PERSONAL_FAME // Arminius: 家族個人聲望
ch.data[CHAR_FAME] = 0;
#endif
#ifdef _NEW_MANOR_LAW
ch.data[CHAR_MOMENTUM] = 0; // 個人氣勢
#endif
#ifdef _TEACHER_SYSTEM
ch.data[CHAR_TEACHER_FAME] = 0; // 導師領導聲望
#endif
#ifdef _RACEMAN
ch.data[CHAR_CHECKIN] = 0; // 寵物登記
ch.data[CHAR_CATCHCNT1] = 0; // 新手限 獵寵次數
ch.data[CHAR_CATCHCNT2] = 0; // 老手限 獵寵次數
ch.data[CHAR_CATCHCNT3] = 0; // 家族限 獵寵次數
ch.data[CHAR_CATCHCNT4] = 0; // 老手不限 獵寵次數
ch.data[CHAR_CATCHCNT5] = 0; // 家族不限 獵寵次數
ch.data[CHAR_KINDCNT1] = 0;
ch.data[CHAR_KINDCNT2] = 0;
ch.data[CHAR_KINDCNT3] = 0;
ch.data[CHAR_KINDCNT4] = 0;
ch.data[CHAR_KINDCNT5] = 0;
ch.data[CHAR_KINDCNT6] = 0;
ch.data[CHAR_KINDCNT7] = 0;
ch.data[CHAR_KINDCNT8] = 0;
ch.data[CHAR_KINDCNT9] = 0;
ch.data[CHAR_KINDCNT10] = 0;
#endif
#ifdef _CHAR_PROFESSION // WON ADD 人物職業
ch.data[PROFESSION_CLASS] = 0;
ch.data[PROFESSION_LEVEL] = 0;
// ch.data[PROFESSION_EXP] = 0;
ch.data[PROFESSION_SKILL_POINT] = 0;
ch.data[ATTACHPILE] = 0;
#endif
#ifdef _GM_IDENTIFY
sprintf(ch.string[CHAR_GMIDENTIFY].string,"%s",""); //gm名稱清為空字串
#endif
#ifdef _TEACHER_SYSTEM
memset(ch.string[CHAR_TEACHER_ID].string,0,sizeof(STRING128));
memset(ch.string[CHAR_TEACHER_NAME].string,0,sizeof(STRING128));
#endif
#ifdef _ITEM_SETLOVER
memset(ch.string[CHAR_LOVERID].string,0,sizeof(STRING128));
memset(ch.string[CHAR_LOVERNAME].string,0,sizeof(STRING128));
#endif
#ifdef _PETSKILL_BECOMEPIG
ch.data[CHAR_BECOMEPIG] = -1;
ch.data[CHAR_BECOMEPIG_BBI] = 100250;
#endif
strcpysafe( ch.string[CHAR_FMNAME].string,
sizeof( ch.string[CHAR_FMNAME].string), "\0" );
ch.data[CHAR_FMINDEX] = -1;
if( CHAR_makeCharFromOptionAtCreate( &ch,
vital,str,tgh,dex,
earth,water,fire,wind ) == FALSE )
{
lssproto_CreateNewChar_send( clifd ,FAILED,
"option data is invalid\n");
CONNECT_setState( clifd, NOTLOGIN );
return;
}
{
int mp=ch.data[CHAR_MAXMP];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -