Moord in mijn game

  • Beste mensen,


    Even een vraagje ik heb een probleem met de een stukje script in mijn maffia game waar ik niet uitkom.
    wat is het probleem.
    Als je een speller wil vermoorden dan moet ik een Detectives inhuren tot hier werkt het goed.
    De Detectives vind de speller en je gaat hem vermoorden dan gebuurt er niet voor beeld de speller staat op 1% leven en je valt hem aan gaat die 1% leven niet naar nu toe.
    Zo dat hij dood gaat dat is het probleem.
    Wie weet hier een oplossing voor dit hoor ik heel graag van jullie.


    Ik zet hier de code neer.


    Ik hoop dat er mensen zijn die mij hier mee kunnen helpen.
    Bij voorbaard super dank.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Dacht al dat ik dit eerder had gezien!
    Zou al enorm schelen moest je zelf het if statement kunnen vinden en delen waar je denkt dat het precies foutloopt. met evt. de nodige variabelen erbij.
    Nu weet ik bv. nog steeds niet bij welke blok code het zou foutlopen :P Welke fout() of mislukt() krijg je bv. te zien?


    Om eens en andere vraag te stellen dan in je oude topic? Staat je health veld in de database toevallig op unsigned? (Enkel positieve waarden)
    Want dan vermoed ik dat de volgende if 2/3 niet uitgevoerd word:


    Code
    $health['user'] = rand(1,3);
     if($user['health'] <= $health['user']) {

    Onder die if ga je health op 0 zetten van $user[id] wat de bedoeling is dacht ik? Ookal is user health 1?


    En volgens deze query beland je mogelijk 2/3 nooit in bovenstaande if indien $user health 1 is?


    Code
    } else {
     $sql->query("UPDATE users SET attlose = attlose + '1', cash = cash - '" . $winst['cash'] . "', health = health - '" . $health['user'] . "' WHERE id = '" . $user['id'] . "'");

    Misschien probeert deze query health: 1 = 1 - 2 met mogelijk sql fout?


    Absoluut niet zeker, leest niet zo eenvoudig sorry.
    Zou toch eens bekijken of dat veldje toevallig unsigned is of niet maar zou in principe weinig moeten schelen.. 1 - 2 word dan ook gewoon 0 denk ik (bij unsigned)?


    Tiger, als dat veld niet bepaald unsigned is zou 't bovenstaande niet van toepassing zijn hoor. Indien van wel misschien zelf ook niet indien die laatste opmerking 1 - 2 = 0 zou kloppen. ;)
    Aangezien ik ook niet 100% weet hoe unsigned zou werken zou het kunnen dat je een extra if moet voorzien om met 'health' waar mogelijk onder nul te gaan op te lossen. Zal dus waarschijnlijk zeer dicht tegen code blok 2 (db querie) leunen om in de query niet onder 0 te kunnen gaan. Dus alleen van toepassing zijn indien je met een sql error zou zitten i.v.m. niet onder 0 kunnen gaan unsigned health veld.

  • Sorry dat ik het zeg, maar in zo'n brakke brol van een code wil je toch niet werken?


    - geen identing
    - SQL-injection everywhere
    - Oude HTML
    - Inline CSS
    - Onnodig gekopieer van variabelen: $winnaar = $own['username'];


    Hier kan je toch geen plezier meer aan hebben?
    Dat deze criminals-script style na 15 jaar nog steeds bestaat! On-ge-loof-lijk.

  • wat heeft dit met dit topic te doen??? NIETS denk ik zo

  • Het heeft er wel wat mee te maken, hij geeft juist aan dat het niet slim is om die code nog te gebruiken...Wel in andere woorden, maar komt op hetzelfde uit.


    @AarClay Zolang ze die downloads overal blijven aanbieden, dan zullen ze helaas nog vele jaren bestaan.

    de code ja dat kan wel ja maar het gehele script nee is niet zo oud is naar php 7.4 gemaakt alleen deze code werkt nog niet goed en misschien is het beter om een andere code er voor te maken dat kan misschien wel beter zijn ja maar ik vond het jammer dat het zo er neer gezet werd maar dat is hoe je het leest SORRY AarClay als je het zo bedoelde snap ik je beter nog maals SORRY

  • Awh had gekund, zou het niet onmiddellijk weten tiger.
    Wat vermoedelijk zeker is is dat je dus bij fout op 1% health nooit in blokje if($own['health'] <= $health['user']) { terechtkomt vgm in 2 plaatsen.
    Want daar word health dan op 0 gezet in een db query. (2 queries die health 0 zet?) Je zou kunnen proberen om eens te bekijken wat er in die variabelen zit bij dezelfde problemen na te bootsen:
    echo "<pre>";
    var_dump($own['health']);
    var_dump($health['user']); // Int 1 - 3?
    echo "</pre>";
    Bij jouw exact prob. zou own health dus altijd groter moeten zijn dan health user wat niet de bedoeling is wanneer health op 0 moet gezet worden volgens bovenstaande if..
    Mogelijks moet je daarna dus in code die beide variabelen bepalen gaan 'oplossen' (en als ik het goed heb) zou je dus enkel probleem 1% health moeten oplossen (derest werkt prima?) Zal effectief een extra if worden denk ik zodat rekening kan gehouden worden met dat 1% probleem ;)


    Volgens jouw code weten we al (boven die if) $health['user'] = rand(1,3); ranged altijd tussen 1 of 3 d.w.z. dat own health indien er dood gegaan moet worden altijd moet kleiner zijn dan of gelijk aan health user (1 - 3) om die health op 0 query toe te passen.


    Dit aanpassen zou het eventueel bij wonder kunnen oplossen: $health['user'] = rand(1,3); // naar 0, 3 of 2, 3 maar zou 't niet kunnen met zekerheid zeggen, kan andere delen breken. En zelf eht geen idee wat own health allemaal kan inhouden.


    Bovenstaande telkens van toepassing op 2 plaatsen in je code vermoedelijk acties aanvaller - slachtoffer onderscheiden?

  • nee die staat niet zo


    het is nu zo je kan spellers aanvallen dat werkt goed en de % lopen dan ook af tot 5% dan hout het op!
    als ik dan een detectives inhuur en de detectives vind de speller kun je hem aanvallen / vermoorden dan moet de speller ook dood gaan als die zo 1% 2% 3% 4% of 5% is maar dat gaat niet goed!
    je krijgt wel het geld meer maar de speller bijft op doe % staan die hij heeft dat is nu nog wat er niet werkt.
    voor de rest werkt alles goed.
    het gehele spel draait op php 7.4 maar de action / attack loopt op php 7.0 merk ik nu als ik die op php 7.4 zet loopt het geheel niet daar moet ik nog iets mee doen merk ik.


    als jullie willen kan ik de scriptjes wel door geven hoor misschien is dit makkelijke dan hoor i

  • Gooi het eens online ja.
    Beschrijf dan ook even de stappen om het probleem te kunnen reproduceren en ik bekijk het even!
    Kan niets beloven want vrees dat ik snel verdwaald zou geraken.


    Waarom zou moorden op een andere PHP versie draaien dan je gehele site?


    Kan jij het online gooien onder een website en alles van error reporting inschakelen? Misschien vinden we al iets bij mogelijke errors?



    Aangevallen gebudge speler gaat niet dood maar aanvaller krijgt wel geld?
    Kan deze query zijn:

    Code
    $sql->query("UPDATE users SET attwin = attwin + '1', cash = cash + '" . $winst['cash'] . "', power = power + '" . $winst['power'] . "', health = health + '" . $health['optellen'] . "' WHERE id = '" . $own['id'] . "'");

    En toch werd nodige IF statement in mijn post hierboven beschreven niet uitgevoerd anders was aangevallen speler wel dood gegaan (health = 0) volgens de query in kwestie. (post bovenin)

  • het moord probleem is opgelost er zat een fout in een regel die niet goed werkte met de db deze aangepast en nu werkt het goed en kan er via de Detectives vermoord worden dus dat is klaar.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!