Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot SA-MP Pawn Scripting [Pawn] Next and back button for dialogs.

 
  • 0 Vote(s) - 0 Average
Pawn Next and back button for dialogs.
Stefhan
Offline

Burgershot Member
Posts: 11
Threads: 5
Joined: Apr 2019
Reputation: 2
#1
2020-03-24, 05:51 PM (This post was last modified: 2020-03-24, 05:52 PM by Stefhan.)
I have been trying to add a next/back button to this dialog for every 10 results. So far, I haven't managed to do it, hence I reverted the code back to the version without that.

Can anyone help me figure this out? There's really no good guide on this.
Code:
       case E_WARP_DIALOG_EXTS:
       {
           new warpstr[2000];
           format(warpstr, sizeof warpstr, INLINE[COLOR_SPOPT]"ID\t" INLINE[COLOR_SPOPT]"Name\n");
           for(new i = 0; i < MAX_WARPS; i++)
           {
               if(!g_WarpsInfo[i][E_WARP_EXISTS])
                   continue;
               if(g_WarpsInfo[i][E_WARP_CATEGORY] != 1) // 1 is the category ID for exteriors
                   continue;
               else
                   format(warpstr, sizeof(warpstr), "%s" INLINE[COLOR_OPTION] "#%d\t" INLINE[COLOR_OPTION] "%s\t\n", warpstr, i, g_WarpsInfo[i][E_WARP_NAME]);
           }

           inline DialogResponse_2(_playerid, dialogid, response, listitem, inputtext[])
           {
               #pragma unused dialogid, listitem
               if(!response)
               {
                   WARPS_TeleportList(_playerid, E_WARP_DIALOG_MAIN);
               }
               if(response)
               {
                   new str[256], warp_id;

                   sscanf(inputtext[1],"d",warp_id);

                   DelayedTeleport(playerid, g_TeleportDelay, g_WarpsInfo[warp_id][E_WARP_POS][0], g_WarpsInfo[warp_id][E_WARP_POS][1], g_WarpsInfo[warp_id][E_WARP_POS][2]\
                   , g_WarpsInfo[warp_id][E_WARP_POS][3], g_WarpsInfo[warp_id][E_WARP_WORLD], g_WarpsInfo[warp_id][E_WARP_INT]);

                   format(str, sizeof(str), "%s %s(%d) has warped to %s(%d).", ReturnStaffLevel(playerid), ReturnICName(playerid), playerid, g_WarpsInfo[warp_id][E_WARP_NAME], warp_id);
                   ABroadCast(COLOR[COLOR_SADMIN], str, 1);
               }
           }
           Dialog_ShowCallback(playerid, using inline DialogResponse_2, DIALOG_STYLE_TABLIST_HEADERS, INLINE[COLOR_HEADER] "Exterior Warps", warpstr, "Teleport", "Return");
       }
akosd127
Offline

Burgershot Member
Posts: 7
Threads: 0
Joined: Mar 2020
Reputation: 1
Location: Hungary
#2
2020-03-25, 09:08 AM
Check this FS (Line: 1532-1553)

PHP Code:
shown ++;
P_DialogPage 

https://www.solidfiles.com/v/az4R38dkpjqna
Stefhan
Offline

Burgershot Member
Posts: 11
Threads: 5
Joined: Apr 2019
Reputation: 2
#3
2020-03-25, 07:55 PM (This post was last modified: 2020-03-25, 07:57 PM by Stefhan.)
This is how far I got. (Note that the code below is from a different system, not warps, but spawns. Tho the code is the same except for the variables.)

ID 0 isn't on the list anymore. The next page button acts as the teleport of ID 0 lol.. How do I proceed from here? I didn't add functionality to "next page" yet because I don't know how to fix the bug I just described and how to proceed.



[Image: cb75048eda4224d181b8dd315afd78ca.png]

