⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playerdata.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
        {
          UINT lma_value=0;
          lma_value=16+(myquest->thisquest->id-234);
          if (QuestVariables[1]<(lma_value+1))
          {
           QuestVariables[1]=lma_value;
          }
          
        }       
  
        //TEST
        if (myquest->thisquest->id==247&&QuestVariables[1]<31)
        {
          QuestVariables[1]=30;
        }
         if (myquest->thisquest->id==248&&QuestVariables[1]<32)
        {
          QuestVariables[1]=31;
        }     
        
        //2do: other values
         if (myquest->thisquest->id==254&&QuestVariables[1]<40)
        {
          QuestVariables[1]=40;
        }     
          //2do: other values
         if (myquest->thisquest->id==261&&QuestVariables[1]<51)
        {
          QuestVariables[1]=50;
        }            
         if (myquest->thisquest->id==262&&QuestVariables[1]<52)
        {
          QuestVariables[1]=51;
        } 
        //2Do: other values      
         if (myquest->thisquest->id==264&&QuestVariables[1]<54)
        {
          QuestVariables[1]=53;
        }           
        //2do: other values
          if (myquest->thisquest->id==266&&QuestVariables[1]<54)
        {
          QuestVariables[1]=55;
        }       
        //2do: other values
          if (myquest->thisquest->id==269&&QuestVariables[1]<59)
        {
          QuestVariables[1]=58;
        }         
         //2do: other values
          if (myquest->thisquest->id==273&&QuestVariables[1]<65)
        {
          QuestVariables[1]=64;
        }   
          //2do: other values
          if (myquest->thisquest->id==274&&QuestVariables[1]<66)
        {
          QuestVariables[1]=65;
        }        
         
        
        //TEST 282 (ok)
        /*
         if (myquest->thisquest->id==282&&QuestVariables[1]<75)
        {
          QuestVariables[1]=74;
        } 
        */        
         
        //test on unactive quests.                                
        if( ! myquest->active )
        {    
            //Main quest
            if (myquest->thisquest->id==212&&QuestVariables[1]<0x04)
            {
              QuestVariables[1]=0x03;
            }
            if (myquest->thisquest->id==213&&QuestVariables[1]<0x05)
            {
              QuestVariables[1]=0x04;
            }
            if (myquest->thisquest->id==214&&QuestVariables[1]<0x06)
            {
              QuestVariables[1]=0x05;
            }
            if (myquest->thisquest->id>=218&&myquest->thisquest->id<=220&&QuestVariables[1]<0x0A)
            {
              QuestVariables[1]=0x09;
            }       
             if (myquest->thisquest->id==101&&QuestVariables[1]<0x0B)
            {
              QuestVariables[1]=0x0A;
            }   
             if (myquest->thisquest->id==104&&QuestVariables[1]<0x0C)
            {
              QuestVariables[1]=0x0B;
            }                    
             if (myquest->thisquest->id==107&&QuestVariables[1]<0x0D)
            {
              QuestVariables[1]=0x0C;
            }   
             if (myquest->thisquest->id==223&&QuestVariables[1]<0x0E)
            {
              QuestVariables[1]=0x0D;
            }        
             if (myquest->thisquest->id==231&&QuestVariables[1]<0x0F)
            {
              QuestVariables[1]=0x0E;
            }    
             if (myquest->thisquest->id==233&&QuestVariables[1]<0x10)
            {
              QuestVariables[1]=0x0F;
            }   
             if (myquest->thisquest->id==234&&QuestVariables[1]<0x11)
            {
              QuestVariables[1]=0x10;
            }  
                                                                                 
            //second level job (Soldier/muse/hawker/dealer)
            if (myquest->thisquest->id==1061||myquest->thisquest->id==1067||myquest->thisquest->id==1073||myquest->thisquest->id==1079)
            {
                QuestVariables[6]=0x02;          
            }   

            
            if (myquest->thisquest->id==2092)
            {
                QuestVariables[11]=0x05;          
            }   
                  
            if (myquest->thisquest->id==2077)
            {
                QuestVariables[10]=0x05;
            }             
            
            //LMA: Patch for lvl 30 class quests.
            if (myquest->thisquest->id==857|myquest->thisquest->id==907||myquest->thisquest->id==956||myquest->thisquest->id==1006||myquest->thisquest->id==1007)
            {
               if (QuestVariables[5]<0x04)
               {
                  QuestVariables[5]=0x03;
               }
               
            }
            
            //lvl 30 quest are done.
            if (myquest->thisquest->id==912)
            {
               if (QuestVariables[5]<0x07)
               {
                  QuestVariables[5]=0x06;
               }
            }

            if (myquest->thisquest->id==9997||myquest->thisquest->id==858)
            {
               QuestVariables[5]=0x07;
            }
            
            if (myquest->thisquest->id==1008)
            {
               QuestVariables[5]=0x07;
            }
            
            //For Hawkers
            if (((myquest->thisquest->id==957||myquest->thisquest->id==958)&&myquest->items[4]==1)||myquest->thisquest->id==959)
            {
               QuestVariables[5]=0x07;
            }
                                    
            //Patch to end Spero Quest.
            if (myquest->thisquest->id==2011)
            {
               QuestVariables[8]=0x07;
            }            
            
            //Log(MSG_INFO, "BLAAAAAAAAA!"); test non-sense
            switch (myquest->thisquest->id)
            {
                   case 814: Log(MSG_INFO, "Player: %s can use flying vessel", CharInfo->charname); canUseFlyingVessel = true; break;
                   case 9999: Log(MSG_INFO, "Player: %s can speak Luna lang", CharInfo->charname); speaksLuna = true; break;
            }
        }
        MyQuest.push_back( myquest );             
    }   	
   	GServer->DB->QFree( );  
	Session->isLoggedIn = true;	
    GServer->DB->QExecute("UPDATE accounts SET online=true where id=%u", Session->userid );
    
    // Calculate how many fairies are available online, according to amoutn of players
	int oldFairyMax = GServer->Config.FairyMax;
    GServer->Config.FairyMax = (int)ceil((float)GServer->ClientList.size() / 50.0); //(1 fairy more every 50 player)
	if( oldFairyMax < GServer->Config.FairyMax ){
        CFairy* thisfairy = new (nothrow) CFairy;
        thisfairy->LastTime = clock();
        thisfairy->assigned = 0;
        thisfairy->ListIndex = 0;
        thisfairy->WaitTime = GServer->Config.FairyWait;
        GServer->FairyList.push_back( thisfairy );
    }
	return true;
}

