void Player::MemSet(int offset, double value, OPTYPE operation, FIELDTYPE ftype) { char* dbg = "PLAYER MEM SET"; if(ftype == FT_INVALID || offset > (0x184 * 99) || offset < 0) return; PlayerMOB* pPlayer = Player::Get(1); void* ptr = ((&(*(byte*)pPlayer)) + offset); MemAssign((int)ptr, value, operation, ftype); }
// MEM SET void NPC::MemSet(int ID, int offset, double value, OPTYPE operation, FIELDTYPE ftype) { char* dbg = "MemSetDbg"; if(ftype == FT_INVALID || offset > 0x15C) return; bool anyID = (ID == -1 ? true : false); NPCMOB* thisnpc; for(int i = 0; i < GM_NPCS_COUNT; i++) { thisnpc = Get(i); if(anyID || thisnpc->id == ID) { void* ptr = ((&(*(byte*)thisnpc)) + offset); MemAssign((int)ptr, value, operation, ftype); } }//for }
void LuaProxy::mem(int mem, LuaProxy::L_FIELDTYPE ftype, const luabind::object &value, lua_State *L) { void* ptr = ((&(*(byte*)mem))); switch (ftype) { case LFT_BYTE: case LFT_WORD: case LFT_DWORD: case LFT_FLOAT: case LFT_DFLOAT: { boost::optional<double> opt_obj = luabind::object_cast_nothrow<double>(value); if (opt_obj == boost::none) { luaL_error(L, "Cannot interpret field as number"); break; } MemAssign((int)ptr, *opt_obj, OP_Assign, (FIELDTYPE)ftype); break; } case LFT_STRING: { LuaHelper::assignVB6StrPtr((VB6StrPtr*)ptr, value, L); break; } case LFT_BOOL: { boost::optional<bool> opt_obj = luabind::object_cast_nothrow<bool>(value); if (opt_obj == boost::none) { luaL_error(L, "Cannot interpret field as boolean"); break; } void* ptr = ((&(*(byte*)mem))); *((short*)ptr) = COMBOOL(*opt_obj); break; } default: break; } }