Акторы в чём то выше HF

default_npc

Вершитель
VIP
Старожил I степени
Медаль Благодарности
Хранитель Пера
Оратор
Арбитр
Уважаемый собеседник
Авторитет форума
Опора сообщества
Мыслитель
Наставник
Победитель в номинации 2023
Сообщения
1 982
Розыгрыши
0
Решения
46
Репутация
2 115
Реакции
2 199
Баллы
1 985
собсно как получить сабжи в верхних хрониках? 160-300+ протоколы


GetPlayerActor они выпилили (пытался докомпилить в нвиндоу, но получаю крит, что "такого нет в nwindow.dll"), GetTargetActor работает, но ничего не возвращает, вернуть из класса я тоже ничё не могу, точнее могу = -1 (хотя я не уверен что овнер это то что надо):
C#:
actor = class'Actor'.Default.Owner;

по большей части мне нужно воспользоваться итератором, а всякие AllActor, CollidingActor работают из внешних скриптов тока наследовав актора, по типу Actor.AllActor и т.д., но может я чего не знаю или не до конца понял

Нужна пояснительная бригада
 
class'UIDATA_TARGET'.static.GetTargetActor()
Код:
class UIDATA_TARGET extends UIDataManager;

// Export UUIDATA_TARGET::execGetTargetID(FFrame&, void* const)
native static function int GetTargetID();

// Export UUIDATA_TARGET::execGetTargetUserRank(FFrame&, void* const)
native static function int GetTargetUserRank();

// Export UUIDATA_TARGET::execGetTargetMaxHP(FFrame&, void* const)
native static function int GetTargetMaxHP();

// Export UUIDATA_TARGET::execGetTargetHP(FFrame&, void* const)
native static function int GetTargetHP();

// Export UUIDATA_TARGET::execGetTargetMaxMP(FFrame&, void* const)
native static function int GetTargetMaxMP();

// Export UUIDATA_TARGET::execGetTargetMP(FFrame&, void* const)
native static function int GetTargetMP();

// Export UUIDATA_TARGET::execGetTargetName(FFrame&, void* const)
native static function string GetTargetName();

// Export UUIDATA_TARGET::execGetTargetNameColor(FFrame&, void* const)
native static function Color GetTargetNameColor(int Level);

// Export UUIDATA_TARGET::execGetTargetPledgeID(FFrame&, void* const)
native static function int GetTargetPledgeID();

// Export UUIDATA_TARGET::execGetTargetClassID(FFrame&, void* const)
native static function int GetTargetClassID();

// Export UUIDATA_TARGET::execIsServerObject(FFrame&, void* const)
native static function bool IsServerObject();

// Export UUIDATA_TARGET::execIsNpc(FFrame&, void* const)
native static function bool IsNpc();

// Export UUIDATA_TARGET::execIsPet(FFrame&, void* const)
native static function bool IsPet();

// Export UUIDATA_TARGET::execIsCanBeAttacked(FFrame&, void* const)
native static function bool IsCanBeAttacked();

// Export UUIDATA_TARGET::execIsHPShowableNPC(FFrame&, void* const)
native static function bool IsHPShowableNPC();

// Export UUIDATA_TARGET::execIsVehicle(FFrame&, void* const)
native static function bool IsVehicle();

// Export UUIDATA_TARGET::execGetTargetActor(FFrame&, void* const)
native static function Actor GetTargetActor();
 
class'UIDATA_TARGET'.static.GetTargetActor()
Код:
class UIDATA_TARGET extends UIDataManager;

// Export UUIDATA_TARGET::execGetTargetID(FFrame&, void* const)
native static function int GetTargetID();

// Export UUIDATA_TARGET::execGetTargetUserRank(FFrame&, void* const)
native static function int GetTargetUserRank();

// Export UUIDATA_TARGET::execGetTargetMaxHP(FFrame&, void* const)
native static function int GetTargetMaxHP();

// Export UUIDATA_TARGET::execGetTargetHP(FFrame&, void* const)
native static function int GetTargetHP();

// Export UUIDATA_TARGET::execGetTargetMaxMP(FFrame&, void* const)
native static function int GetTargetMaxMP();

// Export UUIDATA_TARGET::execGetTargetMP(FFrame&, void* const)
native static function int GetTargetMP();

// Export UUIDATA_TARGET::execGetTargetName(FFrame&, void* const)
native static function string GetTargetName();

