Pixel Strike 3D - Some Test - Thanks Kotae :)

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Banlı Üye
Katılım
2 Ara 2020
Mesajlar
128
Çözümler
1
Tepki puanı
44
5 HİZMET YILI
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 :p

Teşekkürler KOTAE <3
[EN]
anime girls are not real kotae :D


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");
                }
            }
        }
    }
}
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst