News:

Come Chat with us live! Learn how HERE!

Main Menu

Lakitu7's Tremulous 1.1 QVM

Started by Lakitu7, May 24, 2007, 09:54:32 PM

SexyGhost

So... if i do !info It tells me about something? Lakitu7 You wanna try a nasty hack for meh? :P
on't forget to check out UVache's and Spikers server, [UVache] & {S}. We run multiple mods.
[size=18]QUACK![/size]

kevlarman

Quote from: PFB
Quote from: SexyGhostMark Decon: it requires a new cgame or a nasty hack
actually the nasty hack didn't work out too well.
Quote from: Asvarox link=topic=8622.msg169333#msg169333Ok let's plan it out. Asva, you are nub, go sit on rets, I will build, you two go feed like hell, you go pwn their asses, and everyone else camp in the hallway, roger?
the dretch bites.
-----
|..d| #
|.@.-##
-----

Paradox

How do the votes work? Are they percent of server, or percent of voters. If they were percent of voters, that would make sense, however percent of server is pretty much counting anyone who didnt vote as no.

∧OMG ENTROPY∧

Lakitu7

Percent of voters, after the time limit. It's only percent of the server if it ends early because such a large percentage of the server has voted yes (or no) that nothing the rest do would change it.

This is no change from the original behavior.


void CheckVote( void )
{
 int votePercentToPass=level.votePercentToPass;
 int voteYesPercent;

 if( level.voteExecuteTime && level.voteExecuteTime < level.time )
 {
   level.voteExecuteTime = 0;

   trap_SendConsoleCommand( EXEC_APPEND, va( "%s\n", level.voteString ) );
   if( !Q_stricmp( level.voteString, "map_restart" ) ||
       !Q_stricmpn( level.voteString, "map", 3 ) )
   {
     level.restarted = qtrue;
   }
 }

 if( !level.voteTime )
   return;

 voteYesPercent = (int)(100* (level.voteYes-level.voteNo)/(level.voteYes + level.voteNo));
 if( level.time - level.voteTime >= VOTE_TIME || ( level.voteYes + level.voteNo == level.numConnectedClients ) )
 {
   if( voteYesPercent> votePercentToPass || level.voteNo == 0 )
   {
     // execute the command, then remove the vote
     trap_SendServerCommand( -1, "print \"Vote passed\n\"" );
     level.voteExecuteTime = level.time + 3000;
   }
   else
   {
     // same behavior as a timeout
     trap_SendServerCommand( -1, "print \"Vote failed\n\"" );
   }
 }
 else
 {
   if( level.voteYes > (int)((double)level.numConnectedClients * ((double)votePercentToPass/100.0)) )
   {
     // execute the command, then remove the vote
     trap_SendServerCommand( -1, "print \"Vote passed\n\"" );
     level.voteExecuteTime = level.time + 3000;
   }
   else if( level.voteNo > (int)((double)level.numConnectedClients * ((double)(100.0-votePercentToPass)/100.0)) )
   {
     // same behavior as a timeout
     trap_SendServerCommand( -1, "print \"Vote failed\n\"" );
   }
   else
   {
     // still waiting for a majority
     return;
   }
 }

 level.voteTime = 0;
 trap_SetConfigstring( CS_VOTE_TIME, "" );
}


Paradox

I presume that votes only affect map, map_restart, and nextmap?

Because on sst the other day, no matter the number of voters, normal votes like kick, denybuild, and mute would always fail no matter the percentage.

∧OMG ENTROPY∧

Lakitu7

voteYesPercent = (int)(100* (level.voteYes-level.voteNo)/(level.voteYes + level.voteNo));

Sigh. I did test this a bunch with 4 clients. Just didn't on the 2 yes, 1 no case to make it fail. I'm an idiot.

Hang on while I recompile and reupload to all the places I mirror this because I'm a goddamned idiot. :(

Should be:
voteYesPercent = (int)(100* (level.voteYes)/(level.voteYes + level.voteNo)); because that's how percents work and I don't know what the hell I was thinking. :)

Lakitu7

