From: <ma...@us...> - 2013-01-04 23:23:01
|
Revision: 8529 http://planeshift.svn.sourceforge.net/planeshift/?rev=8529&view=rev Author: magodra Date: 2013-01-04 23:22:53 +0000 (Fri, 04 Jan 2013) Log Message: ----------- - Enabled server to allow NPCs to cast spells on each other. - Added debug to verify NPC spell casting. - Added test data for another SpellCaster to test casting between NPCs and spell perceptions. Modified Paths: -------------- trunk/src/server/bulkobjects/psspell.cpp trunk/src/server/database/mysql/char_skills.sql trunk/src/server/database/mysql/characters.sql trunk/src/server/database/mysql/item_instances.sql trunk/src/server/database/mysql/math_scripts.sql trunk/src/server/database/mysql/player_spells.sql trunk/src/server/database/mysql/sc_npc_definitions.sql trunk/src/server/database/mysql/sc_npctypes.sql trunk/src/server/gem.cpp trunk/src/server/npcmanager.cpp Modified: trunk/src/server/bulkobjects/psspell.cpp =================================================================== --- trunk/src/server/bulkobjects/psspell.cpp 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/bulkobjects/psspell.cpp 2013-01-04 23:22:53 UTC (rev 8529) @@ -387,8 +387,11 @@ } else { - Debug5(LOG_SUPERCLIENT,caster->GetEID().Unbox(),"%s cannot cast %s on %s. You can only cast it on %s.", - caster->GetName(),name.GetData(), target ? target->GetName() : "that", allowedTypes.GetData()); + csString targetTypeName; + Client::GetTargetTypeName(targetType, targetTypeName ); + + Debug6(LOG_SUPERCLIENT,caster->GetEID().Unbox(),"%s cannot cast %s on %s. You can only cast it on %s. Target is; %s", + caster->GetName(),name.GetData(), target ? target->GetName() : "that", allowedTypes.GetData(),targetTypeName.GetDataSafe()); } return; Modified: trunk/src/server/database/mysql/char_skills.sql =================================================================== --- trunk/src/server/database/mysql/char_skills.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/char_skills.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -39,7 +39,7 @@ INSERT INTO character_skills VALUES("19","46","0","0","60"); # Fighter1 skills on axe (Fighter2 inherits from Fighter1) -INSERT INTO character_skills VALUES("6","2","0","0","100"); +INSERT INTO character_skills VALUES("6","2","0","0","100"); # Axe # Tribe skills on mining INSERT INTO character_skills VALUES("20","37","200","200","200"); @@ -51,3 +51,15 @@ INSERT INTO character_skills VALUES("87","49","0","0","400"); INSERT INTO character_skills VALUES("87","50","0","0","400"); INSERT INTO character_skills VALUES("87","51","0","0","400"); + +# SpellMaster1, make spells a 100% probability +INSERT INTO character_skills VALUES("82","47","0","0","400"); # Charisma +INSERT INTO character_skills VALUES("82","51","0","0","400"); # Will +INSERT INTO character_skills VALUES("82","11","0","0","400"); # Crystal +INSERT INTO character_skills VALUES("82","12","0","0","400"); # Azure + +# SpellMaster1, make spell a 100% probability +INSERT INTO character_skills VALUES("92","47","0","0","400"); # Charisma +INSERT INTO character_skills VALUES("92","51","0","0","400"); # Will +INSERT INTO character_skills VALUES("92","11","0","0","400"); # Crystal +INSERT INTO character_skills VALUES("92","12","0","0","400"); # Azure Modified: trunk/src/server/database/mysql/characters.sql =================================================================== --- trunk/src/server/database/mysql/characters.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/characters.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -152,7 +152,7 @@ INSERT INTO `characters` VALUES (79,'LocateMaster1','','',7,1,44.00,40.00,44.00,40.00,40.00,40.00,50.00,100.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-20.00,0.00,-230.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,29,'N',9,0,0,0,0,'Used to test movement.','','','',500,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (80,'Chaser1','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-10.00,0.00,-200.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Used to test chase operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (81,'Chaser2','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-37.00,0.00,-130.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Used to test chase operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); -INSERT INTO `characters` VALUES (82,'SpellMaster','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-25.00,0.00,-150.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Used to test NPC spell operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); +INSERT INTO `characters` VALUES (82,'SpellMaster1','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-25.00,0.00,-150.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,0,'N',9,0,2,0,0,'Used to test NPC spell operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (83,'SpellFighter','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,17.50,0.00,-132.50,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Used to test NPC spell operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (84,'Fighter5','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-10.00,0.00,-250.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (85,'Fighter6','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-12.00,0.00,-250.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0,0); @@ -162,6 +162,7 @@ INSERT INTO `characters` VALUES (89,'Fighter10','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,6,-105.00,0.00,-55.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (90,'Fighter11','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,6,-100.00,0.00,-55.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,6,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0,0); INSERT INTO `characters` VALUES (91,'Fighter12','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,6,-95.00,0.00,-55.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,87,'N',9,0,2,0,0,'Fighting with region','','','',10,'',0,'0000-00-00 00:00:00',0,0); +INSERT INTO `characters` VALUES (92,'SpellMaster2','','',3,1,100.00,100.00,100.00,100.00,100.00,100.00,200.00,200.00,100.00,100.00,100.00,100.00,100,100,100,100,100,100,100,100,0,3,-25.00,0.00,-145.00,0.00,0,0,0,0,0,'','',0,NULL,'',1,0,'N',9,0,2,0,0,'Used to test NPC spell operations.','','','',10,'',0,'0000-00-00 00:00:00',0,0); Modified: trunk/src/server/database/mysql/item_instances.sql =================================================================== --- trunk/src/server/database/mysql/item_instances.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/item_instances.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -192,18 +192,32 @@ INSERT INTO `item_instances` VALUES (186,82,0,0,7,1,0,0,0,0,0,0,0,0,0,0,0,50,50,29,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); INSERT INTO `item_instances` VALUES (187,82,0,0,8,1,0,0,0,0,0,0,0,0,0,0,0,50,50,44,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); INSERT INTO `item_instances` VALUES (188,82,0,0,9,1,0,0,0,0,0,0,0,0,0,0,0,50,50,47,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (189,82,0,0,10,1,0,0,0,0,0,0,0,0,0,0,0,50,50,57,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); # SpellFighters items -INSERT INTO `item_instances` VALUES (189,83,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,50,50,13,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (190,83,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,50,50,14,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (191,83,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,50,50,15,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (192,83,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,50,50,17,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (193,83,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0,50,50,19,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (194,83,0,0,6,1,0,0,0,0,0,0,0,0,0,0,0,50,50,20,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (195,83,0,0,7,1,0,0,0,0,0,0,0,0,0,0,0,50,50,29,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (196,83,0,0,8,1,0,0,0,0,0,0,0,0,0,0,0,50,50,44,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); -INSERT INTO `item_instances` VALUES (197,83,0,0,9,1,0,0,0,0,0,0,0,0,0,0,0,50,50,47,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (190,83,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,50,50,13,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (191,83,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,50,50,14,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (192,83,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,50,50,15,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (193,83,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,50,50,17,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (194,83,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0,50,50,19,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (195,83,0,0,6,1,0,0,0,0,0,0,0,0,0,0,0,50,50,20,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (196,83,0,0,7,1,0,0,0,0,0,0,0,0,0,0,0,50,50,29,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (197,83,0,0,8,1,0,0,0,0,0,0,0,0,0,0,0,50,50,44,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (198,83,0,0,9,1,0,0,0,0,0,0,0,0,0,0,0,50,50,47,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (199,83,0,0,9,1,0,0,0,0,0,0,0,0,0,0,0,50,50,57,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +# SpellMasters items +INSERT INTO `item_instances` VALUES (200,92,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,50,50,13,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (201,92,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,50,50,14,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (202,92,0,0,3,1,0,0,0,0,0,0,0,0,0,0,0,50,50,15,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (203,92,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,50,50,17,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (204,92,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0,50,50,19,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (205,92,0,0,6,1,0,0,0,0,0,0,0,0,0,0,0,50,50,20,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (206,92,0,0,7,1,0,0,0,0,0,0,0,0,0,0,0,50,50,29,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (207,92,0,0,8,1,0,0,0,0,0,0,0,0,0,0,0,50,50,44,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (208,92,0,0,9,1,0,0,0,0,0,0,0,0,0,0,0,50,50,47,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (209,92,0,0,10,1,0,0,0,0,0,0,0,0,0,0,0,50,50,57,0,'PURIFIED,TRANSIENT',0,-1,'','','',NULL,'0',0,0,0); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Modified: trunk/src/server/database/mysql/math_scripts.sql =================================================================== --- trunk/src/server/database/mysql/math_scripts.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/math_scripts.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -131,7 +131,7 @@ INSERT INTO math_scripts VALUES( "CalculateManaCost", "ManaCost = Realm*4*(1+(KFactor*KFactor/10000)); StaminaCost = ManaCost;"); -INSERT INTO math_scripts VALUES( "CalculateChanceOfCastSuccess", "ChanceOfSuccess = (50-KFactor) + WaySkill/20 + (RelatedStat)/20;"); +INSERT INTO math_scripts VALUES( "CalculateChanceOfCastSuccess", "ChanceOfSuccess = (50-KFactor) + WaySkill/25 + (RelatedStat)/25;"); INSERT INTO math_scripts VALUES( "CalculateChanceOfResearchSuccess", "ChanceOfSuccess = WaySkill/10 + ( 10 / Spell:Realm ) * 7;"); @@ -628,4 +628,4 @@ INSERT INTO math_scripts VALUES( "trade_delete_item", " Worker:DeleteItem(0, 1); // -" ); \ No newline at end of file +" ); Modified: trunk/src/server/database/mysql/player_spells.sql =================================================================== --- trunk/src/server/database/mysql/player_spells.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/player_spells.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -37,7 +37,7 @@ INSERT INTO player_spells VALUES("2","8","7"); -# NPC SpellMaster spells +# NPC SpellMaster1 spells INSERT INTO player_spells VALUES("82","1","0"); INSERT INTO player_spells VALUES("82","2","1"); INSERT INTO player_spells VALUES("82","3","2"); @@ -57,3 +57,12 @@ INSERT INTO player_spells VALUES("83","7","6"); INSERT INTO player_spells VALUES("83","8","7"); +# NPC SpellMaster2 spells +INSERT INTO player_spells VALUES("92","1","0"); +INSERT INTO player_spells VALUES("92","2","1"); +INSERT INTO player_spells VALUES("92","3","2"); +INSERT INTO player_spells VALUES("92","4","3"); +INSERT INTO player_spells VALUES("92","5","4"); +INSERT INTO player_spells VALUES("92","6","5"); +INSERT INTO player_spells VALUES("92","7","6"); +INSERT INTO player_spells VALUES("92","8","7"); Modified: trunk/src/server/database/mysql/sc_npc_definitions.sql =================================================================== --- trunk/src/server/database/mysql/sc_npc_definitions.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/sc_npc_definitions.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -56,7 +56,7 @@ INSERT INTO sc_npc_definitions VALUES("79","LocateMaster1","LocateTest1","","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("80","Chaser1","ChaseTest1","","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("81","Chaser2","ChaseTest2","","0.00","0.00","0","N","N"); -INSERT INTO sc_npc_definitions VALUES("82","SpellMaster","SpellMaster","","0.00","0.00","0","N","N"); +INSERT INTO sc_npc_definitions VALUES("82","SpellMaster1","SpellMaster1","","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("83","SpellFighter","SpellFighter","NPC Room Fighter region 1","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("84","Fighter5","Fighter5","NPC Room South Meadow","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("85","Fighter6","Fighter6","NPC Room South Meadow","0.00","0.00","0","N","N"); @@ -66,3 +66,4 @@ INSERT INTO sc_npc_definitions VALUES("89","Fighter10","Fighter10","NPC Room North Meadow","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("90","Fighter11","Fighter11","NPC Room North Meadow","0.00","0.00","0","N","N"); INSERT INTO sc_npc_definitions VALUES("91","Fighter12","Fighter12","NPC Room North Meadow","0.00","0.00","0","N","N"); +INSERT INTO sc_npc_definitions VALUES("92","SpellMaster2","SpellMaster2","","0.00","0.00","0","N","N"); Modified: trunk/src/server/database/mysql/sc_npctypes.sql =================================================================== --- trunk/src/server/database/mysql/sc_npctypes.sql 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/database/mysql/sc_npctypes.sql 2013-01-04 23:22:53 UTC (rev 8529) @@ -1185,17 +1185,6 @@ <react event="LocateFailed" behavior="LocateFailureFailed" />'); -INSERT INTO sc_npctypes VALUES("123","SpellMaster","DoNothing",0,"$run","","","","","0", -'<!-- Test various spell abilities --> - -<behavior name="InitSpellMaster" initial="1000" completion_decay="-1"> - <talk text="$name is initializing" target="false" /> - <wait duration="15" /> - <locate obj="self" /> - <cast spell="Swiftness" k="1.0" /> -</behavior> -'); - INSERT INTO sc_npctypes VALUES("124","SpellFighter","DoNothing",0,"$run","","","","","0", '<!-- --> @@ -1247,3 +1236,72 @@ INSERT INTO sc_npctypes VALUES("132","Fighter12","DoNothing,Move,Nocturnal,Fight",0,"$walk","","","","","0", '<empty/> '); + +INSERT INTO sc_npctypes VALUES("140","SpellMaster1","DoNothing",0,"$run","","","","","0", +'<!-- Test various spell abilities --> + +<behavior name="InitSpellMaster" initial="1000" completion_decay="-1"> + <talk text="$name is initializing" target="false" /> + <wait duration="15" /> + <locate obj="self" /> + <cast spell="Swiftness" k="0.5" /> +</behavior> + +<!-- Growth of 2 should trigger this behavior approximatly every 20 sec --> +<behavior name="AttackSpellMaster2" initial="10" growth="2.5" completion_decay="-1"> + <locate obj="entity:name:SpellMaster2" /> + <talk text="Casting Summon Missile on $target" target="false" /> + <cast spell="Summon Missile" k="1.0" /> +</behavior> + +<behavior name="SpellUnknown" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell" target="false" /> +</behavior> + +<behavior name="SpellSelf" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell on me" target="false" /> +</behavior> + +<behavior name="SpellTarget" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell on a target" target="false" /> +</behavior> + +<react event="spell:unknown" behavior="SpellUnknown" /> +<react event="spell:self" behavior="SpellSelf" /> +<react event="spell:target" behavior="SpellTarget" /> +'); + +INSERT INTO sc_npctypes VALUES("141","SpellMaster2","DoNothing",0,"$run","","","","","0", +'<!-- Test various spell abilities --> + +<!-- Growth of 2 should trigger this behavior approximatly every 25 sec --> +<behavior name="BoostSpellMaster" initial="1000" growth="2.0" completion_decay="-1"> + <talk text="$name is boosting" target="false" /> + <wait duration="15" /> + <locate obj="self" /> + <cast spell="Swiftness" k="1.0" /> +</behavior> + +<behavior name="SpellUnknown" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell" target="false" /> +</behavior> + +<behavior name="SpellSelf" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell on me" target="false" /> +</behavior> + +<behavior name="SpellTarget" completion_decay="-1"> + <locate obj="perception" /> + <talk text="$target casted a spell on a target" target="false" /> +</behavior> + +<react event="spell:unknown" behavior="SpellUnknown" /> +<react event="spell:self" behavior="SpellSelf" /> +<react event="spell:target" behavior="SpellTarget" /> +'); + Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/gem.cpp 2013-01-04 23:22:53 UTC (rev 8529) @@ -2344,6 +2344,14 @@ return TARGET_SELF; /* Self */ } + if (GetCharacterData()->IsNPC() && target->GetCharacterData()->IsNPC()) + { + // NPCs can interpret targets as either friends or foe...even self. + // This allows them to attack or cast spells on any other NPC. + return TARGET_SELF | TARGET_FRIEND | TARGET_FOE; + } + + if (target->GetCharacterData()->GetImperviousToAttack()) { return TARGET_FRIEND; /* Impervious NPC */ Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2013-01-02 00:00:13 UTC (rev 8528) +++ trunk/src/server/npcmanager.cpp 2013-01-04 23:22:53 UTC (rev 8529) @@ -1015,7 +1015,7 @@ csString spell = list.msg->GetStr(); float kFactor = list.msg->GetFloat(); - Debug5(LOG_SUPERCLIENT, attackerEID.Unbox(), "-->Got cast %s with k %.1f from entity %s to %s\n", spell.GetDataSafe(), kFactor, ShowID(attackerEID), ShowID(targetEID)); + Debug5(LOG_SUPERCLIENT, attackerEID.Unbox(), "-->Got cast %s with k %.1f from attacker entity %s to target %s\n", spell.GetDataSafe(), kFactor, ShowID(attackerEID), ShowID(targetEID)); // Make sure we haven't run past the end of the buffer if(list.msg->overrun) @@ -1031,7 +1031,7 @@ break; } - gemObject* target = (gemObject*)gemSupervisor->FindObject(targetEID); + gemObject* target = gemSupervisor->FindObject(targetEID); attacker->SetTargetObject(target); psserver->GetSpellManager()->Cast(attacker, spell, kFactor, NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |