Advertisement
Guest User

Untitled

a guest
Sep 7th, 2013
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 25.39 KB | None | 0 0
  1. From 28c4baa00d44c99eb75b5e5b4c6e1cae93546cba Mon Sep 17 00:00:00 2001
  2. From: stoiet <to.stoiet@gmail.com>
  3. Date: Sat, 7 Sep 2013 18:06:04 +0200
  4. Subject: [PATCH] SAI++: SMART_EVENT_GOSSIP_SELECT with Token [unfixed]
  5.  
  6. ---
  7.  src/server/game/AI/SmartScripts/SmartScript.cpp    | 107 +++++++++++++++------
  8.  src/server/game/AI/SmartScripts/SmartScript.h      |   4 +-
  9.  src/server/game/AI/SmartScripts/SmartScriptMgr.cpp |  54 +++++++----
  10.  src/server/game/AI/SmartScripts/SmartScriptMgr.h   |   8 +-
  11.  .../Database/Implementation/WorldDatabase.cpp      |   2 +-
  12.  5 files changed, 123 insertions(+), 52 deletions(-)
  13.  
  14. diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
  15. index c9d687c..a3f9d00 100644
  16. --- a/src/server/game/AI/SmartScripts/SmartScript.cpp
  17. +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
  18. @@ -1639,7 +1639,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
  19.          }
  20.          case SMART_ACTION_CROSS_CAST:
  21.          {
  22. -            ObjectList* casters = GetTargets(CreateEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.cast.targetType, e.action.cast.targetParam1, e.action.cast.targetParam2, e.action.cast.targetParam3, 0), unit);
  23. +            ObjectList* casters = GetTargets(CreateEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, 0, 0, 0, SMART_ACTION_NONE, 0, 0, 0, 0, 0, 0, (SMARTAI_TARGETS)e.action.cast.targetType, e.action.cast.targetParam1, e.action.cast.targetParam2, e.action.cast.targetParam3, 0), unit);
  24.              if (!casters)
  25.                  break;
  26.  
  27. @@ -2221,18 +2221,18 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
  28.      {
  29.          case SMARTAI_TEMPLATE_CASTER:
  30.              {
  31. -                AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 1);
  32. -                AddEvent(SMART_EVENT_RANGE, 0, e.action.installTtemplate.param4, 300, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  33. -                AddEvent(SMART_EVENT_RANGE, 0, 0, e.action.installTtemplate.param4>10?e.action.installTtemplate.param4-10:0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  34. -                AddEvent(SMART_EVENT_MANA_PCT, 0, e.action.installTtemplate.param5-15>100?100:e.action.installTtemplate.param5+15, 100, 1000, 1000, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  35. -                AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, SMART_ACTION_SET_EVENT_PHASE, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  36. -                AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  37. +                AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, 0, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 1);
  38. +                AddEvent(SMART_EVENT_RANGE, 0, e.action.installTtemplate.param4, 300, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  39. +                AddEvent(SMART_EVENT_RANGE, 0, 0, e.action.installTtemplate.param4>10?e.action.installTtemplate.param4-10:0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  40. +                AddEvent(SMART_EVENT_MANA_PCT, 0, e.action.installTtemplate.param5-15>100?100:e.action.installTtemplate.param5+15, 100, 1000, 1000, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  41. +                AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, 0, SMART_ACTION_SET_EVENT_PHASE, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  42. +                AddEvent(SMART_EVENT_MANA_PCT, 0, 0, e.action.installTtemplate.param5, 1000, 1000, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  43.                  break;
  44.              }
  45.          case SMARTAI_TEMPLATE_TURRET:
  46.              {
  47. -                AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 0);
  48. -                AddEvent(SMART_EVENT_JUST_CREATED, 0, 0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  49. +                AddEvent(SMART_EVENT_UPDATE_IC, 0, 0, 0, e.action.installTtemplate.param2, e.action.installTtemplate.param3, 0, SMART_ACTION_CAST, e.action.installTtemplate.param1, e.target.raw.param1, 0, 0, 0, 0, SMART_TARGET_VICTIM, 0, 0, 0, 0);
  50. +                AddEvent(SMART_EVENT_JUST_CREATED, 0, 0, 0, 0, 0, 0, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, 0, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  51.                  break;
  52.              }
  53.          case SMARTAI_TEMPLATE_CAGED_NPC_PART:
  54. @@ -2240,22 +2240,22 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
  55.                  if (!me)
  56.                      return;
  57.                  //store cage as id1
  58. -                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_GAMEOBJECT, e.action.installTtemplate.param1, 10, 0, 0);
  59. +                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_GAMEOBJECT, e.action.installTtemplate.param1, 10, 0, 0);
  60.  
  61.                   //reset(close) cage on hostage(me) respawn
  62. -                AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 0, 0, 0, 0, SMART_ACTION_RESET_GOBJECT, 0, 0, 0, 0, 0, 0, SMART_TARGET_GAMEOBJECT_DISTANCE, e.action.installTtemplate.param1, 5, 0, 0);
  63. +                AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 0, 0, 0, 0, 0, SMART_ACTION_RESET_GOBJECT, 0, 0, 0, 0, 0, 0, SMART_TARGET_GAMEOBJECT_DISTANCE, e.action.installTtemplate.param1, 5, 0, 0);
  64.  
  65. -                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_SET_RUN, e.action.installTtemplate.param3, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  66. -                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  67. +                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_SET_RUN, e.action.installTtemplate.param3, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  68. +                AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_SET_EVENT_PHASE, 1, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  69.  
  70. -                AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 1000, 1000, 0, 0, SMART_ACTION_MOVE_FORWARD, e.action.installTtemplate.param4, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  71. +                AddEvent(SMART_EVENT_UPDATE, SMART_EVENT_FLAG_NOT_REPEATABLE, 1000, 1000, 0, 0, 0, SMART_ACTION_MOVE_FORWARD, e.action.installTtemplate.param4, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  72.                   //phase 1: give quest credit on movepoint reached
  73. -                AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 1);
  74. +                AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 1);
  75.                  //phase 1: despawn after time on movepoint reached
  76. -                AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_FORCE_DESPAWN, e.action.installTtemplate.param2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  77. +                AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_FORCE_DESPAWN, e.action.installTtemplate.param2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  78.  
  79.                  if (sCreatureTextMgr->TextExist(me->GetEntry(), (uint8)e.action.installTtemplate.param5))
  80. -                    AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, SMART_ACTION_TALK, e.action.installTtemplate.param5, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  81. +                    AddEvent(SMART_EVENT_MOVEMENTINFORM, 0, POINT_MOTION_TYPE, SMART_RANDOM_POINT, 0, 0, 0, SMART_ACTION_TALK, e.action.installTtemplate.param5, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 1);
  82.                  break;
  83.              }
  84.          case SMARTAI_TEMPLATE_CAGED_GO_PART:
  85. @@ -2263,16 +2263,16 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
  86.                  if (!go)
  87.                      return;
  88.                  //store hostage as id1
  89. -                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0);
  90. +                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0);
  91.                  //store invoker as id2
  92. -                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  93. +                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0);
  94.                  //signal hostage
  95. -                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0);
  96. +                AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0);
  97.                  //when hostage raeched end point, give credit to invoker
  98.                  if (e.action.installTtemplate.param2)
  99. -                    AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
  100. +                    AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
  101.                  else
  102. -                    AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
  103. +                    AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0);
  104.                  break;
  105.              }
  106.          case SMARTAI_TEMPLATE_BASIC:
  107. @@ -2281,12 +2281,12 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e)
  108.      }
  109.  }
  110.  
  111. -void SmartScript::AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
  112. +void SmartScript::AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
  113.  {
  114. -    mInstallEvents.push_back(CreateEvent(e, event_flags, event_param1, event_param2, event_param3, event_param4, action, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, t, target_param1, target_param2, target_param3, phaseMask));
  115. +    mInstallEvents.push_back(CreateEvent(e, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, action, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, t, target_param1, target_param2, target_param3, phaseMask));
  116.  }
  117.  
  118. -SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
  119. +SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask)
  120.  {
  121.      SmartScriptHolder script;
  122.      script.event.type = e;
  123. @@ -2294,6 +2294,7 @@ SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, ui
  124.      script.event.raw.param2 = event_param2;
  125.      script.event.raw.param3 = event_param3;
  126.      script.event.raw.param4 = event_param4;
  127. +   script.event.raw.param5 = event_param5;
  128.      script.event.event_phase_mask = phaseMask;
  129.      script.event.event_flags = event_flags;
  130.      script.event.event_chance = 100;
  131. @@ -2982,11 +2983,61 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
  132.          }
  133.          case SMART_EVENT_GOSSIP_SELECT:
  134.          {
  135. -            TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript: Gossip Select:  menu %u action %u", var0, var1);//little help for scripters
  136. +            TC_LOG_DEBUG(LOG_FILTER_DATABASE_AI, "SmartScript: Gossip Select:  menu %u action %u", var0, var1); //little help for scripters
  137.              if (e.event.gossip.sender != var0 || e.event.gossip.action != var1)
  138.                  return;
  139. -            ProcessAction(e, unit, var0, var1);
  140. -            break;
  141. +
  142. +           ObjectList* targets = GetTargets(e, unit);
  143. +           Unit* templastInvoker = NULL;
  144. +           Player* player = NULL;
  145. +
  146. +           if (!targets)
  147. +               break;
  148. +
  149. +           if(e.event.gossip.tokenID > 0)
  150. +           {
  151. +               for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
  152. +               {
  153. +                   if (player = (*itr)->ToPlayer())
  154. +                   {
  155. +                       if(player->HasItemCount(e.event.gossip.tokenID, e.event.gossip.tokenCount, true))
  156. +                       {
  157. +                           if(me)
  158. +                           {
  159. +                               templastInvoker = GetLastInvoker();
  160. +                               sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
  161. +                           }
  162. +                           player->DestroyItemCount(e.event.gossip.tokenID, e.event.gossip.tokenCount, true);
  163. +                           ProcessAction(e, unit, var0, var1);
  164. +                       }
  165. +                       else
  166. +                       {
  167. +                           if(me)
  168. +                           {
  169. +                               templastInvoker = GetLastInvoker();
  170. +                               sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID + 1), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
  171. +                           }
  172. +                           player->PlayerTalkClass->SendCloseGossip();
  173. +                       }
  174. +                   }
  175. +               }
  176. +               delete targets;
  177. +           }
  178. +           else if(e.event.gossip.tokenID == 0)
  179. +           {
  180. +               for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr)
  181. +               {
  182. +                   if(player = (*itr)->ToPlayer())
  183. +                       if(me)
  184. +                       {
  185. +                           templastInvoker = GetLastInvoker();
  186. +                           sCreatureTextMgr->SendChat(me, uint8(e.event.gossip.groupID), IsPlayer(templastInvoker) ? templastInvoker->GetGUID() : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer());
  187. +                       }
  188. +                   ProcessAction(e, unit, var0, var1);
  189. +               }
  190. +               delete targets;
  191. +           }
  192. +           break;
  193.          }
  194.          case SMART_EVENT_DUMMY_EFFECT:
  195.          {
  196. diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h
  197. index b22f2d8..64f40f9 100644
  198. --- a/src/server/game/AI/SmartScripts/SmartScript.h
  199. +++ b/src/server/game/AI/SmartScripts/SmartScript.h
  200. @@ -49,8 +49,8 @@ class SmartScript
  201.          ObjectList* GetTargets(SmartScriptHolder const& e, Unit* invoker = NULL);
  202.          ObjectList* GetWorldObjectsInDist(float dist);
  203.          void InstallTemplate(SmartScriptHolder const& e);
  204. -        SmartScriptHolder CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
  205. -        void AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
  206. +        SmartScriptHolder CreateEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
  207. +        void AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5,  SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 phaseMask = 0);
  208.          void SetPathId(uint32 id) { mPathId = id; }
  209.          uint32 GetPathId() const { return mPathId; }
  210.          WorldObject* GetBaseObject()
  211. diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
  212. index 5eb945a..64ed5f9 100644
  213. --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
  214. +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
  215. @@ -121,7 +121,6 @@ void SmartAIMgr::LoadSmartAIFromDB()
  216.  
  217.          return;
  218.      }
  219. -
  220.      uint32 count = 0;
  221.  
  222.      do
  223. @@ -196,23 +195,24 @@ void SmartAIMgr::LoadSmartAIFromDB()
  224.          temp.event.raw.param2 = fields[9].GetUInt32();
  225.          temp.event.raw.param3 = fields[10].GetUInt32();
  226.          temp.event.raw.param4 = fields[11].GetUInt32();
  227. -
  228. -        temp.action.type = (SMART_ACTION)fields[12].GetUInt8();
  229. -        temp.action.raw.param1 = fields[13].GetUInt32();
  230. -        temp.action.raw.param2 = fields[14].GetUInt32();
  231. -        temp.action.raw.param3 = fields[15].GetUInt32();
  232. -        temp.action.raw.param4 = fields[16].GetUInt32();
  233. -        temp.action.raw.param5 = fields[17].GetUInt32();
  234. -        temp.action.raw.param6 = fields[18].GetUInt32();
  235. -
  236. -        temp.target.type = (SMARTAI_TARGETS)fields[19].GetUInt8();
  237. -        temp.target.raw.param1 = fields[20].GetUInt32();
  238. -        temp.target.raw.param2 = fields[21].GetUInt32();
  239. -        temp.target.raw.param3 = fields[22].GetUInt32();
  240. -        temp.target.x = fields[23].GetFloat();
  241. -        temp.target.y = fields[24].GetFloat();
  242. -        temp.target.z = fields[25].GetFloat();
  243. -        temp.target.o = fields[26].GetFloat();
  244. +       temp.event.raw.param5 = fields[12].GetUInt32();
  245. +
  246. +        temp.action.type = (SMART_ACTION)fields[13].GetUInt8();
  247. +        temp.action.raw.param1 = fields[14].GetUInt32();
  248. +        temp.action.raw.param2 = fields[15].GetUInt32();
  249. +        temp.action.raw.param3 = fields[16].GetUInt32();
  250. +        temp.action.raw.param4 = fields[17].GetUInt32();
  251. +        temp.action.raw.param5 = fields[18].GetUInt32();
  252. +        temp.action.raw.param6 = fields[19].GetUInt32();
  253. +
  254. +        temp.target.type = (SMARTAI_TARGETS)fields[20].GetUInt8();
  255. +        temp.target.raw.param1 = fields[21].GetUInt32();
  256. +        temp.target.raw.param2 = fields[22].GetUInt32();
  257. +        temp.target.raw.param3 = fields[23].GetUInt32();
  258. +        temp.target.x = fields[24].GetFloat();
  259. +        temp.target.y = fields[25].GetFloat();
  260. +        temp.target.z = fields[26].GetFloat();
  261. +        temp.target.o = fields[27].GetFloat();
  262.  
  263.          //check target
  264.          if (!IsTargetValid(temp))
  265. @@ -610,6 +610,20 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
  266.              case SMART_EVENT_WAYPOINT_STOPPED:
  267.              case SMART_EVENT_WAYPOINT_ENDED:
  268.              case SMART_EVENT_GOSSIP_SELECT:
  269. +           {
  270. +               if(e.event.gossip.tokenID)
  271. +               {
  272. +                   if (!IsItemValid(e, e.event.gossip.tokenID))
  273. +                       e.event.gossip.tokenID = BADGE_OF_JUSTICE;
  274. +
  275. +                   if (!NotNULL(e, e.event.gossip.tokenCount))
  276. +                       return false;
  277. +               }
  278. +
  279. +               if(e.event.gossip.groupID)
  280. +                   if(!IsTextValid(e, e.event.gossip.groupID))
  281. +                       return false;
  282. +           }
  283.              case SMART_EVENT_GOSSIP_HELLO:
  284.              case SMART_EVENT_JUST_CREATED:
  285.              case SMART_EVENT_FOLLOW_COMPLETED:
  286. @@ -1063,7 +1077,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
  287.      return true;
  288.  }
  289.  
  290. -/*bool SmartAIMgr::IsTextValid(SmartScriptHolder const& e, uint32 id) // unused
  291. +bool SmartAIMgr::IsTextValid(SmartScriptHolder const& e, uint32 id)
  292.  {
  293.      bool error = false;
  294.      uint32 entry = 0;
  295. @@ -1088,4 +1102,4 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
  296.          return false;
  297.      }
  298.      return true;
  299. -}*/
  300. +}
  301. diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
  302. index 4c3d2bb..5ab9b14 100644
  303. --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
  304. +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
  305. @@ -160,6 +160,8 @@ enum SMART_EVENT
  306.      SMART_EVENT_END                      = 75
  307.  };
  308.  
  309. +#define BADGE_OF_JUSTICE 29434 // for gossip
  310. +
  311.  struct SmartEvent
  312.  {
  313.      SMART_EVENT type;
  314. @@ -335,6 +337,9 @@ struct SmartEvent
  315.          {
  316.              uint32 sender;
  317.              uint32 action;
  318. +           uint32 groupID;
  319. +           uint32 tokenID;
  320. +           uint32 tokenCount;
  321.          } gossip;
  322.  
  323.          struct
  324. @@ -383,6 +388,7 @@ struct SmartEvent
  325.              uint32 param2;
  326.              uint32 param3;
  327.              uint32 param4;
  328. +           uint32 param5; // for gossip
  329.          } raw;
  330.      };
  331.  };
  332. @@ -1512,7 +1518,7 @@ class SmartAIMgr
  333.              return true;
  334.          }
  335.  
  336. -        //bool IsTextValid(SmartScriptHolder const& e, uint32 id);
  337. +        bool IsTextValid(SmartScriptHolder const& e, uint32 id);
  338.  };
  339.  
  340.  #define sSmartScriptMgr ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>::instance()
  341. diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
  342. index 4128047..32bb74f 100644
  343. --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
  344. +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
  345. @@ -26,7 +26,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
  346.      PrepareStatement(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC);
  347.      PrepareStatement(WORLD_REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC);
  348.      PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH);
  349. -    PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH);
  350. +    PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, event_param5, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH);
  351.      PrepareStatement(WORLD_SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH);
  352.      PrepareStatement(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC);
  353.      PrepareStatement(WORLD_DEL_EVENT_GAMEOBJECT, "DELETE FROM game_event_gameobject WHERE guid = ?", CONNECTION_ASYNC);
  354. --
  355. 1.8.3.msysgit.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement