NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
NDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
NDC 2017 발표 슬라이드
시연 영상 링크: https://youtu.be/e9Tv3jkmqKk
게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
웹 개발을 위해 꼭 알아야하는 보안 공격선협 이
The document summarizes various web security attacks that are important for web developers to understand, including SQL injection, XSS, CSRF, file upload attacks, and others. It provides examples of how each attack works, potential impacts, and methods for prevention, with a focus on understanding common attacks and basic defenses. The goal is to help web developers gain a foundational knowledge of security risks and mitigate vulnerabilities.
This document discusses MongoDB modeling patterns for distributed systems. It begins by explaining what NoSQL databases are and the differences between relational and non-relational databases. It then covers MongoDB specifically, including its use of documents, BASE semantics, and ACID transactions. The document focuses on various modeling patterns for MongoDB including how to model tree structures, relationships, and attributes within collections. Specific patterns discussed include embedding, linking, attributes, extended references, subsets, computed fields, buckets, and schema versioning.
This document discusses open source software and contributions to open source projects on GitHub. It explains what open source means, how to contribute via pull requests and issues, and tools for viewing contributions. It encourages contributing to projects with small fixes or improvements, engaging on forums like Reddit and Slack, and growing an open source community.
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017선협 이
This document discusses trends in mobile design such as complexion reduction and provides links to resources about Metal, a graphics and compute framework for Apple platforms. It contains emoji and code snippets related to Metal and its shading language specification.
A modern spreadsheet program is an example of reactive programming. Reactive programming involves reactive objects that update automatically in response to external events or data streams. The document provides an example of how a spreadsheet reacts to user input events by updating cells, and how observables in reactive programming notify subscribers of emitted events.
3. 아이엠 그라운드 자기소개하기
• Python, Ruby같은 스크립트 언어
• 다른 스크립트 언어보다 가볍다.
• 프로그램에 내장되는 스크립트이다.
• 프로그램과 통신이 가능하다.
• 데이터 교환
• API 상호 호출
• C, C++언어에 이식하기 편하다.
• 가비지 컬렉터가 있다.
• 쉽다.
6. • 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다.
• 사용자 인터페이스 (UI)
• 캐릭터 애니메이션
• 월드맵 조정
• 네버윈터 나이츠, ToME, 원숭이 섬으로부터 탈출, 앵그리버드
등 ... 게임 제작에 많이 쓰임..!
게임 개발에 자주 쓰입니다!
27. • 루아의 변수는 기본적으로 전부 전역 변수이다.
• 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다.
• 지역변수는 ‘local’ 키워드를 사용하여 사용 가능하다.
• 가능한 곳에서는 지역변수를 사용하는 것이 좋다.
• ex)
• a = 2 // 전역변수
• local a = 2 // 지역변수
루아 - 변수
28. • nil
• 다른 언어의 NULL과 유사하다.
• 변수에 nil을 대입하면 삭제된다.
• boolean
• 다른 언어처럼 true, false 값만 가짐
루아 - 변수
29. • string
• 다른 스크립트 언어처럼 문자열 처리에 강하다.
• 역슬래시를 이용하여 특수문자 사용 가능 (줄바꿈, 탭, 따옴표 등)
• 수치와 문자열을 자동으로 상호 변환
• ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR
• number
• 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한
다.
루아 - 변수
30. • table
• C++의 std::map, Python의 dict와 유사하다.
• number형과 string형을 모두 인덱스 할 수 있다. (nil은 제외)
• 크기가 고정되어 있지 않다. (Array가 아님)
• 값, 변수가 아닌 객체이다.
• 다른 언어와 달리 0이 아닌 1부터 시작한다.
루아 - 변수
31. • 산술 연산자
• +, -, *, /
• 관계 연산자
• <, >, <=, >=, ==, ~=
• 논리 연산자
• and, or, not
루아 - 연산자
32. • if (조건식) than (실행문)
else if (조건식) than (실행문)
else (실행문)
end
루아 – 명령문 (if)
34. • C++의 do ~ while과 유사
• repeat
(실행문)
until (조건식)
루아 – 명령문 (repeat)
35. • for (초기화), (조건식), (증감) do
(실행문)
end
• 증감을 생략하면 자동으로 1씩 증가
루아 – 명령문 (numeric for)
36. • table의 요소를 한 번에 하나씩 접근할 때 주로 사용
• pairs() / ipairs() 함수와 함께 사용
• ex)
• days = {“Sunday”, “Monday”, ... “Saturday”}
• for index, value in pairs(days) do
print(index, value)
end
• result)
• 1 Sunday
2 Monday
...
루아 – 명령문 (generic for)
38. • arg라는 table을 만들어서 가변 인수를 담음
• 가변 인수는 마침표 세개(...)로 구분
• arg.n에 가변 인수의 개수를 저장
• function 함수이름(a, b, ...)
print(a[1])
end
루아 – 함수
39. • 루아의 함수는 결과를 여러 개 반환 가능
• function 함수이름()
return 1, 2, “asdf”
end
루아 – 함수
40. 더 자세한 정보는
assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
41. assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
더 자세한 정보는
43. • 환경은 Windows / Visual Studio 2013
• Visual Studio 프로젝트 Directory 설정
• Include
• C:Program FilesLua5.1include
• Link
• C:Program FilesLua5.1lib
• C:Program Files (x86)Lua5.1lib 디렉토리에서
dll파일 프로젝트에 복사
C++과 루아 스크립트 연동
49. • 역으로 Lua에서 C++ 함수를 호출 할 수 있다.
C++과 루아 스크립트 연동
50. • Lua를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리
• MIT 라이센스
• boost 라이브러리가 필요하다.
• 설치
• http://sourceforge.net/projects/luabind/
• 압출을 푼뒤 빌드한다.
• 정적 라이브러리로 빌드 (Visual Studio 2013 기준)
• 이 과정에서 boost, lua 라이브러리 필요
• 디버그, 릴리즈 둘 다 빌드
• 나온 결과물을 프로젝트에 포함한다. (lib)
luabind
51. • 이제 사용하면된다.
• 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다.
• 각종 example도 압축 파일 내부에 존재한다
luabind
52. 주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
53. 주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다.
ex)
코어 프로그래머 -> 몬스터 FSM을 루아로 바인드함
컨텐츠 프로그래머, 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작
http://www.gamedevforever.com/12
(박민근 교수님이 쓰신 루아 사용에 대한 비판 글)