Request Timelimit

#1
Salutari, am si eu cateva probleme cu server-ul de CSGO; am ceva experienta pe AMXX dar pe SM sunt destul de noob.

1. Atunci cand nu este niciun player pe server TIMELIMIT ramane blocat (Server is hibernating) si abia cand intra un jucator timpul se scurge pentru a putea schimba mapa; eu vreau sa fie posibil si fara niciun player pe server (mp_timelimit si mp_roundtime sunt setate pe 25 deoarece este Surf+Respawn)
2. Am incercat cu mai multe cvar-uri, dar dintr-un motiv anume playerii se mai blocheaza atunci cand fac surf. cvar-urile folosite

mp_roundtime 25
mp_timelimit 25
sv_enablebunnyhopping 1
sv_autobunnyhopping 1
sv_maxvelocity 3500
sv_gravity 800
sv_accelerate 5.5
sv_airaccelerate 800
sv_falldamage_scale 0
mp_freezetime 0
mp_autoteambalance 0
mp_buytime 999999
mp_solid_teammates 0
mp_maxrounds 100
mp_warmuptime 0
sv_friction 4
mp_ignore_round_win_conditions 0

Re: Request Timelimit

#2

Code: Select all

sv_hibernate_ms 					0
sv_hibernate_ms_vgui 				0
sv_hibernate_postgame_delay			0
sv_hibernate_when_empty 			0
nu stiu daca e necesar ca sa schimbi friction
tickrate-ul sa nu fie de 128 pt surf, max 102.4

Re: Request Timelimit

#3
Ilusion wrote:
Sat Jul 31, 2021 5:56 pm

Code: Select all

sv_hibernate_ms 					0
sv_hibernate_ms_vgui 				0
sv_hibernate_postgame_delay			0
sv_hibernate_when_empty 			0
nu stiu daca e necesar ca sa schimbi friction
tickrate-ul sa nu fie de 128 pt surf, max 102.4

Deci problema este in felul urmator, am cvar-urile setate asa ->


mp_roundtime 0
mp_timelimit 25
mp_ignore_round_win_conditions 1


Asta inseamna ca o mapa dureaza 25minute, dar daca ies si ramane server-ul gol, timer-ul se reseteaza si nu se mai schimba mapa, se deblocheaza abia cand intra alt player.

O sa incerc asa
public Action:CheckLeftTime(Handle:timer)
{
new Handle:hTmp;
hTmp = FindConVar("mp_timelimit");
new iTimeLimit = GetConVarInt(hTmp);
if (hTmp != INVALID_HANDLE)
CloseHandle(hTmp);
if (iTimeLimit > 0)
{
new timeleft;
GetMapTimeLeft(timeleft);

switch(timeleft)
{

case 1200: PrintToChatAll("Time Left: 20 minutes");
case 600: PrintToChatAll("Time Left: 10 minutes");
case 300: PrintToChatAll("Time Left: 5 minutes");
case 120: PrintToChatAll("Time Left: 2 minutes");
case 60: PrintToChatAll("Time Left: 60 seconds");
case 30: PrintToChatAll("Time Left: 30 seconds");
case 15: PrintToChatAll("Time Left: 15 seconds");
case -1: PrintToChatAll("3..");
case -2: PrintToChatAll("2..");
case -3: PrintToChatAll("1..");
}

if(timeleft < -3 && !g_bAllowRoundEnd)
{
g_bAllowRoundEnd = true;
CS_TerminateRound(0.5, CSRoundEnd_TerroristWin, true);
}
}
}

public Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)
{
g_bAllowRoundEnd = false;
return Plugin_Continue;
}

Re: Request Timelimit

#4
1. Code-ul de mai sus este okay pentru schimbatul hartii cand expira timpul, dar tot nu o sa rezolve problema atunci cand serverul e gol.

Pentru schimbatul hartii cand e serverul gol ai nevoie de setarile:

sv_hibernate_when_empty 0
mp_match_end_changelevel 1

2. Pentru problema cu blocatul in rampe cel mai bine treci serverul de pe 128 tick pe 102.4 cum a spus si Ilusion.
Recomand sa folosesti si urmatorul fix: https://github.com/GAMMACASE/MomSurfFix

Iar aici ai setarile de movement pe care le-am avut eu pe un server de skill surf:

// Movement
sv_autobunnyhopping 1
sv_enablebunnyhopping 1
sv_staminamax 0
sv_friction 5.2
sv_accelerate 6.5
sv_accelerate_use_weapon_speed 0
sv_airaccelerate 200
sv_maxvelocity 3500
sv_maxspeed 320
sv_clamp_unsafe_velocities 0
sv_timebetweenducks 0.0
sv_ledge_mantle_helper 0

Re: Request Timelimit

#6
Testat pe un server gol si se schimba harta fara probleme.
De mentionat ar fi ca hartile incep sa se schimbe doar dupa ce a intrat primul player de la pornirea serverului, altfel timeleft-ul este infinit.

Code: Select all

#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

public void OnConfigsExecuted()
{
	CS_TerminateRound(0.1, CSRoundEnd_GameStart, true);
	CreateTimer(1.0, Timer_Timecheck, _, TIMER_REPEAT);
}

public Action Timer_Timecheck(Handle timer)
{
	int timeleft;
	GetMapTimeLeft(timeleft);
	
	if (timeleft < 0)
	{
		bool winner = GetTeamScore(2) > GetTeamScore(3);
		CS_TerminateRound(0.1, winner ? CSRoundEnd_TerroristWin:CSRoundEnd_CTWin);	
		return Plugin_Stop;
	}
	return Plugin_Continue;
}

public Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason)
{
	if (reason == CSRoundEnd_GameStart)
	{
		return Plugin_Handled;
	}
	return Plugin_Continue;
}
Aici sunt setarile pe care le-am folosit cand am testat:
// Rounds
mp_timelimit 30
mp_maxrounds 0
mp_roundtime 1
mp_freezetime 0
mp_warmuptime 0
mp_do_warmup_period 0
mp_ignore_round_win_conditions 1
cron