yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269

|
|
Schade, keiner ´ne Idee...?
Das ist das, was ich bisher aus dem AWE (Version 1.4.2, weil da nicht so viele Features eingebaut sind) rausgefilter habe, genauer gesagt aus der _awe.gsc... Hab auch versucht, die SWAT-Gametypes einzubauen, AWE muss die ja erkennen und auch wissen, daß das Team-Play-Modis sind...
Nur klappt es einfach nicht, wenn ich die _awe.gsc in den Ordner \maps\mp\gametypes packe und als serverseitige pk3 oder eben als Ordner auf den Server packe...
Die CVARs werden scheinbar erkannt, zumindest wenn ich in der Konsole die Standard-Werte abfrage... Aber Der AntiCamper-Modus reagiert einfach nicht - weder mit der markierung, noch per Kill, noch per Blow Up, noch per Shellshock...
Ich weiß nicht, was fehlt oder wo evtl. ein Fehler ist, ich steig da einfach nicht so wirklich hinter...
/*
_awe.gsc by Bell
Version 1.4.2
*/
Callback_StartGameType()
{
// Start threads
startThreads();
}
startThreads()
{
}
setupVariables()
{
// defaults if not defined in level script
if(!isDefined(game["allies"]))
game["allies"] = "swat";
if(!isDefined(game["axis"]))
game["axis"] = "criminal";
// Set up the number of available punishments
level.awe_punishments = 3;
// Setup variables depending on gametypes
switch(getCvar("g_gametype"))
{
case "money": //Money
level.awe_teamplay = true;
level.awe_spawnalliedname = "mp_searchanddestroy_spawn_allied";
level.awe_spawnaxisname = "mp_searchanddestroy_spawn_axis";
break;
case "stdm": //STDM
case "hm": //Hitman
level.awe_teamplay = true;
level.awe_spawnalliedname = "mp_teamdeathmatch_spawn";
level.awe_spawnaxisname = "mp_teamdeathmatch_spawn";
break;
case "sdm": //SWAT DM
level.awe_spawnalliedname = "mp_deathmatch_spawn";
level.awe_spawnaxisname = "mp_deathmatch_spawn";
break;
case "escort": //Escort
case "ssd": //SWAT SD
level.awe_teamplay = true;
level.awe_roundbased = true;
level.awe_spawnalliedname = "mp_searchanddestroy_spawn_allied";
level.awe_spawnaxisname = "mp_searchanddestroy_spawn_axis";
break;
case "ta": //Team Arrest
case "te": //Team Elimination
level.awe_teamplay = true;
level.awe_roundbased = true;
level.awe_spawnalliedname = "mp_teamdeathmatch_spawn";
level.awe_spawnaxisname = "mp_teamdeathmatch_spawn";
break;
case "bel":
case "hq":
default:
level.awe_teamplay = true;
level.awe_roundbased = true;
level.awe_spawnalliedname = "mp_teamdeathmatch_spawn";
level.awe_spawnaxisname = "mp_teamdeathmatch_spawn";
break;
}
// Load effect for bomb explosion (used by anticamp, antiteamkill, antiteamdamage and grenade cooking)
level._effect["bombexplosion"]= loadfx("fx/explosions/pathfinder_explosion.efx");
level._effect["smokeexplosion"]= loadfx("fx/impacts/newimps/v_blast1.efx");
{
updateGametypeCvars(init)
{
// Anticamping
level.awe_anticamptime = cvardef("scr_awe_anticamp_time", 0, 0, 1440, "int");
level.awe_anticampmarktime = cvardef("scr_awe_anticamp_marktime", 90, 0, 1440, "int");
level.awe_anticampmethod = cvardef("scr_awe_anticamp_method", 0, 0, level.awe_punishments + 1, "int");
level.awe_anticampfun = cvardef("scr_awe_anticamp_fun", 0, 0, 1440, "int");
level.awe_anticampmsgsurvived = cvardef("scr_awe_anticamp_msg_survived", "^3Markierung aufgehoben.", "", "", "string");
level.awe_anticampmsgdied = cvardef("scr_awe_anticamp_msg_died", "^3Nur ein toter Camper ist ein guter Camper...!", "", "", "string");
}
punishme(iMethod, sReason)
{
if(iMethod == 1)
iMethod = 2 + randomInt(level.awe_punishments);
switch (iMethod)
{
case 2:
self suicide();
sMethodname = "killed";
break;
case 3:
iprintlnbold("^1ACHTUNG!^7 " + self.name + " ^7wird in 5 Sekunden explodieren...");
self thread punishtimer(5,(1,0,0));
self markme("bomb","bomb",5);
// explode
iRange = 10;
iMaxdamage = 150;
iMindamage = 120;
playfx(level._effect["bombexplosion"], self.origin);
radiusDamage(self.origin, iRange, iMaxdamage, iMindamage);
sMethodname = "blown up";
break;
case 4:
// Drop weapon and get 15 seconds of spanking
time = 15;
self thread punishtimer(time,(0,1,0));
self shellshock("default",time);
self thread spankme(time);
sMethodname = "spanked";
break;
default:
break;
}
if(iMethod)
iprintln(self.name + "^7 is being " + sMethodname + " ^7for " + sReason + "^7.");
}
punishtimer(time,color)
{
// Remove timer if it exists
if(isdefined(self.awe_punishtimer))
self.awe_punishtimer destroy();
// Set up timer
self.awe_punishtimer = newClientHudElem(self);
self.awe_punishtimer.archived = true;
self.awe_punishtimer.x = 420;
self.awe_punishtimer.y = 460;
self.awe_punishtimer.alignX = "center";
self.awe_punishtimer.alignY = "middle";
self.awe_punishtimer.alpha = 1;
self.awe_punishtimer.sort = -3;
self.awe_punishtimer.font = "bigfixed";
self.awe_punishtimer.color = color;
self.awe_punishtimer setTimer(time - 1);
// Wait
wait time;
// Remove timer
if(isdefined(self.awe_punishtimer))
self.awe_punishtimer destroy();
}
markme(icon, obj, time)
{
// Do not mark a player twice
if(isdefined(self.awe_objnum))
return;
// gametype dm does not initialize level.drawfriend
if(!isdefined(level.drawfriend))
level.drawfriend = 0;
if(obj == "camper" && isdefined(level.awe_teamplay)) // Check if we are marking a camper and it's team play
{
// Set up the headicon
headicon = "headicon_" + self.pers["team"];
if(self.pers["team"] == "allies")
{
if(level.drawfriend) // if scr_drawfriend=1 show headicon to all
headiconteam = "none";
else // Show only to other team
headiconteam = "axis";
objective = "radio_allies"; // Use radio objective
objectiveteam = "axis"; // Show objective for other team
}
else
{
if(level.drawfriend) // if scr_drawfriend=1 show headicon to all
headiconteam = "none";
else
headiconteam = "allies"; // Show only to other team
objective = "radio_axis";
objectiveteam = "allies";
}
}
else
{
// Set up the headicon
headicon = "headicon_" + icon;
headiconteam = "none"; // Show for both teams
// Set up the objective
if (obj == "camper") // If a camper in DM use default objective
objective = "objective_default";
else
objective = "objective_" + obj;
objectiveteam = "none";
}
self.headiconteam = headiconteam;
// Mark player on compass
objnum = GetNextObjNum();
self.awe_objnum = objnum;
objective_add(objnum, "current", self.origin, game[objective]);
objective_team(objnum, objectiveteam);
if(time) // Time != 0
{
for(i=0;( i<time && isPlayer(self) && isAlive(self) );i++)
{
// Update objective 10 times/second
for(j=0;( j<10 && isPlayer(self) && isAlive(self) );j++)
{
// Flash objective and headicon for campers
if(j==5 && obj == "camper")
{
self.headicon = game["headicon_star"];
objective_icon(objnum, game["objective_default"]);
}
if(j==0 && obj == "camper")
{
self.headicon = game[headicon];
objective_icon(objnum, game[objective]);
}
// Move objective
objective_position(objnum, self.origin);
wait 0.05;
}
}
}
else // If no time, mark forever
{
while( isPlayer(self) && isAlive(self) )
{
// Update objective 10 times/second
for(j=0;( j<10 && isPlayer(self) && isAlive(self) );j++)
{
// Flash objective and headicon for campers
if(j==5 && obj == "camper")
{
self.headicon = game["headicon_star"];
objective_icon(objnum, game["objective_default"]);
}
if(j==0 && obj == "camper")
{
self.headicon = game[headicon];
objective_icon(objnum, game[objective]);
}
// Move objective
objective_position(objnum, self.origin);
wait 0.05;
}
}
}
if(isdefined(self.awe_objnum))
{
objective_delete(objnum);
self.awe_objnum = undefined;
}
self restoreHeadicon(game["headicon_star"]);
}
monitorme()
{
count = 0;
funcount=0;
while( isPlayer(self) && isAlive(self) && self.sessionstate=="playing" )
{
if(level.awe_nocrosshair)
self setClientCvar("cg_drawcrosshair", "0");
if( (isdefined(self.carryingmg42) && level.awe_mg42penalty) || (isdefined(self.carryingptrs41) && level.awe_ptrs41penalty) )
{
w1 = self getWeaponSlotWeapon("primary");
w2 = self getWeaponSlotWeapon("primaryb");
if( w1 != "none" )
self dropitem(w1);
if( w2 != "none" )
self dropitem(w2);
if( w1 != "none" || w2 != "none")
{
if(isdefined(self.carryingmg42))
self iprintlnbold("You cannot carry a primary weapon while carrying an MG42");
if(isdefined(self.carryingptrs41))
self iprintlnbold("You cannot carry a primary weapon while carrying a PTRS41");
}
}
// Calculate current speed
oldpos = self.origin;
wait 1; // Wait 2 seconds
newpos = self.origin;
speed = distance(oldpos,newpos);
/*
// Categorize speed
if (speed > 310)
self.awe_pace = 3;
else if (speed > 70)
self.awe_pace = 2;
else
*/
if (speed > 20)
self.awe_pace = 1;
else
self.awe_pace = 0;
if(level.awe_anticamptime && !isdefined(self.awe_camper))
{
// Check for campers
if(self.awe_pace == 0) {
count++;
} else {
count=0;
}
if(count>=level.awe_anticamptime)
{
self thread camper();
count=0;
}
}
// Mess with the poor camper
if(level.awe_anticampfun && isdefined(self.awe_camper))
{
if(funcount>=level.awe_anticampfun)
{
switch (randomInt(3))
{
// Scream
case 0:
self thread painsound();
break;
// Trip and drop weapon
case 1:
self thread spankme(1);
break;
// Shellshock for 5 seconds
case 2:
self shellshock("default", 5);
break;
default:
break;
}
funcount=0;
}
else
funcount++;
}
}
}
camper()
{
self.awe_camper=true;
// Use a punishment menthod instead of marking?
if(level.awe_anticampmethod)
{
self punishme(level.awe_anticampmethod, "camping");
self.awe_camper=undefined;
return;
}
if(isdefined(level.awe_teamplay)) // Check if it's team play
{
if(self.pers["team"] == "axis")
campingteam = "allies";
else
campingteam = "axis";
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(players[i] == self)
{
players[i] iprintlnbold("^3Du wirst fuer ^1" + level.awe_anticampmarktime + " ^3Sekunden auf dem Kompass markiert.");
}
else if(isdefined(players[i].pers["team"]) && players[i].pers["team"] == campingteam && players[i].sessionstate == "playing")
{
players[i] iprintlnbold(self.name + " ^3wird fuer ^1" + level.awe_anticampmarktime + " ^3Sekunden auf dem Kompass markiert.");
}
}
}
else // else announce to all
{
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(players[i] == self)
{
players[i] iprintlnbold("^3Du wirst fuer ^1" + level.awe_anticampmarktime + " ^3Sekunden auf dem Kompass markiert.");
}
else if(players[i].sessionstate == "playing")
{
players[i] iprintlnbold(self.name + " ^3wird fuer ^1" + level.awe_anticampmarktime + " ^3Sekunden auf dem Kompass markiert.");
}
}
}
// Set up timer
self.awe_camptimer = newClientHudElem(self);
self.awe_camptimer.archived = true;
self.awe_camptimer.x = 220;
self.awe_camptimer.y = 460;
self.awe_camptimer.alignX = "center";
self.awe_camptimer.alignY = "middle";
self.awe_camptimer.alpha = 1;
self.awe_camptimer.sort = -3;
self.awe_camptimer.font = "bigfixed";
self.awe_camptimer.color = (0,0,1);
self.awe_camptimer setTimer(level.awe_anticampmarktime - 1);
self markme("crosshair", "camper", level.awe_anticampmarktime);
// Destroy timer
self.awe_camptimer destroy();
if(isAlive(self))
self iprintlnbold(level.awe_anticampmsgsurvived);
else
self iprintlnbold(level.awe_anticampmsgdied);
self.awe_camper = undefined;
}
---
Nachtrag:
Hm, ok, die gametypes.gsc vom SWAT müssen wohl auch irgendwie angepasst werden... Hab´s mit der stdm.gsc versucht, hab einfach Zeile für Zeile durchgesehen, aber ich krieg dann dauernd ´nen script compile error in Zeile 786 und ich hab keinen Plan wieso, muss wohl irgendwie na diesen blöden {} liegen...
Siehe nächster Post, alles, bis wohin ich angepasst habe, hab ich eingefügt...
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269

|
|
main()
{
spawnpointname = "mp_teamdeathmatch_spawn";
spawnpoints = getentarray(spawnpointname, "classname");
if(!spawnpoints.size)
{
maps\mp\gametypes\_callbacksetup::AbortLevel();
return;
}
for(i = 0; i < spawnpoints.size; i++)
spawnpoints[i] placeSpawnpoint();
level.callbackStartGameType = ::Callback_StartGameType;
level.callbackPlayerConnect = ::Callback_PlayerConnect;
level.callbackPlayerDisconnect = ::Callback_PlayerDisconnect;
level.callbackPlayerDamage = ::Callback_PlayerDamage;
level.callbackPlayerKilled = ::Callback_PlayerKilled;
maps\mp\gametypes\_callbacksetup::SetupCallbacks();
allowed[0] = "dm";
maps\mp\gametypes\_gameobjects::main(allowed);
if(getCvar("scr_stdm_timelimit") == "") // Time limit per map
setCvar("scr_stdm_timelimit", "30");
else if(getCvarFloat("scr_stdm_timelimit") > 1440)
setCvar("scr_stdm_timelimit", "1440");
level.timelimit = getCvarFloat("scr_stdm_timelimit");
setCvar("ui_stdm_timelimit", level.timelimit);
makeCvarServerInfo("ui_stdm_timelimit", "30");
if(getCvar("scr_stdm_scorelimit") == "") // Score limit per map
setCvar("scr_stdm_scorelimit", "100");
level.scorelimit = getCvarInt("scr_stdm_scorelimit");
setCvar("ui_stdm_scorelimit", level.scorelimit);
makeCvarServerInfo("ui_stdm_scorelimit", "100");
if(getCvar("scr_forcerespawn") == "") // Force respawning
setCvar("scr_forcerespawn", "0");
if(getCvar("scr_teambalance") == "") // Auto Team Balancing
setCvar("scr_teambalance", "0");
level.teambalance = getCvarInt("scr_teambalance");
level.teambalancetimer = 0;
killcam = getCvar("scr_killcam");
if(killcam == "") // Kill cam
killcam = "1";
setCvar("scr_killcam", killcam, true);
level.killcam = getCvarInt("scr_killcam");
if(getCvar("scr_drawfriend") == "") // Draws a team icon over teammates
setCvar("scr_drawfriend", "0");
level.drawfriend = getCvarInt("scr_drawfriend");
if(!isDefined(game["state"]))
game["state"] = "playing";
level.currentTearGasLocations = [];
level.mapended = false;
level.healthqueue = [];
level.healthqueuecurrent = 0;
level.team["allies"] = 0;
level.team["axis"] = 0;
if(level.killcam >= 1)
setarchive(true);
}
Callback_StartGameType()
{
////////////// Added by AWE ///////////
maps\mp\gametypes\_awe::Callback_StartGameType();
///////////////////////////////////////
// defaults if not defined in level script
if(!isDefined(game["allies"]))
game["allies"] = "swat";
if(!isDefined(game["axis"]))
game["axis"] = "criminal";
if(!isDefined(game["layoutimage"]))
game["layoutimage"] = "default";
layoutname = "levelshots/layouts/hud@layout_" + game["layoutimage"];
precacheShader(layoutname);
//added flashlight
level maps\mp\gametypes\_client::precacheFlashLight();
level maps\mp\gametypes\_client::precacheNightVision();
level maps\mp\gametypes\_client::precacheFlashbang();
level maps\mp\gametypes\_client::precacheTeargas();
level maps\mp\gametypes\_client::precacheAdren();
level maps\mp\gametypes\_swsprint::precacheSprint();
setCvar("scr_layoutimage", layoutname);
makeCvarServerInfo("scr_layoutimage", "");
// server cvar overrides
if(getCvar("scr_allies") != "")
game["allies"] = getCvar("scr_allies");
if(getCvar("scr_axis") != "")
game["axis"] = getCvar("scr_axis");
game["menu_serverinfo"] = "serverinfo_" + getCvar("g_gametype");
game["menu_team"] = "team_" + game["allies"] + game["axis"];
game["menu_weapon_allies"] = "weapon_" + game["allies"];
game["menu_weapon_axis"] = "weapon_" + game["axis"];
game["menu_viewmap"] = "viewmap";
game["menu_callvote"] = "callvote";
game["menu_quickcommands"] = "quickcommands";
game["menu_quickstatements"] = "quickstatements";
game["menu_quickresponses"] = "quickresponses";
precacheString(&"MPSCRIPT_PRESS_ACTIVATE_TO_RESPAWN");
precacheString(&"MPSCRIPT_KILLCAM");
precacheMenu(game["menu_serverinfo"]);
precacheMenu(game["menu_team"]);
precacheMenu(game["menu_weapon_allies"]);
precacheMenu(game["menu_weapon_axis"]);
precacheMenu(game["menu_viewmap"]);
precacheMenu(game["menu_callvote"]);
precacheMenu(game["menu_quickcommands"]);
precacheMenu(game["menu_quickstatements"]);
precacheMenu(game["menu_quickresponses"]);
precacheShader("black");
precacheShader("hudScoreboard_mp");
precacheShader("gfx/hud/hud@mpflag_spectator.tga");
precacheStatusIcon("gfx/hud/hud@status_dead.tga");
precacheStatusIcon("gfx/hud/hud@status_connecting.tga");
precacheItem("item_health");
maps\mp\gametypes\_teams::modeltype();
maps\mp\gametypes\_teams::precache();
maps\mp\gametypes\_teams::scoreboard();
maps\mp\gametypes\_teams::initGlobalCvars();
maps\mp\gametypes\_teams::initWeaponCvars();
maps\mp\gametypes\_teams::restrictPlacedWeapons();
thread maps\mp\gametypes\_teams::updateGlobalCvars();
thread maps\mp\gametypes\_teams::updateWeaponCvars();
setClientNameMode("auto_change");
thread startGame();
thread updateGametypeCvars();
level thread maps\mp\gametypes\_client::Adrenaline_Think();
}
Callback_PlayerConnect()
{
self.statusicon = "gfx/hud/hud@status_connecting.tga";
self waittill("begin");
self.statusicon = "";
self.pers["teamTime"] = 1000000;
iprintln(&"MPSCRIPT_CONNECTED", self);
lpselfnum = self getEntityNumber();
lpGuid = self getGuid();
logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n");
if(game["state"] == "intermission")
{
spawnIntermission();
return;
}
level endon("intermission");
if(isDefined(self.pers["team"]) && self.pers["team"] != "spectator")
{
self setClientCvar("ui_weapontab", "1");
if(self.pers["team"] == "allies")
{
self.sessionteam = "allies";
self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
}
else
{
self.sessionteam = "axis";
self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
}
if(isDefined(self.pers["weapon"]))
spawnPlayer();
else
{
spawnSpectator();
if(self.pers["team"] == "allies")
self openMenu(game["menu_weapon_allies"]);
else
self openMenu(game["menu_weapon_axis"]);
}
}
else
{
self setClientCvar("g_scriptMainMenu", game["menu_team"]);
self setClientCvar("ui_weapontab", "0");
if(!isDefined(self.pers["skipserverinfo"]))
self openMenu(game["menu_serverinfo"]);
self.pers["team"] = "spectator";
self.sessionteam = "spectator";
spawnSpectator();
}
for(;;)
{
self waittill("menuresponse", menu, response);
if(menu == game["menu_serverinfo"] && response == "close")
{
self.pers["skipserverinfo"] = true;
self openMenu(game["menu_team"]);
}
if(response == "open" || response == "close")
continue;
if(menu == game["menu_team"])
{
//oraco
//turn off NV, then turn on again
//if ( (isdefined (level.NightVisionEnabled)) && (level.NightVisionEnabled) )
//{
//}
switch(response)
{
case "allies":
case "axis":
case "autoassign":
if(response == "autoassign")
{
numonteam["allies"] = 0;
numonteam["axis"] = 0;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
player = players[i];
if(!isDefined(player.pers["team"]) || player.pers["team"] == "spectator" || player == self)
continue;
numonteam[player.pers["team"]]++;
}
// if teams are equal return the team with the lowest score
if(numonteam["allies"] == numonteam["axis"])
{
if(getTeamScore("allies") == getTeamScore("axis"))
{
teams[0] = "allies";
teams[1] = "axis";
response = teams[randomInt(2)];
}
else if(getTeamScore("allies") < getTeamScore("axis"))
response = "allies";
else
response = "axis";
}
else if(numonteam["allies"] < numonteam["axis"])
response = "allies";
else
response = "axis";
skipbalancecheck = true;
}
if(response == self.pers["team"] && (self.sessionstate == "playing" || self.sessionstate == "dead"))
{
if(self.pers["team"] == "allies")
{
self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
self openMenu(game["menu_weapon_allies"]);
}
else
{
self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
self openMenu(game["menu_weapon_axis"]);
}
break;
}
//Check if the teams will become unbalanced when the player goes to this team...
//---------------------------------------------------------------------
---------
if ( (level.teambalance > 0) && (!isdefined (skipbalancecheck)) )
{
//Get a count of all players on Axis and Allies
players = maps\mp\gametypes\_teams::CountPlayers();
if (self.sessionteam != "spectator")
{
if (((players[response] + 1) - (players[self.pers["team"]] - 1)) > level.teambalance)
{
self iprintlnbold("Das fuehrt zu unausgeglichenen Teams!");
break;
}
}
else
{
if (response == "allies")
otherteam = "axis";
else
otherteam = "allies";
if (((players[response] + 1) - players[otherteam]) > level.teambalance)
{
self iprintlnbold("Das fuehrt zu unausgeglichenen Teams!");
break;
}
}
}
skipbalancecheck = undefined;
//---------------------------------------------------------------------
---------
if(response != self.pers["team"] && self.sessionstate == "playing")
self suicide();
self notify("end_respawn");
self.pers["team"] = response;
self.pers["teamTime"] = (gettime() / 1000);
self.pers["weapon"] = undefined;
self.pers["grenadetype"] = undefined;
self.pers["savedmodel"] = undefined;
self setClientCvar("ui_weapontab", "1");
if(self.pers["team"] == "allies")
{
self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
self openMenu(game["menu_weapon_allies"]);
}
else
{
self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
self openMenu(game["menu_weapon_axis"]);
}
break;
case "spectator":
if(self.pers["team"] != "spectator")
{
self.pers["team"] = "spectator";
self.pers["teamTime"] = 1000000;
self.pers["weapon"] = undefined;
self.pers["grenadetype"] = undefined;
self.pers["savedmodel"] = undefined;
self.sessionteam = "spectator";
self setClientCvar("g_scriptMainMenu", game["menu_team"]);
self setClientCvar("ui_weapontab", "0");
spawnSpectator();
}
break;
case "weapon":
if(self.pers["team"] == "allies")
self openMenu(game["menu_weapon_allies"]);
else if(self.pers["team"] == "axis")
self openMenu(game["menu_weapon_axis"]);
break;
case "viewmap":
self openMenu(game["menu_viewmap"]);
break;
case "callvote":
self openMenu(game["menu_callvote"]);
break;
}
}
else if(menu == game["menu_weapon_allies"] || menu == game["menu_weapon_axis"])
{
if(response == "team")
{
self openMenu(game["menu_team"]);
continue;
}
else if(response == "viewmap")
{
self openMenu(game["menu_viewmap"]);
continue;
}
else if(response == "callvote")
{
self openMenu(game["menu_callvote"]);
continue;
}
if(!isDefined(self.pers["team"]) || (self.pers["team"] != "allies" && self.pers["team"] != "axis"))
continue;
weapon = self maps\mp\gametypes\_teams::restrict(response);
if(weapon == "restricted")
{
self openMenu(menu);
continue;
}
if(isDefined(self.pers["weapon"]) && self.pers["weapon"] == weapon)
continue;
if (maps\mp\gametypes\_teams::isPistolOrGrenade(weapon))
{
self.pers["grenadetype"] = weapon;
continue;
}
if(!isDefined(self.pers["weapon"]))
{
self.pers["weapon"] = weapon;
spawnPlayer();
self thread printJoinedTeam(self.pers["team"]);
}
else
{
self.pers["weapon"] = weapon;
weaponname = maps\mp\gametypes\_teams::getWeaponName(self.pers["weapon"]);
if(maps\mp\gametypes\_teams::useAn(self.pers["weapon"]))
self iprintln(&"MPSCRIPT_YOU_WILL_RESPAWN_WITH_AN", weaponname);
else
self iprintln(&"MPSCRIPT_YOU_WILL_RESPAWN_WITH_A", weaponname);
}
if (isdefined (self.autobalance_notify))
self.autobalance_notify destroy();
}
else if(menu == game["menu_viewmap"])
{
switch(response)
{
case "team":
self openMenu(game["menu_team"]);
break;
case "weapon":
if(self.pers["team"] == "allies")
self openMenu(game["menu_weapon_allies"]);
else if(self.pers["team"] == "axis")
self openMenu(game["menu_weapon_axis"]);
break;
case "callvote":
self openMenu(game["menu_callvote"]);
break;
}
}
else if(menu == game["menu_callvote"])
{
switch(response)
{
case "team":
self openMenu(game["menu_team"]);
break;
case "weapon":
if(self.pers["team"] == "allies")
self openMenu(game["menu_weapon_allies"]);
else if(self.pers["team"] == "axis")
self openMenu(game["menu_weapon_axis"]);
break;
case "viewmap":
self openMenu(game["menu_viewmap"]);
break;
}
}
else if(menu == game["menu_quickcommands"])
maps\mp\gametypes\_teams::quickcommands(response);
else if(menu == game["menu_quickstatements"])
maps\mp\gametypes\_teams::quickstatements(response);
else if(menu == game["menu_quickresponses"])
maps\mp\gametypes\_teams::quickresponses(response);
}
}
Callback_PlayerDisconnect()
{
///// Added by AWE ////////
self maps\mp\gametypes\_awe::PlayerDisconnect();
///////////////////////////
iprintln(&"MPSCRIPT_DISCONNECTED", self);
lpselfnum = self getEntityNumber();
lpGuid = self getGuid();
logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n");
}
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269

