Register for your free account! | Forgot your password?

You last visited: Today at 00:04

  • Please register to post and access all features, it's quick, easy and FREE!

 

m2 col helper script

Closed Thread
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2009
Posts: 27
Received Thanks: 1
m2 col helper script

Does anyone have this script enabled to export collisions transformed to editable mesh on 3dmax?

this is the original code of anohros

if anyone would be kind enough to configure it to export transformed collisions to editable mesh in 3dmax id be really grateful


Code:
-- Metin2-Collision Helper
-- Version 2012-06-19T23:15
--
-- Copyright  anohros

function ReadCharacters f len =
(
	str = ""
	for i = 1 to len do
	(
		char = ReadByte f #unsigned
		if char != 0 then
		(
			str += bit.intAsChar char
		)
	)
	return (str as string)
)

function WriteCharacters f str len =
(
	for i = 1 to len do
	(
		if i <= str.count then
		(
			WriteByte f (bit.charAsInt str[i])
		)
		else
		(
			WriteByte f 0
		)
	)
)

function ReadQuat f =
(
	q = [ReadFloat f, ReadFloat f, ReadFloat f, ReadFloat f]
	return q
)

function WriteQuat f q =
(
	WriteFloat f q.x
	WriteFloat f q.y
	WriteFloat f q.z
	WriteFloat f q.w
)

function WritePos f m =
(
	WriteFloat f m.position.x
	WriteFloat f m.position.y
	WriteFloat f m.position.z
)

function WriteVert f vert =
(
	WriteFloat f vert.x
	WriteFloat f vert.y
	WriteFloat f vert.z
)

function SetMeshRotationFromQuat m q =
(
	rotate m (quat q[1] q[2] q[3] q[4])
)

function SetMeshSettings m name =
(
	m.name = name
	m.backfaceCull = false
	m.xray = true
	m.showVertexColors = true
	m.vertexColorsShaded = false
)

function ImportCol filename =
(
	try
	(
		f = fopen filename "rb"
		if f != undefined then
		(
			header = ReadString f
			if header == "AttributeData" then
			(
				countOfMeshes = ReadLong f #unsigned
				countOfPlanes = ReadLong f #unsigned
				for meshIdx = 1 to countOfMeshes do
				(
					type = ReadLong f
					name = ReadCharacters f 32
					posX = ReadFloat f
					posY = ReadFloat f
					posZ = ReadFloat f
					m = undefined
					case type of
					(
						-- collision plane
						0:
						(
							width = ReadFloat f
							length = ReadFloat f
							q = ReadQuat f
							m = plane()
							m.position = [posX, posY, posZ]
							m.width = width
							m.length = length
							SetMeshRotationFromQuat m q
						)
						-- collision sphere
						2:
						(
							radius = ReadFloat f
							q = ReadQuat f
							m = sphere()
							m.position = [posX, posY, posZ]
							m.radius = radius
							SetMeshRotationFromQuat m q
						)
						-- collision cylinder
						3:
						(
							radius = ReadFloat f
							height = ReadFloat f
							q = ReadQuat f
							m = cylinder()
							m.position = [posX, posY, posZ]
							m.radius = radius
							m.height = height
							SetMeshRotationFromQuat m q
						)
					)
					if m != undefined then
					(
						SetMeshSettings m name
					)
				)
				for planeIdx = 1 to countOfPlanes do
				(
					name = ReadCharacters f 32
					vertCount = ReadLong f
					faceCount = vertCount / 3
					m = mesh()
					m.numVerts = vertCount
					m.numFaces = faceCount
					for vertIdx = 1 to vertCount do
					(
						setVert m vertIdx [ReadFloat f, ReadFloat f, ReadFloat f]
					)
					for faceIdx = 0 to (faceCount - 1) do
					(
						faceVertStart = faceIdx * 3
						setFace m (faceIdx + 1) [faceVertStart + 1, faceVertStart + 2, faceVertStart + 3]
					)
					SetMeshSettings m name
				)
			)
		)
		fclose f
	)
	catch
	(
		print(getCurrentException())
	)
)

