목록2025/03 (13)
하아찡
언리얼 버전 5.5.3서버언어 C++로 구성했습니다.몬스터 스포너를 코드에 직접 입력해서 사용하기 번거롭고 지저분해보여서 xml로 스포너 위치를 저장해두면 각각 Room에서 맞는 xml파일만 호출하기 위해서 만들었습니다. SpawnTable.h#pragma oncestruct StructMonsterSpawn{ uint32 monsterID = -1; float x = 0.0f; float y = 0.0f; float z = 0.0f;};class SpawnTable{public: static vector LoadSpawnMonstersFromXML(const char* FilePath);}; SpawnTable.cpp#include "pch.h"#include "SpawnTa..

언리얼 버전 5.5.3서버언어 C++로 구성했습니다.실행화면 개인맵을 만들어보고싶어서 시간제한이 있는 개인맵을 만들어봤습니다.Room 클래스를 상속받은 ChaosDunjeon 클래스를 생성했습니다. ChaosDunjeon .h#pragma once#include "Room.h"class ChaosDunjeon : public Room{public: ChaosDunjeon(); ~ChaosDunjeon(); void Init() override; void UpdateTick() override; virtual bool EnterRoom(ObjectRef object) override; void MapTick(); int GetCurTime(){ret..

언리얼 버전 5.5.3서버언어 C++로 구성했습니다.실행화면 코드를 보시기전 DB 테이블 구성을 먼저 보겠습니다. 간단하게 작업을 했습니다.CREATE TABLE `equipment` ( `character_id` INT(10) NOT NULL, `slot_name` VARCHAR(20) NOT NULL COLLATE 'utf8mb4_0900_ai_ci', `instance_id` INT(10) NOT NULL, PRIMARY KEY (`character_id`, `slot_name`) USING BTREE) 어떤 캐릭터가 어떤 장비 슬롯장비를 장착했는지와 아이템DB 고유값을 저장해줍니다.아이템 코드를 저장하지 않은 이유는 나중에 장비강화 기능이 추가됐을때 장비 강화 수치등 여러 옵션을 가져오기위해선 ..

언리얼 버전 5.5.3서버언어 C++로 구성했습니다.이번글은 조금은 길 예정입니다.이전글에서 인벤토리 DB설계만 진행하고 클라이언트와 서버측에서 데이터를 로드하는것만 처리했습니다. 이번에는 생각보다 많은양을 처리했습니다 - 아이템 습득 - 아이템 초과 습득 불가 - 소모품 중복습득시 증가 - 소모품 다 사용하면 제거 - 소모품 효과 적용 - 서버측 인벤토리 데이터 메모리 저장 (중요) - 장비 장착 및 해제 - 장비데이터 메모리 저장 (중요) - 장비 옵션 캐릭터 적용 이렇게 적어보니 생각보다 많은 양이 아닌거같네요...?DB서버랑 게임서버랑 클라이언트를 왔다갔다해서그런가... @.@ 아마 한페이지에 전부다 쓰긴 양이 많아서 여러 페이지로 나눠서 올릴듯합니다.실행화면 작업을 하다가 고민한점.경..

언리얼 버전 5.5.3서버언어 C++로 구성했습니다.RPG게임하면 인벤토리는 필수인 상황이다보니 인벤토리도 구성을 해봤습니다일단 DB에다가 저장하기위해서 테이블을 하나 생성해줍니다. 인벤토리도 일반적으로 한칸씩 있는 인벤토리도있고, 디아블로처럼 아이템이 여러칸을 차지하게 하는 인벤토리도 존재하는데 일반적인 인벤토리로 구현했습니다.실행화면 문제발생로그인 할때 여러번 누르면,요청이 여러번들어가고 캐릭터정보도 여러번오네요... (이건 해당 본문내용과 별개입니다.) 인벤토리정보가 살짝 늦게오니 바로 인벤토리열었을때닌 인벤토리에 아무것도 없을때가 있네요. 이건 클라이언트를 잘 못다뤄서 타이밍적으로 어디서 처리를해야할지몰라서 예상했던 결과입니당...CREATE TABLE `inventory` ( `id` INT..

언리얼 버전 5.5.3서버언어 C++로 구성했습니다.이전에 아이템 등록 및 몬스터 등록을 했습니다. 이제 해당 몬스터를 잡았을때 서버에서 드랍처리를 할 예정입니다. 일단 실행화면부터 보시죠 실행화면 몬스터를 잡았을때 관리하는 코드if (bMonsterDie) { //LOG("DeSpawnObject : " set_id(objectID); // 몬스터 드랍 처리 for (auto drop : monster->DropTable) { ItemData* item = ItemUtils::GetItem(drop.code); if (item) { // drop.rate 아이템 드랍확률 ..