So dieser Code sollte theoretisch eigentlich funktionieren... aber!!!
1: Gibt bei mir je nach einstellung der Objekte in Wed manchmal noch sehr seltsame Resultate
2: Ist noch nicht so ausführlich getestet. Bitte versuchg dich mal dran, und berichte alle Fehler hier.

var newtonImpulseRecord[8];
DEFINE ent_id,SKILL47;
DEFINE EXPLOSION,11;
Function door_physic(Body)
{
// Balance...
temp.x = 0;
temp.y = 0;
temp.z = MY.SKILL46;
vec_scale(temp, 4000);
//vec_rotate(temp, my.pan);
IF (MY.SKILL46 != 0) {
NewtonBodyAddTorque (Body, temp.X,temp.Y,temp.Z);
}
//NewtonbodySetvelocity(body,nullvector);
}

function _door_swing_newton()
{ //Das ist eine Template dooraktion,
//die einfach die Bewegungsbefehle an die Newtonfunktion übergibt
var body;
var saved_pan;
var mom_pan;
MY.__MOVING = ON;
MY.SKILL46 = 0;
saved_pan = MY.PAN;
body = NewtonGetBody (MY);
NewtonSetBodyActiveState (Body, 1);

// check whether to open or to close
if(MY._CURRENTPOS < MY._ENDPOS)
{
if(MY.__SILENT == OFF) { ent_PLAYSOUND (ME,open_snd,66); }
while(MY._CURRENTPOS < MY._ENDPOS)
{
mom_pan = MY.PAN;
MY.SKILL46 = -MY._FORCE;
MY._CURRENTPOS = abs(saved_pan-my.pan);
wait(1);
IF (abs(mom_pan-my.pan) < 0.005 && MY._CURRENTPOS < MY._ENDPOS) { goto (do_return); }
}
//Dieser Codeteil funktioniert auf meinem ystem noch nicht richtig!
//MY.PAN += MY._CURRENTPOS-MY._ENDPOS; // Das ergibt einen kleinen Sprung
//body = NewtonGetBody (MY);//Damit die Tür auch exakt richtig steht
//NewtonBodySetTransform (body); // Das verändern der Winkel muss für Newton gültig gemacht werden
MY._CURRENTPOS = MY._ENDPOS;
saved_pan = MY.PAN;
}
else // MY._CURRENTPOS >= MY._ENDPOS
{
if(MY.__SILENT == OFF) { ent_playsound(ME,close_snd,66); }
while(MY._CURRENTPOS > 0)
{
mom_pan = MY.PAN;
MY.SKILL46 = MY._FORCE;
MY._CURRENTPOS = 90-abs(saved_pan-my.pan);
wait(1);
IF (abs(mom_pan-my.pan) < 0.005 && MY._CURRENTPOS > 0) { goto (do_return); }
}
// MY.PAN += MY._CURRENTPOS; //Hier dasselbe
//body = NewtonGetBody (MY);
//NewtonBodySetTransform (body); //Damit die Tür auch exakt richtig steht
MY._CURRENTPOS = 0;
saved_pan = MY.PAN;
body = NewtonGetBody (MY);
NewtonSetBodyActiveState (Body, 0);

}
do_return :
MY.__MOVING = OFF;
My.SKILL46 = 0;
}


function newtondoor_event()
{
_doorevent_check();
if(RESULT) { BRANCH _door_swing_newton; }
}


ACTION newtondoor
{
MY.MASS = 10000; //es muss ein statisches Newtonobjekt sein
MY.SKILL46 = 0;
//c_setminmax(MY);
newtoncreatedoorentity();
IF (MY.EVENT == NULL) { MY.EVENT = newtondoor_event; }
_doorevent_init();
if(MY._FORCE == 0) { MY._FORCE = 20; }
if(MY._ENDPOS == 0) { MY._ENDPOS = 90; }
}

function NewtoncreatedoorEntity ()
{
var collisionType;
var body;
dll_handle = newtonHandle;

// if entity is not destructible. Set health very heigth

// check for collision type
collisionType = 0;

body = NewtonAddMapEntity (my, collisionType);
NewtonSetBodyMass (body, MY.MASS);
NewtonSetBodyLinearDamp (body, 0.1);
NewtonSetBodyAngularDamp (body, 0.1, 0.1, 0.1);
NewtonSetBodyMaterial (body, wood_material);
NewtonSetBodyAutoActiveState (Body, 0);
NewtonSetBodyActiveState (Body, 0);
NewtonSetBodyForceAndTorque (Body, door_physic);

}


