From: <wel...@us...> - 2011-05-24 21:36:16
|
Revision: 7322 http://planeshift.svn.sourceforge.net/planeshift/?rev=7322&view=rev Author: weltall2 Date: 2011-05-24 21:36:10 +0000 (Tue, 24 May 2011) Log Message: ----------- expanded loot costumability Modified Paths: -------------- trunk/src/server/database/mysql/loot_rule_details.sql trunk/src/server/database/mysql/server_options.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/psserver.cpp trunk/src/server/spawnmanager.cpp trunk/src/server/spawnmanager.h Modified: trunk/src/server/database/mysql/loot_rule_details.sql =================================================================== --- trunk/src/server/database/mysql/loot_rule_details.sql 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/database/mysql/loot_rule_details.sql 2011-05-24 21:36:10 UTC (rev 7322) @@ -8,23 +8,25 @@ # DROP TABLE IF EXISTS `loot_rule_details`; -CREATE TABLE loot_rule_details ( - id int(10) unsigned NOT NULL auto_increment, - loot_rule_id int(10) unsigned NOT NULL DEFAULT '0' , - item_stat_id int(10) unsigned NOT NULL DEFAULT '0' , - probability float(5,4) NOT NULL DEFAULT '0.0000' , - min_money int(10) unsigned NOT NULL DEFAULT '0' , - max_money int(10) unsigned NOT NULL DEFAULT '0' , - randomize tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (id) -); +CREATE TABLE `planeshift`.`loot_rule_details` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `loot_rule_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_stat_id` int(10) unsigned NOT NULL DEFAULT '0', + `min_items` int(10) unsigned NOT NULL DEFAULT '1' COMMENT 'The minimum amount of these items which could be created', + `max_items` int(10) unsigned NOT NULL DEFAULT '1' COMMENT 'The maximum amount of these items which could be created', + `probability` float(5,4) NOT NULL DEFAULT '0.0000', + `min_money` int(10) unsigned NOT NULL DEFAULT '0', + `max_money` int(10) unsigned NOT NULL DEFAULT '0', + `randomize` tinyint(1) NOT NULL DEFAULT '0', + `randomize_probability` float(5,4) NOT NULL DEFAULT '1.0000' COMMENT 'The probability this items will be randomized if choosen', + PRIMARY KEY (`id`), +) ENGINE=MyISAM DEFAULT CHARSET=latin1 - # # Dumping data for table 'loot_rule_details' # -INSERT INTO loot_rule_details VALUES (1,1,8,0.5,0,0,0); -INSERT INTO loot_rule_details VALUES (2,1,7,0.35,0,0,1); -INSERT INTO loot_rule_details VALUES (3,1,6,0.15,10,35,0); -INSERT INTO loot_rule_details VALUES (4,2,3,1,0,0,1); +INSERT INTO loot_rule_details VALUES (1,1,8,1,1,0.5,0,0,0,1); +INSERT INTO loot_rule_details VALUES (2,1,7,1,1,0.35,0,0,1,1); +INSERT INTO loot_rule_details VALUES (3,1,6,1,1,0.15,10,35,0,1); +INSERT INTO loot_rule_details VALUES (4,2,3,1,1,1,0,0,1,1); Modified: trunk/src/server/database/mysql/server_options.sql =================================================================== --- trunk/src/server/database/mysql/server_options.sql 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/database/mysql/server_options.sql 2011-05-24 21:36:10 UTC (rev 7322) @@ -29,7 +29,7 @@ # Dumping data for table server_options # -INSERT INTO `server_options` VALUES ('db_version','1259'); +INSERT INTO `server_options` VALUES ('db_version','1260'); INSERT INTO `server_options` VALUES ('game_time','15:00'); INSERT INTO `server_options` VALUES ('game_date','100-1-1'); INSERT INTO `server_options` VALUES ('standard_motd','This is the message of the day from server_options table.'); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2011-05-24 21:36:10 UTC (rev 7322) @@ -1609,6 +1609,14 @@ ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Stores the list of npc types'; +#1260 - Stefano Angeleri - expanded loot rules functionalities + +ALTER TABLE `loot_rule_details` ADD COLUMN `min_items` INTEGER UNSIGNED NOT NULL DEFAULT 1 COMMENT 'The minimum amount of these items which could be created' AFTER `item_stat_id`, + ADD COLUMN `max_items` INTEGER UNSIGNED NOT NULL DEFAULT 1 COMMENT 'The maximum amount of these items which could be created' AFTER `min_items`, + ADD COLUMN `randomize_probability` FLOAT(5,4) NOT NULL DEFAULT '0.00000' COMMENT 'The probability this items will be randomized if choosen' AFTER `randomize`; +UPDATE `server_options` SET `option_value`='1260' WHERE `option_name`='db_version'; + + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/psserver.cpp 2011-05-24 21:36:10 UTC (rev 7322) @@ -92,7 +92,7 @@ #include "workmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1259" +#define DATABASE_VERSION_STR "1260" psCharacterLoader psServer::CharacterLoader; Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/spawnmanager.cpp 2011-05-24 21:36:10 UTC (rev 7322) @@ -245,10 +245,13 @@ int item_id = result[i].GetInt("item_stat_id"); entry->item = cacheManager->GetBasicItemStatsByID( item_id ); + entry->min_item = result[i].GetInt("min_item"); + entry->max_item = result[i].GetInt("max_item"); entry->probability = result[i].GetFloat("probability"); entry->min_money = result[i].GetInt("min_money"); entry->max_money = result[i].GetInt("max_money"); entry->randomize = (result[i].GetInt("randomize") ? true : false); + entry->randomizeProbability = result[i].GetFloat("randomize_probability"); if (!entry->item && item_id != 0) { @@ -1400,63 +1403,69 @@ for (size_t i=0; i<entries.GetSize(); i++) { float roll = psserver->rng->Get(); - if (roll < entries[i]->probability) + if (roll <= entries[i]->probability) { if(entries[i]->item) // We don't always have a item. { - psItem* loot_item = entries[i]->item->InstantiateBasicItem(); - if ( entries[i]->randomize ) - loot_item = lootRandomizer->RandomizeItem( loot_item, - maxcost, - lootTesting, - numModifiers ); + int itemAmount = entries[i]->min_item + (int)(psserver->rng->Get() * + (float)(entries[i]->max_item - entries[i]->min_item)); + for(int y = 0; y < itemAmount; y++) + { + psItem* loot_item = entries[i]->item->InstantiateBasicItem(); + + if (entries[i]->randomize && psserver->rng->Get() <= entries[i]->randomizeProbability) + loot_item = lootRandomizer->RandomizeItem( loot_item, + maxcost, + lootTesting, + numModifiers ); - if (!lootTesting) - chr->AddLootItem(loot_item); - else - { - // print out the stats - CPrintf(CON_CMDOUTPUT, - "Randomized item (%d modifiers) : \'%s\', %s\n" - " Quality : %.2f Weight : %.2f Size : %d Price : %d\n", - numModifiers, - loot_item->GetName(), - loot_item->GetDescription(), - loot_item->GetItemQuality(), - loot_item->GetWeight(), - loot_item->GetItemSize(), - loot_item->GetPrice().GetTrias()); - if (loot_item->GetIsArmor()) + if (!lootTesting) + chr->AddLootItem(loot_item); + else { + // print out the stats CPrintf(CON_CMDOUTPUT, - "Armour stats:\n" - " Class : %c Hardness : %.2f\n" - " Protection Slash : %.2f Blunt : %.2f Pierce : %.2f\n", - loot_item->GetBaseStats()->Armor().Class(), - loot_item->GetHardness(), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_SLASH), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_BLUNT), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_PIERCE)); + "Randomized item (%d modifiers) : \'%s\', %s\n" + " Quality : %.2f Weight : %.2f Size : %d Price : %d\n", + numModifiers, + loot_item->GetName(), + loot_item->GetDescription(), + loot_item->GetItemQuality(), + loot_item->GetWeight(), + loot_item->GetItemSize(), + loot_item->GetPrice().GetTrias()); + if (loot_item->GetIsArmor()) + { + CPrintf(CON_CMDOUTPUT, + "Armour stats:\n" + " Class : %c Hardness : %.2f\n" + " Protection Slash : %.2f Blunt : %.2f Pierce : %.2f\n", + loot_item->GetBaseStats()->Armor().Class(), + loot_item->GetHardness(), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_SLASH), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_BLUNT), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_PIERCE)); + } + else if (loot_item->GetIsMeleeWeapon() || loot_item->GetIsRangeWeapon()) + { + CPrintf(CON_CMDOUTPUT, + "Weapon stats:\n" + " Latency : %.2f Penetration : %.2f\n" + " Damage Slash : %.2f Blunt : %.2f Pierce : %.2f\n" + " BlockValue Untargeted : %.2f Targeted : %.2f Counter : %.2f\n", + loot_item->GetLatency(), + loot_item->GetPenetration(), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_SLASH), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_BLUNT), + loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_PIERCE), + loot_item->GetUntargetedBlockValue(), + loot_item->GetTargetedBlockValue(), + loot_item->GetCounterBlockValue()); + } + /*CPrintf(CON_CMDOUTPUT, + "Equip script: %s\n Un-equip script: %s\n",loot_item->GetProgressionEventEquip().GetData(), + loot_item->GetProgressionEventUnEquip().GetData());*/ } - else if (loot_item->GetIsMeleeWeapon() || loot_item->GetIsRangeWeapon()) - { - CPrintf(CON_CMDOUTPUT, - "Weapon stats:\n" - " Latency : %.2f Penetration : %.2f\n" - " Damage Slash : %.2f Blunt : %.2f Pierce : %.2f\n" - " BlockValue Untargeted : %.2f Targeted : %.2f Counter : %.2f\n", - loot_item->GetLatency(), - loot_item->GetPenetration(), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_SLASH), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_BLUNT), - loot_item->GetDamage(PSITEMSTATS_DAMAGETYPE_PIERCE), - loot_item->GetUntargetedBlockValue(), - loot_item->GetTargetedBlockValue(), - loot_item->GetCounterBlockValue()); - } - /*CPrintf(CON_CMDOUTPUT, - "Equip script: %s\n Un-equip script: %s\n",loot_item->GetProgressionEventEquip().GetData(), - loot_item->GetProgressionEventUnEquip().GetData());*/ } } float pct = psserver->rng->Get(); Modified: trunk/src/server/spawnmanager.h =================================================================== --- trunk/src/server/spawnmanager.h 2011-05-24 21:32:53 UTC (rev 7321) +++ trunk/src/server/spawnmanager.h 2011-05-24 21:36:10 UTC (rev 7322) @@ -193,10 +193,13 @@ struct LootEntry { psItemStats *item; + int min_item; ///< The minimal amount of these items. + int max_item; ///< The maximum amount of these items. float probability; int min_money; int max_money; bool randomize; + float randomizeProbability; ///< The probability that if this item was picked it will be randomized. }; /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |