goudewup Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 Hey allemaal, het leek mij wel handig om een topic te maken waar iedereen zijn handige zelfgemaakte functies deelt. Van daar dus dit topic. Laat ik maar beginnen: stock RespawnPlayer(playerid, modelid, Float:X, Float:Y, Float:Z, Float:A, wep1, amm1) { SetPlayerSkin(playerid, modelid); SetPlayerPos(playerid, X, Y, Z); SetPlayerFacingAngle(playerid, A); ResetPlayerWeapons(playerid); GivePlayerWeapon(playerid, wep1, amm1); } Laat een speler respawnen zonder dat OnPlayerDeath() en OnPlayerSpawn() worden geactiveerd. Reageren
Megadreams Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 Mijn RandomEx functie (je kan een minimum en een maximum getal invoeren): stock RandomEx(min_getal, max_getal) { new choosed = 0; new cgetal; for(new getal = 0; getal <= max_getal; getal++) { if(getal >= min_getal){ if(random(max_getal) == 1){ return cgetal = getal; } } } if(choosed == 0) return cgetal = max_getal; choosed = 0; return cgetal; } Mijn wait functie (laat je gamemode even wachten): stock wait(time) { new currentcount = tickcount(); while(tickcount() - currentcount < time){} return 1; } En mijn functie in ontwikkeling om de aantal coords vanaf de positie waar jij je bevind tot de grond te krijgen: stock GetGroundZFromPlayer(playerid){ new Float: X, Float: Y, Float: Z, Float: GroundZ; GetPlayerPos(playerid, X, Y, Z); SetPlayerPosFindZ(playerid, X, Y, Z); GetPlayerPos(playerid, X, Y, GroundZ); SetPlayerPos(playerid, X, Y, Z); if(IsPlayerInAnyVehicle(playerid)){ new myVeh = GetPlayerVehicleID(playerid); new mySeat = GetPlayerVehicleSeat(playerid); PutPlayerInVehicle(playerid, myVeh, mySeat); } return floatround(GroundZ); } Indentatie is wel weer een beetje weg door het forum. Reageren
Big Boss Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 Mijn RandomEx functie (je kan een minimum en een maximum getal invoeren): CODE Lekker handig .. Dit werkt veel sneller denk ik .. stock RandomEx(min, max) { new result = min + random(max); return result; } Reageren
Sandra Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 @Big Boss: Nee, die code werkt niet zoals het zou moeten. Stel je wilt een random getal tussen 2000 en 4000: Dan voer je in RandomEx(2000, 4000). Nu kan het zijn dat de funtie "random(max)" 3500 'returnt'. Dan word de formule: 2000+3500 = 5500 en dat ligt niet tussen de 2000 en 4000 Oftewel, die functie werkt niet. Wat wel werkt is: stock RandomEx(min, max) { new result; if(min > max){result=min; min=max; max=result;} result = (min + random((max+1)-min)); return result; } De regel die begint met "if(min > max)" kan je eventueel weg laten hoor. Deze zorgt er alleen voor, dat als 'min' hoger is dan 'max', de 2 getallen omgedraaid worden. Reageren
GTAguillaume Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 (bewerkt) Zo kort mogelijk: stock RandomEx(min, max) { if(min>max){new tmp;tmp=min;min=max;max=tmp} return min + random(max-min); } Hier en hier vind je al heel wat functies. Ik heb dit eens voor Wanted geschreven: stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume { new dagen; if(dag != dag2) { if(dag < dag2)dagen += dag2-dag; else { dagen += dag2; switch(maand) { case 1,3,5,7,8,10,12:dagen += 31-dag; case 2: { if(deelbaar(jaar,4)) dagen += 29-dag; else dagen += 28-dag; } case 4,6,9,11:dagen += 30-dag; } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) maandtmp++; while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12:dagen += 31; case 2: { if(deelbaar(jaartmp,4)) dagen += 29; else dagen += 28; } case 4,6,9,11:dagen += 30; default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } Bewerkt: 20 februari 2010 door GTAguillaume Reageren
Big Boss Geplaatst: 20 februari 2010 Rapport Geplaatst: 20 februari 2010 (bewerkt) Ik zal dan zelf maar eens wat functies plaatsen. stock ReturnOnlinePlayers() { new CurPl = 0; for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { CurPl++; } } return CurPl; } stock ReturnPlayerName(playerid) { new tmpname[24]; GetPlayerName(playerid, tmpname, sizeof(tmpname)); return tmpname; } stock SendClientMessageToAdmins(color, const message[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i)) continue; if(PlayerInfo[i][Admin] >= 1) // << verander dit! { SendClientMessage(i, color, message); } } return 1; } Bewerkt: 20 februari 2010 door Big Boss Reageren
Crusher!! Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 (bewerkt) jullie doen allemaal moeilijk... RandomEx(min,max) { new tmp = (random(max - min) + min); return tmp; } Bewerkt: 21 februari 2010 door Crusher!! Reageren
Wanted Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 (bewerkt) Ik heb dit eens voor Wanted geschreven: stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume { new dagen; if(dag != dag2) { if(dag < dag2)dagen += dag2-dag; else { dagen += dag2; switch(maand) { case 1,3,5,7,8,10,12:dagen += 31-dag; case 2: { if(deelbaar(jaar,4)) dagen += 29-dag; else dagen += 28-dag; } case 4,6,9,11:dagen += 30-dag; } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) maandtmp++; while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12:dagen += 31; case 2: { if(deelbaar(jaartmp,4)) dagen += 29; else dagen += 28; } case 4,6,9,11:dagen += 30; default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$ Deze werkt verrassend goed. stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Made by Guillaume { new dagen; if(dag != dag2) { if(dag < dag2) { dagen += dag2-dag; } else { dagen += dag2; } if(dagen > 28) { switch(maand) { case 1,3,5,7,8,10,12: { if(dagen > 31) { dagen -= 31; } } case 2: { if(IsDeelbaar(jaar, 4)) { if(dagen > 29) { dagen -= 29; } } else { if(dagen > 28) { dagen -= 28; } } } case 4,6,9,11: { if(dagen > 30) { dagen -= 30; } } } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) { maandtmp++; } while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12: { dagen += 31; } case 2: { if(IsDeelbaar(jaartmp, 4)) { dagen += 29; } else { dagen += 28; } } case 4,6,9,11: { dagen += 30; } default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } EDIT: En even omdat het NOG korter kan. RandomEx(min,max) { return (random(max - min) + min); } Bespaart weer een variable. Bewerkt: 21 februari 2010 door Wanted Reageren
Megadreams Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 Ik heb dit eens voor Wanted geschreven: stock deelbaar(getal,door) if(floatround(floatdiv(getal,door), floatround_floor) == floatdiv(getal,door))return true; else return false; //made by guillaume stock GetDays(dag,maand,jaar,dag2,maand2,jaar2) //made by guillaume { new dagen; if(dag != dag2) { if(dag < dag2)dagen += dag2-dag; else { dagen += dag2; switch(maand) { case 1,3,5,7,8,10,12:dagen += 31-dag; case 2: { if(deelbaar(jaar,4)) dagen += 29-dag; else dagen += 28-dag; } case 4,6,9,11:dagen += 30-dag; } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) maandtmp++; while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12:dagen += 31; case 2: { if(deelbaar(jaartmp,4)) dagen += 29; else dagen += 28; } case 4,6,9,11:dagen += 30; default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. Deze werkt verrassend goed. stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Made by Guillaume { new dagen; if(dag != dag2) { if(dag < dag2) { dagen += dag2-dag; } else { dagen += dag2; } if(dagen > 28) { switch(maand) { case 1,3,5,7,8,10,12: { if(dagen > 31) { dagen -= 31; } } case 2: { if(IsDeelbaar(jaar, 4)) { if(dagen > 29) { dagen -= 29; } } else { if(dagen > 28) { dagen -= 28; } } } case 4,6,9,11: { if(dagen > 30) { dagen -= 30; } } } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) { maandtmp++; } while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12: { dagen += 31; } case 2: { if(IsDeelbaar(jaartmp, 4)) { dagen += 29; } else { dagen += 28; } } case 4,6,9,11: { dagen += 30; } default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } EDIT: En even omdat het NOG korter kan. RandomEx(min,max) { return (random(max - min) + min); } Bespaart weer een variable. mijn code was ietsje te groot volgens mij, maarja ik ging het zoeizo inkorten, eerst iets uitgebreider naar iets korter. Reageren
GTAguillaume Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 (bewerkt) Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$ Ohh, het zou kunnen dat er nog ergens een foutje in zat. EDIT: Dat werkt ook niet 100%, als je printf("%i",GetDays(2,1,2010,1,2,1010)); doe dan returnt die 1, terwijl dat 30 moet zijn. EDIT: En even omdat het NOG korter kan. RandomEx(min,max) { return (random(max - min) + min); } Bespaart weer een variable. Maar dan heb je een probleem als je max en min omdraait,... Bewerkt: 21 februari 2010 door GTAguillaume Reageren
Wanted Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 (bewerkt) Klopt, maar die heb ik inmiddels al weer aangepast, omdat het niet goed werkte. :$ Ohh, het zou kunnen dat er nog ergens een foutje in zat. EDIT: Dat werkt ook niet 100%, als je printf("%i",GetDays(2,1,2010,1,2,1010)); doe dan returnt die 1, terwijl dat 30 moet zijn. Ach ja, natuurlijk. Ik ben vergeten de rest ook hier te posten. Aantal dagen tussen 2 datums uitrekenen: Zet al deze functies in je gamemode, niet in een andere functie: #define Swap(%1,%2) %1 ^= %2, %2 ^= %1, %1 ^= %2 // Deze functie draait 2 variablen om, ZONDER een 3e variable te gebruiken. | Made by Alex "Y_Less" Cole. stock GetDaysBetweenDates(dag, maand, jaar, dag2, maand2, jaar2) // Gebruik deze functie om het aantal dagen tussen 2 datums te berekenen | Made by Wanted { if(VerkeerdeVolgorde(dag, maand, jaar, dag2, maand2, jaar2)) { Swap(dag, dag2); Swap(maand, maand2); Swap(jaar, jaar2); new Dagen = GetDays(dag, maand, jaar, dag2, maand2, jaar2); return Dagen - Dagen - Dagen; } else { return GetDays(dag, maand, jaar, dag2, maand2, jaar2); } } stock VerkeerdeVolgorde(dag, maand, jaar, dag2, maand2, jaar2) // Controleerd of de twee datums verkeerd om zijn ingevoerd | Made by Wanted { if(jaar < jaar2) return false; if(jaar > jaar2) return true; if(maand < maand2) return false; if(maand > maand2) return true; if(dag < dag2) return false; if(dag > dag2) return true; return false; } stock IsDeelbaar(getal, door) // Controleerd of een getal deelbaar is | Made by Guillaume { if(floatround(floatdiv(getal, door), floatround_floor) == floatdiv(getal, door)) { return true; } else { return false; } } stock GetDays(dag, maand, jaar, dag2, maand2, jaar2) // Rekent het aantal dagen uit | Made by Guillaume { new dagen; if(dag != dag2) { if(dag < dag2) { dagen += dag2-dag; } else { dagen += dag2; } if(dagen > 28) { switch(maand) { case 1,3,5,7,8,10,12: { if(dagen > 31) { dagen -= 31; } } case 2: { if(IsDeelbaar(jaar, 4)) { if(dagen > 29) { dagen -= 29; } } else { if(dagen > 28) { dagen -= 28; } } } case 4,6,9,11: { if(dagen > 30) { dagen -= 30; } } } } } new jaartmp=jaar,maandtmp=maand; if(dag > dag2) { maandtmp++; } while(maandtmp < maand2 || jaartmp < jaar2) { switch(maandtmp) { case 1,3,5,7,8,10,12: { dagen += 31; } case 2: { if(IsDeelbaar(jaartmp, 4)) { dagen += 29; } else { dagen += 28; } } case 4,6,9,11: { dagen += 30; } default: { maandtmp=0; jaartmp++; } } maandtmp++; } return dagen; } Bewerkt: 21 februari 2010 door Wanted Reageren
GTAguillaume Geplaatst: 21 februari 2010 Rapport Geplaatst: 21 februari 2010 Maar de datum staat niet verkeert, 2 Januari 2010 is vroeger dan 1 Februari 2010. Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.