function ExportCol filename =
(
	try
	(
		f = fopen filename "wb"
		if f != undefined then
		(
			WriteString f "AttributeData"
			WriteLong f 0
			WriteLong f 0
			countOfMeshes = 0
			countOfPlanes = 0
			for m in objects do
			(
				if (findString m.name "collision") != undefined  then
				(
					if (classof m) == plane then
					(
						WriteLong f 0
						WriteCharacters f m.name 32
						WritePos f m
						WriteFloat f m.width
						WriteFloat f m.length
						WriteQuat f (m.rotation as quat)
						countOfMeshes = countOfMeshes + 1
					)
					else if (classof m) == sphere then
					(
						WriteLong f 2
						WriteCharacters f m.name 32
						WritePos f m
						WriteFloat f m.radius
						WriteQuat f (m.rotation as quat)
						countOfMeshes = countOfMeshes + 1
					)
					else if (classof m) == cylinder then
					(
						WriteLong f 3
						WriteCharacters f m.name 32
						WritePos f m
						WriteFloat f m.radius
						WriteFloat f m.height
						WriteQuat f (m.rotation as quat)
						countOfMeshes = countOfMeshes + 1
					)
				)
			)
			for m in objects do
			(
				if (findString m.name "height") != undefined then
				(
					if (classof m) == editable_mesh then
					(
						WriteCharacters f m.name 32
						WriteLong f (m.numFaces * 3)
						for faceIdx = 1 to m.numFaces do
						(
							face = getFace m faceIdx
							for vertIdx = 1 to 3 do
							(
								vert = getVert m face[vertIdx]
								WriteVert f vert
							)
						)
						countOfPlanes = countOfPlanes + 1
					)
				)
			)
			fseek f 14 #seek_set
			WriteLong f countOfMeshes
			WriteLong f countOfPlanes
			fclose f
		)
	)
	catch
	(
		print(getCurrentException())
	)
)

function CollisionHelperHelp =
(
	utility helpDialog "Metin2-Collision Helper - Help"
	(
		label helpTextLn1 "Collision meshes must be labeled with \"collsion**\" tag in mesh name" pos: [15, 10]
		label helpTextLn2 "and the height plane with \"height**\" tag in name." pos: [15, 25]
		label helpTextLn3 "(MDATR file uses two types of collision, the collision mesh like plane," pos: [15, 45]
		label helpTextLn4 "sphere or cylinder shapes and the height plane that represents the ground)" pos: [15, 60]
	)
	createDialog helpDialog 380 85
)

function CollisionHelper =
(
	utility dialog "Metin2-Collision Helper"
	(
		button btnImport "Import collision" pos: [15, 10] width: 200 height: 20
		button btnExport "Export collision" pos: [15, 35] width: 200 height: 20
		button btnHelp "Help" pos: [15, 60] width: 45 height: 18
		label info "Copyright  anohros" pos: [115, 62]
		
		on btnImport pressed do
		(
			fnMDATR = getOpenFileName types: "Collision file (*.mdatr)|*.mdatr" caption: "Select MDATR file"
			if fnMDATR != undefined then
			(
				ImportCol fnMDATR
			)
		)
		
		on btnExport pressed do
		(
			fnMDATR = getSaveFileName types: "Collision file (*.mdatr)|*.mdatr" caption: "Chose MDATR file name"
			if fnMDATR != undefined then
			(
				ExportCol fnMDATR
			)
		)
		
		on btnHelp pressed do
		(
			CollisionHelperHelp()
		)
	)
	createDialog dialog 230 84
)
CollisionHelper()



fenix1990 is offline  
Old   #2





 
elite*gold: 98
The Black Market: 133/0/0
Join Date: Aug 2013
Posts: 3,300
Received Thanks: 533
Hack/Bot/Script Requests are not allowed. Use the search function


αи∂ιι is offline  
Old   #3
still on the run ...

 
elite*gold: 26
The Black Market: 134/0/0
Join Date: Apr 2012
Posts: 21,714
Received Thanks: 2,911
#closed
Nectix is offline  
Closed Thread



« Previous Thread | Next Thread »

Similar Threads
[Release] Holy Helper - Most advanced helper in sro era
Hello , wazzap. After over two weeks being working on Holy Helper , I decided to release it today. Holy helper is a program which giving you...
81 Replies - SRO PServer Guides & Releases
[Release] Holy Helper - Most advanced helper in sro era
Hello , wazzap. After over two weeks being working on Holy Helper , I decided to release it today. Holy helper is a program which giving you...
12 Replies - SRO PServer - Discussions / Questions
[HELPER]ANY 1 need PM [HELPER]
hello guys just wana tell u if any one looking for a good pm can help as a good helper at Eo PServer i know about database, not really good at...
0 Replies - EO PServer Hosting



All times are GMT +2. The time now is 00:04.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.