Author Topic: suggestion for friendly fire+time respawn for negative score  (Read 2258 times)

Offline diehard_99

  • Rank: Private
  • *
  • Posts: 6
Hi, I would like to propose an idea and I also ask you to help implement the extreme version 2.3:)

I think it is a common problem

if you set friendly fire on a server there will certainly be the noob that ruin the game

the idea is penalized time of respawn of noob without removing friendly fire

the formula that I would like to implement and simple in the case of negative scoring respawn time gets longer for 10sec
point for each negative score


if score <0 then
respawn delay time = default delay + abs (score) * default delay
else
Respawn delay time = default
end if


how do I begin to implement this change?

I think we should change here but i'm not sure

ex. file ctfb.gsc row 1958

respawn_timer(delay)
{
   self endon("disconnect");

   self.WaitingToSpawn = true;

   if(level.respawndelay > 0)
   {
      if(!isdefined(self.respawntimer))
      {
         self.respawntimer = newClientHudElem(self);
         self.respawntimer.x = 0;
         self.respawntimer.y = -50;
         self.respawntimer.alignX = "center";
         self.respawntimer.alignY = "middle";
         self.respawntimer.horzAlign = "center_safearea";
         self.respawntimer.vertAlign = "center_safearea";
         self.respawntimer.alpha = 0;
         self.respawntimer.archived = false;
         self.respawntimer.font = "default";
         self.respawntimer.fontscale = 2;
         self.respawntimer.label = (&"MP_TIME_TILL_SPAWN");
         self.respawntimer setTimer (level.respawndelay + delay):
      }

      wait delay;
      self thread updateTimer();

      wait level.respawndelay;

      if(isdefined(self.respawntimer))
         self.respawntimer destroy();
   }

   self.WaitingToSpawn = undefined;
}


thanks:)

Offline PatmanSan

  • Administrator
  • Rank: Private
  • *****
  • Posts: 2527
Re: suggestion for friendly fire+time respawn for negative s
« Reply #1 on: July 21, 2009, 02:09:30 pm »
This feature involves modifying the game type scripts. For eXtreme+ v2.3 the game type scripts are in the client side iwd, so this will trigger a new mod download for all players. Maybe this is the right time to update to v2.5. It features respawn delay for all game types except DM, HM, LMS, LTS and SD.

You will have to replace the "respawn_timer" procedure in all game type scripts that support spawn delay.

For eXtreme+ v2.3 the game type scripts are in the "maps\mp\gametypes" folder of the client side iwd.

Code: [Select]
respawn_timer(delay)
{
self endon("disconnect");

if(!level.respawndelay) return;

self.WaitingToSpawn = true;

respawndelay = level.respawndelay;
if(self.score < 0)
{
delaymultiplier = self.score * (-1);
respawndelay += delaymultiplier * respawndelay;
}

if(!isdefined(self.respawntimer))
{
self.respawntimer = newClientHudElem(self);
self.respawntimer.x = 0;
self.respawntimer.y = -50;
self.respawntimer.alignX = "center";
self.respawntimer.alignY = "middle";
self.respawntimer.horzAlign = "center_safearea";
self.respawntimer.vertAlign = "center_safearea";
self.respawntimer.alpha = 0;
self.respawntimer.archived = false;
self.respawntimer.font = "default";
self.respawntimer.fontscale = 2;
self.respawntimer.label = (&"MP_TIME_TILL_SPAWN");
self.respawntimer setTimer(respawndelay + delay);
}

wait delay;
self thread updateTimer();

wait respawndelay;

if(isdefined(self.respawntimer))
self.respawntimer destroy();

self.WaitingToSpawn = undefined;
}

For eXtreme+ v2.5 the game type scripts are in the "maps\mp\gametypes" folder on the server. The new procedure is almost the same:

Code: [Select]
respawn_timer(delay)
{
self endon("disconnect");

self.WaitingToSpawn = true;

respawndelay = level.respawndelay;
if(self.score < 0)
{
delaymultiplier = self.score * (-1);
respawndelay += delaymultiplier * respawndelay;
}

if(!isdefined(self.respawntimer))
{
self.respawntimer = newClientHudElem(self);
self.respawntimer.x = 0;
self.respawntimer.y = -50;
self.respawntimer.alignX = "center";
self.respawntimer.alignY = "middle";
self.respawntimer.horzAlign = "center_safearea";
self.respawntimer.vertAlign = "center_safearea";
self.respawntimer.alpha = 0;
self.respawntimer.archived = false;
self.respawntimer.font = "default";
self.respawntimer.fontscale = 2;
self.respawntimer.label = (&"MP_TIME_TILL_SPAWN");
self.respawntimer setTimer(respawndelay + delay);
}

wait delay;
self thread updateTimer();

wait respawndelay;

if(isdefined(self.respawntimer))
self.respawntimer destroy();

self.WaitingToSpawn = undefined;
}

Offline diehard_99

  • Rank: Private
  • *
  • Posts: 6
Re: suggestion for friendly fire+time respawn for negative s
« Reply #2 on: July 27, 2009, 02:08:09 pm »
Thanks for the modification will be very useful :).

But thinking about it and quite easy to get around just reconnect to server :(

it would be possible to store array with (ip or guid)->score and redeployed to those who are connected?

together with the modification of respawn time would be deadly for the noobs ...

Offline diehard_99

  • Rank: Private
  • *
  • Posts: 6
Re: suggestion for friendly fire+time respawn for negative s
« Reply #3 on: July 30, 2009, 02:09:55 pm »
Hello, you think this idea of change can go?

file:  ctf.gsc  

row 294

Code: [Select]
Callback_PlayerDisconnect()
{
self dropFlag();


self extreme\_ex_clientcontrol::explayerdisconnect();

if(isdefined(self.pers["team"]))
{
if(self.pers["team"] == "allies")
setplayerteamrank(self, 0, 0);
else if(self.pers["team"] == "axis")
setplayerteamrank(self, 1, 0);
else if(self.pers["team"] == "spectator")
setplayerteamrank(self, 2, 0);
}

lpselfnum = self getEntityNumber();
lpGuid = self getGuid();

logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "
");

////////////  begin modify ///////////////////

playerScoreDisconnect(lpGuid) = self.score;

////////////  end modify  ///////////////////

}


row 217

Code: [Select]
Callback_PlayerConnect()
{
thread dummy();
thread extreme\_ex_clientcontrol::explayerconnect();

if(!level.ex_ranksystem) self.statusicon = "hud_status_connecting";
self waittill("begin");
self.statusicon = "";

level notify("connected", self);

thread extreme\_ex_clientcontrol::explayerjoinedserver();

lpselfnum = self getEntityNumber();
lpGuid = self getGuid();
logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "
");

////////////  begin modify ///////////////////

if(isDefined(self.pers["team"]) && self.pers["team"] != "spectator")
{

self.score = playerScoreDisconnect(lpGuid);
}

////////////  end modify  ///////////////////


self thread setServerInfoDvars();

if(game["state"] == "intermission")
{
extreme\_ex_spawn::spawnIntermission();
return;
}

level endon("intermission");

scriptMainMenu = game["menu_ingame"];

if(isDefined(self.pers["team"]) && self.pers["team"] != "spectator")
{
self setClientCvar("ui_allow_weaponchange", "1");

if(self.pers["team"] == "allies")
self.sessionteam = "allies";
else
self.sessionteam = "axis";

if(isDefined(self.pers["weapon"]))
spawnPlayer();
else
{
extreme\_ex_spawn::spawnspectator();

if(self.pers["team"] == "allies")
{
self openMenu(game["menu_weapon_allies"]);
scriptMainMenu = game["menu_weapon_allies"];
}
else
{
self openMenu(game["menu_weapon_axis"]);
scriptMainMenu = game["menu_weapon_axis"];
}
}
}
else
{
self setClientCvar("ui_allow_weaponchange", "0");

if(!level.xenon)
{
if(!isdefined(self.pers["skipserverinfo"]))
self openMenu(game["menu_serverinfo"]);
}
else
self openMenu(game["menu_team"]);

self.pers["team"] = "spectator";
self.sessionteam = "spectator";

extreme\_ex_spawn::spawnspectator();
}

self setClientCvar("g_scriptMainMenu", scriptMainMenu);
}

Offline PatmanSan

  • Administrator
  • Rank: Private
  • *****
  • Posts: 2527
Re: suggestion for friendly fire+time respawn for negative s
« Reply #4 on: July 30, 2009, 03:19:15 pm »
No, that won't work.
If players start to annoy you, kick them.

Offline diehard_99

  • Rank: Private
  • *
  • Posts: 6
Re: suggestion for friendly fire+time respawn for negative s
« Reply #5 on: July 31, 2009, 07:47:39 am »
Quote from: "PatmanSan";p="29260"
No, that won't work.
If players start to annoy you, kick them.

it's impossible to control 24h/24h the server....

sorry why don't work??

i miss declarative global array..this is the problem ??

the value of the guid is null when the client is cracked?

there is a method to know ip adress of player???

thx