Code:
       case E_SPAWN_DIALOG_LIST:
       {
           g_DialogPage[playerid] = 1;
           new title[128], spawnstr[2000], SpawnName[MAX_SPAWNS_NAME_SIZE], pages = GetPageCount(MAX_RESULTS, MAX_SPAWNS), count = ((MAX_RESULTS * g_DialogPage[playerid]) - MAX_RESULTS), bool:nextpage = false;
           format(spawnstr, sizeof spawnstr, INLINE[COLOR_SPOPT]"ID\t" INLINE[COLOR_SPOPT]"Location\n");
           for(new i = count; i < MAX_SPAWNS; i++)
           {
               if(!g_SpawnsInfo[i][E_SPAWN_EXISTS])
                   continue;
               else
               {
                   count ++;
                   if(count <= MAX_RESULTS * g_DialogPage[playerid])
                   {
                       GetPickup3DLocation(g_SpawnsInfo[count][E_SPAWN_POS][0], g_SpawnsInfo[count][E_SPAWN_POS][1], g_SpawnsInfo[count][E_SPAWN_POS][2], SpawnName, MAX_SPAWNS_NAME_SIZE);
                       format(spawnstr, sizeof(spawnstr), "%s" INLINE[COLOR_OPTION] "#%d\t" INLINE[COLOR_OPTION] "%s\t\n", spawnstr, count, SpawnName);
                   }
                   if(count > MAX_RESULTS * g_DialogPage[playerid])
                   {
                       nextpage = true;
                       break;
                   }
               }
           }

           if(nextpage == true)
           {
               if(g_DialogPage[playerid] == 1)
                   format(spawnstr, sizeof(spawnstr), "%s" INLINE[COLOR_SPOPT] "Next page", spawnstr);
               else if(g_DialogPage[playerid] == pages)
                   format(spawnstr, sizeof(spawnstr), "%s" INLINE[COLOR_SPOPT] "Previous page", spawnstr);
               else if(g_DialogPage[playerid] > 1)
                   format(spawnstr, sizeof(spawnstr), "%s" INLINE[COLOR_SPOPT] "Next page\nPrevious page", spawnstr);
           }

           format(title, sizeof title, INLINE[COLOR_HEADER]"Spawnpoints (Page %d of %d)", g_DialogPage[playerid], pages);

           inline DialogResponse_2(_playerid, dialogid, response, listitem, inputtext[])
           {
               #pragma unused dialogid, listitem
               if(!response)
               {
                   g_DialogPage[playerid] = 0;
                   SPAWNS_TeleportList(_playerid, E_SPAWN_DIALOG_MAIN);
                   return 1;
               }
               if(response)
               {
                   if(g_AccountInfo[playerid][E_ACCOUNT_ADMIN_LEVEL] >= ADMIN_LEAD)
                   {
                       new str[256], spawn_id;

                       sscanf(inputtext[1],"d",spawn_id);

                       DelayedTeleport(playerid, g_TeleportDelay, g_SpawnsInfo[spawn_id][E_SPAWN_POS][0], g_SpawnsInfo[spawn_id][E_SPAWN_POS][1], g_SpawnsInfo[spawn_id][E_SPAWN_POS][2] + 0.5, g_SpawnsInfo[spawn_id][E_SPAWN_POS][3], 0, 0);

                       GetPickup3DLocation(g_SpawnsInfo[spawn_id][E_SPAWN_POS][0], g_SpawnsInfo[spawn_id][E_SPAWN_POS][1], g_SpawnsInfo[spawn_id][E_SPAWN_POS][2], SpawnName, MAX_SPAWNS_NAME_SIZE);
                       format(str, sizeof(str), "%s %s(%d) has warped to a spawnpoint in %s(%d).", ReturnStaffLevel(playerid), ReturnICName(playerid), playerid, SpawnName, spawn_id);
                       ABroadCast(COLOR[COLOR_SADMIN], str, 1);

                   }
                   else return SendClientMessage(playerid,COLOR[COLOR_ERROR],AMSG_NO_ACCESS_TO_USE);
               }
           }

           Dialog_ShowCallback(playerid, using inline DialogResponse_2, DIALOG_STYLE_TABLIST_HEADERS, title, spawnstr, "Select", "Return");
       }
Stefhan
Offline

Burgershot Member
Posts: 11
Threads: 5
Joined: Apr 2019
Reputation: 2
#4
2020-03-25, 09:04 PM
Fixed it by using this script as a reference:

Code:
// [ DEVELOPMENT GAMEMODE ]

