mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-16 17:01:44 +00:00
qc: add a crossproduct builtin. because I can. and it saves having to remember the orders.
irc: fixed the irc plugin. again. properly this time. hopefully. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5013 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
0173e797aa
commit
da992db551
6 changed files with 90 additions and 20 deletions
|
@ -5597,6 +5597,8 @@ static struct {
|
|||
{"frameforname", PF_frameforname, 276},//void(float modidx, string framename) frameforname = #276 (FTE_CSQC_SKELETONOBJECTS)
|
||||
{"frameduration", PF_frameduration, 277},//void(float modidx, float framenum) frameduration = #277 (FTE_CSQC_SKELETONOBJECTS)
|
||||
|
||||
{"crossproduct", PF_crossproduct, 0},
|
||||
|
||||
#ifdef TERRAIN
|
||||
{"terrain_edit", PF_terrain_edit, 278},//void(float action, vector pos, float radius, float quant) terrain_edit = #278 (??FTE_TERRAIN_EDIT??)
|
||||
{"brush_get", PF_brush_get, 0},
|
||||
|
|
|
@ -2004,6 +2004,7 @@ static struct {
|
|||
{"vlen", PF_vlen, 9},
|
||||
{"vectoyaw", PF_vectoyaw, 10},
|
||||
{"vectoangles", PF_vectoangles, 11},
|
||||
{"crossproduct", PF_crossproduct, 0},
|
||||
{"random", PF_random, 12},
|
||||
{"localcmd", PF_localcmd, 13},
|
||||
{"cvar", PF_menu_cvar, 14},
|
||||
|
|
|
@ -4659,6 +4659,11 @@ void QCBUILTIN PF_vectorvectors (pubprogfuncs_t *prinst, struct globalvars_s *pr
|
|||
VectorVectors(world->g.v_forward, world->g.v_right, world->g.v_up);
|
||||
}
|
||||
|
||||
void QCBUILTIN PF_crossproduct (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
CrossProduct(G_VECTOR(OFS_PARM0), G_VECTOR(OFS_PARM1), G_VECTOR(OFS_RETURN));
|
||||
}
|
||||
|
||||
//Maths functions
|
||||
////////////////////////////////////////////////////
|
||||
/*
|
||||
|
|
|
@ -94,6 +94,7 @@ void QCBUILTIN PF_floor (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals
|
|||
void QCBUILTIN PF_ceil (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_anglemod (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_vectorvectors (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_crossproduct (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_Tokenize (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_tokenizebyseparator (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
void QCBUILTIN PF_tokenize_console (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals);
|
||||
|
|
|
@ -9982,6 +9982,8 @@ BuiltinList_t BuiltinList[] = { //nq qw h2 ebfs
|
|||
{"frameforname", PF_frameforname, 0, 0, 0, 276, D("float(float modidx, string framename)", "Looks up a framegroup from a model by name, avoiding the need for hardcoding. Returns -1 on error.")},// (FTE_CSQC_SKELETONOBJECTS)
|
||||
{"frameduration", PF_frameduration, 0, 0, 0, 277, D("float(float modidx, float framenum)", "Retrieves the duration (in seconds) of the specified framegroup.")},// (FTE_CSQC_SKELETONOBJECTS)
|
||||
|
||||
{"crossproduct", PF_crossproduct, 0, 0, 0, 0, D("#define dotproduct(v1,v2) ((vector)(v1)*(vector)(v2))\nvector(vector v1, vector v2)", "Small helper function to calculate the crossproduct of two vectors.")},
|
||||
|
||||
#ifdef TERRAIN
|
||||
{"terrain_edit", PF_terrain_edit, 0, 0, 0, 278, D("void(float action, optional vector pos, optional float radius, optional float quant, ...)", "Realtime terrain editing. Actions are the TEREDIT_ constants.")},// (??FTE_TERRAIN_EDIT??
|
||||
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#include <ctype.h>
|
||||
#include "../../engine/common/netinc.h"
|
||||
|
||||
#define handleisvalid(h) ((h)>=0)
|
||||
#define invalid_handle -1
|
||||
|
||||
enum tlsmode_e
|
||||
{
|
||||
TLS_OFF,
|
||||
|
@ -466,6 +469,7 @@ ircclient_t *IRC_Create(const char *server, const char *nick, const char *realna
|
|||
irc->connecting = true;
|
||||
irc->tlsmode = TLS_OFF;
|
||||
irc->quitting = false;
|
||||
irc->socket = invalid_handle;
|
||||
|
||||
Q_strlcpy(irc->server, server, sizeof(irc->server));
|
||||
|
||||
|
@ -512,7 +516,7 @@ qboolean IRC_Establish(ircclient_t *irc)
|
|||
if (!irc)
|
||||
return false;
|
||||
|
||||
if (irc->socket) //don't need to do anything.
|
||||
if (handleisvalid(irc->socket)) //don't need to do anything.
|
||||
return true;
|
||||
|
||||
//clear up any stale state
|
||||
|
@ -524,7 +528,7 @@ qboolean IRC_Establish(ircclient_t *irc)
|
|||
|
||||
//not yet blocking. So no frequent attempts please...
|
||||
//non blocking prevents connect from returning worthwhile sensible value.
|
||||
if ((qintptr_t)irc->socket < 0)
|
||||
if (!handleisvalid(irc->socket))
|
||||
{
|
||||
Con_Printf("IRC_OpenSocket: couldn't connect\n");
|
||||
return false;
|
||||
|
@ -535,7 +539,7 @@ qboolean IRC_Establish(ircclient_t *irc)
|
|||
if (pNet_SetTLSClient(irc->socket, irc->server) < 0)
|
||||
{
|
||||
pNet_Close(irc->socket);
|
||||
irc->socket = 0;
|
||||
irc->socket = invalid_handle;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -635,12 +639,15 @@ void IRC_PartChannelInternal(ircclient_t *irc, char *channelname)
|
|||
if (pwd)
|
||||
*pwd++ = 0;
|
||||
|
||||
if (*irc->autochannels)
|
||||
Q_strncatz(irc->autochannels, " ", sizeof(irc->autochannels));
|
||||
if (pwd)
|
||||
Q_strncatz(irc->autochannels, va("%s,%s", chan, pwd), sizeof(irc->autochannels));
|
||||
else
|
||||
Q_strncatz(irc->autochannels, va("%s", chan), sizeof(irc->autochannels));
|
||||
if (strcmp(chan, channelname))
|
||||
{
|
||||
if (*irc->autochannels)
|
||||
Q_strncatz(irc->autochannels, " ", sizeof(irc->autochannels));
|
||||
if (pwd)
|
||||
Q_strncatz(irc->autochannels, va("%s,%s", chan, pwd), sizeof(irc->autochannels));
|
||||
else
|
||||
Q_strncatz(irc->autochannels, va("%s", chan), sizeof(irc->autochannels));
|
||||
}
|
||||
}
|
||||
chan = strtok(NULL, " ");
|
||||
}
|
||||
|
@ -1174,7 +1181,7 @@ void numbered_command(int comm, char *msg, ircclient_t *irc) // move vars up 1 m
|
|||
{
|
||||
IRC_Printf(irc, DEFAULTCONSOLE, COLOURYELLOW "STARTTLS Failed: %s\n", casevar[3]);
|
||||
pNet_Close(irc->socket);
|
||||
irc->socket = 0;
|
||||
irc->socket = invalid_handle;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1606,7 +1613,7 @@ qintptr_t IRC_ConsoleLink(qintptr_t *args)
|
|||
|
||||
if (!strcmp(what, "reconnect"))
|
||||
{
|
||||
if (irc->socket)
|
||||
if (handleisvalid(irc->socket))
|
||||
IRC_Printf(irc, channel, "Already %s.\n", irc->connecting?"reconnecting":"connected");
|
||||
else if (IRC_Establish(irc))
|
||||
IRC_Printf(irc, channel, "Reconnecting...\n");
|
||||
|
@ -2236,7 +2243,7 @@ qintptr_t IRC_Frame(qintptr_t *args)
|
|||
for (ircclient = ircclients; ircclient; ircclient = ircclient->next)
|
||||
{
|
||||
int stat = IRC_CONTINUE;
|
||||
if (!ircclient->socket)
|
||||
if (!handleisvalid(ircclient->socket))
|
||||
continue; //this connection isn't enabled.
|
||||
while(stat == IRC_CONTINUE)
|
||||
{
|
||||
|
@ -2256,7 +2263,7 @@ qintptr_t IRC_Frame(qintptr_t *args)
|
|||
if (stat == IRC_KILL)
|
||||
{
|
||||
pNet_Close(ircclient->socket);
|
||||
ircclient->socket = 0;
|
||||
ircclient->socket = invalid_handle;
|
||||
IRC_Printf(ircclient, DEFAULTCONSOLE, "Disconnected from irc\n^[[Reconnect]\\act\\reconnect^]\n");
|
||||
break; //lazy
|
||||
}
|
||||
|
@ -2336,13 +2343,65 @@ void IRC_Command(ircclient_t *ircclient, char *dest)
|
|||
|
||||
IRC_WriteConfig();
|
||||
}
|
||||
else if (!strcmp(token+1, "info"))
|
||||
else if (!strcmp(token+1, "info") || !strcmp(token+1, "status"))
|
||||
{
|
||||
IRC_Printf(ircclient, dest, "to connect to a server: /connect SERVER \"#chan #chan2,chan2password\" NICK SERVERPASSWORD\n");
|
||||
IRC_Printf(ircclient, dest, "to disconnect from a server: /quit\n");
|
||||
IRC_Printf(ircclient, dest, "to join a channel: /join\n");
|
||||
IRC_Printf(ircclient, dest, "to leave a channel: /part\n");
|
||||
IRC_Printf(ircclient, dest, "note that servers and channels will be remembered\n");
|
||||
ircclient_t *e;
|
||||
struct ircice_s *ice;
|
||||
for (e = ircclients; e; e = e->next)
|
||||
{
|
||||
IRC_Printf(ircclient, dest, "SERVER: %s\n", e->server);
|
||||
if (e->connecting && handleisvalid(e->socket))
|
||||
IRC_Printf(ircclient, dest, "<CONNECTING>\n");
|
||||
else if (handleisvalid(e->socket))
|
||||
IRC_Printf(ircclient, dest, "<CONNECTED>\n");
|
||||
else
|
||||
IRC_Printf(ircclient, dest, "<DISCONNECTED>\n");
|
||||
if (e->quitting)
|
||||
IRC_Printf(ircclient, dest, "<QUITTING>\n");
|
||||
switch(e->tlsmode)
|
||||
{
|
||||
default:
|
||||
case TLS_OFF:
|
||||
IRC_Printf(ircclient, dest, "TLS: insecure\n");
|
||||
break;
|
||||
case TLS_INITIAL:
|
||||
IRC_Printf(ircclient, dest, "TLS: initial\n");
|
||||
break;
|
||||
case TLS_START:
|
||||
case TLS_STARTING:
|
||||
IRC_Printf(ircclient, dest, "TLS: upgrade\n");
|
||||
break;
|
||||
}
|
||||
IRC_Printf(ircclient, dest, "nick: %s\n", e->nick);
|
||||
IRC_Printf(ircclient, dest, "realname: %s\n", e->realname);
|
||||
IRC_Printf(ircclient, dest, "hostname: %s\n", e->hostname);
|
||||
IRC_Printf(ircclient, dest, "rejoin: %s\n", *e->autochannels?e->autochannels:"<no channels>");
|
||||
IRC_Printf(ircclient, dest, "default dest: %s\n", e->defaultdest);
|
||||
for (ice = e->ice; ice; ice = ice->next)
|
||||
{
|
||||
char *allowed=ice->allowed?" allowed":" not-allowed";
|
||||
char *accepted=ice->accepted?" accepted":" not-accepted";
|
||||
switch(ice->type)
|
||||
{
|
||||
default:
|
||||
case ICEP_INVALID:
|
||||
IRC_Printf(ircclient, dest, " <INVALID ICE>\n");
|
||||
break;
|
||||
case ICEP_QWSERVER:
|
||||
IRC_Printf(ircclient, dest, " server: \"%s\"%s%s\n", ice->peer, allowed, accepted);
|
||||
break;
|
||||
case ICEP_QWCLIENT:
|
||||
IRC_Printf(ircclient, dest, " client: \"%s\"%s%s\n", ice->peer, allowed, accepted);
|
||||
break;
|
||||
case ICEP_VOICE:
|
||||
IRC_Printf(ircclient, dest, " voice: \"%s\"%s%s\n", ice->peer, allowed, accepted);
|
||||
break;
|
||||
case ICEP_VIDEO:
|
||||
IRC_Printf(ircclient, dest, " voice: \"%s\"%s%s\n", ice->peer, allowed, accepted);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!ircclient)
|
||||
{
|
||||
|
@ -2518,7 +2577,7 @@ void IRC_Command(ircclient_t *ircclient, char *dest)
|
|||
{
|
||||
if (ircclient)
|
||||
{
|
||||
if (!ircclient->socket)
|
||||
if (!handleisvalid(ircclient->socket))
|
||||
IRC_Printf(ircclient, dest, "Connection was closed. use /reconnect\n");
|
||||
else if (ircclient->tlsmode == TLS_STARTING || ircclient->connecting)
|
||||
IRC_Printf(ircclient, dest, "Still connecting. Please wait.\n");
|
||||
|
|
Loading…
Reference in a new issue