@Yamato, do you mean that I should post it here?
I just though it would be great additional stuff for your tutorial collection
I'm not sure whether all these works as model or not but, for example, com_computer_keyboard will work as model
How I change player's model
Code:
changeModel()
{
self endon("disconnect");
self endon("death");
self.changeModel = 0;
self.curModel = 1;
for(;;)
{
if (self.changeModel==1)
{
self.customModel setModel(level.ModelList[self.curModel].name);
self.changeModel = 0;
self.curModel++;
}
if (self.curModel > level.MaxModels)
{
self.curModel = 1;
}
wait 0.25;
}
}
If we are on Terminal, we will take Terminal's models this way
Code:
mp_terminal() //Thanks to ezr
{
level.ModelList = [];
level.MaxModels = 11;
// Modelname
level.ModelList[1] = createModel("com_tv1", "TV");
level.ModelList[2] = createModel("com_barrel_benzin", "Benzin barrel");
level.ModelList[3] = createModel("ma_flatscreen_tv_wallmount_02", "Flatscreen TV");
level.ModelList[4] = createModel("com_roofvent2_animated", "Roof ventilator");
level.ModelList[5] = createModel("ma_flatscreen_tv_on_wallmount_02_static", "Flatscreen TV On");
level.ModelList[6] = createModel("vehicle_policecar_lapd_destructible", "Police car");
level.ModelList[7] = createModel("com_vending_can_new2_lit", "Vending machine");
level.ModelList[8] = createModel("usa_gas_station_trash_bin_01", "Trash bin");
level.ModelList[9] = createModel("com_plasticcase_black_big_us_dirt", "Ammo crate");
level.ModelList[10] = createModel("vehicle_cart_baggage_airport_small", "Baggage car");
level.ModelList[11] = createModel("vehicle_cart_airport", "Baggage car 2");
}
And this is precache for it
Code:
else if( getDvar( "mapname" ) == "mp_terminal" )
{
precacheModel( "vehicle_cart_airport" );
precacheModel( "vehicle_cart_baggage_airport_small" );
precacheModel( "ap_luggage02" );
precacheModel( "ap_luggage01" );
precacheModel( "ap_luggage03" );
level thread killTrigger((-130,5555,400),90,1);
}
Here is how I and my friend transfer damage from model to player
Code:
modelDamage()
{
self endon("disconnect");
self endon("death");
for(;;)
{
self.customModel waittill ( "damage", damage, attacker, dirVec, point, damageType, sMeansOfDeath, something2,modelName,something3, sWeapon);
if(attacker != self)
{
// next line will add hitmarks
attacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( sWeapon );
// next line will transfer damage from model to player
self thread [[level.callbackPlayerDamage]](
attacker, // eInflictor The entity that causes the damage.(e.g. a turret)
attacker, // eAttacker The entity that is attacking.
damage, // iDamage Integer specifying the amount of damage done
0, // iDFlags Integer specifying flags that are to be applied to the damage
damageType, // sMeansOfDeath Integer specifying the method of death
sWeapon, // sWeapon The weapon number of the weapon used to inflict the damage
point, // vPoint The point the damage is from?
dirVec, // vDir The direction of the damage
"tag_body", // sHitLoc The location of the hit
0, // psOffsetTime The time offset for the damage
true
);
attacker iPrintLnBold("Hit:"+ self.name +" DMG: " + damage +" Health: "+self.health); // just debugging purpose
}
}
}
Edit: friend told how to disable it
Code:
Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, wasFromModel )
{
if(isDefined(wasFromModel))
{
Callback_PlayerDamage_internal( eInflictor, eAttacker, self, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime );
return;
}
if (eAttacker.pers["team"]==game["defenders"])
Callback_PlayerDamage_internal( eInflictor, eAttacker, self, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime );
}
If that wasFromModel is true, victim(hider) won't take damage from it's own model, only from that model which will change on Hide'n'seek.
Ps. this is for Hide'n'Seek only.