Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
20.08.2002, 16:34
RirA



Hey da bin ich mal wieder, mit ner ziemlichen old-school Frage, ahb schon lange nichts mehr gecodet...
Also ich lasse das player.mdl in die Welt spawnen, das soll eigentlich einfach auf dem Boden stehenbleiben, aber es fällt bis ca. zur Hälfte in den Boden und bleibt dann "stecken". MOVETYPE_TOSS. Wenn ich MOVETYPE_FLY mache, bleibt es in der Welt stehen, also egal wo, auch in der Luft. Wie kann ich erreichen, dass das Model richtig stehenbleibt, also auf den Beinen bzw. woran liegt mein Problem?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
20.08.2002, 16:39
Exec



was hat denn der player als solcher fürn spawn-movetype? ich nehme an, es lieg am origin ... mach movetype_toss und setzt das model 64units hoch (müsste gehn)

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
002
20.08.2002, 17:45
RirA



Was ich spawne ist nicht der Player, sonder das MODEL "player.mdl".
Die Origin ist doch pev->origin, dann fällt es runter und ladet in der Mitte des Models, es soll aber auf den Beinen landen.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
20.08.2002, 20:17
Exec



yo,klar, sagte ich doch indirekt (mmhh, oder dachte es mir zumindest *g*)
mach mal
pev->origin + v_up *64; (oder so)
der origin des players sitzt nämlich in der mitte und nich an den füssen -> deshalb is der player zur hälfte im boden (hoffe, du hasts verstanden)

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
004
20.08.2002, 21:33
RirA



Jo ich hab's kapiert, aber ich schaff es trotzdem nicht, ich poste mal den Code:

//RirA+
//=================================================================================
//
//®2-D2
//
//Phantom - Weapon
//
//Creates a copy of the player that remains at its position for some time
//
//=================================================================================

#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"

#define AIM_2 1//RirA

class CPhantom : public CBaseEntity
{
void Spawn( void );
void EXPORT MoveThink( void );//RirA
int iTimer;//RirA
int m_MovedUp;//RirA
};

void CPhantom::Spawn( void )
{
pev->classname = MAKE_STRING("phantom");
UTIL_SetSize( pev, Vector( 100, 100, 100 ), Vector( 100, 100, 100 ) );
UTIL_SetOrigin(this, pev->origin);
SET_MODEL(ENT(pev), "models/player.mdl");

pev->movetype = MOVETYPE_TOSS;//RirA+

pev->solid = SOLID_NOT;
pev->takedamage = DAMAGE_NO;

pev->sequence = AIM_2;

iTimer = gpGlobals->time + 60;//60 sec.?
m_MovedUp = 0;//RirA-

SetThink( MoveThink );
pev->nextthink = gpGlobals->time + 0.1;
}

void CPhantom::MoveThink( void )
{
CBaseEntity *pGround = CBaseEntity::Instance( pev->groundentity );
if(pev->groundentity)//RirA+
pev->velocity = pGround->pev->velocity;

if(m_MovedUp == 0)
{
pev->origin = pev->origin + gpGlobals->v_up * 64;//RirA
m_MovedUp = 1;
}

if(iTimer <= gpGlobals->time)
{
SUB_StartFadeOut();
}
else
{
SetThink( MoveThink );
}//RirA-

pev->nextthink = gpGlobals->time + 0.1;
}
LINK_ENTITY_TO_CLASS( phantom, CPhantom );

enum e_phantom {
PHANTOM_IDLE = 0,
PHANTOM_FIDGET,
PHANTOM_DRAW,
PHANTOM_FIRE,
PHANTOM_HOLSTER
//SATCHEL_RADIO_FIRE//RirA //r2: PHANTOM_FIRE = SATCHEL_RADIO_FIRE !!
};

class CWeaponPhantom : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 1;}
int GetItemInfo(ItemInfo *p);
BOOL Deploy( void );
void Holster( void );
void PrimaryAttack( void );
void WeaponIdle( void );

};
LINK_ENTITY_TO_CLASS( weapon_phantom, CWeaponPhantom );