function _doorevent_init()
{
MY.ENABLE_SCAN = ON;
MY.ENABLE_CLICK = ON;

// enable mouse text
if(MY.STRING1 != NULL)
{
MY.ENABLE_TOUCH = ON;
}

MY._TRIGGERFRAME = 0;
//MY.PUSH = 10; // move through the level blocks
}

// Desc: action checks whether an event can operate the door or platform
//
// Mod 9/1/00 DCP
// Enabled __SILENT flag (play sound only if OFF)
function _doorevent_check()
{
handle_touch(); // show mouse touch text, if any

if(MY.__MOVING == ON) { goto(ignore); } // don't handle a moving door


// entity performed SCAN nearby (by pressing SPACE)
if((EVENT_TYPE == EVENT_SCAN) && (indicator == _HANDLE))
|| (EVENT_TYPE == EVENT_CLICK)
{
if(MY.__SILENT == OFF) { snd_play(trigger_snd,50,0); }
goto(try_key);
}
IF (EVENT_TYPE == EVENT_SCAN && YOU != NULL) {
IF (YOUR.ENT_ID == EXPLOSION) {
//Eine Explosion gegen die Tür?
BRANCH door_explo;
}
}

// no operating condition happened, so tell the door not to move
ignore:
RESULT = 0;
return(0);

try_key:
if((MY._KEY == 1)&&(key1 == 0)) { msg.STRING = need_key1_str; GOTO message; }
if((MY._KEY == 2)&&(key2 == 0)) { msg.STRING = need_key2_str; GOTO message; }
if((MY._KEY == 3)&&(key3 == 0)) { msg.STRING = need_key3_str; GOTO message; }
if((MY._KEY == 4)&&(key4 == 0)) { msg.STRING = need_key4_str; GOTO message; }
if((MY._KEY == 5)&&(key5 == 0)) { msg.STRING = need_key5_str; GOTO message; }
if((MY._KEY == 6)&&(key6 == 0)) { msg.STRING = need_key6_str; GOTO message; }
if((MY._KEY == 7)&&(key7 == 0)) { msg.STRING = need_key7_str; GOTO message; }
if((MY._KEY == 8)&&(key8 == 0)) { msg.STRING = need_key8_str; GOTO message; }

operate:
RESULT = 1;
return(1);

message: // and don't operate
if(MY.__SILENT != ON) { show_message(); }
RESULT = 0;
return(0);
}

function door_explo
{
var dx;
var dy;
var dz;
var dist2;
var body;
var volume;
dll_handle = newtonHandle;


body = NewtonGetBody (my);
if (body) {
if (EVENT_TYPE == event_SCAN) {
// decrement the health by the weapon damage (skill 4)

newtonImpulseRecord[0] = my.x;
newtonImpulseRecord[1] = my.y;
newtonImpulseRecord[2] = my.z;

// copy origin of bullet (use to determone the direction of the impulse)
newtonImpulseRecord[3] = you.x;
newtonImpulseRecord[4] = you.y;
newtonImpulseRecord[5] = you.z;

// copy the bullet mass
newtonImpulseRecord[6] = you.skill4;

// copy the bullet speed
newtonImpulseRecord[7] = you.skill5;
IF (YOU.SKILL4 > MY.MASS) { //Bedingung damit die Explosion wirkung zeigt
NewtonSetBodyActiveState (Body, 1);
NewtonBodyAddImpulse (body, newtonImpulseRecord);
}
}
wait(2);

}
}

Zum Einbau nicht vergessen:

Gruppe1 Darein, Gruppe2 und ein kleines Model außerhalb der Schwingreichweite
der Tür als Drehpunkt mit Action Newtonwoodentity und allen Parametern auf null

Gruppe2 darin Gruppe3 und Hingeobjekt mit Newtonhingeconstant und skill1 auf 0.1 skill2 auf -90 und 3 auf 90

Gruppe3 mit der Tür

Den Aufbau solltest du mal ein bisschen varieren (Abstand der einzelnen Teile voneinder und auch die Werte, die ich hier genannt habe).

Hoffe bei dir funktionierts einigermaßen

P.S. Sollte jetzt auch ohne Templates gehen, zur Sicherheit aber trotzdem noch mal reinnehmen