Jump to content

[CLEO] Script nu functioneaza


Moderat
 Share

Recommended Posts

Salut din nou,

 

Am o functie in script care citeste ora serverului, pe baza textului aparut cu data si ora in dreapta sus. Aceasta functie functioneaza ok.

 

Folosesc aceasta functie ca sa vad care este ora serverului (fiindca ora locala poate fi schimbata cu un script, cu [/sett]), si in functie de ora sa spuna un anumit mesaj.

 

Comanda este [/stime] (server time), si functioneaza prima oara cand o dau, insa apoi nu mai functioneaza pur si simplu. Desi nu stiu precis dupa cat timp, comanda mai functioneaza iar o data, si apoi iar nimic.

 

Care ar putea fi cauza?

 

https://pastebin.com/Msj7bkeF

Edited by D J C
Topic name correction
Link to comment
Share on other sites

Am fumat ceva, si mi-a mai venit niste inspiratie, asa ca am adaugat niste chatmsg prin loop-ul din WHILE, ca sa imi dau seama unde se opresc lucrurile si ce nu ar merge.

 

Aparent ar fi o problema cu "0AF9: samp say_msg 25@", care imi da text in chat la prima comanda, insa la comenzi ulterioare nu mai functioneaza.

 

Versiunea de debug: https://pastebin.com/Z6XtmTVx

 

 

Edit: Nu conteaza daca folosesc fisier .ini sau nu, rezultatul este acelasi.

 

Daca dau de cateva ori /fvr5 sau /fvr10, la un moment dat nu functioneaza comanda a treia oara, si dupa ce functioneaza din nou, daca dau /stime, atunci merge.

Edited by Gugustiuc.
Link to comment
Share on other sites

@Gugustiuc. modifică așa în loop

if 9@ == 1
then
    9@ = 0
    
    for 0@ = 0 to 2048 // 2048 = max TextDraw ID in decimal
        if 0AB1: @IsSampTextDrawExist 1 TextDrawID 0@
        then
            0AB1: @GetTextDrawText 1 TextDrawID 0@ _Returned: Text 1@
            if 0AD4: $NOT_USED = scan_string 1@ format "%d:%d:%d" 3@ 4@ 5@
            then
                if or
                    3@ == 19
                    3@ == 20
                    3@ == 21
                    3@ == 22
                    3@ == 23
                then say "O seara buna!"
                end
                
                if or
                    3@ == 0
                    3@ == 1
                    3@ == 2
                    3@ == 3
                    3@ == 4
                then say "Spor la joc!"
                end
                
                if or
                    3@ == 5
                    3@ == 6
                    3@ == 7
                    3@ == 8
                    3@ == 9
                    3@ == 10
                    3@ == 11
                then say "O dimineatã frumoasã!"
                end
                
                if or
                    3@ == 12
                    3@ == 13
                    3@ == 14
                    3@ == 15
                    3@ == 16
                    3@ == 17
                    3@ == 18
                then say "O dupã-amiazã plãcutã!"
                end
            end
        end
    end
end

 

Link to comment
Share on other sites

10 hours ago, Tupi said:

@Gugustiuc. modifică așa în loop


if 9@ == 1
then
    9@ = 0
    
    for 0@ = 0 to 2048 // 2048 = max TextDraw ID in decimal
        if 0AB1: @IsSampTextDrawExist 1 TextDrawID 0@
        then
            0AB1: @GetTextDrawText 1 TextDrawID 0@ _Returned: Text 1@
            if 0AD4: $NOT_USED = scan_string 1@ format "%d:%d:%d" 3@ 4@ 5@
            then
                if or
                    3@ == 19
                    3@ == 20
                    3@ == 21
                    3@ == 22
                    3@ == 23
                then say "O seara buna!"
                end
                
                if or
                    3@ == 0
                    3@ == 1
                    3@ == 2
                    3@ == 3
                    3@ == 4
                then say "Spor la joc!"
                end
                
                if or
                    3@ == 5
                    3@ == 6
                    3@ == 7
                    3@ == 8
                    3@ == 9
                    3@ == 10
                    3@ == 11
                then say "O dimineatã frumoasã!"
                end
                
                if or
                    3@ == 12
                    3@ == 13
                    3@ == 14
                    3@ == 15
                    3@ == 16
                    3@ == 17
                    3@ == 18
                then say "O dupã-amiazã plãcutã!"
                end
            end
        end
    end