void CWeaponPhantom::Spawn( void )
{
PRECACHE_MODEL("models/player.mdl");
pev->classname = MAKE_STRING("weapon_phantom"); // hack to allow for old names
Precache( );
m_iId = WEAPON_PHANTOM;
if(CVAR_GET_FLOAT("phantom") == 1)//RirA+
{
SET_MODEL(ENT(pev), "models/w_isotopebox.mdl");

m_iDefaultAmmo = 1;

FallInit();// get ready to fall down.
}//RirA-
}

void CWeaponPhantom::Precache( void )
{
PRECACHE_MODEL("models/v_satchel_radio.mdl");
PRECACHE_MODEL("models/p_satchel_radio.mdl");
PRECACHE_MODEL("models/w_isotopebox.mdl");
UTIL_PrecacheOther("phantom");

PRECACHE_SOUND("debris/beamstart1.wav");
}

int CWeaponPhantom::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "phantom";
p->iMaxAmmo1 = 1;
p->pszAmmo2 = NULL;
p->iMaxAmmo2 = -1;
p->iMaxClip = WEAPON_NOCLIP;
p->iSlot = 0;
p->iPosition = 2;
p->iFlags = 0;
p->iId = m_iId = WEAPON_PHANTOM;
p->iWeight = -5;

return 1;
}

BOOL CWeaponPhantom::Deploy( )
{
return DefaultDeploy( "models/v_satchel_radio.mdl", "models/p_satchel_radio.mdl", 0, "hive", 0 );
}

void CWeaponPhantom::Holster( void )
{
SendWeaponAnim(PHANTOM_HOLSTER);
}

void CWeaponPhantom::PrimaryAttack( void )
{
if(m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)//RirA+
return;

SendWeaponAnim( PHANTOM_FIRE );//RirA //r2
UTIL_MakeVectors (m_pPlayer->pev->v_angle);
Vector vecSrc = m_pPlayer->GetGunPosition( );
Vector vecEnd = vecSrc + gpGlobals->v_forward * 32;

CBaseEntity *pPhantom = CBasePlayer::Create("phantom", vecEnd, m_pPlayer->pev->angles, m_pPlayer->edict() );
SET_MODEL(ENT(pPhantom->pev), "models/player.mdl");
EMIT_SOUND_DYN(ENT(pev), CHAN_WEAPON, "debris/beamstart1.wav", 1.0, ATTN_NORM, 0, 100);

m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
m_flTimeWeaponIdle = gpGlobals->time + 0.5;//RirA
m_flNextPrimaryAttack = gpGlobals->time + 0.5;//RirA
}

void CWeaponPhantom::WeaponIdle( void )
{
ResetEmptySound( );

if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
return;

int iAnim;
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0.0, 1.0 );

if (flRand <= 0.3 + 0 * 0.75)
{
iAnim = PHANTOM_FIDGET;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 49.0 / 16;
}
else if (flRand <= 0.6 + 0 * 0.875)
{
iAnim = PHANTOM_IDLE;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 60.0 / 16.0;
}
else
{
iAnim = PHANTOM_IDLE;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 40.0 / 16.0;
}
SendWeaponAnim( iAnim, 1 );
}
//RirA-

