| 73 | //============================================================================// |
| 74 | |
| 75 | LuaUser::LuaUser() |
| 76 | : LuaHandle("LuaUser", |
| 77 | LUA_USER_SCRIPT_ID, |
| 78 | LUA_USER_GAME_ORDER, |
| 79 | LUA_USER_DRAW_WORLD_ORDER, |
| 80 | LUA_USER_DRAW_SCREEN_ORDER, |
| 81 | false, false, true) { // handle perms |
| 82 | static LuaVfsModes vfsModes; |
| 83 | vfsModes.readDefault = BZVFS_LUA_USER BZVFS_LUA_USER_WRITE BZVFS_MEDIA; |
| 84 | vfsModes.readAllowed = BZVFS_LUA_USER BZVFS_LUA_USER_WRITE BZVFS_MEDIA |
| 85 | BZVFS_LUA_READ BZVFS_LUA_WRITE; |
| 86 | vfsModes.writeDefault = BZVFS_LUA_USER_WRITE; |
| 87 | vfsModes.writeAllowed = BZVFS_LUA_USER_WRITE; |
| 88 | |
| 89 | luaUser = this; |
| 90 | |
| 91 | if (L == NULL) { |
| 92 | return; |
| 93 | } |
| 94 | |
| 95 | // setup the handle header pointers |
| 96 | LuaExtraSpace* LHH = L2ES(L); |
| 97 | LHH->handle = this; |
| 98 | LHH->handlePtr = (LuaHandle**)&luaUser; |
| 99 | LHH->vfsModes = &vfsModes; |
| 100 | LHH->bzdbReadCheck = NULL; |
| 101 | LHH->bzdbWriteCheck = LuaUtils::ClientWriteCheck; |
| 102 | |
| 103 | if (!SetupEnvironment()) { |
| 104 | KillLua(); |
| 105 | return; |
| 106 | } |
| 107 | |
| 108 | const std::string sourceCode = LoadSourceCode(sourceFile, BZVFS_LUA_USER); |
| 109 | if (sourceCode.empty()) { |
| 110 | KillLua(); |
| 111 | return; |
| 112 | } |
| 113 | |
| 114 | // register for call-ins |
| 115 | eventHandler.AddClient(this); |
| 116 | |
| 117 | if (!ExecSourceCode(sourceCode, sourceFile)) { |
| 118 | KillLua(); |
| 119 | return; |
| 120 | } |
| 121 | } |
| 122 | |
| 123 | |
| 124 | LuaUser::~LuaUser() { |