// INCLUDES:

#include <a_samp>
#include <sscanf2>
#include <zcmd>

// DEFINES:

// GENERAL:

#define MAX_RESULTS 20
#define TOTAL_VEHICLES 212

// FUNCTIONS:

#define GetPageCount(%0,%1) floatround(%1 / %0, floatround_floor) + 1

// DIALOGS:

#define DIALOG_OK 500
#define DIALOG_VEHICLE_LIST 501

// ARRAYS AND ENUMERATORS:

static const stock aVehicles[TOTAL_VEHICLES][] =
{
   {"Landstalker"},
   {"Bravura"},
   {"Buffalo"},
   {"Linerunner"},
   {"Perrenial"},
   {"Sentinel"},
   {"Dumper"},
   {"Firetruck"},
   {"Trashmaster"},
   {"Stretch"},
   {"Manana"},
   {"Infernus"},
   {"Voodoo"},
   {"Pony"},
   {"Mule"},
   {"Cheetah"},
   {"Ambulance"},
   {"Leviathan"},
   {"Moonbeam"},
   {"Esperanto"},
   {"Taxi"},
   {"Washington"},
   {"Bobcat"},
   {"Mr Whoopee"},
   {"BF Injection"},
   {"Hunter"},
   {"Premier"},
   {"Enforcer"},
   {"Securicar"},
   {"Banshee"},
   {"Predator"},
   {"Bus"},
   {"Rhino"},
   {"Barracks"},
   {"Hotknife"},
   {"Trailer 1"},
   {"Previon"},
   {"Coach"},
   {"Cabbie"},
   {"Stallion"},
   {"Rumpo"},
   {"RC Bandit"},
   {"Romero"},
   {"Packer"},
   {"Monster"},
   {"Admiral"},
   {"Squalo"},
   {"Seasparrow"},
   {"Pizzaboy"},
   {"Tram"},
   {"Trailer 2"},
   {"Turismo"},
   {"Speeder"},
   {"Reefer"},
   {"Tropic"},
   {"Flatbed"},
   {"Yankee"},
   {"Caddy"},
   {"Solair"},
   {"Berkley's RC Van"},
   {"Skimmer"},
   {"PCJ-600"},
   {"Faggio"},
   {"Freeway"},
   {"RC Baron"},
   {"RC Raider"},
   {"Glendale"},
   {"Oceanic"},
   {"Sanchez"},
   {"Sparrow"},
   {"Patriot"},
   {"Quad"},
   {"Coastguard"},
   {"Dinghy"},
   {"Hermes"},
   {"Sabre"},
   {"Rustler"},
   {"ZR-350"},
   {"Walton"},
   {"Regina"},
   {"Comet"},
   {"BMX"},
   {"Burrito"},
   {"Camper"},
   {"Marquis"},
   {"Baggage"},
   {"Dozer"},
   {"Maverick"},
   {"News Chopper"},
   {"Rancher"},
   {"FBI Rancher"},
   {"Virgo"},
   {"Greenwood"},
   {"Jetmax"},
   {"Hotring"},
   {"Sandking"},
   {"Blista Compact"},
   {"Police Maverick"},
   {"Boxville"},
   {"Benson"},
   {"Mesa"},
   {"RC Goblin"},
   {"Hotring Racer A"},
   {"Hotring Racer B"},
   {"Bloodring Banger"},
   {"Rancher"},
   {"Super GT"},
   {"Elegant"},
   {"Journey"},
   {"Bike"},
   {"Mountain Bike"},
   {"Beagle"},
   {"Cropdust"},
   {"Stunt"},
   {"Tanker"},
   {"Roadtrain"},
   {"Nebula"},
   {"Majestic"},
   {"Buccaneer"},
   {"Shamal"},
   {"Hydra"},
   {"FCR-900"},
   {"NRG-500"},
   {"HPV1000"},
   {"Cement Truck"},
   {"Tow Truck"},
   {"Fortune"},
   {"Cadrona"},
   {"FBI Truck"},
   {"Willard"},
   {"Forklift"},
   {"Tractor"},
   {"Combine"},
   {"Feltzer"},
   {"Remington"},
   {"Slamvan"},
   {"Blade"},
   {"Freight"},
   {"Streak"},
   {"Vortex"},
   {"Vincent"},
   {"Bullet"},
   {"Clover"},
   {"Sadler"},
   {"Firetruck LA"},
   {"Hustler"},
   {"Intruder"},
   {"Primo"},
   {"Cargobob"},
   {"Tampa"},
   {"Sunrise"},
   {"Merit"},
   {"Utility"},
   {"Nevada"},
   {"Yosemite"},
   {"Windsor"},
   {"Monster A"},
   {"Monster B"},
   {"Uranus"},
   {"Jester"},
   {"Sultan"},
   {"Stratum"},
   {"Elegy"},
   {"Raindance"},
   {"RC Tiger"},
   {"Flash"},
   {"Tahoma"},
   {"Savanna"},
   {"Bandito"},
   {"Freight Flat"},
   {"Streak Carriage"},
   {"Kart"},
   {"Mower"},
   {"Duneride"},
   {"Sweeper"},
   {"Broadway"},
   {"Tornado"},
   {"AT-400"},
   {"DFT-30"},
   {"Huntley"},
   {"Stafford"},
   {"BF-400"},
   {"Newsvan"},
   {"Tug"},
   {"Trailer 3"},
   {"Emperor"},
   {"Wayfarer"},
   {"Euros"},
   {"Hotdog"},
   {"Club"},
   {"Freight Carriage"},
   {"Trailer 3"},
   {"Andromada"},
   {"Dodo"},
   {"RC Cam"},
   {"Launch"},
   {"LSPD Police Car"},
   {"SFPD Police Car"},
   {"LVPD Police Car"},
   {"Police Ranger"},
   {"Picador"},
   {"SWAT Van"},
   {"Alpha"},
   {"Phoenix"},
   {"Glendale"},
   {"Sadler"},
   {"Luggage Trailer A"},
   {"Luggage Trailer B"},
   {"Stair Trailer"},
   {"Boxville"},
   {"Farm Plow"},
   {"Utility Trailer"}
};

