From: Luca P. <lpa...@us...> - 2006-01-31 21:51:47
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5356/server Modified Files: spawnmanager.cpp spawnmanager.h Log Message: max probability on items is calculated at server startup Index: spawnmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/spawnmanager.cpp,v retrieving revision 1.153 retrieving revision 1.154 diff -C2 -d -r1.153 -r1.154 *** spawnmanager.cpp 29 Jan 2006 21:05:54 -0000 1.153 --- spawnmanager.cpp 31 Jan 2006 21:51:39 -0000 1.154 *************** *** 1264,1267 **** --- 1264,1271 ---- LootRandomizer::LootRandomizer() { + prefix_max = 0; + adjective_max = 0; + suffix_max = 0; + // Find any math scripts that are needed modifierCostCalc = psserver->GetMathScriptEngine()->FindScript("LootModifierCostCap"); *************** *** 1293,1304 **** --- 1297,1311 ---- { prefixes.Push( entry ); + if (entry->probability > prefix_max) prefix_max = entry->probability; } else if ( entry->modifier_type.CompareNoCase( "suffix" ) == true ) { suffixes.Push( entry ); + if (entry->probability > suffix_max) suffix_max = entry->probability; } else if ( entry->modifier_type.CompareNoCase( "adjective" ) == true ) { adjectives.Push( entry ); + if (entry->probability > adjective_max) adjective_max = entry->probability; } } *************** *** 1358,1379 **** { modifierType = selectedModifierTypes.Pop(); ! int newModifier, probability; LootModifier *lootModifier = NULL; csArray<LootModifier *> *modifierList; ! if ( modifierType.CompareNoCase( "prefix" ) == true ) { modifierList = &prefixes; } ! else if ( modifierType.CompareNoCase( "suffix" ) == true ) { modifierList = &suffixes; } ! else if ( modifierType.CompareNoCase( "adjective" ) == true ) { modifierList = &adjectives; } ! // Get first probability <= probability <= last probability in modifiers list ! probability = psserver->rng->Get( (int)((*modifierList)[ modifierList->Length() - 1 ]->probability - (int) (*modifierList)[0]->probability ) + 1) + (int) (*modifierList)[0]->probability; for ( newModifier = (int)modifierList->Length() - 1; newModifier >= 0 ; newModifier-- ) { ! if ( probability >= (*modifierList)[newModifier]->probability ) { if ( maxcost >= totalCost * (*modifierList)[newModifier]->cost_modifier ) { lootModifier = (*modifierList)[ newModifier ]; ! totalCost = totalCost * (*modifierList)[newModifier]->cost_modifier; break; } --- 1365,1388 ---- { modifierType = selectedModifierTypes.Pop(); ! int newModifier, probability, max_probability; LootModifier *lootModifier = NULL; csArray<LootModifier *> *modifierList; ! if ( modifierType.CompareNoCase( "prefix" ) == true ) { modifierList = &prefixes; max_probability=prefix_max; } ! else if ( modifierType.CompareNoCase( "suffix" ) == true ) { modifierList = &suffixes; max_probability=suffix_max;} ! else if ( modifierType.CompareNoCase( "adjective" ) == true ) { modifierList = &adjectives; max_probability=adjective_max;} ! // Get min probability <= probability <= max probability in modifiers list ! //probability = psserver->rng->Get( (int)((*modifierList)[ modifierList->Length() - 1 ]->probability - (int) (*modifierList)[0]->probability ) + 1) + (int) (*modifierList)[0]->probability; ! probability = psserver->rng->Get( max_probability ); for ( newModifier = (int)modifierList->Length() - 1; newModifier >= 0 ; newModifier-- ) { ! int item_prob = (*modifierList)[newModifier]->probability; ! if ( probability >= item_prob) { if ( maxcost >= totalCost * (*modifierList)[newModifier]->cost_modifier ) { lootModifier = (*modifierList)[ newModifier ]; ! totalCost = totalCost * (*modifierList)[newModifier]->cost_modifier; break; } Index: spawnmanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/spawnmanager.h,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** spawnmanager.h 29 Jan 2006 21:05:54 -0000 1.47 --- spawnmanager.h 31 Jan 2006 21:51:39 -0000 1.48 *************** *** 269,272 **** --- 269,277 ---- csArray<LootModifier*> adjectives; + // precalculated max values for probability. min is always 0 + int prefix_max; + int adjective_max; + int suffix_max; + public: LootRandomizer(); |