X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcompat%2Fquake3.qc;h=8205b81284d2811d618b38e6c8675aca3942482b;hp=db73a20c725c32347af1bd0f7b3047b876d8a105;hb=e0012447bfce1b551df3dc01b043655aa93dafad;hpb=6b3608f6fa61dcaacfa71ba73df1d465a347efb6 diff --git a/qcsrc/server/compat/quake3.qc b/qcsrc/server/compat/quake3.qc index db73a20c72..8205b81284 100644 --- a/qcsrc/server/compat/quake3.qc +++ b/qcsrc/server/compat/quake3.qc @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include //*********************** @@ -88,25 +90,25 @@ void target_init_use(entity this, entity actor, entity trigger) { if (!(this.spawnflags & 1)) { - SetResourceAmount(actor, RESOURCE_ARMOR, start_armorvalue); + SetResource(actor, RES_ARMOR, start_armorvalue); actor.pauserotarmor_finished = time + autocvar_g_balance_pause_armor_rot; } if (!(this.spawnflags & 2)) { - SetResourceAmount(actor, RESOURCE_HEALTH, start_health); + SetResource(actor, RES_HEALTH, start_health); actor.pauserothealth_finished = time + autocvar_g_balance_pause_health_rot; actor.pauseregen_finished = time + autocvar_g_balance_pause_health_regen; } if (!(this.spawnflags & 4)) { - SetResourceAmount(actor, RESOURCE_SHELLS, start_ammo_shells); - SetResourceAmount(actor, RESOURCE_BULLETS, start_ammo_nails); - SetResourceAmount(actor, RESOURCE_ROCKETS, start_ammo_rockets); - SetResourceAmount(actor, RESOURCE_CELLS, start_ammo_cells); - SetResourceAmount(actor, RESOURCE_PLASMA, start_ammo_plasma); - SetResourceAmount(actor, RESOURCE_FUEL, start_ammo_fuel); + SetResource(actor, RES_SHELLS, start_ammo_shells); + SetResource(actor, RES_BULLETS, start_ammo_nails); + SetResource(actor, RES_ROCKETS, start_ammo_rockets); + SetResource(actor, RES_CELLS, start_ammo_cells); + SetResource(actor, RES_PLASMA, start_ammo_plasma); + SetResource(actor, RES_FUEL, start_ammo_fuel); STAT(WEAPONS, actor) = start_weapons; if (this.spawnflags & 32) @@ -119,7 +121,16 @@ void target_init_use(entity this, entity actor, entity trigger) { actor.strength_finished = 0; actor.invincible_finished = 0; - STAT(BUFFS, actor) = 0; + if(STAT(BUFFS, actor)) // TODO: make a dropbuffs function to handle this + { + int buffid = buff_FirstFromFlags(STAT(BUFFS, actor)).m_id; + Send_Notification(NOTIF_ONE, actor, MSG_MULTI, ITEM_BUFF_DROP, buffid); + sound(actor, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM); + if(!IS_INDEPENDENT_PLAYER(actor)) + Send_Notification(NOTIF_ALL_EXCEPT, actor, MSG_INFO, INFO_ITEM_BUFF_LOST, actor.netname, buffid); + STAT(BUFFS, actor) = 0; + STAT(BUFF_TIME, actor) = 0; + } } if (!(this.spawnflags & 16)) @@ -142,33 +153,39 @@ void target_give_init(entity this) IL_EACH(g_items, it.targetname == this.target, { if (it.classname == "weapon_devastator") { - SetResourceAmountExplicit(this, RESOURCE_ROCKETS, GetResourceAmount(this, RESOURCE_ROCKETS) + it.count * WEP_CVAR_PRI(devastator, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_ROCKETS, GetResource(this, RES_ROCKETS) + it.count * WEP_CVAR_PRI(devastator, ammo)); // WEAPONTODO this.netname = cons(this.netname, "devastator"); } else if (it.classname == "weapon_vortex") { - SetResourceAmountExplicit(this, RESOURCE_CELLS, GetResourceAmount(this, RESOURCE_CELLS) + it.count * WEP_CVAR_PRI(vortex, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_CELLS, GetResource(this, RES_CELLS) + it.count * WEP_CVAR_PRI(vortex, ammo)); // WEAPONTODO this.netname = cons(this.netname, "vortex"); } else if (it.classname == "weapon_electro") { - SetResourceAmountExplicit(this, RESOURCE_CELLS, GetResourceAmount(this, RESOURCE_CELLS) + it.count * WEP_CVAR_PRI(electro, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_CELLS, GetResource(this, RES_CELLS) + it.count * WEP_CVAR_PRI(electro, ammo)); // WEAPONTODO this.netname = cons(this.netname, "electro"); } else if (it.classname == "weapon_hagar") { - SetResourceAmountExplicit(this, RESOURCE_ROCKETS, GetResourceAmount(this, RESOURCE_ROCKETS) + it.count * WEP_CVAR_PRI(hagar, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_ROCKETS, GetResource(this, RES_ROCKETS) + it.count * WEP_CVAR_PRI(hagar, ammo)); // WEAPONTODO this.netname = cons(this.netname, "hagar"); } else if (it.classname == "weapon_crylink") { - SetResourceAmountExplicit(this, RESOURCE_CELLS, GetResourceAmount(this, RESOURCE_CELLS) + it.count * WEP_CVAR_PRI(crylink, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_CELLS, GetResource(this, RES_CELLS) + it.count * WEP_CVAR_PRI(crylink, ammo)); // WEAPONTODO this.netname = cons(this.netname, "crylink"); } else if (it.classname == "weapon_mortar") { - SetResourceAmountExplicit(this, RESOURCE_ROCKETS, GetResourceAmount(this, RESOURCE_ROCKETS) + it.count * WEP_CVAR_PRI(mortar, ammo)); // WEAPONTODO + SetResourceExplicit(this, RES_ROCKETS, GetResource(this, RES_ROCKETS) + it.count * WEP_CVAR_PRI(mortar, ammo)); // WEAPONTODO this.netname = cons(this.netname, "mortar"); } else if (it.classname == "item_armor_mega") - SetResourceAmountExplicit(this, RESOURCE_ARMOR, 100); + SetResourceExplicit(this, RES_ARMOR, 100); else if (it.classname == "item_health_mega") - SetResourceAmountExplicit(this, RESOURCE_HEALTH, 200); + SetResourceExplicit(this, RES_HEALTH, 200); + else if (it.classname == "item_buff") { + entity buff = buff_FirstFromFlags(STAT(BUFFS, it)); + this.netname = cons(this.netname, buff.netname); + STAT(BUFF_TIME, this) = it.count; + } + //remove(it); // removing ents in init functions causes havoc, workaround: setthink(it, SUB_Remove); it.nextthink = time; @@ -203,7 +220,7 @@ void fragsfilter_use(entity this, entity actor, entity trigger) { if(!IS_PLAYER(actor)) return; - if(actor.fragsfilter_cnt == this.frags) + if(actor.fragsfilter_cnt >= this.frags) SUB_UseTargets(this, actor, trigger); } spawnfunc(target_fragsFilter) @@ -265,6 +282,8 @@ bool DoesQ3ARemoveThisEntity(entity this) gametypename = "team"; if(g_ctf) gametypename = "ctf"; + if(g_duel) + gametypename = "tournament"; if(maxclients == 1) gametypename = "single"; // we do not have the other types (oneflag, obelisk, harvester, teamtournament)