end

 

 

Mersi!

 

Scriptul a ramas cu aceasta functie in afara loop-ului WHILE.

 

Am inteles sa nu mai fac toata chestia cu ELSE, si sa zic END si sa am alt IF pur si simplu, insa nu are vreun efect. Se intampla aceeasi chestie.

 

image.png

 

Am incercat si sa nu incarc string-uri din fisier .ini, si degeaba. De notat cum mesajul apare dupa mesajul "Breaking after message", in loc sa apara inainte.

 

https://pastebin.com/r5eh5VS5

Edited by Gugustiuc.
Link to comment
Share on other sites

@Gugustiuc. 

 

Normal ca "Breaking after message" apare inainte deoarece este trimis cu chatmsg nu cu say, iar orice mesaj trimis cu chatmsg este mai rapid decat orice mesaj trimis cu say de aceea apare inainte, functia functioneaza corect.

Daca vrei sa ai un mesaj pe care sa-l poti configura iti recomand sa faci citirea string-ului din fisierul .ini imediat dupa conditia orei respective, inainte de trimiterea mesajului cu say.

 

Verificarea

if conditie == x
then
		say "Mesaj"
end

devine

if conditie == x
then
		alloc X@ 260
		0AF4: X@ = read_string_from_ini_file "cleo\config.ini" section "SectionName" key "stringKey"
		say X@
		free X@
end

 

Link to comment
Share on other sites

2 hours ago, Tupi said:

@Gugustiuc. 

 

Normal ca "Breaking after message" apare inainte deoarece este trimis cu chatmsg nu cu say, iar orice mesaj trimis cu chatmsg este mai rapid decat orice mesaj trimis cu say de aceea apare inainte, functia functioneaza corect.

Daca vrei sa ai un mesaj pe care sa-l poti configura iti recomand sa faci citirea string-ului din fisierul .ini imediat dupa conditia orei respective, inainte de trimiterea mesajului cu say.

 

Verificarea


if conditie == x
then
		say "Mesaj"
end

devine


if conditie == x
then
		alloc X@ 260
		0AF4: X@ = read_string_from_ini_file "cleo\config.ini" section "SectionName" key "stringKey"
		say X@
		free X@
end

 

 

Voi incerca, desi face la fel si fara mesaj preluat din fisier .ini.

Link to comment
Share on other sites

23 hours ago, Gugustiuc. said:

Not yet, the behavior is the same.

Ce anume nu functioneaza mai exact, eu in poza de mai sus am vazut ca functioneaza corect, era ora 12 si modul spunea "afternoon" impreuna cu mesajul ales pentru dupa amiaza in functie de cum ai setat tu in mod, ce nu e in regula?

Edited by Tupi
Link to comment
Share on other sites

4 minutes ago, Tupi said:

Ce anume nu functioneaza mai exact, eu in poza de mai sus am vazut ca functioneaza corect, era ora 12 si modul spunea "afternoon" asa cum ai setat tu in mod, ce nu e in regula?

 

Spune "afternoon", insa say-ul in chat pur si simplu nu mai functioneaza cand dau comanda pentru a doua oara.

 

Acest lucru se intampla indiferent daca am nested IFs sau nu, ori daca textul pentru say e luat dintr-un fisier .ini sau nu.

Edited by Gugustiuc.
Link to comment
Share on other sites

6 minutes ago, Gugustiuc. said:

 

Spune "afternoon", insa say-ul in chat pur si simplu nu mai functioneaza cand dau comanda pentru a doua oara.

Jesus Christ, normal că nu funcționează să trimiti același mesaj de ori la rand (anti-spam din sever).

 

if or
	3@ == 12
	3@ == 13
	3@ == 14
	3@ == 15
	3@ == 16
	3@ == 17
	3@ == 18
then
	// 0AF9: samp say_msg "O dupã-amiazã plãcutã!"
	if $antiSpam == 0
        then
              $antiSpam = 1
              say "%s" 28@
	else
               $antiSpam = 0
               say "%s." 28@
         end
	 chatmsg "Afternoon" -1
	 chatmsg "Breaking after message." -1
	 break
end

Eu aici am folosit o variabila globală pentru a verifica anti spam-ul însă îți recomand ca tu să te rezumi tot la cele locale cu @ deoarece cele globale uneori își pierd valorile setate și nu mai funcționează corect. Iți rămâne să adaugi aceiași verificare pentru anti-spam la toate orele din mod.

Edited by Tupi
Link to comment
Share on other sites

Nu incerc nicaieri in cod sa trimit de doua ori acelasi mesaj ori mesaje diferite...

 

Mesajul "Afternoon" este cu chatmsg.

 

Pur si simplu cand intru prima oara in samp si dau comanda /stime, functioneaza ok, si imi zice cu say mesajul dorit. Daca dau iar comanda /stime, dupa oarecare interval de timp, nu functioneaza.

 

Mesajul "Afternoon" apare, de ex., deci chatmsg inca merge, insa ce ar trebui zis pe say nu mai merge.

Link to comment
Share on other sites

Ori eu gandesc prea mult, ori tu nu stii diferenta dintre chatmsg si say (sau poate ambele).

 

chatmsg = mesaj trimis DE CATRE MOD in chat, vizibil doar tie, suporta atat variabile cat si culori.

say = mesaj trimis DE CATRE JUCATOR in chat PRIN MOD, vizibil tuturor celor din jurul tau, suporta doar variabile. 

 

Un mesaj trimis prin chatmsg apare mai repede pe chat decat un mesaj trimis cu say, chiar daca in cod intai pui say si apoi chatmsg, prima data tot chatmsg va aparea pe chat.

 

Un mesaj trimis cu chatmsg poate fi repetat pana cand jocul ramane fara memorie si da crash.

Un mesaj trimis cu say nu poate fi repetat deoarece intervine anti-spam-ul din sever si iti blocheaza mesajul.

 

Ca sa faci un fel de by-pass la anti-spam-ul serverului si sa poti trimite aceiasi forma a unui mesaj cu say trebuie ca dupa ce ai folosit odata respetiva forma, la urmatoarea folosite mesajul in sine sa mai contina un caracter, fie el un punct, o virgula, etc pentru ca serverul sa vada ca nu este exact acelasi mesaj ca cel trimis ultima data si sa te lase sa-l folosesti, iar acest lucru sa se repete ori de cate ori este nevoie.

 

 

Tu efectiv ai o singura forma in momentul in care parcurgi bucla, prima data normal ca merge cand intrii pe server pentru ca nu ai mai folosit-o pana atunci, dar cand vrei sa o folosesti din nou aceiasi forma serverul nu te mai lasa deoarece ultima data tot acelasi lucru l-ai scris in chat (acelasi forma folosita in say) si trebuie sa o schimbi sau cum am zis mai sus sa mai adaugi ceva la ea, un punct, o virgula, orice ca sa fie diferita de cea trimisa ultima data pentru a te putea lasa sa folosesti acelasi mesaj setat in mod. 

 

Pe langa asta vad ca tu nu prea vrei sa faci cum ti se spune si sa aplici eventualele solutii pentru problema ta. Nu vreau sa crezi ca am ceva tu tine, si eu am fost incepator, si tu probabil esti pentru ca asa e in viata, in orice domeniu de activitate exista incepatori, exista avansati, exista profesionisti, insa cand cineva iti ofera o eventuala solutie aplic-o, chit ca merge, chit ca nu merge, pentru ca asa e pe samp, multe dintre lucruri iti ies doar prin incercari.

 

Edited by Tupi
Link to comment
Share on other sites

31 minutes ago, Tupi said:

dar cand vrei sa o folosesti din nou aceiasi forma serverul nu te mai lasa deoarece ultima data tot acelasi lucru l-ai scris in chat (acelasi forma folosita in say)

 

Am uitat complet ca nu poti trimite acelasi mesaj si a doua oara fara sa trimiti altceva intre timp, si cand ai zis "spam" m-am gandit strict la daca vrei sa trimiti de mai multe ori acelasi mesaj intr-un timp super scurt.

 

Deci scriptul functioneaza de fapt. Mersi, si scuze.

 

In general trebuie sa inteleg ceva ca sa aiba sens sa il fac, si in mintea mea eram fixat ca nu merge say, si ca nu era nicaieri spam din script. ?

Edited by Gugustiuc.
Link to comment
Share on other sites

  • D J C locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.