|
|
Callback_PlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc)
{
if(self.sessionteam == "spectator")
return;
///// Added by AWE ////////
if(isdefined(self.awe_invulnerable))
return;
///////////////////////////
// Don't do knockback if the damage direction was not specified
if(!isDefined(vDir))
iDFlags |= level.iDFLAGS_NO_KNOCKBACK;
if ( (isdefined (sWeapon)) && (sWeapon == "flashbang_mp") )
{
//Flashbang went off...
self maps\mp\gametypes\_client::CheckFlashbang(vPoint);
return;
}
else if ( (isdefined (sWeapon)) && (sWeapon == "teargas_mp") )
{
//Teargas going off...
level thread maps\mp\gametypes\_client::teargas_discharge(vPoint);
return;
}
else
{
//check if the player was hurt by teargas...
for (i=0;i<level.currentTearGasLocations.size;i++)
{
if(isdefined(level.currentTearGasLocations[i]) && isdefined(vPoint))
{
if (vPoint == level.currentTearGasLocations[i])
self thread maps\mp\gametypes\_client::DoTearGas(self);
}
}
}
//ignoring falling damage
if(isdefined(level.nofalldamage) && level.nofalldamage && !isPlayer(eAttacker))
return;
if(isdefined(level.noselfdamage) && isPlayer(eAttacker) && self == eAttacker && level.noselfdamage)
return;
// check for completely getting out of the damage
if(!(iDFlags & level.iDFLAGS_NO_PROTECTION))
{
if(isPlayer(eAttacker) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"]))
{
if(level.friendlyfire == "0")
{
return;
}
else if(level.friendlyfire == "1" && !isdefined(eAttacker.pers["awe_teamkiller"]))
{
// Make sure at least one point of damage is done
if(iDamage < 1)
iDamage = 1;
eAttacker maps\mp\gametypes\_awe::teamdamage(self, iDamage);
self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
////////////// Added by AWE //////////////////
self maps\mp\gametypes\_awe::DoPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
//////////////////////////////////////////////
}
else if(level.friendlyfire == "2" || isdefined(eAttacker.pers["awe_teamkiller"]))
{
eAttacker.friendlydamage = true;
iDamage = iDamage * .5;
// Make sure at least one point of damage is done
if(iDamage < 1)
iDamage = 1;
eAttacker finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
eAttacker.friendlydamage = undefined;
friendly = true;
}
else if(level.friendlyfire == "3")
{
eAttacker.friendlydamage = true;
iDamage = iDamage * .5;
// Make sure at least one point of damage is done
if(iDamage < 1)
iDamage = 1;
self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
eAttacker finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
eAttacker.friendlydamage = undefined;
friendly = true;
}
}
else
{
// Make sure at least one point of damage is done
if(iDamage < 1)
iDamage = 1;
self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
////////////// Added by AWE //////////////////
self maps\mp\gametypes\_awe::DoPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
//////////////////////////////////////////////
}
}
// Do debug print if it's enabled
if(getCvarInt("g_debugDamage"))
{
println("client:" + self getEntityNumber() + " health:" + self.health +
" damage:" + iDamage + " hitLoc:" + sHitLoc);
}
if(self.sessionstate != "dead")
{
lpselfnum = self getEntityNumber();
lpselfname = self.name;
lpselfteam = self.pers["team"];
lpselfGuid = self getGuid();
lpattackerteam = "";
if(isPlayer(eAttacker))
{
lpattacknum = eAttacker getEntityNumber();
lpattackGuid = eAttacker getGuid();
lpattackname = eAttacker.name;
lpattackerteam = eAttacker.pers["team"];
}
else
{
lpattacknum = -1;
lpattackGuid = "";
lpattackname = "";
lpattackerteam = "world";
}
if(isDefined(friendly))
{
lpattacknum = lpselfnum;
lpattackname = lpselfname;
lpattackGuid = lpselfGuid;
}
logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
}
}
Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc)
{
self endon("spawned");
if(self.sessionteam == "spectator")
return;
/////////// Added by AWE ///////////
self thread maps\mp\gametypes\_awe::PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
////////////////////////////////////
// If the player was killed by a head shot, let players know it was a head shot kill
if(sHitLoc == "head" && sMeansOfDeath != "MOD_MELEE")
sMeansOfDeath = "MOD_HEAD_SHOT";
// send out an obituary message to all clients about the kill
obituary(self, attacker, sWeapon, sMeansOfDeath);
self.sessionstate = "dead";
self.statusicon = "gfx/hud/hud@status_dead.tga";
self.headicon = "";
if (!isdefined (self.autobalance))
self.deaths++;
//if (attacker != self)
// self.score--;
lpselfnum = self getEntityNumber();
lpselfname = self.name;
lpselfguid = self getGuid();
lpselfteam = self.pers["team"];
lpattackerteam = "";
level thread maps\mp\gametypes\_client::RemoveFlashBang(self, 1);
attackerNum = -1;
if(isPlayer(attacker))
{
if(attacker == self) // killed himself
{
doKillcam = false;
if (!isdefined (self.autobalance))
{
attacker.score--;
self playSound("swat_toobad");
}
if(isDefined(attacker.friendlydamage))
clientAnnouncement(attacker, &"MPSCRIPT_FRIENDLY_FIRE_WILL_NOT");
}
else
{
attackerNum = attacker getEntityNumber();
doKillcam = true;
if(self.pers["team"] == attacker.pers["team"]) // killed by a friendly
attacker.score--;
attacker maps\mp\gametypes\_awe::teamkill();
}
else
{
attacker.score++;
teamscore = getTeamScore(attacker.pers["team"]);
teamscore++;
setTeamScore(attacker.pers["team"], teamscore);
checkScoreLimit();
}
}
lpattacknum = attacker getEntityNumber();
lpattackguid = attacker getGuid();
lpattackname = attacker.name;
lpattackerteam = attacker.pers["team"];
}
else // If you weren't killed by a player, you were in the wrong place at the wrong time
{
doKillcam = false;
self playSound("swat_toobad");
self.score--;
lpattacknum = -1;
lpattackname = "";
lpattackguid = "";
lpattackerteam = "world";
}
logPrint("K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
//========= place icon for best and worst player
headornot = getCvarInt("swat_headmark");
if(isdefined(headornot) && headornot != 0)
{
gameplayers = getentarray("player", "classname");
bestplayer = gameplayers[0];
worstplayer = gameplayers[0];
for(i = 0; i < gameplayers.size; i++)
{
checkplayer = gameplayers[i];
checkplayer.headicon = "";
//get highest score
if(bestplayer.score < checkplayer.score)
bestplayer = checkplayer;
//get lowest score
if(worstplayer.score > checkplayer.score)
worstplayer = checkplayer;
}
worstplayer.headicon = game["headicon_worst"];
bestplayer.headicon = game["headicon_best"];
}
//--------------- end
//--------------- remove adrenaline effect
if(isdefined(self.adren_on))
self.adren_on = false;
// Stop thread if map ended on this death
if(level.mapended)
return;
// Make the player drop his weapon
self dropItem(self getcurrentweapon());
// Make the player drop health
self dropHealth();
self.autobalance = undefined;
body = self cloneplayer();
delay = 2; // Delay the player becoming a spectator till after he's done dying
wait delay; // ?? Also required for Callback_PlayerKilled to complete before respawn/killcam can execute
if((getCvarInt("scr_killcam") <= 0) || (getCvarInt("scr_forcerespawn") > 0))
doKillcam = false;
if(doKillcam)
self thread killcam(attackerNum, delay);
else
self thread respawn();
}
spawnPlayer()
{
self notify("spawned");
self notify("end_respawn");
resettimeout();
level thread maps\mp\gametypes\_client::RemoveFlashBang(self);
level thread maps\mp\gametypes\_client::RemoveTearGas_Slow(self);
self.sessionteam = self.pers["team"];
self.sessionstate = "playing";
self.spectatorclient = -1;
self.archivetime = 0;
self.friendlydamage = undefined;
spawnpointname = "mp_teamdeathmatch_spawn";
spawnpoints = getentarray(spawnpointname, "classname");
spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(spawnpoints);
if(isDefined(spawnpoint))
self spawn(spawnpoint.origin, spawnpoint.angles);
else
maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
self.statusicon = "";
self.maxhealth = 100;
self.health = self.maxhealth;
if(!isDefined(self.pers["savedmodel"]))
maps\mp\gametypes\_teams::model();
else
maps\mp\_utility::loadModel(self.pers["savedmodel"]);
maps\mp\gametypes\_teams::givePistol();
maps\mp\gametypes\_teams::giveGrenades(self.pers["weapon"]);
self giveWeapon(self.pers["weapon"]);
self giveMaxAmmo(self.pers["weapon"]);
self setSpawnWeapon(self.pers["weapon"]);
maps\mp\gametypes\_teams::givePistol();
if(self.pers["team"] == "allies")
self setClientCvar("cg_objectiveText", "^7Schalte die ^1KRIMINELLEN ^7aus...");
else if(self.pers["team"] == "axis")
self setClientCvar("cg_objectiveText", "^7Schalte das ^4SWAT-TEAM ^7aus...");
if(level.drawfriend)
{
if(self.pers["team"] == "allies")
{
self.headicon = game["headicon_allies"];
self.headiconteam = "allies";
}
else
{
self.headicon = game["headicon_axis"];
self.headiconteam = "axis";
}
}
self thread maps\mp\gametypes\_swsprint::MonitorSprint(self);
self thread maps\mp\gametypes\_client::NightVision_Think(self);
self thread maps\mp\gametypes\_client::FlashLight_Think(self);
self thread maps\mp\gametypes\_client::GammaReset_Think(self);
//////////// Added by AWE ////////
self maps\mp\gametypes\_awe::spawnPlayer();
///////////////////////////////////
}
}
spawnSpectator(origin, angles)
--- ab hier gings genauso weiter wie in der tdm.gsc des AWE MODs... ---
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
Kelli
... sehr viel alleine
 
Dabei seit: 09.11.2006
Beiträge: 2.504

|
|
Original von yoda
Das ist das, was ich bisher aus dem AWE (Version 1.4.2, weil da nicht so viele Features eingebaut sind) rausgefilter habe, genauer gesagt aus der _awe.gsc... Hab auch versucht, die SWAT-Gametypes einzubauen, AWE muss die ja erkennen und auch wissen, daß das Team-Play-Modis sind...
Ich würde es nicht aus AWE raus puhlen wenn du es Stand-Alone machen möchtest. Da sind einfach zuviel Abhängigkeiten. z.B. die Funktion Punishme() mit der der Camper dann bestraft wird, das Markieren auf dem Kompass, die Bibliotheken um es aus der cfg rauszuparsen etc..
Interessant ist der Teil:
// Calculate current speed
oldpos = self.origin;
wait 1; // Wait 2 seconds
newpos = self.origin;
speed = distance(oldpos,newpos);
[/code]
Wo ist der Spieler jetzt? Wo ist der Spieler eine Sekunde später? Hat er sich in einem Radius X nach Zeit t bewegt? Und das geht komplett Serverseitig.
Für CoD2 ist dieser Schnipsel unter http://www.iwnation.com/Forums/index.php...ndpost&p=247991
von Wanna Ganoush zu finden:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
campingtracker()
{
self endon("killed_player");
self endon("disconnect");
level endon("intermission");
ticks = 0;
static = 1;
critradius = 10; // critical distance in feet
critseconds = 25; // critical seconds to define a camper
for(;;)
{
startloc = self getplayerorigin();
static = 1;
while(static)
{
wait 1;
curloc = self getplayerorigin();
if(distance(startloc,curloc) < 12*critradius)
ticks ++;
else
{
static = 0;
ticks = 0;
}
if(ticks > critseconds)
{
iprintlnbold("Hey " + self.name + " is a camper!");
self suicide();
}
}
wait 1;
}
}
|
|
Wenn getplayerorigin, self suicide(), level endon() und self endon() auch in CoD1 verfügbar sind sollte das schon reichen. Später kann man dann den Teil nachbauen der die Variablen critradius und critseconds aus der cfg ausliest, die Strafe variieren oder bei verschiedenen Gametypen anders reagiert (z.B. bei S&D keinen Camperschutz)
Ich bin nur auch kein Moder, ich mach das immer nach der Try n Success Methode. Aber hier gibt es doch ein paar Freaks oder?
__________________ „ Allah ist Groß, und wir sind armselige Tröpfe mit unseren ganzen Wissenschaften Herrlichkeit.“
Dieser Beitrag wurde 420 mal editiert, zum letzten Mal von der Bundesregierung Niemand: Heute, 11:42.
https://kkde.de/scum/
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269

|
|
Harry, Du meinst glaub ich das hier: AntiCamper Tool für AWE Mod?? - das ist aber in Verbindung mit dem AWE gewesen
Danke, Kellerkind, aber das sagt mir ehrlich gesagt gar nix...
Ich hab mich bisher an den Abhängigkeiten entlang gehangelt, um überhaupt erst mal zu kapieren, was wie zusammen hängt... aber was genau was auslöst, da steig ich auch nicht ganz hinter...
Wenn ich es irgendwie hinkriegen würde, die gamtype-gsc´s anzupassen, wär ich schon weiter - der AWE läuft an sich, wenn ich den Spiel-Modus TDM zum Beispiel im SWAT-MOD starte...
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
 |
Kelli
... sehr viel alleine
 
Dabei seit: 09.11.2006
Beiträge: 2.504

|
|
Original von yoda
[...]- der AWE läuft an sich, wenn ich den Spiel-Modus TDM zum Beispiel im SWAT-MOD starte...
Wie hast du das gemacht? Und woran erkennst du das er läuft? Ich hab jetzt aus langweile mal folgendes probiert:
awe_1.4.3
die wcanka_awe_v1.4.2.pk3 entpackt.
aus dem Ordner maps/mp/gametypes der swat10.pk3 *.* rauskopiert und mit in die wcanka_awe_v1.4.2/maps/mp/gametypes hinein.
die neue wcanka_awe_v1.4.2.pk3/maps/mp/gametypes/sdm.gsc geöffnet und die Aufrufe der awe Funktionen hinzugefügt:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
$ diff.exe sdm.gsc sdm.gsc.awe
121a122,125
> ////////// Added by AWE ///////////////
> maps\mp\gametypes\_awe::Callback_StartGameType();
> ///////////////////////////////////////
>
427a432,435
> ///// Added by AWE ////////
> self maps\mp\gametypes\_awe::PlayerDisconnect();
> ///////////////////////////
>
438a447,451
>
> ///// Added by AWE ////////
> if(isdefined(self.awe_invulnerable))
> return;
> ///////////////////////////
487a501,504
> ////////////// Added by AWE //////////////////
> self maps\mp\gametypes\_awe::DoPlayerDamage(eInflictor, eAttacker, iDama
ge, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc);
> //////////////////////////////////////////////
>
520a538,540
> /////////// Added by AWE ///////////
> self thread maps\mp\gametypes\_awe::PlayerKilled(eInflictor, attacker, i
Damage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
> ////////////////////////////////////
702a723,725
> ////////////// Added by AWE /////////////////
> self maps\mp\gametypes\_awe::spawnPlayer();
> /////////////////////////////////////////////
Kellerkind@FEDORAXPS /cygdrive/f/Download/awe_1.4.2
$
|
|
Alles neu gepackt in zzz_swat-awe.pk3 und hochgeladen in den swat-modordner. Resultat: der Server stürzt kommentarlos bei sdm oder [unsupportet]dm ab, die ungeänderten gametypen shm laufen, aber natürlich ohne awe Feature. Was hast du denn geändert das normales dm mit awe läuft?
__________________ „ Allah ist Groß, und wir sind armselige Tröpfe mit unseren ganzen Wissenschaften Herrlichkeit.“
Dieser Beitrag wurde 420 mal editiert, zum letzten Mal von der Bundesregierung Niemand: Heute, 11:42.
https://kkde.de/scum/
|
|
|
|
|
|
|
 |
Impressum ||Datenschutzerklärung
|