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

📄 extrafunctions.cpp.svn-base

📁 ROSE的源代码。了解的自己研究,编译通过
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
                    //Xita
                    case 354:
                        useitem->usetype = 61;
                        useitem->usevalue = 54344607;                        
                    break;                                
                    //Goblin cave
                    case 360:
                        useitem->usetype = 22; //31 Value Before - rl2171
                        useitem->usevalue = 54105040; //55185444 Value Before - rl2171                        
                    break;
                    //Desert of dead
                    case 361:
                        useitem->usetype = 29;
                        useitem->usevalue = 51405160; //50825013 Value Before - rl2171
                    break;                    
                    //El Verloon
                    case 362:
                        useitem->usetype = 24;
                        useitem->usevalue = 55275377;                        
                    break;                    
                    //George of Silence
                    case 363:
                        useitem->usetype = 28;
                        useitem->usevalue = 53005100; //54674783 Value before - rl2171
                    break;                    
                    //Shady Jungle
                    case 364:
                        useitem->usetype = 62;
                        useitem->usevalue = 58405170; //57515196 Value before - rl2171                       
                    break;  
                    //Sikuku Underground Prison - added by rl2171
                    case 365:
                        useitem->usetype = 63;
                        useitem->usevalue = 54004440;                        
                    break;                    
                }
            }
            else //Charm Scrolls
            if( (useitem->itemnum>380 && useitem->itemnum<384) )
            {
                useitem->usescript = 3;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[1];
            }
            else //Dance Scroll
            if( (useitem->itemnum>370 && useitem->itemnum<377) ||
                (useitem->itemnum>389 && useitem->itemnum<398) )
            {
                useitem->usescript = 4;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];
                useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];                     
            }
            else // Firecrackers
            if( useitem->itemnum==913 || useitem->itemnum==918 || useitem->itemnum==921 ||
                (useitem->itemnum>929 && useitem->itemnum<935) || 
                (useitem->itemnum>989 && useitem->itemnum<995) )                
            {
                useitem->usescript = 4;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];
                useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];                  
            }
            else // Emotions
            if( (useitem->itemnum>970 && useitem->itemnum<979) )
            {
                useitem->usescript = 4;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];
                useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];                                  
            }
            else // Summons
            if( (useitem->itemnum>400 && useitem->itemnum<440) || useitem->itemnum==942)
            {
                if( thisclient->CharInfo->stamina<101 )
                    return NULL;
                thisclient->CharInfo->stamina -= 100;
                useitem->usescript = 5;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[1];
                if(useitem->itemnum==439){useitem->usevalue = 965;}
                else if(useitem->itemnum==942){useitem->usevalue = 1472;}
                else{ useitem->usevalue = useitem->itemnum + 500; }                
            }
            else // Snowball
            if( useitem->itemnum==326 )
            {
                useitem->usescript = 6;
                useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];
                useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];                
            }
            else
            {
                Log( MSG_WARNING, "Unknown Item %i - Type %i",useitem->itemnum,type);
                delete useitem;
                return NULL;
            }
        }
        break;
        case 314://Skill Book
        {
            useitem->usescript = 10;
            useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];            
            useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];                                    
        }
        break;
        case 315://Repair Tool
            delete useitem;
            return NULL;
        break;
        case 316://Quest Scroll
           delete useitem;        
           return NULL;
        break;
        case 317://Engine Fuel
//DreamRose Updates - needs updating before use
/*        {
            useitem->usescript = 1;
            useitem->usetype = STB_ITEM[useitem->itemtype].rows[useitem->itemnum][19];            
            useitem->usevalue = STB_ITEM[useitem->itemtype].rows[useitem->itemnum][20];
        }
        break;
*/        
            delete useitem;        
            return NULL;
        break;
        case 320://Automatic Consumption - HP, MP, Stamina, Clan Point
            if (useitem->itemnum>150 && useitem->itemnum<192)
        {                  
            useitem->usescript = 1;
            useitem->usetype = UseList.Index[useitem->itemnum]->useeffect[0];
            useitem->usevalue = UseList.Index[useitem->itemnum]->useeffect[1];          
        }
            else
            {
                Log( MSG_WARNING, "Unknown Item %i - Type %i",useitem->itemnum,type);

            delete useitem;        
            return NULL;
            }
        break;
        case 321://Time Coupon
//DreamRose Updates - needs updating before use
/*        {
            if(thisclient->PlayerSession->MedalUsed == false)
            {
                useitem->usescript = 1;
                useitem->usetype = STB_ITEM[useitem->itemtype].rows[useitem->itemnum][9];            
                useitem->usevalue = STB_ITEM[useitem->itemtype].rows[useitem->itemnum][8]/100;
                thisclient->PlayerSession->MedalExp += useitem->itemnum % 200;
                thisclient->PlayerSession->MedalUsed = true;
                BEGINPACKET( pak, 0x702 );
                ADDSTRING( pak, "The effect will hold until you log off. Have fun with this ItemMall Item. :)" );
                ADDBYTE( pak, 0 );
                thisclient->SendPacket( &pak );
            }
        }
        break;
*/
            delete useitem;        
            return NULL;
        break;
        default:
            Log( MSG_WARNING, "Unknown use item type: %i",type);
            return NULL;
        break;
        
    }  
    useitem->itemtype -= 1;
    return useitem;            
}

