// ---------------------------------------------------------------------------------------- void CDoubleGoer::ChestDrop(int aIndex, unsigned char Type, unsigned char Map, unsigned char X, unsigned char Y) { LPOBJ lpObj = &gObj[aIndex]; int RandomItem; int Item; unsigned char Skill; unsigned char Luck; unsigned char Opt; unsigned char Level; unsigned char Dur; unsigned char Exe; unsigned char Anc; unsigned char Socket[5]; Socket[0] = 0xFF; Socket[1] = 0xFF; Socket[2] = 0xFF; Socket[3] = 0xFF; Socket[4] = 0xFF; Skill = 0; Luck = 0; Opt = 0; Level = 0; Dur = 0; Exe = 0; Anc = 0; Item = 0; RandomItem = rand()%gDoubleGoer.ItemCount[Type]; Item = ITEMGET(gDoubleGoer.Type[Type][RandomItem],gDoubleGoer.Index[Type][RandomItem]); if ( rand()%1000 < 50 ) { Skill = gDoubleGoer.Skill[Type][RandomItem]; } if ( rand()%1000 < 50 ) { Luck = gDoubleGoer.Luck[Type][RandomItem]; } if ( rand()%1000 < 50 ) { if ( gDoubleGoer.Level[Type][RandomItem] > 0 ) { Level = rand()%(gDoubleGoer.Level[Type][RandomItem]+1); } else { Level = 0; } } if ( rand()%1000 < 50 ) { if ( gDoubleGoer.Opt[Type][RandomItem] > 0 ) { Opt = rand()%(gDoubleGoer.Opt[Type][RandomItem]+1); } else { Opt = 0; } } if ( rand()%1000 < 50 ) { Exe = GetRandomExeOption(gDoubleGoer.Exe[Type][RandomItem]+1); } if ( rand()%1000 < 10 ) { if ( gDoubleGoer.Anc[Type][RandomItem] == 5 || gDoubleGoer.Anc[Type][RandomItem] == 10 ) { Anc = gDoubleGoer.Anc[Type][RandomItem]; } else { Anc = 0; } } if ( rand()%1000 < 50 ) { Socket[0] = gDoubleGoer.Socket[0][Type][RandomItem]; if ( rand()%1000 < 50 ) { Socket[1] = gDoubleGoer.Socket[1][Type][RandomItem]; if ( rand()%1000 < 50 ) { Socket[2] = gDoubleGoer.Socket[2][Type][RandomItem]; if ( rand()%1000 < 50 ) { Socket[3] = gDoubleGoer.Socket[3][Type][RandomItem]; if ( rand()%1000 < 50 ) { Socket[4] = gDoubleGoer.Socket[4][Type][RandomItem]; } } } } } ItemSerialCreateSend(aIndex,Map,X,Y,Item,Level,Dur,Luck,Skill,Opt,aIndex,Exe,Anc,Socket); }
bool CItemDropManager::ProccessItemDrop(LPOBJ lpMobObj) { unsigned char Map = lpMobObj->MapNumber; unsigned char X = lpMobObj->X; unsigned char Y = lpMobObj->Y; int Type = 0; char Level = 0; unsigned char Dur = 0; char Luck = 0; char Skill = 0; char Opt = 0; char Exe = 0; char Anc = 0; unsigned char Socket[5]; Socket[0] = 0xFF; Socket[1] = 0xFF; Socket[2] = 0xFF; Socket[3] = 0xFF; Socket[4] = 0xFF; if ( gItemDropManager.ItemsCount > 0 ) { int iTopHitUser = gObjMonsterTopHitDamageUser(lpMobObj); for (int i=0;i<gItemDropManager.ItemsCount;++i) { if ( lpMobObj->MapNumber == gItemDropManager.DropMap[i] || gItemDropManager.DropMap[i] == -1 ) { if ( lpMobObj->Level >= gItemDropManager.MobMinLvl[i] && lpMobObj->Level <= gItemDropManager.MobMaxLvl[i] ) { if ( (rand()%10000) < gItemDropManager.DropRate[i] ) { Type = ItemGetNumberMake(gItemDropManager.ItemType[i],gItemDropManager.ItemIndex[i]); Level = gItemDropManager.ItemLevel[i]; Dur = gItemDropManager.ItemDur[i]; Luck = gItemDropManager.ItemLuck[i]; Skill = gItemDropManager.ItemSkill[i]; Opt = gItemDropManager.ItemOption[i]; if ( gItemDropManager.ItemExe[i] > 0 ) { Exe = GetRandomExeOption(gItemDropManager.ItemExe[i]+1); } if ( gItemDropManager.ItemAncient[i] == 5 || gItemDropManager.ItemAncient[i] == 10 ) { Anc = gItemDropManager.ItemAncient[i]; } if ( gItemDropManager.Socket[0][i] != 255 ) { Socket[0] = gItemDropManager.Socket[0][i]; if ( gItemDropManager.Socket[1][i] != 255 ) { Socket[1] = gItemDropManager.Socket[1][i]; if ( gItemDropManager.Socket[2][i] != 255 ) { Socket[2] = gItemDropManager.Socket[2][i]; if ( gItemDropManager.Socket[3][i] != 255 ) { Socket[3] = gItemDropManager.Socket[3][i]; if ( gItemDropManager.Socket[4][i] != 255 ) { Socket[4] = gItemDropManager.Socket[4][i]; } } } } } ItemSerialCreateSend(lpMobObj->m_Index,Map,X,Y,Type,Level,Dur,Skill,Luck,Opt,iTopHitUser,Exe,Anc,Socket); return true; } } } } } return false; }