// VARIABLES:

new pLastPage[MAX_PLAYERS];

// MAIN:

main()
{
   print("Development Mode: vehicle_list.amx");
}

// CALLBACKS:

public OnGameModeInit()
{
   return 1;
}

public OnGameModeExit()
{
   return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   switch(dialogid)
   {
       case DIALOG_OK: return 1;
       case DIALOG_VEHICLE_LIST:
       {
           if(!response) return 1;
           else if(response)
           {
               pLastPage[playerid] ++;
               ShowVehicleList(playerid);
           }
       }
   }
   return 1;
}

// COMMANDS:

CMD:vehiclelist(playerid, params[])
{
   pLastPage[playerid] = 1;
   ShowVehicleList(playerid);
   return 1;
}

// FUNCTIONS:

stock ShowVehicleList(playerid)
{
   new title[128], string[300], pages = GetPageCount(MAX_RESULTS, TOTAL_VEHICLES), resultcount = ((MAX_RESULTS * pLastPage[playerid]) - MAX_RESULTS), bool:nextpage = false;
   strcat(string, "ID\tName");

   for(new i = resultcount; i < TOTAL_VEHICLES; i ++)
   {
       resultcount ++;
       if(resultcount <= MAX_RESULTS * pLastPage[playerid])
       {
           format(string, sizeof(string), "%s\n%d\t%s", string, resultcount, aVehicles[i]);
       }
       if(resultcount > MAX_RESULTS * pLastPage[playerid])
       {
           nextpage = true;
           break;
       }
   }

   format(title, sizeof(title), "{FFFF00}Vehicles - Page %d of %d", pLastPage[playerid], pages);
   if(nextpage) return ShowPlayerDialog(playerid, DIALOG_VEHICLE_LIST, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Next", "Close");
   return ShowPlayerDialog(playerid, DIALOG_OK, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Close", "");
}
akosd127
Offline

Burgershot Member
Posts: 7
Threads: 0
Joined: Mar 2020
Reputation: 1
Location: Hungary
#5
2020-03-26, 10:18 AM
I do this for you
https://www.solidfiles.com/v/GvnLV8mxKB3Vn
load filterscript
and type to chat /dialog
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode