- Yasaklandı
- #1
Banlı Üye
Bunları tam denemedim (il2cpp inspector scaffolding) ile dump çektim
kodun %95'i kotae'ye ait aslında ona yardım etmek isterdim ama malesef derslerim var
Teşekkürler KOTAE <3
[EN]
anime girls are not real kotae
kodun %95'i kotae'ye ait aslında ona yardım etmek isterdim ama malesef derslerim var
Teşekkürler KOTAE <3
[EN]
anime girls are not real kotae
C++:
void DrawESP(ImDrawList* drawList)
{
Camera* cam = app::Camera_get_main(nullptr);
if (cam == NULL) return;
Vector3 camWorldPos = Vector3{ 0.f, 0.f, 0.f };
//printf("Got cam\n");
int32_t pixelWidth = Camera_get_pixelWidth(cam, nullptr);
//printf("Got pixelWidth (%.2f)\n", pixelWidth);
int32_t pixelHeight = Camera_get_pixelHeight(cam, nullptr);
//printf("Got pixelHeight (%.2f)\n", pixelHeight);
Matrix4x4 worldToCameraMat = Camera_get_worldToCameraMatrix(cam, nullptr);
//printf("Got worldToCameraMatrix [%llx]\n", &worldToCameraMat);
Matrix4x4 projMat = Camera_get_projectionMatrix(cam, nullptr);
//printf("Got projectionMatrix [%llx]\n", &projMat);
Matrix4x4 mvp = utils::MultiplyMatrices(projMat, worldToCameraMat);
//printf("Multiplied mvp matrices [%llx]\n", &mvp);
auto entities = (*NetworkManager__TypeInfo)->static_fields->instance->fields.entities;
if ((entities) && (entities->fields.entries) && (entities->fields.entries->vector))
{
//String* entitiesToString = ObjToString((Object*)entities);
//printf("Got NetworkManager.entities: [%llx] (ToString: %s)\n\tfields: [%llx]\n\tfields.values: [%llx]\n\tfields.entries: [%llx]\n\tfields.entries.vector: [%llx]\n", entities, entitiesToString, &entities->fields, &entities->fields.values, &entities->fields.entries, &entities->fields.entries->vector);
//printf("Iterating %d entities [%llx]\n", entities->fields.count, &entities->fields.count);
for (int entityIndex = 0; entityIndex < entities->fields.count; entityIndex++)
{
NetworkEntity* entity = entities->fields.entries->vector[entityIndex].value;
if (entity)
{
/*
auto getName = (String * (*)(Object*, MethodInfo*)) entity->fields.owner->klass->vtable.get_Name.methodPtr;
MethodInfo* getNameMethodInfo = (MethodInfo*)entity->fields.owner->klass->vtable.get_Name.method;
String* entityName = getName((Object*)entity->fields.owner, getNameMethodInfo);
// probably going to be nullsub because it's a shared method with lots of different methods (Collider_get_collider, etc)
// not nullsub, i think it's just a generic ToString(). just returns [rcx+18] (which, in the case i looked at, was a String*)
/*
String* ownerName = app::SFSUser_get_Name((SFSUser*)entity->fields.owner, nullptr);
std::string ownerNameStdString = il2cppi_to_string(entityName);
//*/
String* entityToString = utils::ObjToString((Object*)entity);
std::string entityToStdStr = il2cppi_to_string(entityToString);
/*
//printf("Got entity string\n");
printf("[%llx] Entity\n\tToString: '%s'\n\ttype: [%llx] (%s)\n\tGetName methodptr: [%llx]\n\tname: '%s'\n\tuniqueId: [%llx]\n\tGGEJDMLPKLA: [%llx]\n\townerName: '%s'\n", entity, il2cppi_to_string(entityToString).c_str(), &entity->fields.type, il2cppi_to_string(entity->fields.type).c_str(), getName, il2cppi_to_string(entityName).c_str(), &entity->fields.uniqueId, &entity->fields.GGEJDMLPKLA);
*/
if (entity->fields.owner == NULL) continue;
if (((SFSUser*)entity->fields.owner)->fields.name == NULL) continue;
std::string ownerNameToString = il2cppi_to_string(((SFSUser*)entity->fields.owner)->fields.name);
//printf("[%llx] Entity\n\towner: [%llx]\n\towner.name: %s\n", entity, &entity->fields.owner, ownerNameToString.c_str());
if (entity->fields.isMine)
{
//printf("Skipping localplayer\n");
continue;
}
// GameObject_get_transform
// Component_1_get_transform
// Component_1_get_gameObject
Transform* transform = app::Component_1_get_transform((Component_1*)entity, nullptr);
if (transform == NULL) continue;
//printf("Got entity transform [%llx]\n", transform);
Vector3 entityPos = app::Transform_get_position(transform, nullptr);
//printf("Got entity position (%.2f, %.2f, %.2f)\n", entityPos.x, entityPos.y, entityPos.z);
Vector3 screenPos = utils::MultiplyMatrixByVec3(mvp, entityPos);
//printf("Multiplied matrix by position (%.2f, %.2f, %.2f)\n", screenPos.x, screenPos.y, screenPos.z);
if (screenPos.z != 0.f)
{
// perspective divide
screenPos.x = (screenPos.x / screenPos.z);
screenPos.y = (screenPos.y / screenPos.z);
if ((((screenPos.x >= 0.f) ? screenPos.x : -screenPos.x) > 2.f) || (((screenPos.y >= 0.f) ? screenPos.y : -screenPos.y) > 2.f))
{
// not visible
continue;
}
screenPos.x = ((screenPos.x + 1.f) / 2.f) * pixelWidth;
screenPos.y = (1 - ((screenPos.y + 1.f) / 2.f)) * pixelHeight;
if (drawList == NULL) continue;
//printf("Drawing now @ (%.2f, %.2f)\n", screenPos.x, screenPos.y);
// using magic numbers here because i'm too lazy to find headpos
// TO-DO:
// get actual bounds of player obj
drawList->AddRect(ImVec2(screenPos.x - 25.f, screenPos.y - 50.f), ImVec2(screenPos.x + 25.f, screenPos.y), ImColor(1.f, 0.f, 0.f));
drawList->AddText(ImVec2(screenPos.x, screenPos.y - 55.f), ImColor(1.f, 0.f, 1.f), ownerNameToString.c_str());
//printf("Drew text\n");
}
}
}
}
}