?? char.c.bak
字號(hào):
{
int myskillpoint= CHAR_getInt( toindex, PROFESSION_SKILL_POINT );
int myskilllevel= CHAR_getInt( toindex, PROFESSION_LEVEL );
int myskillnum = 0, mysknum = 0;
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
if( CHAR_getCharSkill( toindex, i) <= 0 ) continue;
myskillnum++;
}
mysknum = myskilllevel - (myskillpoint + myskillnum);
if( mysknum > 0 ){
CHAR_setInt( toindex, PROFESSION_SKILL_POINT, myskillpoint + mysknum );
}
}
{
Skill work1[PROFESSION_MAX_LEVEL];
int cnt=0;
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
work1[i].data[SKILL_IDENTITY]=-1;
work1[i].data[SKILL_LEVEL]=0;
}
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
if( CHAR_getIntPSkill( toindex, i, SKILL_IDENTITY) <= 0 ) continue;
work1[cnt].data[SKILL_IDENTITY] = CHAR_getIntPSkill( toindex, i, SKILL_IDENTITY);
work1[cnt].data[SKILL_LEVEL] = CHAR_getIntPSkill( toindex, i, SKILL_LEVEL);
cnt++;
}
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
print("%d,", work1[i].data[SKILL_IDENTITY] );
}
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
pSkil = CHAR_getCharHaveSkill( toindex, i );
if( pSkil == NULL ) continue;
pSkil->use = 0;
if( work1[i].data[SKILL_IDENTITY] == -1 ) continue;
SKILL_makeSkillData( &pSkil->skill, work1[i].data[SKILL_IDENTITY], work1[i].data[SKILL_LEVEL] );
pSkil->use = 1;
}
}
NPC_EventSetFlg( toindex, 156);
return TRUE;
}
static void CHAR_setLuck( int charaindex);
#ifdef _CHANNEL_MODIFY
extern int *piOccChannelMember;
#endif
#ifdef _BAD_PLAYER // WON ADD 送壞玩家去關(guān)
void CHAR_login( int clifd, char* data, int saveindex, int badplayer )
#else
void CHAR_login( int clifd, char* data, int saveindex )
#endif
{
int charaindex,objindex;
Char ch;
int per;
DebugPoint=50;
// char c_temp2[4096];
if( CHAR_makeCharFromStringToArg( data , &ch ) == FALSE ){
fprint ("make char error\n");
goto MAKECHARDATAERROR;
}
DebugPoint=70;
CHAR_setCharFuncTable( &ch);
DebugPoint=71;
charaindex = CHAR_initCharOneArray( &ch );
DebugPoint=72;
if( charaindex == -1 ){
fprint ("make char error\n");
CHAR_endCharData(&ch);
goto MAKECHARDATAERROR;
}
DebugPoint=80;
#ifdef _NEWSAVE
CHAR_setInt( charaindex, CHAR_SAVEINDEXNUMBER, saveindex);
print("存檔裝載索引:%d\n", CHAR_getInt( charaindex, CHAR_SAVEINDEXNUMBER) );
#endif
if( CHAR_getFlg( charaindex, CHAR_ISDIE)){
print( "?data? ISDIE flg is standing.\n");
CHAR_setFlg( charaindex, CHAR_ISDIE, FALSE);
}
#ifdef _75_TEST
{
int event_end[] = { 4, 32, 33, 34, 81, 86, 87, 105, 83};
int i;
for( i=0; i < arraysizeof(event_end); i++) {
NPC_EventSetFlg( charaindex, event_end[i]);
}
}
#endif
#ifndef _FIX_UNNECESSARY
// Arminius 7.9 airplane logout
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {
int oyaindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX( oyaindex)) {
if (CHAR_getInt( oyaindex, CHAR_WHICHTYPE ) == CHAR_TYPEBUS) {
if ((CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100355) &&
(CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100461)) {
if(CHAR_getWorkInt(oyaindex,CHAR_NPCWORKINT5)==1) {
if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){
int fl,x,y;
CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER),
&fl, &x, &y );
CHAR_setInt(charaindex,CHAR_FLOOR,fl);
CHAR_setInt(charaindex,CHAR_X,x);
CHAR_setInt(charaindex,CHAR_Y,y);
}
}
}
}
}
}
#endif
// Nuke 20040420: CHECK MAX POINT
#if 1
{
int lv,vi,str,tou,dx,skup,trn,teq,quest,level,total,max;
//float table[]={437,490,521,550,578,620}; //各轉(zhuǎn)最高點(diǎn)數(shù)(減10)
float table[]={620,660,700,740,780,820}; //各轉(zhuǎn)最高點(diǎn)數(shù)(減10)
lv = CHAR_getInt(charaindex,CHAR_LV);
vi = CHAR_getInt(charaindex,CHAR_VITAL);
str = CHAR_getInt(charaindex,CHAR_STR);
tou = CHAR_getInt(charaindex,CHAR_TOUGH);
dx = CHAR_getInt(charaindex,CHAR_DEX);
trn = CHAR_getInt(charaindex,CHAR_TRANSMIGRATION);
teq = CHAR_getInt(charaindex,CHAR_TRANSEQUATION);
skup = CHAR_getInt(charaindex,CHAR_SKILLUPPOINT);
quest=(teq >> 16)& 0xFFFF;
level=teq & 0xFFFF;
total=(vi+str+tou+dx)/100+skup;
max=(trn==0)?(lv-1)*3+20+10: // 0轉(zhuǎn)447
(lv-1)*3+table[trn-1]/12.0+quest/4.0+(level-trn*85)/4.0+10+1+10+trn*10;
/* 1轉(zhuǎn)以上=升級(jí)點(diǎn)數(shù)+繼承點(diǎn)術(shù)+歷史任務(wù)+歷史等級(jí)+轉(zhuǎn)前祝福+誤差1點(diǎn)+轉(zhuǎn)後祝福+轉(zhuǎn)生紅利 */
if (trn==6) max=max-20; /* 六轉(zhuǎn)時(shí)沒有轉(zhuǎn)前祝福與轉(zhuǎn)後祝福 */
if (total>max)
{
print("\n重調(diào)點(diǎn)數(shù)[%s:%s]:%d->%d ",
CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME),
total,max);
CHAR_setInt(charaindex,CHAR_VITAL,1000);
CHAR_setInt(charaindex,CHAR_STR,0);
CHAR_setInt(charaindex,CHAR_TOUGH,0);
CHAR_setInt(charaindex,CHAR_DEX,0);
CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,max-10);
}
// 補(bǔ)足六轉(zhuǎn)點(diǎn)數(shù)不足之玩家
if ((trn==6) && (total < max))
{
print("\n補(bǔ)足點(diǎn)數(shù)[%s:%s]:%d->%d ",
CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME),
total,max);
CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,
CHAR_getInt(charaindex,CHAR_SKILLUPPOINT)+(max-total));
}
}
#endif
{
int EQ_BBI=-1, EQ_ARM=-1, EQ_NUM=-1, EQ_BI=-1;
int CH_BI = CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER);
EQ_BBI = CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER);
EQ_ARM = CHAR_getItemIndex(charaindex,CHAR_ARM);
EQ_NUM=ITEM_FIST;
if ( ITEM_CHECKINDEX( EQ_ARM)) {
EQ_NUM=ITEM_getInt(EQ_ARM,ITEM_TYPE);
}
EQ_BI=CHAR_getNewImagenumberFromEquip( EQ_BBI, EQ_NUM);
if( CHAR_getInt( charaindex, CHAR_RIDEPET) != -1 ) { //騎寵
}else { //非騎寵
if( EQ_BI != CH_BI ) {
print("\n 非騎寵形象 %d [%d=>%d]", charaindex,
CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER),
EQ_BI );
CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, EQ_BI);
}
}
}
{
int x,y;
if( CHAR_isAppearPosition( CHAR_getInt( charaindex, CHAR_FLOOR),&x, &y )) {
int flelder, xelder, yelder;
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),
&flelder, &xelder, &yelder);
CHAR_setInt(charaindex, CHAR_FLOOR, flelder);
CHAR_setInt(charaindex, CHAR_X, xelder);
CHAR_setInt(charaindex, CHAR_Y, yelder);
}
}
#ifdef _FIX_GAMBLENUM
{
if( CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0){
CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0);
}
}
#endif
#ifdef _DEATH_CONTEND
{
char cdkey[CDKEYLEN];
memset( cdkey, 0, sizeof(cdkey));
CONNECT_getCdkey( clifd, cdkey, sizeof( cdkey ));
if( strlen(cdkey) > 0 ) {
if( strcmp( cdkey, CHAR_getChar( charaindex, CHAR_CDKEY) ) ){
print("賬號(hào)錯(cuò)誤 %s->%s\n", CHAR_getChar( charaindex, CHAR_CDKEY), cdkey);
CHAR_setChar( charaindex, CHAR_CDKEY, cdkey);
}
}else{
print("賬號(hào)錯(cuò)誤:%d\n", clifd);
}
}
CHAR_setInt( charaindex, CHAR_PKLISTTEAMNUM, -1);
CHAR_setInt( charaindex, CHAR_PKLISTLEADER, -1);
//CHAR_setInt( charaindex, CHAR_GOLD, 1000000);
PKLIST_InsertTeamNum( charaindex);
if( CHAR_getInt( charaindex, CHAR_PKLISTTEAMNUM ) < 0 ||
CHAR_getInt( charaindex, CHAR_PKLISTLEADER ) < 0 ){
PKLIST_InsertTeamNum( charaindex);
}
#endif
#ifdef _MAP_NOEXIT
{
int exfloor=-1,ex_X=-1,ex_Y=-1;
int map_type=0;
unsigned int point;
point = MAP_getExFloor_XY( CHAR_getInt(charaindex, CHAR_FLOOR) , &map_type);
if( point > 0 ) {
if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) >= 0 ) {
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),
&exfloor, &ex_X, &ex_Y);
}
if( map_type >= 0 ) { // map_type >= 0 優(yōu)先回紀(jì)錄點(diǎn)
if( exfloor == map_type && exfloor >= 0 ) {//回紀(jì)錄點(diǎn)
}else {
exfloor = (point>>16)&0xffffff;
ex_X = (point>>8)&0xff;
ex_Y = (point>>0)&0xff;
}
}
if( CHECKFLOORID( exfloor) ) { //檢查房間號(hào)
CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);
CHAR_setInt(charaindex, CHAR_X, ex_X);
CHAR_setInt(charaindex, CHAR_Y, ex_Y);
}
}
#ifdef _BAD_PLAYER // WON ADD 送壞玩家去關(guān)
NPC_NowEndEventSetFlgCls( charaindex, 135); // 旗標(biāo)
if( badplayer ){
NPC_EventSetFlg(charaindex, 135); // 旗標(biāo)
CHAR_setInt(charaindex, CHAR_FLOOR, 887);
CHAR_setInt(charaindex, CHAR_X, 56);
CHAR_setInt(charaindex, CHAR_Y, 14);
}else if( CHAR_getInt(charaindex, CHAR_FLOOR) == 887 ){ // 如果在888,回記錄點(diǎn)
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &exfloor, &ex_X, &ex_Y);
CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);
CHAR_setInt(charaindex, CHAR_X, ex_X);
CHAR_setInt(charaindex, CHAR_Y, ex_Y);
}
#endif
#ifdef _DEATH_FAMILY_LOGIN_CHECK
CHAR_setInt( charaindex, CHAR_FLOOR, 130);
CHAR_setInt( charaindex, CHAR_X, 56);
CHAR_setInt( charaindex, CHAR_Y, 12);
#endif
#ifdef _NEW_INSERVERPOINT
CHAR_setInt( charaindex, CHAR_FLOOR, 8250);
CHAR_setInt( charaindex, CHAR_X, 15);
CHAR_setInt( charaindex, CHAR_Y, 15);
#endif
}
#endif
if( CHAR_getInt(charaindex,CHAR_X) < 0 || CHAR_getInt(charaindex,CHAR_Y) < 0 ){
CHAR_setInt(charaindex,CHAR_X,1);
CHAR_setInt(charaindex,CHAR_Y,1);
}
#ifdef _MAP_TIME
// 如果登入的地圖是這些編號(hào)的話,回到入口
if(CHAR_getInt(charaindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(charaindex, CHAR_FLOOR) <= 30021){
CHAR_setInt(charaindex,CHAR_FLOOR,30008);
CHAR_setInt(charaindex,CHAR_X,39);
CHAR_setInt(charaindex,CHAR_Y,38);
}
#endif
objindex = initObjectFromObjectMember(OBJTYPE_CHARA,charaindex,
CHAR_getInt(charaindex,CHAR_X),
CHAR_getInt(charaindex,CHAR_Y),
CHAR_getInt(charaindex,CHAR_FLOOR));
if( objindex == -1 ){
fprint ("init obj error\n");
goto DELETECHARDATA;
}
CHAR_setWorkInt( charaindex,CHAR_WORKOBJINDEX,objindex );
CONNECT_setState( clifd, LOGIN );
CONNECT_setCharaindex( clifd, charaindex );
CHAR_LoginBesideSetWorkInt( charaindex, clifd);
#ifdef _CHANGEGOATMETAMO // (不可開) Syu 羊年獸更換新圖
if( NPC_EventCheckFlg( charaindex, 141 ) != TRUE ) {
int z;
int PETID1;
int PETBASE1;
for ( z = 0 ; z < CHAR_MAXPETHAVE; z ++ ) {
int petindex = CHAR_getCharPet(charaindex,z);
if( CHAR_CHECKINDEX( petindex) ) {
PETID1 = CHAR_getInt( petindex, CHAR_PETID);
PETBASE1 = CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER );
if ( PETID1 == 1056 && PETBASE1 == 101497 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101607 ) ;
if ( PETID1 == 1057 && PETBASE1 == 101498 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101608 ) ;
if ( PETID1 == 1058 && PETBASE1 == 101499 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101609 ) ;
if ( PETID1 == 1059 && PETBASE1 == 101500 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101610 ) ;
}
}
for ( z = 0 ; z < CHAR_MAXPOOLPETHAVE; z ++ ) {
int petindex = CHAR_getCharPoolPet(charaindex,z);
if( CHAR_CHECKINDEX( petindex) ) {
PETID1 = CHAR_getInt( petindex, CHAR_PETID);
PETBASE1 = CHAR_getInt( petindex , CHAR_BASEBASEIMAGENUMBER );
if ( PETID1 == 1056 && PETBASE1 == 101497 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101607 ) ;
if ( PETID1 == 1057 && PETBASE1 == 101498 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101608 ) ;
if ( PETID1 == 1058 && PETBASE1 == 101499 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101609 ) ;
if ( PETID1 == 1059 && PETBASE1 == 101500 )
CHAR_setInt( petindex , CHAR_BASEBASEIMAGENUMBER , 101610 ) ;
}
}
}
NPC_EventSetFlg( charaindex, 141);
#endif
CHAR_complianceParameter( charaindex );
//檢查人物身上
{
int i;
// char *petstring;
int ID1;
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
int petindex = CHAR_getCharPet(charaindex,i);
if( CHAR_CHECKINDEX( petindex) ) {
#ifdef _CHECK_ENEMY_PET
{
int j;
for( j=0;j<ENEMYTEMP_getEnemyNum();j++ ) {//ENEMY_getEnemyNum()
if( CHAR_getInt( petindex, CHAR_PETID) == ENEMYTEMP_getInt( j, E_T_TEMPNO ) ) {//ENEMY_getInt( j, ENEMY_TEMPNO)
if( ENEMYTEMP_getInt( j, E_T_PETFLG ) == 0 ){//ENEMY_getInt( j, ENEMY_PETFLG)
CHAR_setCharPet( charaindex, i, -1);//清除不能當(dāng)寵物的角色
LogPet( CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"login(清除不能當(dāng)寵物的角色)",
CHAR_getInt( charaindex,CHAR_FLOOR),
CHAR_getInt( charaindex,CHAR_X ),
CHAR_getInt( charaindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_talkToCli(charaindex,-1,"系統(tǒng)清除你身上的非法寵物",CHAR_COLORWHITE);
}
}
}
}
#endif
#ifdef _UNIQUE_P_I
// CoolFish: 2001/10/11 Set Pet Unicode
CHAR_setPetUniCode(petindex);
#endif
#ifdef _NEWOPEN_MAXEXP
if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){
CHAR_ChangeExp( petindex);
}
#endif
ID1=CHAR_getInt( petindex, CHAR_PETID);
// petstring = CHAR_makePetStringFromPetIndex( petindex);
#ifdef _REEDIT_PETBBIS
if( ID1 == 1133 ){
CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);
CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -