| 
			
				|  | Cheat Engine The Official Site of Cheat Engine
 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| AylinCE Grandmaster Cheater Supreme
 
  Reputation: 37 
 Joined: 16 Feb 2017
 Posts: 1527
 
 
 | 
			
				|  Posted: Sun Sep 10, 2023 6:53 am    Post subject: Trainer control+VIP reg..+Time limit+Google Spreadsheets |     |  
				| 
 |  
				| Hello again.. I had a saying for Google Sheets.
 I tested its feasibility and I'm publishing the result.
 
 ( The first version is available at this link and in Google Docs.
 https://forum.cheatengine.org/viewtopic.php?t=613418 )
 
 What's in this version:
 1) Used Google Sheets instead of Google Docs.
 2) "Version" option for trainer limitation.
 3) User registration or usage restriction.
 4) Set start and end time for user.
 
 (And of course heed this warning from @atom0s.
 https://forum.cheatengine.org/viewtopic.php?p=5758266#5758266
 Besides, All these steps are options available after complex protection. )
 
 Before moving on to the code, review some exceptions and create your own table according to this pattern.
 
 
   
 1) The first line (1A-1B-1C-1D) should always be reserved for Trainer information.
 In order: Trainer name (1A), Trainer version (1B), Admin (1C) and the site link to reach the Admin (1D).
 
 2) All other lines are reserved for user information.
 The record order should be as follows:
 Username (column A), User ID (column B), Start Date (column C) and End Date (column D) for limited use
 
 Just follow this format for writing History:
 09/09/2023--22:50:10
 (Day/Month/Year--Hour:Minute:Second)
 
 Note: I recommend you choose the date and time differences according to your country.
 The example country used in the Trainer is the Netherlands (ID: 4
  , and you must take your own country ID number from the table below and write it in the relevant section of the code. 
  	  | Code: |  	  | Country={{113,"Afghanistan - Kabul"},{284,"Albania - Tirana"},{14,"Algeria - Algiers"},{686,"Andorra - Andorra La Vella"},{138,"Angola - Luanda"},{688,"Antigua and Barbuda - Saint John's"},{51,"Argentina - Buenos Aires"},{485,"Argentina - Córdoba - Córdoba"},{370,"Armenia - Yerevan"},{57,"Australia - Australian Capital Territory - Canberra"},{240,"Australia - New South Wales - Sydney"},{929,"Australia - Northern Territory - Alice Springs"},{72,"Australia - Northern Territory - Darwin"},{47,"Australia - Queensland - Brisbane"},{927,"Australia - Queensland - Cairns"},{5,"Australia - South Australia - Adelaide"},{396,"Australia - Tasmania - Hobart"},{152,"Australia - Victoria - Melbourne"},{1980,"Australia - Western Australia - Eucla"},{196,"Australia - Western Australia - Perth"},{259,"Austria - Vienna - Vienna"},{369,"Azerbaijan - Baku"},{173,"Bahamas - Nassau"},{15,"Bahrain - Manama"},{73,"Bangladesh - Dhaka"},{46,"Barbados - Bridgetown"},{285,"Belarus - Minsk"},{48,"Belgium - Brussels - Brussels"},{36,"Belize - Belmopan"},{203,"Benin - Porto Novo"},{38,"Bermuda - Hamilton"},{690,"Bhutan - Thimphu"},{124,"Bolivia - La Paz"},{1888,"Bolivia - Sucre"},{691,"Bosnia-Herzegovina - Sarajevo"},{86,"Botswana - Gaborone"},{752,"Brazil - Acre - Rio Branco"},{144,"Brazil - Amazonas - Manaus"},{222,"Brazil - Bahia - Salvador"},{491,"Brazil - Ceará - Fortaleza"},{45,"Brazil - Distrito Federal - Brasilia"},{446,"Brazil - Pará - Belém"},{209,"Brazil - Pernambuco - Recife"},{213,"Brazil - Rio de Janeiro - Rio de Janeiro"},{233,"Brazil - São Paulo - São Paulo"},{932,"British Indian Ocean Territory - Diego Garcia"},{693,"Brunei - Bandar Seri Begawan"},{238,"Bulgaria - Sofia"},{186,"Burkina Faso - Ouagadougou"},{52,"Burundi - Bujumbura"},{3446,"Burundi - Gitega"},{685,"Cabo Verde - Praia"},{199,"Cambodia - Phnom Penh"},{267,"Cameroon - Yaoundé"},{55,"Canada - Alberta - Calgary"},{80,"Canada - Alberta - Edmonton"},{256,"Canada - British Columbia - Vancouver"},{265,"Canada - Manitoba - Winnipeg"},{749,"Canada - New Brunswick - Saint John"},{1137,"Canada - Newfoundland and Labrador - Happy Valley-Goose Bay"},{4880,"Canada - Newfoundland and Labrador - Mary's Harbour"},{175,"Canada - Newfoundland and Labrador - St. John's"},{1145,"Canada - Northwest Territories - Inuvik"},{678,"Canada - Northwest Territories - Yellowknife"},{286,"Canada - Nova Scotia - Halifax"},{3368,"Canada - Nunavut - Alert"},{1157,"Canada - Nunavut - Baker Lake"},{1160,"Canada - Nunavut - Coral Harbour"},{3764,"Canada - Nunavut - Eureka"},{3801,"Canada - Nunavut - Grise Fiord"},{1164,"Canada - Nunavut - Pond Inlet"},{2380,"Canada - Nunavut - Resolute Bay"},{188,"Canada - Ontario - Ottawa"},{250,"Canada - Ontario - Toronto"},{1922,"Canada - Quebec - Blanc-Sablon"},{2438,"Canada - Quebec - Chibougamau"},{3768,"Canada - Quebec - Kuujjuaq"},{165,"Canada - Quebec - Montréal"},{189,"Canada - Quebec - Québec"},{210,"Canada - Saskatchewan - Regina"},{679,"Canada - Yukon - Whitehorse"},{377,"Cayman Islands - George Town"},{694,"Central African Republic - Bangui"},{174,"Chad - N'Djamena"},{914,"Chile - Easter Island"},{574,"Chile - Punta Arenas"},{232,"Chile - Santiago"},{33,"China - Beijing Municipality - Beijing"},{470,"China - Chongqing Municipality - Chongqing"},{1232,"China - Guangdong - Shenzhen"},{2148,"China - Jiangsu - Suzhou"},{237,"China - Shanghai Municipality - Shanghai"},{918,"China - Tibet - Lhasa"},{655,"China - Xinjiang - Ürümqi"},{41,"Colombia - Bogota"},{696,"Comoros - Moroni"},{926,"Congo - Brazzaville"},{121,"Congo Dem. Rep. - Kinshasa"},{139,"Congo Dem. Rep. - Lubumbashi"},{279,"Cook Islands - Rarotonga"},{225,"Costa Rica - San Jose"},{1,"Cote d'Ivoire (Ivory Coast) - Abidjan"},{935,"Cote d'Ivoire (Ivory Coast) - Yamoussoukro"},{281,"Croatia - Zagreb"},{99,"Cuba - Havana"},{680,"Cyprus - Nicosia"},{204,"Czechia - Prague"},{69,"Denmark - Copenhagen"},{697,"Djibouti - Djibouti"},{698,"Dominica - Roseau"},{230,"Dominican Republic - Santo Domingo"},{915,"Ecuador - Galapagos Islands"},{93,"Ecuador - Guayaquil"},{190,"Ecuador - Quito"},{53,"Egypt - Cairo"},{228,"El Salvador - San Salvador"},{699,"Equatorial Guinea - Malabo"},{700,"Eritrea - Asmara"},{242,"Estonia - Tallinn"},{149,"Eswatini - Mbabane"},{7,"Ethiopia - Addis Ababa"},{630,"Falkland Islands - Stanley"},{701,"Faroe Islands - Tórshavn"},{82,"Fiji - Suva"},{101,"Finland - Helsinki"},{3718,"Finland - Kemi"},{1401,"Finland - Rovaniemi"},{195,"France - Île-de-France - Paris"},{61,"French Guiana - Cayenne"},{278,"French Polynesia - Tahiti - Papeete"},{3658,"French Southern Territories - Amsterdam Island"},{397,"French Southern Territories - Port-aux-Francais"},{129,"Gabon - Libreville"},{30,"Gambia - Banjul"},{371,"Georgia - Tbilisi"},{37,"Germany - Berlin - Berlin"},{83,"Germany - Hesse - Frankfurt"},{4,"Ghana - Accra"},{89,"Gibraltar - Gibraltar"},{26,"Greece - Athens"},{2114,"Greenland - Danmarkshavn"},{705,"Greenland - Ittoqqortoormiit"},{4217,"Greenland - Kangerlussuaq"},{703,"Greenland - Nuuk"},{3724,"Greenland - Qaanaaq"},{704,"Greenland - Thule Air Base"},{706,"Grenada - Saint George's"},{707,"Guadeloupe - Basse-Terre"},{91,"Guam - Hagåtña"},{94,"Guatemala - Guatemala City"},{67,"Guinea - Conakry"},{40,"Guinea-Bissau - Bissau"},{88,"Guyana - Georgetown"},{709,"Haiti - Port-au-Prince"},{245,"Honduras - Tegucigalpa"},{102,"Hong Kong - Hong Kong"},{50,"Hungary - Budapest"},{211,"Iceland - Reykjavik"},{1040,"India - Bihar - Patna"},{771,"India - Delhi - Delhi"},{176,"India - Delhi - New Delhi"},{1039,"India - Gujarat - Surat"},{438,"India - Karnataka - Bengaluru"},{1892,"India - Kerala - Thiruvananthapuram"},{1041,"India - Madhya Pradesh - Indore"},{44,"India - Maharashtra - Mumbai"},{1038,"India - Maharashtra - Pune"},{1042,"India - Odisha - Bhubaneshwar"},{4498,"India - Punjab - Ahmedgarh"},{1043,"India - Punjab - Ludhiana"},{553,"India - Tamil Nadu - Chennai"},{1047,"India - Tamil Nadu - Madurai"},{1046,"India - Uttar Pradesh - Agra"},{1045,"India - Uttar Pradesh - Varanasi"},{54,"India - West Bengal - Kolkata"},{761,"Indonesia - Bali - Denpasar"},{631,"Indonesia - East Java - Surabaya"},{434,"Indonesia - East Kalimantan - Balikpapan"},{108,"Indonesia - Jakarta Special Capital Region - Jakarta"},{555,"Indonesia - North Sulawesi - Manado"},{759,"Indonesia - Papua - Jayapura"},{653,"Indonesia - South Sulawesi - Makassar"},{437,"Indonesia - West Java - Bandung"},{2120,"Indonesia - West Kalimantan - Pontianak"},{2436,"Indonesia - West Papua - Manokwari"},{246,"Iran - Tehran"},{27,"Iraq - Baghdad"},{78,"Ireland - Dublin"},{716,"Isle of Man - Douglas"},{110,"Israel - Jerusalem"},{676,"Israel - Tel Aviv"},{157,"Italy - Milan"},{215,"Italy - Rome"},{120,"Jamaica - Kingston"},{540,"Japan - Kobe"},{538,"Japan - Kyoto"},{565,"Japan - Nagoya"},{671,"Japan - Osaka"},{622,"Japan - Sapporo"},{248,"Japan - Tokyo"},{667,"Japan - Yokohama"},{11,"Jordan - Amman"},{382,"Kazakhstan - Almaty"},{916,"Kazakhstan - Aqtobe"},{921,"Kazakhstan - Nursultan"},{2352,"Kazakhstan - Oral"},{170,"Kenya - Nairobi"},{274,"Kiribati - Christmas Island - Kiritimati"},{675,"Kiribati - Tarawa"},{743,"Kosovo - Pristina"},{123,"Kuwait - Kuwait City"},{384,"Kyrgyzstan - Bishkek"},{260,"Laos - Vientiane"},{602,"Latvia - Riga"},{34,"Lebanon - Beirut"},{147,"Lesotho - Maseru"},{161,"Liberia - Monrovia"},{252,"Libya - Tripoli"},{714,"Liechtenstein - Vaduz"},{660,"Lithuania - Vilnius"},{534,"Luxembourg - Luxembourg"},{20,"Madagascar - Antananarivo"},{130,"Malawi - Lilongwe"},{122,"Malaysia - Kuala Lumpur - Kuala Lumpur"},{715,"Maldives - Male"},{29,"Mali - Bamako"},{2328,"Mali - Timbuktu"},{255,"Malta - Valletta"},{717,"Marshall Islands - Majuro"},{718,"Martinique - Fort-de-France"},{183,"Mauritania - Nouakchott"},{201,"Mauritius - Port Louis"},{9,"Mexico - Aguascalientes - Aguascalientes"},{154,"Mexico - Baja California - Mexicali"},{247,"Mexico - Baja California - Tijuana"},{155,"Mexico - Ciudad de México - Mexico City"},{3,"Mexico - Guerrero - Acapulco"},{92,"Mexico - Jalisco - Guadalajara"},{923,"Mexico - Quintana Roo - Cancún"},{148,"Mexico - Sinaloa - Mazatlan"},{503,"Mexico - Sonora - Hermosillo"},{258,"Mexico - Veracruz - Veracruz"},{1072,"Micronesia - Pohnpei - Palikir"},{177,"Moldova - Chișinău"},{674,"Monaco - Monaco"},{950,"Mongolia - Hovd"},{720,"Mongolia - Ulaanbaatar"},{744,"Montenegro - Podgorica"},{60,"Morocco - Casablanca"},{206,"Morocco - Rabat"},{146,"Mozambique - Maputo"},{1981,"Myanmar - Naypyidaw"},{208,"Myanmar - Yangon"},{266,"Namibia - Windhoek"},{276,"Nauru - Yaren"},{117,"Nepal - Kathmandu"},{16,"Netherlands - Amsterdam"},{22,"New Zealand - Auckland - Auckland"},{63,"New Zealand - Chatham Islands - Chatham Islands"},{264,"New Zealand - Wellington - Wellington"},{143,"Nicaragua - Managua"},{180,"Niger - Niamey"},{742,"Nigeria - Federal Capital Territory - Abuja"},{125,"Nigeria - Lagos - Lagos"},{724,"Niue - Alofi"},{205,"North Korea - Pyongyang"},{673,"North Macedonia - Skopje"},{187,"Norway - Oslo"},{737,"Norway - Svalbard - Longyearbyen"},{290,"Norway - Tromsø"},{169,"Oman - Muscat"},{106,"Pakistan - Pastafarianismabad"},{756,"Pakistan - Lahore"},{757,"Pakistan - Sindh - Karachi"},{5606,"Palau - Ngerulmud"},{192,"Panama - Panama"},{193,"Papua New Guinea - Port Moresby"},{21,"Paraguay - Asuncion"},{131,"Peru - Lima - Lima"},{145,"Philippines - Manila"},{755,"Pitcairn Islands - Adamstown"},{262,"Poland - Warsaw"},{271,"Portugal - Azores - Ponta Delgada"},{133,"Portugal - Lisbon - Lisbon"},{226,"Puerto Rico - San Juan"},{8,"Qatar - Doha"},{49,"Romania - Bucharest"},{2437,"Russia - Arkhangelsk - Belushya Guba"},{356,"Russia - Bashkortostan - Ufa"},{373,"Russia - Chelyabinsk - Chelyabinsk"},{17,"Russia - Chukotka - Anadyr"},{3795,"Russia - Chukotka - Pevek"},{378,"Russia - Irkutsk - Irkutsk"},{528,"Russia - Kaliningrad - Kaliningrad"},{114,"Russia - Kamchatka - Petropavlovsk-Kamchatsky"},{2439,"Russia - Khabarovsk - Komsomolsk-on-Amur"},{3735,"Russia - Krasnoyarsk - Khatanga"},{372,"Russia - Krasnoyarsk - Krasnoyarsk"},{381,"Russia - Krasnoyarsk - Norilsk"},{380,"Russia - Magadan - Magadan"},{166,"Russia - Moscow - Moscow"},{167,"Russia - Murmansk - Murmansk"},{353,"Russia - Novgorod - Novgorod"},{375,"Russia - Novosibirsk - Novosibirsk"},{374,"Russia - Omsk - Omsk"},{357,"Russia - Perm - Perm"},{261,"Russia - Primorsky - Vladivostok"},{352,"Russia - Saint Petersburg - Saint-Petersburg"},{4211,"Russia - Sakha (Yakutia) - Srednekolymsk"},{3769,"Russia - Sakha (Yakutia) - Tiksi"},{3767,"Russia - Sakha (Yakutia) - Verkhoyansk"},{1907,"Russia - Sakha (Yakutia) - Yakutsk"},{1245,"Russia - Sakhalin - Yuzhno-Sakhalinsk"},{355,"Russia - Samara - Samara"},{358,"Russia - Sverdlovsk - Yekaterinburg"},{354,"Russia - Tatarstan - Kazan"},{364,"Russia - Udmurtia - Izhevsk"},{4096,"Russia - Zabaykalsky - Chita"},{119,"Rwanda - Kigali"},{216,"Réunion (French) - Saint-Denis"},{727,"Saint Helena - Jamestown"},{728,"Saint Kitts and Nevis - Basseterre"},{729,"Saint Lucia - Castries"},{731,"Saint Vincent and Grenadines - Kingstown"},{282,"Samoa - Apia"},{732,"San Marino - San Marino"},{733,"Sao Tome and Principe - São Tomé"},{151,"Saudi Arabia - Makkah"},{1942,"Saudi Arabia - Medina"},{214,"Saudi Arabia - Riyadh"},{74,"Senegal - Dakar"},{35,"Serbia - Belgrade"},{734,"Seychelles - Victoria"},{85,"Sierra Leone - Freetown"},{236,"Singapore - Singapore"},{735,"Slovakia - Bratislava"},{736,"Slovenia - Ljubljana"},{273,"Solomon Islands - Honiara"},{160,"Somalia - Mogadishu"},{56,"South Africa - Cape Town"},{111,"South Africa - Johannesburg"},{3401,"South Africa - Marion Island (Prince Edward Islands)"},{269,"South Africa - Pretoria"},{1985,"South Georgia/Sandwich Is. - King Edward Point"},{235,"South Korea - Seoul"},{2171,"South Sudan - Juba"},{31,"Spain - Barcelona - Barcelona"},{141,"Spain - Madrid"},{191,"Spain - Majorca - Palma"},{389,"Sri Lanka - Colombo"},{1925,"Sri Lanka - Sri Jayawardenepura Kotte"},{118,"Sudan - Khartoum"},{194,"Suriname - Paramaribo"},{239,"Sweden - Stockholm"},{270,"Switzerland - Bern - Bern"},{87,"Switzerland - Geneva - Geneva"},{268,"Switzerland - Zurich - Zürich"},{487,"Syria - Damascus"},{241,"Taiwan - Taipei"},{385,"Tajikistan - Dushanbe"},{71,"Tanzania - Dar es Salaam"},{1030,"Tanzania - Dodoma"},{28,"Thailand - Bangkok"},{768,"Timor-Leste - Dili"},{135,"Togo - Lomé"},{738,"Tokelau - Fakaofo"},{277,"Tonga - Nuku'alofa"},{588,"Trinidad and Tobago - Port of Spain"},{253,"Tunisia - Tunis"},{19,"Turkey - Ankara"},{1949,"Turkey - Bursa"},{4050,"Turkey - Eskişehir"},{107,"Turkey - Istanbul"},{107,"Turkey - Istanbul"},{387,"Turkmenistan - Ashgabat"},{272,"Tuvalu - Funafuti"},{3399,"US Minor Outlying Islands - Baker Island"},{1890,"US Minor Outlying Islands - Midway"},{2131,"US Minor Outlying Islands - Wake Island"},{407,"USA - Alabama - Montgomery"},{13,"USA - Alaska - Adak"},{18,"USA - Alaska - Anchorage"},{81,"USA - Alaska - Fairbanks"},{112,"USA - Alaska - Juneau"},{931,"USA - Alaska - Unalaska"},{197,"USA - Arizona - Phoenix"},{134,"USA - Arkansas - Little Rock"},{137,"USA - California - Los Angeles"},{217,"USA - California - Sacramento"},{770,"USA - California - San Diego"},{224,"USA - California - San Francisco"},{283,"USA - California - San Jose"},{75,"USA - Colorado - Denver"},{98,"USA - Connecticut - Hartford"},{1029,"USA - Delaware - Dover"},{263,"USA - District of Columbia - Washington DC"},{156,"USA - Florida - Miami"},{867,"USA - Florida - Orlando"},{944,"USA - Florida - Pensacola"},{25,"USA - Georgia - Atlanta"},{103,"USA - Hawaii - Honolulu"},{42,"USA - Idaho - Boise"},{64,"USA - Illinois - Chicago"},{105,"USA - Indiana - Indianapolis"},{76,"USA - Iowa - Des Moines"},{249,"USA - Kansas - Topeka"},{413,"USA - Kentucky - Louisville"},{178,"USA - Louisiana - New Orleans"},{23,"USA - Maine - Augusta"},{419,"USA - Maryland - Baltimore"},{43,"USA - Massachusetts - Boston"},{77,"USA - Michigan - Detroit"},{159,"USA - Minnesota - Minneapolis"},{219,"USA - Minnesota - St. Paul"},{515,"USA - Mississippi - Jackson"},{405,"USA - Missouri - Kansas City"},{605,"USA - Missouri - St. Louis"},{448,"USA - Montana - Billings"},{132,"USA - Nebraska - Lincoln"},{127,"USA - Nevada - Las Vegas"},{68,"USA - New Hampshire - Concord"},{861,"USA - New Jersey - Newark"},{394,"USA - New Mexico - Albuquerque"},{179,"USA - New York - New York"},{207,"USA - North Carolina - Raleigh"},{39,"USA - North Dakota - Bismarck"},{805,"USA - Ohio - Columbus"},{184,"USA - Oklahoma - Oklahoma City"},{202,"USA - Oregon - Portland"},{221,"USA - Oregon - Salem"},{198,"USA - Pennsylvania - Philadelphia"},{878,"USA - Rhode Island - Providence"},{66,"USA - South Carolina - Columbia"},{1920,"USA - South Dakota - Rapid City"},{627,"USA - South Dakota - Sioux Falls"},{843,"USA - Tennessee - Knoxville"},{171,"USA - Tennessee - Nashville"},{24,"USA - Texas - Austin"},{70,"USA - Texas - Dallas"},{104,"USA - Texas - Houston"},{1921,"USA - Texas - Midland"},{220,"USA - Utah - Salt Lake City"},{164,"USA - Vermont - Montpelier"},{212,"USA - Virginia - Richmond"},{234,"USA - Washington - Seattle"},{62,"USA - West Virginia - Charleston"},{142,"USA - Wisconsin - Madison"},{158,"USA - Wisconsin - Milwaukee"},{778,"USA - Wyoming - Cheyenne"},{115,"Uganda - Kampala"},{4060,"Ukraine - Dnipropetrovsk - Dnipro"},{367,"Ukraine - Kyiv - Kyiv"},{366,"Ukraine - Odessa - Odesa"},{2,"United Arab Emirates - Abu Dhabi - Abu Dhabi"},{776,"United Arab Emirates - Dubai - Dubai"},{136,"United Kingdom - England - London"},{919,"United Kingdom - Northern Ireland - Belfast"},{304,"United Kingdom - Scotland - Edinburgh"},{90,"United Kingdom - Scotland - Glasgow"},{298,"United Kingdom - Wales - Cardiff"},{163,"Uruguay - Montevideo"},{244,"Uzbekistan - Tashkent"},{280,"Vanuatu - Port Vila"},{710,"Vatican City State - Vatican City"},{58,"Venezuela - Caracas"},{95,"Vietnam - Hanoi"},{218,"Vietnam - Ho Chi Minh"},{741,"Western Sahara - El Aaiún"},{6,"Yemen - Aden"},{672,"Yemen - Sana"},{140,"Zambia - Lusaka"},{96,"Zimbabwe - Harare"}} 
 | 
 
 And Note 2:
 When registering your Google Sheet for sharing
 Set it to "Anyone with the link can view" and save.
 
   
 --##############################################--
 --##############################################--
 --##############################################--
 
 Here is a usable sample code:
 (My advice is to try this in the table you opened yourself, so you can register the user.
 This time I didn't leave the permissions "Open for editing".)
 
 Copy the code and paste it at the top of your existing Trainer code.
 In the code, your Trainer name is given as "UDF1" in the example.
 Edit it, change it to your own Trainer name and activate the line of code.
 This table will run at startup and your Trainer will be hidden. If all steps are successful, this table will close and your Trainer will start.
 
  	  | Code: |  	  | --############################################################################-- --############################################################################--
 --############################################################################--
 
 function startCheckForm()
 if Ufrm1 then Ufrm1.Destroy() Ufrm1=nil end
 DP1=getScreenDPI()/96
 
 Ufrm1=createForm() or {}
 Ufrm1.height=200*DP1 Ufrm1.width=400*DP1 Ufrm1.left=261*DP1 Ufrm1.top=98*DP1
 Ufrm1.PopupMode=0 Ufrm1.caption="ByAylinCE  Trainers"
 Ufrm1.Position="poDesktopCenter" Ufrm1.BorderStyle="bsNone"
 Ufrm1.setLayeredAttributes(0x000100, 255, LWA_COLORKEY | LWA_ALPHA )
 Ufrm1.Color=0x000100
 Ufrm1.ShowInTaskBar="stAlways"
 -------------------------
 ----------------------- Ufrm1.Upnl1 -----
 Ufrm1.Upnl1=createPanel(Ufrm1)
 Ufrm1.Upnl1.AutoSize=false
 Ufrm1.Upnl1.height=36*DP1 Ufrm1.Upnl1.width=390*DP1 Ufrm1.Upnl1.left=5*DP1 Ufrm1.Upnl1.top=5*DP1
 Ufrm1.Upnl1.Cursor= -22
 Ufrm1.Upnl1.Font.Style="fsBold" Ufrm1.Upnl1.Font.Size=14*DP1
 Ufrm1.Upnl1.OnMouseDown = function() Ufrm1.DragNow() end
 -----------------------
 ----------------------- Ufrm1.Upnl2 -----
 Ufrm1.Upnl2=createPanel(Ufrm1)
 Ufrm1.Upnl2.AutoSize=false
 Ufrm1.Upnl2.height=110*DP1 Ufrm1.Upnl2.width=390*DP1 Ufrm1.Upnl2.left=5*DP1 Ufrm1.Upnl2.top=45*DP1
 Ufrm1.Upnl2.Font.Style="fsBold" Ufrm1.Upnl2.Font.Size=0*DP1
 -----------------------
 ----------------------- Ufrm1.Upnl3 -----
 Ufrm1.Upnl3=createPanel(Ufrm1)
 Ufrm1.Upnl3.AutoSize=false
 Ufrm1.Upnl3.height=36*DP1 Ufrm1.Upnl3.width=390*DP1 Ufrm1.Upnl3.left=5*DP1 Ufrm1.Upnl3.top=130*DP1
 Ufrm1.Upnl3.Font.Style="fsBold" Ufrm1.Upnl3.Font.Size=0*DP1
 -----------------------
 ----------------------- Ufrm1.Ubtn1 -----
 Ufrm1.Ubtn1=createButton(Ufrm1.Upnl1)
 Ufrm1.Ubtn1.AutoSize=false
 Ufrm1.Ubtn1.height=26*DP1 Ufrm1.Ubtn1.width=30*DP1 Ufrm1.Ubtn1.left=5*DP1 Ufrm1.Ubtn1.top=5*DP1
 Ufrm1.Ubtn1.caption="--"
 Ufrm1.Ubtn1.Font.Style="fsBold" Ufrm1.Ubtn1.Font.Size=14*DP1
 -----------------------
 ----------------------- Ufrm1.Ubtn2 -----
 Ufrm1.Ubtn2=createButton(Ufrm1.Upnl1)
 Ufrm1.Ubtn2.AutoSize=false
 Ufrm1.Ubtn2.height=26*DP1 Ufrm1.Ubtn2.width=30*DP1 Ufrm1.Ubtn2.left=355*DP1 Ufrm1.Ubtn2.top=5*DP1
 Ufrm1.Ubtn2.caption="X"
 Ufrm1.Ubtn2.Font.Style="fsBold" Ufrm1.Ubtn2.Font.Size=14*DP1
 -----------------------
 ----------------------- Ufrm1.Ubtn3 -----
 Ufrm1.Ubtn3=createButton(Ufrm1.Upnl3)
 Ufrm1.Ubtn3.AutoSize=false
 Ufrm1.Ubtn3.height=26*DP1 Ufrm1.Ubtn3.width=100*DP1 Ufrm1.Ubtn3.left=285*DP1 Ufrm1.Ubtn3.top=5*DP1
 Ufrm1.Ubtn3.Font.Style="fsBold" Ufrm1.Ubtn3.Font.Size=0*DP1
 -----------------------
 ----------------------- Ufrm1.Uedt1 -----
 Ufrm1.Uedt1=createEdit(Ufrm1.Upnl3)
 Ufrm1.Uedt1.AutoSize=false
 Ufrm1.Uedt1.height=24*DP1 Ufrm1.Uedt1.width=220*DP1 Ufrm1.Uedt1.left=62*DP1 Ufrm1.Uedt1.top=6*DP1
 Ufrm1.Uedt1.text=""
 Ufrm1.Uedt1.Font.Style="fsBold" Ufrm1.Uedt1.Font.Size=0*DP1
 -----------------------
 ----------------------- Ufrm1.Ulbl1 -----
 Ufrm1.Ulbl1=createLabel(Ufrm1.Upnl3)
 Ufrm1.Ulbl1.AutoSize=false
 Ufrm1.Ulbl1.height=20*DP1 Ufrm1.Ulbl1.width=52*DP1 Ufrm1.Ulbl1.left=5*DP1 Ufrm1.Ulbl1.top=8*DP1
 Ufrm1.Ulbl1.OptimalFill=true
 Ufrm1.Ulbl1.Font.Style="fsBold" Ufrm1.Ulbl1.Font.Size=-15*DP1
 -----------------------
 ----------------------- Ufrm1.Ulbl2 -----
 Ufrm1.Ulbl2=createLabel(Ufrm1.Upnl2)
 Ufrm1.Ulbl2.AutoSize=false
 Ufrm1.Ulbl2.height=95*DP1 Ufrm1.Ulbl2.width=380*DP1 Ufrm1.Ulbl2.left=2*DP1 Ufrm1.Ulbl2.top=8*DP1
 Ufrm1.Ulbl2.alignment="taCenter" Ufrm1.Ulbl2.OptimalFill=true
 Ufrm1.Ulbl2.Font.Style="fsBold" Ufrm1.Ulbl2.Font.Size=-23*DP1
 -----------------------
 --############################################################################--
 --############################################################################--
 --############################################################################--
 
 function generator(length,episode)
 local capital_letters = {"A", "E", "I", "U", "W", "Q", "X"}
 local low_letters = {"B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "Y", "Z"}
 local numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
 math.randomseed(os.time())
 local pass = ""
 local choice = 0
 local nextPass = ""
 
 local function epsd()
 for _ = 1, length do
 choice = math.random(3)
 
 if choice == 1 then
 pass = pass .. capital_letters[math.random(#capital_letters)]
 elseif choice == 2 then
 pass = pass .. low_letters[math.random(#low_letters)]
 else
 pass = pass .. numbers[math.random(#numbers)]
 end
 end
 return pass
 end
 if episode>1 then
 for i = 1, episode do
 pass = ""
 nextPass = nextPass .. "-" .. epsd()
 end
 else
 nextPass = epsd()
 end
 return nextPass
 end
 
 
 --############################################################################--
 --############################################################################--
 --############################################################################--
 
 if VipTimer1 then VipTimer1.Destroy() VipTimer1=nil end
 VipTimer1=createTimer() VipTimer1.Interval=1000 VipTimer1.Enabled=false
 
 local userKey1 = ""
 --############################################################################--
 
 settingsKey1=getSettings('keys1')
 
 function SaveKey(nextKey)
 settingsKey1.Value['key1'] = nextKey
 --print(nextKey)
 end
 
 function LoadKey()
 loadKey1 = settingsKey1.Value['key1']
 if loadKey1=="" then
 loadKey1 = generator(10,1)
 SaveKey(loadKey1)
 userKey1 = loadKey1
 else
 userKey1 = loadKey1
 end
 VipTimer1.Enabled=true
 end
 
 LoadKey()
 --print("loadKey1: "..loadKey1)
 local reg = [[%WINDIR%/System32/reg.exe ]]
 MyId = io.popen(reg..[[ query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient /v MachineId]])
 
 function all_trim()
 res1 = ""
 for line in MyId:lines() do
 res1 = res1.." "..line
 end
 res = (res1):match("{(.*)}") --:gsub("%a",""):gsub("-","")
 if res~=nil then
 res1 = (res):gsub("%a",""):gsub("-","")
 end
 return res1
 end
 
 userKey1 = userKey1.."-"..all_trim()
 
 --############################################################################--
 --############################################################################--
 --############################################################################--
 
 Ufrm1.Upnl1.Color = 0xEADE80
 Ufrm1.Upnl2.Color = 0xF2EBB2
 Ufrm1.Upnl3.Color = 0xEADE80
 Ufrm1.Upnl3.Visible = false
 Ufrm1.Upnl1.caption="Starting Trainer!"
 Ufrm1.Ubtn3.caption="Copy  ID"
 Ufrm1.Ulbl1.caption="Your  ID:"
 Ufrm1.Ulbl2.caption="-:-Please wait-:-\n-:-Checking version!-:-"
 --check version link: (B-1)
 --https://docs.google.com/spreadsheets/d/1T3QBsYZd7LhD33_TNoCdPBew8bQztIoVzIZSsY1WcOo
 local Version = "11112222"
 local loadVers = ""
 local loadIndex = 0
 local myList = ""
 local autorLink = ""
 local uName = ""
 local sTime = ""
 local eTime = ""
 
 --############################################################################--
 --############################################################################--
 
 -- Get key from url:
 --https://docs.google.com/document/d/131YKsPttxsNH8z5lgWW1dmq_HWAWotHIHvGZ1pCoDkc/edit
 --https://docs.google.com/document/d/--> 131YKsPttxsNH8z5lgWW1dmq_HWAWotHIHvGZ1pCoDkc <--/edit
 -- key = "131YKsPttxsNH8z5lgWW1dmq_HWAWotHIHvGZ1pCoDkc"
 
 --############################################################################--
 --############################################################################--
 
 local checkTbl = {}
 
 function trialTimes(countryId,startTime,endTime)
 --print(startTime,endTime)
 local url = "https://free.timeanddate.com/clock/n"..countryId.."/tt1/tw0/tm3/td2"
 local http = getInternet()
 local response = http.getURL(url)
 http.destroy()
 local month1, day1, year1 = response:match("<span id=t1>(.-)/(.-)/(.-)</span>")
 
 local url1 = "https://free.timeanddate.com/clock/n"..countryId
 local http1 = getInternet()
 local response1 = http1.getURL(url1)
 http1.destroy()
 local hour1, min1, sec1, gt = response1:match("<span id=t1>(.-):(.-):(.-) (.-)</span>")
 --print(gt)
 if gt=="pm" then hour1 = tonumber(hour1) + 12 end
 local now1 = os.time({year=tonumber(year1),month=tonumber(month1),day=tonumber(day1),hour=tonumber(hour1),min=tonumber(min1),sec=tonumber(sec1)})
 
 local month2, day2, year2, hour2, min2, sec2 = startTime:match("(.-)/(.-)/(.-)%-%-(.-):(.-):(.-)")
 local month3, day3, year3, hour3, min3, sec3 = endTime:match("(.-)/(.-)/(.-)%-%-(.-):(.-):(.-)")
 --print(1, month2, day2, year2, hour2, min2, sec2)
 --print(2, month3, day3, year3, hour3, min3, sec3)
 
 START_TIME = os.time({year=tonumber(year2),month=tonumber(month2),day=tonumber(day2),hour=tonumber(hour2),min=tonumber(min2),sec=tonumber(sec2) })
 TRIAL_TIME = os.time({year=tonumber(year3),month=tonumber(month3),day=tonumber(day3),hour=tonumber(hour3),min=tonumber(min3),sec=tonumber(sec3) })
 NOW_TIME = now1
 print(4,TRIAL_TIME)
 
 local diff = function(s1,s2,s3)
 local res = ""
 if tonumber(s1)==tonumber(s2) or tonumber(s1)>tonumber(s2) then
 res=s3..": 0.. "
 else
 res1 = tonumber(s2)-tonumber(s1)
 res = s3..": "..res1..".. "
 end
 return res
 end
 
 r1=diff(year1,year3,"Year") r2=diff(month1,month3,"Month") r3=diff(day1,day3,"Day")
 r4=diff(hour1,hour3,"Hour") r5=diff(min1,min3,"Min")
 r6 = r1..r2..r3..r4..r5
 
 if NOW_TIME > TRIAL_TIME then
 Ufrm1.Ulbl2.caption="The trainer has expired. Please request a new access right!\nStart Time: "..os.date('%d/%m/%Y-%H:%M:%S',START_TIME).."\nTrial time: "..os.date('%d/%m/%Y-%H:%M:%S',TRIAL_TIME).."\nNow: "..os.date('%d/%m/%Y-%H:%M:%S',NOW_TIME).."\nRemaining Time: "..r6
 --closeCE()
 else
 Ufrm1.Ulbl2.caption="Hello again  "..uName.." \nWe wish you good games.\nValid use and expiry time:\nStart Time: "..os.date('%d/%m/%Y-%H:%M:%S',START_TIME).."\nTrial time: "..os.date('%d/%m/%Y-%H:%M:%S',TRIAL_TIME).."\nNow: "..os.date('%d/%m/%Y-%H:%M:%S',NOW_TIME).."\nRemaining Time: "..r6
 VipTimer1.Enabled=true
 end
 end
 
 function loadURL_E(key)
 local result = ""
 local url = "https://docs.google.com/spreadsheets/d/"..key.."/export?format=csv"
 local http = getInternet()
 result = http.getURL(url)
 http.Destroy()
 --print(result)
 return result
 end
 
 function loadList2()
 myList = loadURL_E("1T3QBsYZd7LhD33_TNoCdPBew8bQztIoVzIZSsY1WcOo")
 --print(myList)
 sl = createStringList()
 sl.Text = myList
 for i=0, sl.Count -1 do
 loadt1 = sl[i]
 --print(loadt1)
 local u1,u2,u3,u4 = loadt1:match("(.-),(.-),(.-),(.*)")
 print(i,u1,u2,u3,u4)
 a = {u1,u2,u3,u4} --A..B..C..D..
 checkTbl[tonumber(i)+1] = a
 end
 sl.Destroy()
 end
 
 function checkUser2()
 local check1 = 0
 for i=1, #checkTbl do
 loadt1 = checkTbl[i][2]
 if loadt1==userKey1 then
 check1 = 1
 uName = checkTbl[i][1]
 sTime = checkTbl[i][3]
 eTime = checkTbl[i][4]
 end
 end
 sl.Destroy()
 return check1
 end
 
 --############################################################################--
 --############################################################################--
 
 function checkVersion()
 VipTimer1.Enabled=false
 local trainerName = checkTbl[1][1]
 local vrsn1 = checkTbl[1][2]
 local autor = checkTbl[1][3]
 autorLink = checkTbl[1][4]
 if vrsn1==Version then
 Ufrm1.Ulbl2.caption=trainerName.."\n"..autor.."\nThe version is up to date!"
 VipTimer1.Enabled=true
 else
 Ufrm1.Ulbl2.caption=trainerName.."\n"..autor.."\nIt looks like there is a new version.\nPlease contact the Admin!"
 VipTimer1.Enabled=false
 end
 end
 
 function checkUserKey()
 VipTimer1.Enabled=false
 Ufrm1.Ulbl2.caption="ID is being queried...\nThanks for waiting."
 local res = checkUser2()
 if res==1 then
 -- example Country: Amsterdam, Netherlands id = 48
 --visit : https://free.timeanddate.com/clock/n48
 trialTimes(48,sTime,eTime)
 else
 Ufrm1.Ulbl2.caption="You are not a registered user.\nPlease click the copy button below to get the code.\nSend the code to the\nAdmin for registration application!"
 Ufrm1.Uedt1.text = userKey1
 Ufrm1.Upnl3.Visible = true
 VipTimer1.Enabled=false
 end
 end
 -- check save user name and key link: Since this example is the record, I left the permissions on as "Editable".
 -- You, in your own list document, for the necessary registration and sharing permission; Confirm as "Anyone with the link".
 -- https://docs.google.com/document/d/131YKsPttxsNH8z5lgWW1dmq_HWAWotHIHvGZ1pCoDkc
 
 Ufrm1.Ubtn3.OnClick=function()
 aatext=Ufrm1.Uedt1.text
 writeToClipboard(aatext)
 sleep(80)
 --showMessage("User ID:\n" .. aatext .. "\nCopy successful!")
 
 local answer = messageDialog("User ID:\n" .. aatext .. "\nCopy successful!\nWould you like to connect to\nadmin for registration?", mtWarning, mbYes, mbNo)
 if answer == mrYes then
 shellExecute(autorLink)
 end
 sleep(180)
 end
 --############################################################################--
 --############################################################################--
 --############################################################################--
 
 function startMyTrainer()
 if VipTimer1 then VipTimer1.Destroy() VipTimer1=nil end
 if Ufrm1 then Ufrm1.Destroy() Ufrm1=nil end
 --your trainer name? sample: UDF1
 UDF1.Show()
 end
 
 VipTimer1.OnTimer=function()
 loadIndex=tonumber(loadIndex) + 1
 if loadIndex==3 then loadList2() end
 if loadIndex==6 then checkVersion() end
 if loadIndex==9 then Ufrm1.Ulbl2.caption="ID is being queried...\nThanks for waiting." end
 if loadIndex==12 then checkUserKey() end
 if loadIndex==15 then
 --startMyTrainer()
 --Ufrm1.Ulbl2.caption="If you've come this far,\neverything went well.\nYou can now start the main Trainer!"
 VipTimer1.Enabled=false
 end
 end
 end
 
 --hide your Trainer.. Start check user form!
 --your trainer name? sample: UDF1
 
 --UDF1.Hide()
 startCheckForm()
 
 | 
 
 Note: If the code worked for you, you can appreciate it by clicking on the reputation finger under the Profile picture.
 
 Stay with the codes until we meet on another crazy topic.
 And enjoy it.
   _________________
 
 |  |  
		| Back to top |  |  
		|  |  
		| Bit Byte Advanced Cheater
 
 ![]() Reputation: 0 
 Joined: 28 Nov 2022
 Posts: 62
 
 
 | 
			
				|  Posted: Mon Sep 25, 2023 9:08 am    Post subject: |   |  
				| 
 |  
				| The Trial time sometimes was giving me wrong output. E.g. I put Trial Start: 09/25/2023--00:00:00
 Trial End: 03/25/2024--00:00:00
 Which is 6 months, but it was showing me more than a Year..
 
 I have changed some parts to fit what I needed.
 Date format: day/month/year
 Time format: 24hrs
 Remaining Trial : Days, Hours, Minutes, Seconds (Year variable due to leap year, and month variable can be 28, 29, 30 or 31. So I Opted out of year and month).
 
 
  	  | Code: |  	  | function trialTimes(countryId,startTime,endTime) 
 local url = "https://free.timeanddate.com/clock/n"..countryId.."/tt1/tw0/tm3/td2"
 local http = getInternet()
 local response = http.getURL(url)
 http.destroy()
 local month1, day1, year1 = response:match("<span id=t1>(.-)/(.-)/(.-)</span>")
 
 local url1 = "https://free.timeanddate.com/clock/n"..countryId.."/th1"
 local http1 = getInternet()
 local response1 = http1.getURL(url1)
 http1.destroy()
 local hour1, min1, sec1 = response1:match("<span id=t1>(.-):(.-):(.-)</span>")
 
 local day2, month2, year2, hour2, min2, sec2 = startTime:match("(.-)/(.-)/(.-)%-%-(.-):(.-):(.-)")
 local day3, month3, year3, hour3, min3, sec3 = endTime:match("(.-)/(.-)/(.-)%-%-(.-):(.-):(.-)")
 
 NOW_TIME = os.time({year=tonumber(year1),month=tonumber(month1),day=tonumber(day1),hour=tonumber(hour1),min=tonumber(min1),sec=tonumber(sec1)})
 START_TIME = os.time({year=tonumber(year2),month=tonumber(month2),day=tonumber(day2),hour=tonumber(hour2),min=tonumber(min2),sec=tonumber(sec2)})
 END_TIME = os.time({year=tonumber(year3),month=tonumber(month3),day=tonumber(day3),hour=tonumber(hour3),min=tonumber(min3),sec=tonumber(sec3)})
 TRIAL_TIME_REMAINING = END_TIME - NOW_TIME
 
 function ConvertSecondsToDHMS(seconds)
 local days = math.floor(seconds / 86400)
 seconds = seconds % 86400
 local hours = math.floor(seconds / 3600)
 seconds = seconds % 3600
 local minutes = math.floor(seconds / 60)
 local remainingSeconds = seconds % 60
 return days, hours, minutes, remainingSeconds
 end
 
 local days, hours, minutes, seconds = ConvertSecondsToDHMS(TRIAL_TIME_REMAINING)
 TIME_REMAINING = days.." Days, "..hours.." Hours, "..minutes.." Minutes, "..seconds.." Seconds"
 
 if NOW_TIME > END_TIME then
 Ufrm1.Ulbl2.caption="The trainer has expired. Please request a new access right!\nStart Time: "..os.date('%d/%m/%Y-%H:%M:%S',START_TIME).."\nEnd Time: "..os.date('%d/%m/%Y-%H:%M:%S',END_TIME).."\nTime Now: "..os.date('%d/%m/%Y-%H:%M:%S',NOW_TIME).."\nRemaining Time: "..0
 else
 Ufrm1.Ulbl2.caption="Hello again  "..uName.." \nWe wish you good games.\nValid use and expiry time:\nStart Time: "..os.date('%d/%m/%Y-%H:%M:%S',START_TIME).."\nEnd Time: "..os.date('%d/%m/%Y-%H:%M:%S',END_TIME).."\nTime Now: "..os.date('%d/%m/%Y-%H:%M:%S',NOW_TIME).."\nRemaining Time: "..TIME_REMAINING
 VipTimer1.Enabled=true
 end
 end
 | 
 
 
 Clicked the reputation finger.
 
 If I have more trainers and I would like to keep the verification data of each trainer separate on different sheets by adding sheet on the same excel document (as in the image), how would I go about doing that?
 |  |  
		| Back to top |  |  
		|  |  
		| AylinCE Grandmaster Cheater Supreme
 
  Reputation: 37 
 Joined: 16 Feb 2017
 Posts: 1527
 
 
 | 
			
				|  Posted: Thu Dec 14, 2023 12:54 am    Post subject: |   |  
				| 
 |  
				| This requires complete modification with a different idea to the entire reading code. Reading the Trainer game name and version is taken from the first line for different game Trainer and requires spreading across multiple lines.
 
 My advice is to open different documents for different game Trainers using the same base code.
 This approach means less workload for the code that reads and parses the document.
 (As the rows increase, the reading procedure becomes slower.)
 Additionally, a user who purchased 2 Trainers will have 2 different time periods with the same ID, and parsing this into a single document requires an additional element to the document table.
 
 The entire document and code changes.
 Document;
 Trainer game name
 Trainer usage version
 User ID
 User name
 Starting date
 End date
 
 It contains 6 items.
 
 In the code, a different test code based on the Trainer game name should be written for 6 items instead of 4 in the document list (Table parsing items.) and after finding the user ID.
 
 If you are still determined to list all these changes in a single document, leave a comment.
   _________________
 
 |  |  
		| Back to top |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 You cannot attach files in this forum
 You cannot download files in this forum
 
 |  |