|
Quake Style - Quake 2 Tutorials Event Scripting - Event Scripting Part 1 Setting up the structure and adding a few basic events. |
gi.bprintf (PRINT_HIGH, "%s entered the game\n", ent->client->pers.netname); ///Vondi Start - exec the clients deathmatch script stuffcmd(ent, "exec ev/ev_dm.cfg\n"); //Vondi End // make sure all view stuff is valid ClientEndServerFrame (ent); }
gi.bprintf (PRINT_HIGH, "%s entered the game\n", ent->client->pers.netname);
///Vondi Start - exec the clients deathmatch script
if (!deathmatch)
stuffcmd(ent, "exec ev/ev_dm.cfg\n");
//Vondi End
// make sure all view stuff is valid
ClientEndServerFrame (ent);
}
void ClientObituary (edict_t *self, edict_t *inflictor, edict_t *attacker)
{
int mod;
char *message;
char *message2;
qboolean ff;
if (coop->value && attacker->client)
meansOfDeath |= MOD_FRIENDLY_FIRE;
if (deathmatch->value || coop->value)
{
ff = meansOfDeath & MOD_FRIENDLY_FIRE;
mod = meansOfDeath & ~MOD_FRIENDLY_FIRE;
message = NULL;
message2 = "";
switch (mod)
{
case MOD_SUICIDE:
message = "suicides";
stuffcmd(attacker, "EV_death_suicide\n"); //Vondi
break;
case MOD_FALLING:
message = "cratered";
stuffcmd(attacker, "EV_death_cratered\n"); //Vondi
break;
case MOD_CRUSH:
message = "was squished";
stuffcmd(attacker, "EV_death_crushed\n"); //Vondi
break;
case MOD_WATER:
message = "sank like a rock";
stuffcmd(attacker, "EV_death_drown\n"); //Vondi
break;
case MOD_SLIME:
message = "melted";
stuffcmd(attacker, "EV_death_slime\n"); //Vondi
break;
case MOD_LAVA:
message = "does a back flip into the lava";
stuffcmd(attacker, "EV_death_lava\n"); //Vondi
break;
case MOD_EXPLOSIVE:
case MOD_BARREL:
message = "blew up";
stuffcmd(attacker, "EV_death_explosion\n"); //Vondi
break;
case MOD_EXIT:
message = "found a way out";
break;
case MOD_TARGET_LASER:
message = "saw the light";
stuffcmd(attacker, "EV_death_laser\n"); //Vondi
break;
case MOD_TARGET_BLASTER:
message = "got blasted";
stuffcmd(attacker, "EV_death_blaster\n"); //Vondi
break;
case MOD_BOMB:
case MOD_SPLASH:
case MOD_TRIGGER_HURT:
message = "was in the wrong place";
stuffcmd(attacker, "EV_death_explosion\n"); //Vondi
break;
}
if (attacker == self)
{
switch (mod)
{
case MOD_HELD_GRENADE:
message = "tried to put the pin back in";
stuffcmd(attacker, "EV_suicide_heldgrenade\n"); //Vondi
break;
case MOD_HG_SPLASH:
case MOD_G_SPLASH:
if (IsNeutral(self))
message = "tripped on its own grenade";
else if (IsFemale(self))
message = "tripped on her own grenade";
else
message = "tripped on his own grenade";
stuffcmd(attacker, "EV_suicide_grenade\n"); //Vondi
break;
case MOD_R_SPLASH:
if (IsNeutral(self))
message = "blew itself up";
else if (IsFemale(self))
message = "blew herself up";
else
message = "blew himself up";
stuffcmd(attacker, "EV_suicide_rocketsplash\n"); //Vondi
break;
case MOD_BFG_BLAST:
message = "should have used a smaller gun";
break;
default:
if (IsNeutral(self))
message = "killed itself";
else if (IsFemale(self))
message = "killed herself";
else
message = "killed himself";
stuffcmd(attacker, "EV_suicide_bfg\n"); //Vondi
break;
}
}
if (message)
{
gi.bprintf (PRINT_MEDIUM, "%s %s.\n", self->client->pers.netname, message);
if (deathmatch->value)
self->client->resp.score--;
self->enemy = NULL;
return;
}
self->enemy = attacker;
if (attacker && attacker->client)
{
switch (mod)
{
case MOD_BLASTER:
message = "was blasted by";
stuffcmd(self, "EV_killed_blaster\n"); //Vondi
break;
case MOD_SHOTGUN:
message = "was gunned down by";
stuffcmd(self, "EV_killed_shotgun\n"); //Vondi
break;
case MOD_SSHOTGUN:
message = "was blown away by";
message2 = "'s super shotgun";
stuffcmd(self, "EV_killed_sshotgun\n"); //Vondi
break;
case MOD_MACHINEGUN:
message = "was machinegunned by";
stuffcmd(self, "EV_killed_machinegun\n"); //Vondi
break;
case MOD_CHAINGUN:
message = "was cut in half by";
message2 = "'s chaingun";
stuffcmd(self, "EV_killed_chaingun\n"); //Vondi
break;
case MOD_GRENADE:
message = "was popped by";
message2 = "'s grenade";
stuffcmd(self, "EV_killed_grenade\n"); //Vondi
break;
case MOD_G_SPLASH:
message = "was shredded by";
message2 = "'s shrapnel";
stuffcmd(self, "EV_killed_grenade_splash\n"); //Vondi
break;
case MOD_ROCKET:
message = "ate";
message2 = "'s rocket";
stuffcmd(self, "EV_killed_rocket\n"); //Vondi
break;
case MOD_R_SPLASH:
message = "almost dodged";
message2 = "'s rocket";
stuffcmd(self, "EV_killed_rocket_splash\n"); //Vondi
break;
case MOD_HYPERBLASTER:
message = "was melted by";
message2 = "'s hyperblaster";
stuffcmd(self, "EV_killed_hyperblaster\n"); //Vondi
break;
case MOD_RAILGUN:
message = "was railed by";
stuffcmd(self, "EV_killed_railgun\n"); //Vondi
break;
case MOD_BFG_LASER:
message = "saw the pretty lights from";
message2 = "'s BFG";
stuffcmd(self, "EV_killed_bfglaser\n"); //Vondi
break;
case MOD_BFG_BLAST:
message = "was disintegrated by";
message2 = "'s BFG blast";
stuffcmd(self, "EV_killed_bfg\n"); //Vondi
break;
case MOD_BFG_EFFECT:
message = "couldn't hide from";
message2 = "'s BFG";
stuffcmd(self, "EV_killed_bfg\n"); //Vondi
break;
case MOD_HANDGRENADE:
message = "caught";
message2 = "'s handgrenade";
stuffcmd(self, "EV_killed_hgrenade\n"); //Vondi
break;
case MOD_HG_SPLASH:
message = "didn't see";
message2 = "'s handgrenade";
stuffcmd(self, "EV_killed_hgrenade_splash\n"); //Vondi
break;
case MOD_HELD_GRENADE:
message = "feels";
message2 = "'s pain";
stuffcmd(self, "EV_killed_held_grenade\n"); //Vondi
break;
case MOD_TELEFRAG:
message = "tried to invade";
message2 = "'s personal space";
stuffcmd(self, "EV_killed_telefrag\n"); //Vondi
break;
}
if (message)
{
gi.bprintf (PRINT_MEDIUM,"%s %s %s%s\n", self->client->pers.netname, message, attacker->client->pers.netname, message2);
if (deathmatch->value)
{
if (ff)
attacker->client->resp.score--;
else
attacker->client->resp.score++;
}
return;
}
}
}
gi.bprintf (PRINT_MEDIUM,"%s died.\n", self->client->pers.netname);
if (deathmatch->value)
self->client->resp.score--;
}