📄 extrafunctions.cpp.svn-base
字号:
//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 + -