Geplaatst: 20 februari 201015 jaren comment_1593464 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.
Geplaatst: 20 februari 201015 jaren comment_1593472 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.
Geplaatst: 20 februari 201015 jaren comment_1593508 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; }
Geplaatst: 20 februari 201015 jaren comment_1593577 @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.
Geplaatst: 20 februari 201015 jaren comment_1593612 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 201015 jaren door GTAguillaume
Geplaatst: 20 februari 201015 jaren comment_1593753 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 201015 jaren door Big Boss
Geplaatst: 21 februari 201015 jaren comment_1593827 jullie doen allemaal moeilijk... RandomEx(min,max) { new tmp = (random(max - min) + min); return tmp; } Bewerkt: 21 februari 201015 jaren door Crusher!!
Geplaatst: 21 februari 201015 jaren comment_1593932 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 201015 jaren door Wanted
Geplaatst: 21 februari 201015 jaren comment_1593935 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.
Geplaatst: 21 februari 201015 jaren comment_1594246 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 201015 jaren door GTAguillaume
Geplaatst: 21 februari 201015 jaren comment_1594307 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 201015 jaren door Wanted
Geplaatst: 21 februari 201015 jaren comment_1594426 Maar de datum staat niet verkeert, 2 Januari 2010 is vroeger dan 1 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:
Laat een speler respawnen zonder dat OnPlayerDeath() en OnPlayerSpawn() worden geactiveerd.