cglotteryselecthandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 686 行 · 第 1/2 页
CPP
686 行
makeOptionList( oSlayer1[ rand()%5 ], oList ); } else if ( qGrade < 211 ) { iType = 3; makeOptionList( oSlayer1[ rand()%5 ], oList ); } else if ( qGrade < 271 ) { iType = 4; makeOptionList( oSlayer2[ rand()%5 ], oList ); } else if ( qGrade < 300 ) { iType = 5; makeOptionList( oSlayer2[ rand()%5 ], oList ); } else { iType = 6; makeOptionList( oSlayer2[ rand()%5 ], oList ); } } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); Level_t level = pVampire->getLevel(); iClass = Item::ITEM_CLASS_VAMPIRE_RING; if ( level < 31 ) { iType = 2; makeOptionList( oVampire1[ rand()%5 ], oList ); } else if ( level < 51 ) { iType = 3; makeOptionList( oVampire1[ rand()%5 ], oList ); } else if ( level < 71 ) { iType = 4; makeOptionList( oVampire2[ rand()%5 ], oList ); } else if ( level < 91 ) { iType = 5; makeOptionList( oVampire2[ rand()%5 ], oList ); } else { iType = 6; makeOptionList( oVampire2[ rand()%5 ], oList ); } } else if ( pPC->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pPC); Level_t level = pOusters->getLevel(); iClass = Item::ITEM_CLASS_OUSTERS_RING; if ( level < 31 ) { iType = 2; makeOptionList( oVampire1[ rand()%5 ], oList ); } else if ( level < 51 ) { iType = 3; makeOptionList( oVampire1[ rand()%5 ], oList ); } else if ( level < 71 ) { iType = 4; makeOptionList( oVampire2[ rand()%5 ], oList ); } else if ( level < 91 ) { iType = 5; makeOptionList( oVampire2[ rand()%5 ], oList ); } else { iType = 6; makeOptionList( oVampire2[ rand()%5 ], oList ); } } } break; case 2: { isLairItem = true; masterType = 432; } break; case 3: { isLairItem = true; masterType = 433; } break; case 4: { isTimeLimit = true; if ( pPC->isSlayer() ) { isUnique = true; static const Item::ItemClass iClasses[] = { Item::ITEM_CLASS_COAT, Item::ITEM_CLASS_TROUSER, Item::ITEM_CLASS_GLOVE, Item::ITEM_CLASS_HELM, Item::ITEM_CLASS_SHOES, Item::ITEM_CLASS_BELT, Item::ITEM_CLASS_NECKLACE, Item::ITEM_CLASS_BRACELET }; static const ItemType_t iTypes[] = { 16, 16, 8, 9, 7, 4, 10, 10 }; int index = rand() % 8; iClass = iClasses[index]; iType = iTypes[index]; } else if ( pPC->isVampire() ) { isUnique = true; static const Item::ItemClass iClasses[] = { Item::ITEM_CLASS_VAMPIRE_COAT, Item::ITEM_CLASS_VAMPIRE_WEAPON, Item::ITEM_CLASS_VAMPIRE_RING, Item::ITEM_CLASS_VAMPIRE_NECKLACE, Item::ITEM_CLASS_VAMPIRE_BRACELET, Item::ITEM_CLASS_VAMPIRE_AMULET, Item::ITEM_CLASS_VAMPIRE_EARRING }; static const ItemType_t iTypes[] = { 12, 15, 10, 10, 9, 10, 10 }; int index = rand() % 7; iClass = iClasses[index]; iType = iTypes[index]; } else if ( pPC->isOusters() ) { static const Item::ItemClass iClasses[] = { Item::ITEM_CLASS_OUSTERS_COAT, Item::ITEM_CLASS_OUSTERS_CIRCLET, Item::ITEM_CLASS_OUSTERS_ARMSBAND, Item::ITEM_CLASS_OUSTERS_BOOTS, Item::ITEM_CLASS_OUSTERS_PENDENT, Item::ITEM_CLASS_OUSTERS_RING }; static const ItemType_t iTypes[] = { 7, 9, 9, 7, 9, 9 }; static const string options[] = { "DAM+3", "ASPD+3", "LUCK+2", "HP+9", "STR+3", "DEX+3", "INT+3", "ATTR+2", "RES+3", "MP+4" }; int index = rand() % 6; iClass = iClasses[index]; iType = iTypes[index]; int option1 = rand()%10; int option2 = rand()%10; while ( option1 == option2 ) option2 = rand()%10; makeOptionList( options[ option1 ] + "," + options[ option2 ], oList ); } } break; default: break; } Item* pItem; if ( isLairItem ) { const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(masterType); TreasureList *pTreasureList = NULL; if (pPC->isSlayer()) pTreasureList = pMonsterInfo->getSlayerTreasureList(); else if ( pPC->isVampire() ) pTreasureList = pMonsterInfo->getVampireTreasureList(); else if ( pPC->isOusters() ) pTreasureList = pMonsterInfo->getOustersTreasureList(); const list<Treasure*>& treasures = pTreasureList->getTreasures(); list<Treasure*>::const_iterator itr = treasures.begin(); ITEM_TEMPLATE it; for(; itr != treasures.end(); itr++) { Treasure* pTreasure = (*itr); it.ItemClass = Item::ITEM_CLASS_MAX; it.ItemType = 0; it.NextOptionRatio = 0; //cout << "TradeLairItem: BonusRatio = " << it.NextOptionRatio << endl; if ( pTreasure->getRandomItem(&it) ) { pItem = g_pItemFactoryManager->createItem(it.ItemClass, it.ItemType, it.OptionType); Assert(pItem != NULL); } } } else { pItem = g_pItemFactoryManager->createItem( iClass, iType, oList ); } GenderRestriction gender = GENDER_BOTH; switch( pPC->getSex() ) { case MALE: gender = GENDER_MALE; break; case FEMALE: gender = GENDER_FEMALE; break; default: break; } setItemGender( pItem, gender ); _TPOINT tp; if ( pItem != NULL && pPC->getInventory()->addItem( pItem, tp ) ) { pPC->getZone()->registerObject( pItem ); pItem->create( pPC->getName(), STORAGE_INVENTORY, 0, tp.x, tp.y ); if ( isTimeLimit ) { pPC->addTimeLimitItem( pItem, 604800 ); pPC->sendTimeLimitItemInfo(); } GCCreateItem gcCreateItem; makeGCCreateItem( &gcCreateItem, pItem, tp.x, tp.y ); pPC->getPlayer()->sendPacket( &gcCreateItem ); remainTraceLog( pItem, "GOD", pCreature->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC); } else { if ( isUnique ) pItem->setUnique(); if ( isTimeLimit ) pItem->setTimeLimitItem(); pPC->setQuestItem( pItem ); remainTraceLog( pItem, "GOD", pCreature->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC); } } if ( pPC->getLottoQuestLevel() == 4 ) { pPC->getQuestManager()->cancelQuest(); GCNoticeEvent gcNE; gcNE.setCode( NOTICE_EVENT_START_QUEST_ENDING ); pPC->getPlayer()->sendPacket( &gcNE ); } } break; case TYPE_OVER_ENDING: { // 磷牢促. // PlayerCreature 俊辑绰 setHP 给 何甫淀 //pPC->setHP(0); if ( pCreature != NULL ) { if ( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); pSlayer->setHP(0); } else if (pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); pVampire->setHP(0); } } } break; }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?