// Export UUIDATA_TARGET::execGetTargetNameColor(FFrame&, void* const)
native static function Color GetTargetNameColor(int Level);

// Export UUIDATA_TARGET::execGetTargetPledgeID(FFrame&, void* const)
native static function int GetTargetPledgeID();

// Export UUIDATA_TARGET::execGetTargetClassID(FFrame&, void* const)
native static function int GetTargetClassID();

// Export UUIDATA_TARGET::execIsServerObject(FFrame&, void* const)
native static function bool IsServerObject();

// Export UUIDATA_TARGET::execIsNpc(FFrame&, void* const)
native static function bool IsNpc();

// Export UUIDATA_TARGET::execIsPet(FFrame&, void* const)
native static function bool IsPet();

// Export UUIDATA_TARGET::execIsCanBeAttacked(FFrame&, void* const)
native static function bool IsCanBeAttacked();

// Export UUIDATA_TARGET::execIsHPShowableNPC(FFrame&, void* const)
native static function bool IsHPShowableNPC();

// Export UUIDATA_TARGET::execIsVehicle(FFrame&, void* const)
native static function bool IsVehicle();

// Export UUIDATA_TARGET::execGetTargetActor(FFrame&, void* const)
native static function Actor GetTargetActor();
оно есть, но актора оно не вернёт (creatureID всегда = 0), потому что судя по всему корейцы решили что акторы нам больше не нужны
 
оно есть, но актора оно не вернёт (creatureID всегда = 0), потому что судя по всему корейцы решили что акторы нам больше не нужны
Ну можно тогда воспользоваться GetCharacterSelectionActor и получать индекс персонажа
 
Ну можно тогда воспользоваться GetCharacterSelectionActor и получать индекс персонажа
чёто забыл про этот тред и снова вспомнил
Нет, это тоже нет, подобное работает тока в CharSelectState и работает по индексу выбранного персонажа (0-7? или сколько там персонажей доступно)
А из CharSelect вроде и не передать ниче в другие классы, которые находятся в GamingState, т.к. инициализация будет только в этом стейте
Но с другой стороны может при входе в GS - CharState остаётся инициализированным и уже с его глобал переменных можно чёто сдёрнуть
попробую, собсна ничё не мешает


Но всё же походу лысый мне, а не акторы, всё забрали, никакого праздника
 
Последнее редактирование:
Раз уж темку недавно процитировали, то добавлю контекста в сообщение выше:
 
My implementation for Ertheia

Part of C++ code
C++:
const DWORD GetPlayerSelfPawnOffset = 0x6CCE40;
typedef DWORD(__stdcall* GetPlayerSelfPawn_fnType)(DWORD*);

const DWORD APawnClassOffset = 0xE1EB1C;
DWORD** APawnClass = nullptr;

void
AAIExt::execGetPlayerPawn (FFrame& Stack, RESULT_DECL)
{
    guard(AAIExt::execGetPlayerPawn);
    P_FINISH;

    HMODULE hNWindow = GetModuleHandleW(L"NWindow.dll");
    if (hNWindow)
    {
        APawnClass = reinterpret_cast<DWORD**>(reinterpret_cast<uintptr_t>(hNWindow) + APawnClassOffset);
        GetPlayerSelfPawn_fnType GetPlayerSelfPawn_fn = reinterpret_cast<GetPlayerSelfPawn_fnType>(reinterpret_cast<uintptr_t>(hNWindow) + GetPlayerSelfPawnOffset);
        *(DWORD*)Result = GetPlayerSelfPawn_fn(*APawnClass);
    }

    unguardexec;
}

UC code related to C++ code
Код:
class AIExt extends Actor
    native;

native(1901) static final function Pawn GetPlayerPawn();

static function Actor GetPlayerActor()
{
    local Pawn MyPawn;
   
    MyPawn = GetPlayerPawn();
    if (MyPawn != None)
        return MyPawn.Owner;
    else
        return None;
}

Pure implementation on UC
1. walk to NPC
2. take NPC in target
3. call code below

Код:
// Try found Player Actor
            TargetActor = class'UIDATA_TARGET'.static.GetTargetActor();
            if (TargetActor != None)
                foreach TargetActor.CollidingActors(class'Actor', MyActor, 2000)
                {
                    If (MyActor.CreatureID == PlayerID)
                    {
                        AddSystemMessageString("Initialized!");
                        gActor = MyActor;
                        gIsActorPresent = true;
                    }
                }

// End Try
 
Последнее редактирование:
Назад
Сверху Снизу