// This is a REALLY bad way of saving the character data, but it works ^^
void CPlayer::savedata( )
{
    lastSaveTime = clock();
    if(Session->userid!=0)
    {	       
        CMap* map = GServer->MapList.Index[Position->Map];
    	CRespawnPoint* thisrespawn = map->GetNearRespawn( this );
    	if(thisrespawn == NULL)
    	   Position->respawn = 4;
    	else
    	   Position->respawn = thisrespawn->id;	           
	    char quick[1024];
	    char basic[1024];
	    char sclass[1024];	
 	    char slevel[1024];	
    	for(UINT i=0;i<MAX_SKILL;i++)
    	{
            if(i==0)
            {
    	       sprintf(&sclass[i], "%i",cskills[i].id);
    	       sprintf(&slevel[i], "%i",cskills[i].level);                
            }
            else
            {
    	       sprintf(&sclass[strlen(sclass)], ",%i",cskills[i].id);
    	       sprintf(&slevel[strlen(slevel)], ",%i",cskills[i].level);                            
            }
        }	   
    	for(UINT i=0;i<42;i++)
    	{
            if(i==0)
            	sprintf(&basic[i], "%i",bskills[i]);
            else
                sprintf(&basic[strlen(basic)], ",%i",bskills[i]);
        }	
        for(UINT i=0;i<48;i++)
        {
            if(i==0)
            	sprintf(&quick[i], "%i",quickbar[i]);
            else
                sprintf(&quick[strlen(quick)], ",%i",quickbar[i]);        
        }
        long int hp = Stats->HP;
    	if(hp<=0)
    	   hp=Stats->MaxHP * 10 / 100;
	   if(Stats->MP<0)
	       Stats->MP=0;	   
        GServer->DB->QExecute("UPDATE characters SET classid=%i,level=%i,zuly=%i,curHp=%i,curMp=%i,str=%i,con=%i,dex=%i,_int=%i,cha=%i,sen=%i,exp=%i,skillp=%i,statp=%i, stamina=%i,quickbar='%s',class_skills='%s',class_skills_level='%s',basic_skills='%s',respawnid=%i,clanid=%i,clan_rank=%i WHERE id=%i", 
                    CharInfo->Job,Stats->Level, CharInfo->Zulies, hp, Stats->MP, 
                    Attr->Str,Attr->Con,Attr->Dex,Attr->Int,Attr->Cha,Attr->Sen,
                    CharInfo->Exp,CharInfo->SkillPoints,CharInfo->StatPoints,CharInfo->stamina, 
                    quick, sclass,slevel,basic,Position->respawn,Clan->clanid,Clan->clanrank,CharInfo->charid );
    	if(!GServer->DB->QExecute("DELETE FROM items WHERE owner=%i", CharInfo->charid)) return;
    	for(UINT i=0;i<MAX_INVENTORY;i++) 
        {
    		if (items[i].count > 0) 
            {
    			GServer->DB->QExecute("INSERT INTO items (owner,itemnum,itemtype,refine,durability,lifespan,slotnum,count,stats,socketed,appraised,gem) VALUES(%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)",
    								CharInfo->charid, items[i].itemnum, items[i].itemtype,items[i].refine, items[i].durability,
    								items[i].lifespan, i, items[i].count, items[i].stats, (items[i].socketed?1:0),
    								(items[i].appraised?1:0),items[i].gem );
    		}
    	}    	
    	if(!GServer->DB->QExecute("DELETE FROM storage WHERE owner=%i", Session->userid)) return;
    	for(UINT i=0;i<160;i++) 
        {
    		if (storageitems[i].count > 0) 
            {
    			GServer->DB->QExecute("INSERT INTO storage (owner,itemnum,itemtype,refine,durability,lifespan,slotnum,count,stats,socketed,appraised,gem) VALUES(%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)",
    								Session->userid, storageitems[i].itemnum, storageitems[i].itemtype,storageitems[i].refine, storageitems[i].durability, 
    								storageitems[i].lifespan, i, storageitems[i].count, storageitems[i].stats, (storageitems[i].socketed?1:0), 
                                    (storageitems[i].appraised?1:0), storageitems[i].gem );//Gem Fix by Irulagain
    		}
    	}  
    	if(!GServer->DB->QExecute( "DELETE FROM list_quest WHERE owner=%i",CharInfo->charid )) return;
    	for(int i=0;i<MyQuest.size();i++)
    	{
            QUESTS* myquest = MyQuest.at( i );
     	    char nqitem[200];	
        	for( int j=0;j<5;j++ )
        	{
                if( j==0 )
                {
        	       sprintf(&nqitem[j], "%i",myquest->items[j]);
                }
                else
                {
        	       sprintf(&nqitem[strlen(nqitem)], "|%i",myquest->items[j]);
                }
            }
            GServer->DB->QExecute("INSERT INTO list_quest (owner,questid,nitems,active) VALUES (%i,%i,'%s',%i)",
            CharInfo->charid, myquest->thisquest->id, nqitem, myquest->active );
        }
		GServer->DB->QExecute("update accounts set zulystorage = %i where id = %i", CharInfo->Storage_Zulies, Session->userid);
		Log(MSG_INFO, "Data Saved for char '%s' ", CharInfo->charname );
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -