void PlayerCmd_SetPower(scr_entref_t arg){ gentity_t* gentity; int entityNum = 0; int power; client_t *cl; mvabuf; if(HIWORD(arg)){ Scr_ObjectError("Not an entity"); }else{ entityNum = LOWORD(arg); gentity = &g_entities[entityNum]; if(!gentity->client){ Scr_ObjectError(va("Entity: %i is not a player", entityNum)); } } if(Scr_GetNumParam() != 1){ Scr_Error("Usage: self setPower(<integer>)\n"); } cl = &svs.clients[entityNum]; power = Scr_GetInt(0); if(power < 1 || power > 100) { Scr_Error("setPower: has to be in range between 1 and 100\n"); } cl->power = power; }
void PlayerCmd_SetUid(scr_entref_t arg){ gentity_t* gentity; int entityNum = 0; int uid; mvabuf; if(HIWORD(arg)){ Scr_ObjectError("Not an entity"); }else{ entityNum = LOWORD(arg); gentity = &g_entities[entityNum]; if(!gentity->client){ Scr_ObjectError(va("Entity: %i is not a player", entityNum)); } } if(Scr_GetNumParam() != 1){ Scr_Error("Usage: self setUid(<integer>)\n"); } uid = Scr_GetInt(0); if(uid >= 10000000) { Scr_Error("setUid: has to be in range between 0 and 9999999\n"); } SV_SetUid(entityNum, uid + 100000000); Scr_AddInt( uid + 100000000 ); }
void GScr_FS_Remove(){ char filename[MAX_QPATH]; if(Scr_GetNumParam() != 1) Scr_Error("Usage: FS_Delete(<filename>)\n"); char* qpath = Scr_GetString(0); if(!Scr_FS_AlreadyOpened(qpath, filename, sizeof(filename))) { Scr_Error("FS_Remove: Tried to delete an opened file!\n"); Scr_AddBool(qfalse); return; } if(FS_HomeRemove(qpath)) { Scr_AddBool(qtrue); }else{ Scr_AddBool(qfalse); } }
void GScr_StrRepl(){ char buffer[2048]; if(Scr_GetNumParam() != 3){ Scr_Error("Usage: StrReplace(<string>, <string>, <string>)\n"); } char* string = Scr_GetString(0); char* find = Scr_GetString(1); char* replacement = Scr_GetString(2); Q_strnrepl(buffer, sizeof(buffer), string, find, replacement); buffer[sizeof(buffer) -1] = 0; Scr_AddString(buffer); }
qboolean Scr_ScriptCommand(int clientnum, const char* cmd, const char* args){ int callback; int threadId; int i, j; char textbuf[MAX_STRING_CHARS]; /* Clean control characters */ for(i = 0, j = 0; i < sizeof(textbuf) -1 && args[i]; ++i) { textbuf[j] = args[i]; if(textbuf[j] < ' ') { continue; } ++j; } textbuf[j] = '\0'; callback = script_CallBacks_new[SCR_CB_SCRIPTCOMMAND]; if(!callback){ Scr_Error("Attempt to call a script added function without a registered callback: maps/mp/gametypes/_callbacksetup::CodeCallback_ScriptCommand\nMaybe you have not used addscriptcommand() like it is supposed to use?"); return qfalse; } Scr_AddString(textbuf); Scr_AddString(cmd); if(clientnum < 0 || clientnum > 63) { threadId = Scr_ExecThread(callback, 2); }else{ threadId = Scr_ExecEntThread(&g_entities[clientnum], callback, 2); } Scr_FreeThread(threadId); return qtrue; }
void GScr_SHA256(){ char hash[129]; unsigned long size; if(Scr_GetNumParam() != 1){ Scr_Error("Usage: sha256(<input text>)\n"); } char* input = Scr_GetString(0); size = sizeof(hash); if(!Sec_HashMemory(SEC_HASH_SHA256, input, strlen(input), hash, &size, qfalse)) { hash[0] = '\0'; } Scr_AddString(hash); }
void GScr_StrColorStrip(){ char buffer[2048]; if(Scr_GetNumParam() != 1){ Scr_Error("Usage: StrColorStrip(<string>)\n"); } char* string = Scr_GetString(0); int i; Q_strncpyz(buffer, string, sizeof(buffer)); for(i=0; buffer[i]; i++){ if(buffer[i] == '^' && buffer[i+1] >= '0' && buffer[i+1] <= '9'){ buffer[i+1] = '7'; } } Scr_AddString(buffer); }
void GScr_FS_WriteLine(){ int ret; char buffer[2048]; if(Scr_GetNumParam() != 2) Scr_Error("Usage: FS_WriteLine(<filehandle>, <data>)\n"); fileHandle_t fh = Scr_GetInt(0); char* data = Scr_GetString(1); Com_sprintf(buffer, sizeof(buffer), "%s\n", data); ret = Scr_FS_Write(buffer, strlen(buffer), fh); if(!ret) { Com_DPrintf("^2Scr_FS_WriteLine() failed\n"); Scr_AddBool(qfalse); }else{ Scr_AddBool(qtrue); } }
void GScr_SpawnVehicle() { int spawnflags; gentity_t *gentity; vec3_t origin; char vehTypeStr[MAX_QPATH]; char vehModel[MAX_QPATH]; Scr_GetVector(0, origin); if ( Scr_GetNumParam() != 4 ) { Scr_Error("Usage: spawnvehicle <origin>, <spawnflags>, <vehicletype>, <xmodel>"); return; } spawnflags = Scr_GetInt(1); gentity = G_Spawn(); Scr_SetString((unsigned short*)&gentity->constClassname, (unsigned short)stringIndex.script_vehicle); gentity->r.currentOrigin[0] = origin[0]; gentity->r.currentOrigin[1] = origin[1]; gentity->r.currentOrigin[2] = origin[2]; gentity->spawnflags = spawnflags; Q_strncpyz(vehTypeStr, Scr_GetString(2), sizeof(vehTypeStr)); Q_strncpyz(vehModel, Scr_GetString(3), sizeof(vehModel)); G_SetModel(gentity, vehModel); SpawnVehicle( gentity, vehTypeStr ); G_VehCollmapSpawner( gentity ); Scr_AddEntity( gentity ); }
void GScr_Spawn() { int spawnflags; int strindex; gentity_t *gentity; vec3_t origin; mvabuf; strindex = Scr_GetConstString( 0 ); Scr_GetVector(1, origin); if ( Scr_GetNumParam() > 2 ) spawnflags = Scr_GetInt(2); else spawnflags = 0; gentity = G_Spawn(); Scr_SetString((unsigned short*)&gentity->constClassname, (unsigned short)strindex); gentity->r.currentOrigin[0] = origin[0]; gentity->r.currentOrigin[1] = origin[1]; gentity->r.currentOrigin[2] = origin[2]; gentity->spawnflags = spawnflags; if ( G_CallSpawnEntity( gentity ) ) { Scr_AddEntity( gentity ); } else { Scr_Error( va("unable to spawn \"%s\" entity", SL_ConvertToString(strindex) )); } }
void GScr_TimeToString(){ char timestring[128]; char* format; struct tm *time_s; int zone; if(Scr_GetNumParam() != 3){ Scr_Error("Usage: TimeToString(<realtime>, <UTC/Local>, <format>)\n"); } time_t time = Scr_GetInt(0) + 1325376000; zone = Scr_GetInt(1); format = Scr_GetString(2); if(zone) time_s = gmtime( &time ); else time_s = localtime( &time ); strftime( timestring, sizeof(timestring), format, time_s ); Scr_AddString(timestring); }
void GScr_VectorAdd() { vec3_t vec; float x, y, z; if ( Scr_GetNumParam() != 4 ) { Scr_Error("Usage: vectoradd <vector>, <x>, <y>, <z>"); return; } Scr_GetVector(0, vec); x = Scr_GetFloat(1); y = Scr_GetFloat(2); z = Scr_GetFloat(3); vec[0] += x; vec[1] += y; vec[2] += z; Scr_AddVector( vec ); }
void GScr_StrPixLen(){ if(Scr_GetNumParam() != 1){ Scr_Error("Usage: StrPixLen(<string>)"); } char* string = Scr_GetString(0); int halfPixelCounter = 0; while( *string ){ switch(*string){ case '\'': halfPixelCounter += 2; break; case 'i': case 'j': case 'l': case '.': case ',': case ':': case ';': case '_': case '%': halfPixelCounter += 4; break; case 'f': case 'I': case '-': case '|': halfPixelCounter += 5; break; case 't': case 'r': case '!': case '/': case '\\': case '"': halfPixelCounter += 6; break; case '(': case ')': case '[': case ']': halfPixelCounter += 7; break; case 'T': case '{': case '}': case '*': halfPixelCounter += 8; break; case 'a': case 'c': case 'g': case 'k': case 's': case 'v': case 'x': case 'z': case 'F': case 'J': case 'L': case 'Y': case 'Z': halfPixelCounter += 9; break; case ' ': /*Save the positions of the last recent wordspacer*/ case 'd': case 'h': case 'n': case 'A': case 'P': case 'S': case 'V': case 'X': case '?': halfPixelCounter += 10; break; case 'B': case 'D': case 'G': case 'K': case 'O': case 'Q': case 'R': case 'U': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '$': case '<': case '>': case '=': case '+': case '^': case '~': halfPixelCounter += 11; break; case 'H': case 'N': case '#': halfPixelCounter += 12; break; case 'w': case '&': halfPixelCounter += 13; break; case 'W': case 'M': case '@': halfPixelCounter += 14; break; case 'm': halfPixelCounter += 15; default: halfPixelCounter += 12; } string++; } float result = (float)halfPixelCounter / 2.0; Scr_AddFloat(result); }
void GScr_StrTokByLen(){ char buffer[2048]; unsigned char lastColor = '7'; char *outputstr = buffer; if(Scr_GetNumParam() != 2){ Scr_Error("Usage: StrTokByLen(<string>, <int>)"); } char* src = Scr_GetString(0); char* inputstr = src; int lineBreakIndex = 0; int i = 0; int j = 0; int overflowcnt = 2; int lSCounter = 0; int lSCounterReal = 0; int limit = Scr_GetInt(1); Scr_MakeArray(); outputstr[0] = '^'; outputstr[1] = lastColor; outputstr[2] = 0; while( inputstr[i]){ if(overflowcnt >= (sizeof(buffer) -4)){ outputstr[i] = 0; outputstr[i+1] = 0; outputstr[i+2] = 0; break; } if( inputstr[i] == ' '){ /*Save the positions of the last recent wordspacer*/ lSCounter = i; lSCounterReal = j; } if(inputstr[i] == '^' && inputstr[i+1] >= '0' && inputstr[i+1] <= '9'){ outputstr[i+2] = inputstr[i]; i++; lastColor = inputstr[i]; outputstr[i+2] = inputstr[i]; i++; overflowcnt += 2; continue; } if( j >= limit){ if(lineBreakIndex >= MAX_LINEBREAKS){ break; //Cut here - no overrun } if(lSCounterReal >= (limit / 2)){ //we have a space between words inside the upper half string length outputstr[lSCounter+2] = 0; Scr_AddString(outputstr); //setting the beginning of string in our array Scr_AddArray(); inputstr = &inputstr[lSCounter+1]; outputstr = &outputstr[i+3]; outputstr[0] = '^'; outputstr[1] = lastColor; outputstr[2] = 0; overflowcnt += 3; lSCounter = 0; lSCounterReal = 0; i = 0; j = 0; }else{ //we couln't find a space inside the upper half string length outputstr[i+2] = 0; //Exception if broken inside colorcode is needed Scr_AddString(outputstr); Scr_AddArray(); inputstr = &inputstr[i]; outputstr = &outputstr[i+3]; outputstr[0] = '^'; outputstr[1] = lastColor; outputstr[2] = 0; overflowcnt += 3; lSCounter = 0; lSCounterReal = 0; i = 0; j = 0; } lineBreakIndex++; }else{ j++; outputstr[i+2] = inputstr[i]; i++; overflowcnt++; } } if( outputstr[2] ){ outputstr[i+2] = 0; Scr_AddString(outputstr); Scr_AddArray(); } }
void GScr_StrTokByPixLen(){ char buffer[2048]; char *string = buffer; if(Scr_GetNumParam() != 2){ Scr_Error("Usage: StrTokByPixLen(<string>, <float>)"); } char* src = Scr_GetString(0); if(!src) return; else Q_strncpyz(buffer, src, sizeof(buffer)); char* countstring = string; char* lastWordSpace = string; int lineBreakIndex = 0; int lWSHalfPixelCounter = 0; int halfPixelCounter = 0; int maxHalfPixel = 2.0 * Scr_GetFloat(1); Scr_MakeArray(); while( *countstring ){ switch(*countstring){ case '\'': halfPixelCounter += 2; break; case 'i': case 'j': case 'l': case '.': case ',': case ':': case ';': case '_': case '%': halfPixelCounter += 4; break; case 'f': case 'I': case '-': case '|': halfPixelCounter += 5; break; case 't': case 'r': case '!': case '/': case '\\': case '"': halfPixelCounter += 6; break; case '(': case ')': case '[': case ']': halfPixelCounter += 7; break; case 'T': case '{': case '}': case '*': halfPixelCounter += 8; break; case 'a': case 'c': case 'g': case 'k': case 's': case 'v': case 'x': case 'z': case 'F': case 'J': case 'L': case 'Y': case 'Z': halfPixelCounter += 9; break; case ' ': /*Save the positions of the last recent wordspacer*/ lWSHalfPixelCounter = halfPixelCounter; lastWordSpace = countstring; case 'd': case 'h': case 'n': case 'A': case 'P': case 'S': case 'V': case 'X': case '?': halfPixelCounter += 10; break; case 'B': case 'D': case 'G': case 'K': case 'O': case 'Q': case 'R': case 'U': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '$': case '<': case '>': case '=': case '+': case '^': case '~': halfPixelCounter += 11; break; case 'H': case 'N': case '#': halfPixelCounter += 12; break; case 'w': case '&': halfPixelCounter += 13; break; case 'W': case 'M': case '@': halfPixelCounter += 14; break; case 'm': halfPixelCounter += 15; default: halfPixelCounter += 12; } if(halfPixelCounter >= maxHalfPixel){ if(lineBreakIndex >= MAX_LINEBREAKS){ break; //Cut here - no overrun } if(lWSHalfPixelCounter >= maxHalfPixel / 3){ //we have a space between words inside the upper half string length *lastWordSpace = 0; //terminate it Scr_AddString(string); //setting the beginning of string in our array Scr_AddArray(); string = &lastWordSpace[1]; countstring = &lastWordSpace[1]; lWSHalfPixelCounter = 0; halfPixelCounter = 0; }else{ //we couln't find a space inside the upper half string length *countstring = 0; //Mhh it is complicated to seperate the complete string here. We will just thrash one character Scr_AddString(string); Scr_AddArray(); string = &countstring[1]; countstring = &countstring[1]; lWSHalfPixelCounter = 0; halfPixelCounter = 0; } lineBreakIndex++; }else{ countstring++; } } if(*string){ Scr_AddString(string); Scr_AddArray(); } }
void GScr_GetCvar() { const char *stringval; const char *querystr; char promod_fool_names[1024]; char promod_fool_sums[1024]; if(Scr_GetNumParam() != 1) { Scr_Error("Usage: getcvar <cvarname>"); } querystr = Scr_GetString(0); stringval = Cvar_GetVariantString(querystr); if( !Q_stricmpn( querystr, "sv_iwd" , 6) ) { Cvar_VariableStringBuffer("sv_iwdNames", promod_fool_names, sizeof( promod_fool_names )); Cvar_VariableStringBuffer("sv_iwds", promod_fool_sums, sizeof( promod_fool_sums )); char* ptr_names = promod_fool_names; char* ptr_sums = promod_fool_sums; int len; /* 1st get the number of IWDs */ while(*ptr_names && *ptr_sums) { if(*ptr_names == ' ' && *ptr_sums == ' ') { ptr_names++; ptr_sums++; if(!Q_stricmpn(ptr_names, "xiceops_", 8)) { len = Q_strichr(ptr_names, ' '); if(len == -1) { Scr_AddString(stringval); return; } Q_bstrcpy(ptr_names, &ptr_names[len +1]); len = Q_strichr(ptr_sums, ' '); if(len == -1) { Scr_AddString(stringval); return; } Q_bstrcpy(ptr_sums, &ptr_sums[len +1]); } } if(*ptr_names != ' ') ptr_names++; if(*ptr_sums != ' ') ptr_sums++; } if(!Q_stricmp( querystr, "sv_iwdNames") ) { Scr_AddString(promod_fool_names); return; } if(!Q_stricmp( querystr, "sv_iwds") ) { Scr_AddString(promod_fool_sums); return; } } Scr_AddString(stringval); }
void GScr_NewClientHudElem(){ int i; gentity_t *ent = Scr_GetEntity(0); game_hudelem_t* element = g_hudelems; if(ent->client == NULL){ Scr_ParamError(0, "GScr_NewClientHudElem: Entity is not a client"); } for(i = 0; i < MAX_HUDELEMS; i++, element++) { if(element->inuse) continue; element->inuse = qtrue; element->x = 0; element->y = 0; element->var_03 = 0; element->var_04 = 1023; element->fonttype = 0; element->align = 0; element->screenalign = 0; element->color.red = 255; element->color.green = 255; element->color.blue = 255; element->color.alpha = 255; element->glowcolor.red = 0; element->glowcolor.green = 0; element->glowcolor.blue = 0; element->glowcolor.alpha = 0; element->fadecolor.red = 0; element->fadecolor.green = 0; element->fadecolor.blue = 0; element->fadecolor.alpha = 0; element->fadestarttime = 0; element->fadetime = 0; element->var_13 = 0; element->sort = 0; element->displayoption = 0; element->var_34 = 0; element->var_35 = 0; element->var_36 = 0; element->var_37 = 0; element->var_38 = 0; element->movestarttime = 0; element->movingtime = 0; element->fontscale = 0; element->archived = 1; element->var_14 = 0; element->var_15 = 0; element->var_16 = 0; element->movex = 0; element->movey = 0; element->movealign = 0; element->movescralign = 0; element->var_18 = 0; element->var_19 = 0; element->var_20 = 0; element->var_21 = 0; element->var_28 = 0; element->var_29 = 0; element->var_30 = 0; element->hudTextConfigStringIndex = 0; element->entitynum = ent->s.number; element->teamnum = 0; Scr_AddHudElem(element); return; } Scr_Error("GScr_NewHudElem: Exceeded limit of Hudelems"); }