Fixed, everywhere. Sigh. Sorry :(

The way it's supposed to (and now does) work:

g_suddenDeathVotePercent: Default 75.
Affects vote sudden_death ONLY


g_mapVotesPercent at 50 (the default), will have all votes behave completely as they used to. You can up the percentage if you like, which will change map, restart, and nextmap ONLY.

Lakitu7

In no particular order, things I plan on adding. This is as much for my own reference as for your notice. If any of you (Benmachine?) does some of the new feature/bugfix/porting/separation type items (the ones that aren't just 'put this existing patch in'), please send it my way so we don't do redundant work :).

Update to latest SVN (pain in the ass, but ultimately for the best)

/me (it's a few lines and it's fun. Why not?)

/itemgun (It's a few lines and if someone doesn't like it, they don't have to use it. Sure, why not?)

MaxPlayerCount (from R1Admin, allows you to have spec slots)

Reload refills at repeater/armo (also from R1Admin)

Some form of team balance function: Probably this will start with just a warning/notification and proceed from there with something more complicated later. It'd be nice to do something as complex as ET's options for this, but if I'm not that ambitious, I could do R1Admin's version without too much effort.

Option to lock teams after restart: Because in matches, locking teams often follows a restart, but if admin is slow, some newb joins beforehand. That can be circumvented with the use of nojoin warmup times though, so I may not do it if implementation turns out to be hard.

Team Customvote: A great idea from Benmachine. Teamvote version of custom votes for things like "Move to window room?" Yes/No

Benmachine's !Info: As soon as he finishes the cvar-reading version, it's in

Benmachine's anti spawnblock: This patch is a great idea too and I'm going to put it in

Flood Protection: Of some kind. But I still have to research this before I decide how to do it or which existing one to put in.

Disallow names that are just a number < 100 (Noone uses these but people that want to be hassles for inexperienced admins)

Ammend vote messages to say what percent is needed to pass (Because I made this vary, it should inform people so they know what's going on)

That "Your attacker had ___ HP" message. Will be optional because that can certainly be considered annoying.

!Slap: Maybe, if it's not too hard to separate and I can think of some reasonable ways to curb its abuse potential

SD Cvar: I might still finish it. It's not THAT far from being done and I'm probably better qualified to fix my version of it than anyone else is, at this point.

Undeference

QuoteUpdate to latest SVN (pain in the ass, but ultimately for the best)
I've done the important work for getting it to work without a cgame update
Quote/itemgun (It's a few lines and if someone doesn't like it, they don't have to use it. Sure, why not?)
That is dumb. The same thing happens when you use "/itemtoggle blaster", with the exception that "/itemgun" is non-standard and should be expected not to work.
QuoteMaxPlayerCount (from R1Admin, allows you to have spec slots)
g_maxGameClients
QuoteReload refills at repeater/armo (also from R1Admin)
?
Quote!Slap: Maybe, if it's not too hard to separate and I can think of some reasonable ways to curb its abuse potential
Considering "!slap" is meant for abuse and does nothing other than that, I take this to mean you are willing to add extra stuff, even if you don't like it, so long as you don't have to write the code. I want to see "/steal" and "/take" in your qvm...
Need help? Ask intelligently. Please share solutions you find.

Quote from: tuple on February 15, 2008, 11:54:10 PMThats what we need, helpful players, not more powerful admins.

benmachine

I think, to be honest, removing all the stuff you don't/might not want from the work I've done would be about as much trouble as adding the stuff you do, so I'm not going to bother giving you the patch I have already.
The new version of !info (which I suggest reading before you use, because I've added a lot of new stuff and there's a fair possibility I've done something nonsensical in there somewhere) is basically done and I'm going to upload it to the mercenariesguild patch tracker soonish.
It should apply easier now, though, because it doesn't need any cvars anymore (I removed g_info).
benmachine

Lakitu7

Quote from: Undeference
g_maxGameClients
Cool, work done for me.

Quote
Considering "!slap" is meant for abuse and does nothing other than that, I take this to mean you are willing to add extra stuff, even if you don't like it, so long as you don't have to write the code. I want to see "/steal" and "/take" in your qvm...
But it does have a use in unsticking players, and that's why I agree that it should be there in some form. Perhaps I will change it to a command to act on one's self. Your predicate is a silly attempt at trolling me, so  :roll:.


Quote from: benmachineI think, to be honest, removing all the stuff you don't/might not want from the work I've done would be about as much trouble as adding the stuff you do, so I'm not going to bother giving you the patch I have already.
Damn, I was hoping you'd been making separate patches. The world needs more separate patches. :(

QuoteThe new version of !info (which I suggest reading before you use, because I've added a lot of new stuff and there's a fair possibility I've done something nonsensical in there somewhere) is basically done and I'm going to upload it to the mercenariesguild patch tracker soonish.
It should apply easier now, though, because it doesn't need any cvars anymore (I removed g_info).
Cool, can't wait.

Risujin

Quote from: Undeference
Quote/itemgun (It's a few lines and if someone doesn't like it, they don't have to use it. Sure, why not?)
That is dumb. The same thing happens when you use "/itemtoggle blaster", with the exception that "/itemgun" is non-standard and should be expected not to work.
There is a subtle difference. Using itemtoggle multiple times will obviously toggle your weapons and itemgun doesn't. How many times do I have to explain that to you? This isn't even your anorexic VM we're talking about here, GTFO.

Quote
Quote!Slap: Maybe, if it's not too hard to separate and I can think of some reasonable ways to curb its abuse potential
Considering "!slap" is meant for abuse and does nothing other than that, I take this to mean you are willing to add extra stuff, even if you don't like it, so long as you don't have to write the code. I want to see "/steal" and "/take" in your qvm...
Face it, if you give an abusive admin power, they will ruin games. You don't need !slap to do this, you can use !putteam to strip a player of all equipment/class for instance or flat out !ban people you don't like. !slap allows responsible admins to give physical warnings, kill last-dretch-hiding-in-a-vent lamers, and generally vent anger.

As for /take and /steal, you fail at life.

kevlarman

Quote from: Risujin
Quote from: Undeference
Quote/itemgun (It's a few lines and if someone doesn't like it, they don't have to use it. Sure, why not?)
That is dumb. The same thing happens when you use "/itemtoggle blaster", with the exception that "/itemgun" is non-standard and should be expected not to work.
There is a subtle difference. Using itemtoggle multiple times will obviously toggle your weapons and itemgun doesn't. How many times do I have to explain that to you? This isn't even your anorexic VM we're talking about here, GTFO.
if you can't switch to your blaster, then what's the use of a command that switches to your weapon from your blaster? (and why add a command that isn't portable between servers when you can do the same thing with "itemact blaster;wait;itemtoggle blaster")

edit: btw glad to see your first action after your vacation is to flame someone.
Quote from: Asvarox link=topic=8622.msg169333#msg169333Ok let's plan it out. Asva, you are nub, go sit on rets, I will build, you two go feed like hell, you go pwn their asses, and everyone else camp in the hallway, roger?
the dretch bites.
-----
|..d| #
|.@.-##
-----

Warrior

QuoteI want to see "/steal" and "/take" in your qvm
Please don't add it. /share is better; keep it.

Btw, this is proving to the best QVM to the moment. (Even more when other QVMs keep being abandoned)
[glow=black,1,300]Warrior[/glow]

Warrior

I don't know why, but when using the last backport from tjw ( http://trem.tjw.org/backport/win32/tremulous.exe ), and running /devmap <map-name> on console, this qvm crashes Tremulous; the one from Avenger (and many other qvms) will display the famous BotFreeClient error. My actual workaround to test maps is to use one old backport that don't trigger such errors, or run tremded and after that start the client.
[glow=black,1,300]Warrior[/glow]

Lakitu7

Quote from: Warrior
Please don't add it. /share is better; keep it.
I'm not. Avenger is just being himself.  :roll:

Quote from: WarriorI don't know why, but when using the last backport from tjw ( http://trem.tjw.org/backport/win32/tremulous.exe ), and running /devmap <map-name> on console, this qvm crashes Tremulous; the one from Avenger (and many other qvms) will display the famous BotFreeClient error. My actual workaround to test maps is to use one old backport that don't trigger such errors, or run tremded and after that start the client.
Hrm, yeah, I don't know. I just tested it and it does happen on my copy too. Like you said yourself, it's because the qvm works with tjw's Tremded and running Tremulous.exe isn't that. I don't know why mine crashes instead of doing BotFreeClient, but since it's just a tradeoff between two different errors, I imagine it's not worth worrying about too much.

Undeference

Quote from: Lakitu7Your predicate is a silly attempt at trolling me
The point is that there is a double standard. In your opinion, "/share" and "/donate" are damaging to gameplay, but you are willing to have them because a lot of players want them. In your opinion, "!slap" is abusive, but you are willing to have it... why? (So people don't get stuck, which doesn't happen much? "!slap" wouldn't even help there most of the time.)

"/steal", "/take", "/share", and "/donate" are all examples of things you consider damaging to gameplay. You already have half of them, so why not the other half?

Quote from: Risujin
Face it, if you give an abusive admin power, they will ruin games. You don't need !slap to do this, you can use !putteam to strip a player of all equipment/class for instance or flat out !ban people you don't like. !slap allows responsible admins to give physical warnings, kill last-dretch-hiding-in-a-vent lamers, and generally vent anger.
Of course administrative powers can be abused. The difference between "!putteam" and "!slap" is that the former is meant for balancing teams and the latter is for throwing players around the map, doing a specified amount of damage to them.
Quite simply, if a player isn't willing to follow the rules or pay attention when an admin tells them something, they shouldn't be playing there.
Venting anger is not a valid reason for admin commands.

Quote from: RisujinAs for /take and /steal, you fail at life.
In case you didn't realize before, "/steal" is a joke. ("/take" is too, but not much more so than "/share" or "/donate".)
Need help? Ask intelligently. Please share solutions you find.

Quote from: tuple on February 15, 2008, 11:54:10 PMThats what we need, helpful players, not more powerful admins.

Lakitu7

I have opinions that are different than yours. Get over it.

Warrior

!warn would be more useful if its message could be translated. Some foreign players don't understand english (sic!) what turns that command into something unhelpful.
(In this case, would be cool to have some cvar like g_warnMessage (or any other name) that will print the specified message plus the nick of the warned player.)
(One more idea: having some cvar like g_slapRatio <percent number> we could limit the maximum damage caused by a !slap)

About for having both /take and /share I would approve a complete qvm, even if I won't enable /take; it is an extra choice though. (I should have said "don't replace /share" instead of "don't add /take" in my previous post)
(/share activated by default; /take don't)
[glow=black,1,300]Warrior[/glow]

Lakitu7

Update on people sticking together:
Kevlarman has confirmed to me that this is a known bug in tjw's anti warp. I'm going to remove that patch entirely tonight/tomorrow. In the meantime, set both g_maxWarp and g_skipCorrection to 0. I've been told that this occurs with both unlagged 0 AND unlagged 1, so remove it in all circumstances.

When I update I'll be sure to throw in a few things from the to-do list to give more incentive to update and say "sorry" for the problem, even though it's not really my bug :)

Risujin

Quote from: kevlarmanif you can't switch to your blaster, then what's the use of a command that switches to your weapon from your blaster? (and why add a command that isn't portable between servers when you can do the same thing with "itemact blaster;wait;itemtoggle blaster")
Because binds are specific to a gametype thus portable between that kind of server. When I play on a Balance server, I don't want to have to resort to that long hack thing that pulls out my blaster before pulling out my gun! Switching guns takes time.

Quote from: kevlarmanedit: btw glad to see your first action after your vacation is to flame someone.
My dear kevlarman,
1.) I am still on vacation
2.) I have made like 10 posts while on vacation that you apparently missed
3.) Shouldn't you be deleting Morx off the forum right now?

Warrior

QuoteSwitching guns takes time.
I recommend you create a bind.
[glow=black,1,300]Warrior[/glow]

kevlarman

Quote from: Risujin
3.) Shouldn't you be deleting Morx off the forum right now?
that's lava's job
Quote from: Asvarox link=topic=8622.msg169333#msg169333Ok let's plan it out. Asva, you are nub, go sit on rets, I will build, you two go feed like hell, you go pwn their asses, and everyone else camp in the hallway, roger?
the dretch bites.
-----
|..d| #
|.@.-##
-----

Risujin

Quote from: kevlarman
Quote from: Risujin
3.) Shouldn't you be deleting Morx off the forum right now?
that's lava's job
True, but he doesn't read the Mods forum on principle. :)

Lakitu7

Released version 4.10:
No more antiWarp and all the problems it caused
Added some more new features / minor changes to make up for the trouble :)

Removed tjw's antiwarp (too many problems, especially when unlagged is off)

added /me

added !info

added g_maxGameClients

added team customvotes

modified the "__ called a vote" console message to say what they called a vote for

modified vote messages to say what percent is needed to pass, if this percent != 50

added g_antiSpawnBlock (but disabled it by default for now)

Lakitu7

One more edit: Tonight/tomorrow, I'm going to add in a really simple flood protection mechanism courtesy of the old r1admin code, until someone writes something a bit better and more complex. If you really want that feature, wait for it. :)

Lakitu7

Bump to 4.15

Flood protection is in
Enjoy :)

benmachine

Quote from: Lakitu7added /me

added !info

added g_antiSpawnBlock (but disabled it by default for now)

^_^

Lakitu, why don't you include some info files with the package, like info-version or info-credits - it could really help to show how up-to-date the server was, and if developers wanted to know who to contact (or thank :P ) then they would be able to find out from the server.
I even went so far as to have my compilation script note the date, write it to an info file and zip it up into a vm-readme-files package, but you shouldn't need anything that dramatic (I mostly did it out of curiousity).
Of course, it might make distribution more difficult, and there's no guarantee people will actually use them, but it's worth considering.
benmachine

Paradox

Wow thanks, damn.

Its nice, and i will test it on sst tonight.

∧OMG ENTROPY∧

Paradox

Seems that IP bans from kick and ban dont work, as well as namelog bans, that is, banning a client who has disconnected from the server.

Also bans sometimes even bounce to other players.

∧OMG ENTROPY∧