// Look if a skill target is friendly
bool CWorldServer::isSkillTargetFriendly( CSkills* thisskill )
{
	switch(thisskill->target)
    {   //Non-Hostile Target
        case 0://yourself
        case 1://party member
        case 2://clan member
        case 3://ally
        case 8://all members
        case 9://Fainted
            return true;
        break; //Hostile Target
        case 4: //monster
        case 5: //hostile character
        case 6: //hostile team member
        case 10: //hostile monster
            return false;
        break;  
        default:
            Log(MSG_WARNING,"Unknown skill target %i", thisskill->target);          
    }
    return false;
}

// calc distance 
float CWorldServer::distance( fPoint pos1, fPoint pos2 )
{
    float distance = 0;
	float dx = pos1.x - pos2.x;
	float dy = pos1.y - pos2.y;
	distance = sqrt( (dx*dx) + (dy*dy) );
    return distance;
} 

// Search client by userid
CPlayer* CWorldServer::GetClientByUserID( UINT userid )
{
    for(UINT i=0;i<ClientList.size();i++)
	{		
        CPlayer* thisclient = (CPlayer*)ClientList.at(i)->player;
        if(thisclient->Session->userid==userid)
            return thisclient;
	};         
    return NULL;
}

// Check if a slot is valid (to prevent crash)
bool CWorldServer::CheckInventorySlot( CPlayer* thisclient, int slot )
{
    if(slot>=MAX_INVENTORY || slot<0)
    {
        Log(MSG_HACK, "Invalid Inventory slot %i from %s", slot, thisclient->Session->username );
        return false;
    }
    return true;
}

// Return a pseudo random number
UINT CWorldServer::RandNumber( UINT init, UINT range, UINT seed )
{
    if(seed!=0)
        srand(seed);
    if(range>RAND_MAX)
    {
        UINT max = (UINT)round(sqrt(range));
        UINT num1 = init+int(max*rand()/(RAND_MAX + 1.0));
        UINT num2 = init+int(max*rand()/(RAND_MAX + 1.0));
        UINT num3 = init+int(max*rand()/(RAND_MAX + 1.0));
        UINT res = (num1 * num2)+num3;
        return res>range?range:res;
    }
    else
    {
        UINT ranum = init+int(range*rand()/(RAND_MAX + 1.0));
        return ranum;
    }
    
}

// Check if is a valid item
bool CWorldServer::IsValidItem(UINT type, UINT id )
{
    if(type==0 || id==0 ) 
        return false;
    if(type<10)
    {
        if(id>4999)
            return false;   
        if(EquipList[type].Index[id]->id==0)
            return false;
    }
    else
    {
        switch(type)
        {
            case 10:
                if(id>1999)
                    return false;   
                if(UseList.Index[id]->id==0)
                    return false;
            break;
            case 11:
                if(id>3999)
                    return false;   
                if(JemList.Index[id]->id==0)
                    return false;
            break;
            case 12:
                if(id>999)
                    return false;   
                if(NaturalList.Index[id]->id==00)
                    return false;
            break;
            case 14:
                if(id>999)
                    return false;   
                if(PatList.Index[id]->id==00)
                    return false;
            break;
            default:
                return false;
        }
    }    
    return true;
}

int CWorldServer::GetIntValue( const char* s , void* var )
{
    char *tmp = strtok( (char*)var, (const char*)s );
    return atoi(tmp==NULL?0:tmp);
}

UINT CWorldServer::GetUIntValue( const char* s , void* var )
{
    char *tmp = strtok( (char*)var, (const char*)s );
    return atoi(tmp==NULL?0:tmp);
}

char* CWorldServer::GetStrValue( const char* s , void* var )
{
    char *tmp = strtok( (char*)var, (const char*)s );
    return tmp;
}

bool CWorldServer::AddParty( CParty* thisparty )
{
    PartyList.push_back( thisparty );
    return true;
}

bool CWorldServer::RemoveParty( CParty* thisparty )
{
    for(UINT i=0;i<PartyList.size( );i++)
    {
        if(PartyList.at(i)==thisparty)
        {
            PartyList.erase(PartyList.begin( )+i );
            return true;
        }
    }
    return false;
}

UINT CWorldServer::GetLevelGhost( UINT map, UINT level)
{
    UINT montype = 0;
    montype = (UINT)floor((level - 19) / 4) + 711;
    if(map >=1 && map <=50) { if(level<20) return 711;if (montype> 731) return 731;}
    if(map >=51 && map <=60) { if(montype<732) return 732; if(montype>750) return 750;}
    if(map >=61 && map <= 65) { montype -= 64; if(montype<680) return 680; if(montype>692) return 692; }
    if(map > 65) { return 692;}
    return montype;
}
// return fairy range for waiting time random
UINT CWorldServer::GetFairyRange( UINT part )
{
	UINT Range1[] = { 5, 5, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };	
    UINT Range2[] = { 10, 7, 7, 6, 6, 6, 6, 5, 4, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 };				 
	if (part == 0) return Range1[GServer->FairyList.size()];
	if (part == 1) return Range2[GServer->FairyList.size()];	
}

⌨️ 快捷键说明

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