kostenloser Webspace werbefrei: lima-city


Value aus MySQL mit PHP...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    cheapsms

    Kostenloser Webspace von cheapsms, auf Homepage erstellen warten

    cheapsms hat kostenlosen Webspace.

    Hi,

    mal eine Frage...

    Ich habe hier eine CronJob - PHP Datei, die bei den Usern bestimmte Felder der MySQL wieder auffüllt.

    Jetzt ist aber das Problem da, dass wenn der User sagen wir mal 300 Turns hat immer mehr bekommt also unendlich viele Turns sammeln kann.

    Das will ich jedoch verhindern...

    Da habe ich mir folgendes gedacht:

    Der CronJob prüft vorm Hochzählen, ob der Wert bereits 300 erreicht, wenn man 1 hinzufügt. Wenn ja, wird entsprechend weniger hinzugefügt an Turns, so dass der Wert niemals mehr als 300 erreichen kann.


    Da ich das von meinem Wissensstand nicht umsetzen kann, bitte ich euch darum, mir zu helfen.

    <?
    	
    	function defSort ($a, $b) {
        if ($a->DefenseAction == $b->DefenseAction) return 0;
        return ($a->DefenseAction > $b->DefenseAction) ? -1 : 1;
    	}
    	function atSort ($a, $b) {
        if ($a->StrikeAction == $b->StrikeAction) return 0;
        return ($a->StrikeAction > $b->StrikeAction) ? -1 : 1;
    	}
    	function covSort ($a, $b) {
        if ($a->CovertAction == $b->CovertAction) return 0;
        return ($a->CovertAction > $b->CovertAction) ? -1 : 1;
    	}
    	function rankFloat ($a, $b) {
        if ($a->RankFloat == $b->RankFloat) return 0;
        return ($a->RankFloat < $b->RankFloat) ? -1 : 1;
    	}
    	
    	include "vsys.php";
    	deleteOldUsers();
    	$users=getActiveUsers("ID, race, fortificationLevel, siegeLevel, currentSpySkill, trainedAttackSold, trainedAttackMerc, trainedDefSold, trainedDefMerc, untrainedSold, untrainedMerc, spies ");
    	for ($i=0; $i<count($users);$i++){
    		//print_r($users[$i]);print "<br>";
    		$users[$i]->StrikeAction=getStrikeAction($users[$i]);
    		$users[$i]->DefenseAction=getDefenseAction($users[$i]);
    		$users[$i]->CovertAction=getCovertAction($users[$i]);
    		$money=getUserIncome($users[$i]);
    		updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1, untrainedSold=untrainedSold+currentUnitProduction ");
    		//echo getStrikeAction($users[$i])."<br>";
    		//echo getDefenseAction($users[$i])."<br>";
    		//echo getCovertAction($users[$i])."<br>";
    	}
    	$users1=$users;
    	usort($users1,"atSort");
    	//echo "--------------users1---<br>";
    	//print_r ($users1);
    	$users2=$users;
    	usort($users2,"defSort");
    	//echo "--------------users2---<br>";
    	//print_r ($users2);
    	$users3=$users;
    	usort($users3,"covSort");
    	//echo "--------------users3---<br>";
    	//print_r ($users3);
    	
    	for ($i=0;$i<count($users1);$i++){
    		$usersA[$users1[$i]->ID]->ID=$users1[$i]->ID;
    		$usersA[$users1[$i]->ID]->StrikeAction=$i+1;
    	}
    	for ($i=0;$i<count($users2);$i++){
    		$usersA[$users2[$i]->ID]->DefenseAction=$i+1;
    	}
    	for ($i=0;$i<count($users3);$i++){
    		$usersA[$users3[$i]->ID]->CovertAction=$i+1;
    		$usersA[$users3[$i]->ID]->RankFloat=($usersA[$users3[$i]->ID]->StrikeAction+$usersA[$users3[$i]->ID]->DefenseAction+$usersA[$users3[$i]->ID]->CovertAction)/3;
    	}
    	usort($usersA,"rankFloat");
    	for ($i=0;$i<count($usersA);$i++){
    		//echo $usersA[$i]->RankFloat.";;";
    		setUserRank($usersA[$i]->ID, $i+1, $usersA[$i]->StrikeAction, $usersA[$i]->DefenseAction , $usersA[$i]->CovertAction);
    	}
    	setLastTurnTime(time());
    	updateMercenary(" attackSpecCount=attackSpecCount+'{$conf['mercenaries_per_turn']}', defSpecCount =defSpecCount +'{$conf['mercenaries_per_turn']}', untrainedCount =untrainedCount +'{$conf['mercenaries_per_turn']}' ");
    ?>




    Danke für eure Hilfe :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Sorry, aber ich versteh das nicht :

    cheapsms schrieb:
    Der CronJob prüft vorm Hochzählen, ob der Wert bereits 300 erreicht, wenn man 1 hinzufügt. Wenn ja, wird entsprechend weniger hinzugefügt an Turns, so dass der Wert niemals mehr als 300 erreichen kann.


    Wenn nie mehr als 300 erreicht werden sollen, warum dann entsprechend weniger drauf? Hä?

    Theoretisch kannst du das alles mit einem SQL-Befehl machen, wenn ich dich richtig verstanden habe:

    UPDATE table SET turns=turns+1 WHERE turns < 300
  4. Autor dieses Themas

    cheapsms

    Kostenloser Webspace von cheapsms, auf Homepage erstellen warten

    cheapsms hat kostenlosen Webspace.

    Der Wert soll nicht höher als 300 erreichen.

    Das wollte ich in die Cron.php einbauen :)


    Gruß
  5. Ich seh bei deinem Code irgendwie nicht durch. Die Informationen holst du doch aus einer Datenbank, oder? Wenn dem so ist, kannst du doch solche Befehle, wie den von mir eben verwendeten nutzen. Das macht auch das Ganze etwas kürzer und sicherlich auch performanter auch wenn dass bei einem Cron ja nicht so die Rolle spielt.

    Sag einfach mal welche Werte du jetzt genau wie verändern willst. Also nur für die turns nimm halt den UPDATE Query von eben, aber ich denke mal, dass du noch viel mehr ändern willst. Lässt sich sicherlich einiges direkt vom Datenbank Server erledigen.
  6. Autor dieses Themas

    cheapsms

    Kostenloser Webspace von cheapsms, auf Homepage erstellen warten

    cheapsms hat kostenlosen Webspace.

    Ich habe leider keinen plan, wie ich dein code in meinem integrieren kann, dass es auch funktioniert.


    wenn ich es so mache:
    updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1 < 300, 
    
    untrainedSold=untrainedSold+currentUnitProduction ");


    bleibt der wert in der mysql immer bei 1, ist ja klar.

    er soll pro ausführung des cronjobs +1 bei attackturn hinzufügen, diesen wert aber nicht über 300 steigen lassen.


    Danke!


    Gruß

    Beitrag zuletzt geändert: 21.5.2009 20:16:50 von cheapsms
  7. cheapsms schrieb:
    updateUser($users[$i]->ID," gold = gold+'$money', attackTurns = attackTurns+1 < 300,  untrainedSold=untrainedSold+currentUnitProduction ");



    Ich kann mit dieser Funktion nichts anfangen... Rufst du jeden User ab und führst dann immer die gleiche Aktion durch, oder ändert sich der Wert $money? $money sollte integer sein also brauchst du ' nicht.
    Was soll das bitte ergeben:
    attackTurns = attackTurns+1 < 300,

    Wo ist deine WHERE Klausel?

    Poste mal bitte die Funktion updateUser
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!