Das bewirkt, dass das Model am Anfang wenn es spawnt mal kurz nach oben hüpft und dann wieder im Boden versinkt. ;-(

--

zum Seitenanfang zum Seitenende Profil || Suche
005
20.08.2002, 21:48
Exec



if(m_MovedUp == 0)
{
pev->origin = pev->origin + gpGlobals->v_up * 64;//RirA
m_MovedUp = 1; // hier setzt du auf 1 und somit is die bedingung nichmehr erfüllt -> geht beim nächsten think nichmehr!
}

vielleicht wird der origin nich übernommen ... lass einfach das m_MovedUp = 1; weg oder mach nen if(movedup == 1){movgedup = 0;} (was allerdings schwachsinn wäre ...) wenn du mit dem movedup nix anderes machen willst, dann lass die if() einfach weg ...

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
006
20.08.2002, 23:03
Hanfling



Quellcode:
pev->origin = pev->origin + gpGlobals->v_up [b]*[/b] 64;//RirA

ich würde es zu ändern zu:
Quellcode:
pev->origin = pev->origin + gpGlobals->v_up [b]+[/b] 64;//RirA

sonst würde er ja die position mit 64 multiplizieren und nicht addieren...

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o


Dieser Beitrag wurde am 20.08.2002 um 23:04 von Hanfling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
21.08.2002, 02:50
RirA



Exec wenn ich ohne das MovedUp mache(in der Think Funktion), fliegt es immer höher, also aus dem Level.

Agamemnon: Das bringt nichts, mein Code macht schon das, was er soll, nur nicht am Boden.

Andere Ideen?

--

zum Seitenanfang zum Seitenende Profil || Suche
008
21.08.2002, 07:31
Exec



@aga: nein, du musst *64 machen, weils sonst nich geht ... afaik, dieses *64 schiebt 64units (is sicher 64 mal 1 unit, oder so, weil ja v_up theoretisch dann 1 is)

Quellcode:
void CPhantom::Spawn( void )
{
pev->classname = MAKE_STRING("phantom");
UTIL_SetSize( pev, Vector( 100, 100, 100 ), Vector( 100, 100, 100 ) );
UTIL_SetOrigin(this, pev->origin); //hier vielleicht + gpGlobals->v_up * 64 ?
SET_MODEL(ENT(pev), "models/player.mdl");

pev->movetype = MOVETYPE_TOSS;//RirA+

pev->solid = SOLID_NOT;
pev->takedamage = DAMAGE_NO;
//oder dann halt hier unten? ka ...
pev->origin = pev->origin + gpGlobals->v_up * 64

pev->sequence = AIM_2;

iTimer = gpGlobals->time + 60;//60 sec.?
m_MovedUp = 0;//RirA-

SetThink( MoveThink );
pev->nextthink = gpGlobals->time + 0.1;
}

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
009
21.08.2002, 12:39
Bluthund



Ich hab ka obs funzt aber test ma
Quellcode:UTIL_SetSize(pev, VEC_HULL_MIN, VEC_HULL_MAX);
so wird zumindest der player gespawned

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
010
21.08.2002, 13:03
RirA



Bluthund du bist ein Schatz! Aber auch danke an alle anderen! Is nur komisch, dass es in der Spawnfunktion nichts bringt, ich musste es in die MoveThinkfunkt. machen.

--

zum Seitenanfang zum Seitenende Profil || Suche
011
21.08.2002, 13:07
Bluthund



Es freut mich, dass ich dir helfen konnte. Eigenartig das es in der Spawn nich geht aber hauptsache es funzt, stimmts =)

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
012
21.08.2002, 13:07
Archangel



ausserdem is das mit v_up sowieso blödsinn, wenn du das model höhersetzen willst, addierst du einfach den wert zur z-axis hinzu.. mit v_up funktionierts zwar, weil das entity beim spawnen "geradeaus" guckt, so dass v_up = Vector(0, 0, 1) ist, aber wieso so kompliziert ?

btw was Bluthund geschrieben hat is richtig, für das sp model verwendest VEC_HULL_*, für die mp models VEC_HUMAN_HULL_*. beim sp model ist der origin nämlich nicht in den füßen, sondern genau in der mitte des models, also 36 units über den fußsohlen.. die Z-size des models muss also nicht 0/72 sein, sondern -36/+36

edit:
hae ? in der spawnfunktion bringts nichts ? paste nochmal den ganzen code (mit setsize aufruf in der spawn mit vec_hull_*, der nichts bringt), vielleicht hast du das ja irgendwo wieder überschrieben

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005


Dieser Beitrag wurde am 21.08.2002 um 13:09 von Archangel bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
21.08.2002, 19:19
RirA



Is jetzt egal, es funktioniert ja. :-)

--

zum Seitenanfang zum Seitenende Profil || Suche