Advertisement
BeniS

creatureevent.cpp

Feb 10th, 2013
975
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 211,6211,8
  2.         _type = CREATURE_EVENT_DEATH;
  3.     else if(type == "preparedeath")
  4.         _type = CREATURE_EVENT_PREPAREDEATH;
  5. +    else if(type == "extendedopcode")
  6. +        _type = CREATURE_EVENT_EXTENDED_OPCODE;
  7.  
  8.     return _type;
  9. }
  10. 330,6332,8
  11.         return "onDeath";
  12.     case CREATURE_EVENT_PREPAREDEATH:
  13.         return "onPrepareDeath";
  14. +    case CREATURE_EVENT_EXTENDED_OPCODE:
  15. +        return "onExtendedOpcode";
  16.     case CREATURE_EVENT_NONE:
  17.     default:
  18.         break;
  19. 401,6405,8
  20.         return "cid, corpse, deathList";
  21.     case CREATURE_EVENT_PREPAREDEATH:
  22.         return "cid, deathList";
  23. +    case CREATURE_EVENT_EXTENDED_OPCODE:
  24. +        return "cid, opcode, buffer";
  25.     case CREATURE_EVENT_NONE:
  26.     default:
  27.         break;
  28. 2145,32145,57
  29.         return 0;
  30.     }
  31. }
  32. +
  33. +uint32_t CreatureEvent::executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer)
  34. +{
  35. +    //onExtendedOpcode(cid, opcode, buffer)
  36. +    if(m_interface->reserveEnv())
  37. +    {
  38. +        ScriptEnviroment* env = m_interface->getEnv();
  39. +        if(m_scripted == EVENT_SCRIPT_BUFFER)
  40. +        {
  41. +            env->setRealPos(creature->getPosition());
  42. +            std::stringstream scriptstream;
  43. +            scriptstream << "local cid = " << env->addThing(creature) << std::endl;
  44. +            scriptstream << "local opcode = " << (int)opcode << std::endl;
  45. +            scriptstream << "local buffer = " << buffer.c_str() << std::endl;
  46. +
  47. +            scriptstream << m_scriptData;
  48. +            bool result = true;
  49. +            if(m_interface->loadBuffer(scriptstream.str()))
  50. +            {
  51. +                lua_State* L = m_interface->getState();
  52. +                result = m_interface->getGlobalBool(L, "_result", true);
  53. +            }
  54. +
  55. +            m_interface->releaseEnv();
  56. +            return result;
  57. +        }
  58. +        else
  59. +        {
  60. +            #ifdef __DEBUG_LUASCRIPTS__
  61. +            char desc[35];
  62. +            sprintf(desc, "%s", player->getName().c_str());
  63. +            env->setEvent(desc);
  64. +            #endif
  65. +
  66. +            env->setScriptId(m_scriptId, m_interface);
  67. +            env->setRealPos(creature->getPosition());
  68. +    
  69. +            lua_State* L = m_interface->getState();
  70. +            m_interface->pushFunction(m_scriptId);
  71. +            lua_pushnumber(L, env->addThing(creature));
  72. +            lua_pushnumber(L, opcode);
  73. +            lua_pushlstring(L, buffer.c_str(), buffer.length());
  74. +
  75. +            bool result = m_interface->callFunction(3);
  76. +            m_interface->releaseEnv();
  77. +            return result;
  78. +        }
  79. +    }
  80. +    else
  81. +    {
  82. +        std::cout << "[Error - CreatureEvent::executeRemoved] Call stack overflow." << std::endl;
  83. +    return 0;
  84. +    }
  85. +}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement