hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.29. 01:04



Jelenlévő felhasználók

Jelenleg 233 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 232 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 12 hozzászólás ]  Oldal 1 2 Következő
Szerző Üzenet
 Hozzászólás témája: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 14:58 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
Üdv.
Valaki javítaná nekm ezta a forráskodot mert irja hogy Doboz:0 de mikor fel veszek 1-et akkoris 0!:S HELP PLS
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fvault>
  4. #include <cstrike>
  5. #include <fun>
  6. #include <fakemeta>
  7. #include <hamsandwich>
  8.  
  9. #define PLUGIN "Kes olesert"
  10. #define VERSION "1.0"
  11. #define AUTHOR "DeRoiD"
  12.  
  13. new oles[33], kes[33], vault, felszedett[33]
  14.  
  15. public plugin_precache() {
  16. precache_model("models/v_sgknife.mdl")
  17. precache_model("models/sg_kesek/v_sgknife2.mdl")
  18. precache_model("models/sg_kesek/v_sgknife3.mdl")
  19. precache_model("models/sg_kesek/v_sgknife4.mdl")
  20. precache_model("models/sg_kesek/v_sgknife5.mdl")
  21. precache_model("models/sg_kesek/v_sgknife7.mdl")
  22. precache_model("models/sg_kesek/v_sgknife9.mdl")
  23. precache_model("models/sg_kesek/v_sgknife10.mdl")
  24. }
  25. public plugin_init() {
  26. register_plugin(PLUGIN, VERSION, AUTHOR)
  27. register_event("DeathMsg","death","a")
  28. register_clcmd("say /kes","menu")
  29. register_clcmd("say /kesek","menu")
  30. register_clcmd("say /knife","menu")
  31. vault = fvault_open("kes_olessert")
  32. register_event("CurWeapon", "ecw", "be", "1=1")
  33. }
  34. public ecw(id)
  35. {
  36. new fegyver = get_user_weapon(id)
  37. if(kes[id] == 0 && fegyver == CSW_KNIFE)
  38. {
  39. set_pev(id, pev_viewmodel2, "models/v_sgknife.mdl")
  40. }
  41. if(kes[id] == 1 && fegyver == CSW_KNIFE)
  42. {
  43. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife2.mdl")
  44. }
  45. if(kes[id] == 2 && fegyver == CSW_KNIFE)
  46. {
  47. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife3.mdl")
  48. }
  49. if(kes[id] == 3 && fegyver == CSW_KNIFE)
  50. {
  51. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife4.mdl")
  52. }
  53. if(kes[id] == 4 && fegyver == CSW_KNIFE)
  54. {
  55. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife5.mdl")
  56. }
  57. if(kes[id] == 5 && fegyver == CSW_KNIFE)
  58. {
  59. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife7.mdl")
  60. }
  61. if(kes[id] == 6 && fegyver == CSW_KNIFE)
  62. {
  63. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife9.mdl")
  64. }
  65. if(kes[id] == 7 && fegyver == CSW_KNIFE)
  66. {
  67. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife10.mdl")
  68. }
  69. }
  70. public death(){
  71. new killer = read_data(1)
  72. new victim = read_data(2)
  73.  
  74. if(killer == victim)
  75. {
  76. return PLUGIN_HANDLED
  77. }
  78. oles[killer]++
  79. return PLUGIN_HANDLED
  80. }
  81. public menu(id) {
  82.  
  83. new cim[121]
  84. format(cim, charsmax(cim), "\y.:[SG]:. kés menü. - Ölések:\w%d \d| Doboz:\w%d",oles[id],felszedett[id])
  85. new menu = menu_create(cim, "menu_h" )
  86. menu_additem(menu,"\y.:[SG]:. kés 1\r [Megszerezve] ","1",0)
  87. if(oles[id] >= 200)
  88. menu_additem(menu,"\y.:[SG]:. kés 2\r [Megszerezve]","2",0)
  89. else
  90. menu_additem(menu,"\d.:[SG]:. kés 2 [200 Ölés]","2",0)
  91. if(oles[id] >= 400)
  92. menu_additem(menu,"\y.:[SG]:. kés 3\r [Megszerezve]","3",0)
  93. else
  94. menu_additem(menu,"\d.:[SG]:. kés 3 [400 Ölés]","3",0)
  95. if(oles[id] >= 600)
  96. menu_additem(menu,"\y.:[SG]:. kés 4\r [Megszerezve]","4",0)
  97. else
  98. menu_additem(menu,"\d.:[SG]:. kés 4 [600 Ölés]","4",0)
  99. if(oles[id] >= 1000)
  100. menu_additem(menu,"\y.:[SG]:. kés 5\r [Megszerezve]","5",0)
  101. else
  102. menu_additem(menu,"\d.:[SG]:. kés 5 [1000 Ölés]","5",0)
  103. if(oles[id] >= 1800)
  104. menu_additem(menu,"\y.:[SG]:. kés 6\r [Megszerezve]","6",0)
  105. else
  106. menu_additem(menu,"\d.:[SG]:. kés 6 [1800 Ölés]","6",0)
  107. if(oles[id] >= 2000)
  108. menu_additem(menu,"\y.:[SG]:. kés 7\r [Megszerezve]","7",0)
  109. else
  110. menu_additem(menu,"\d.:[SG]:. kés 7 [2000 Ölés]","7",0)
  111. if(oles[id] >= 4000)
  112. menu_additem(menu,"\y.:[SG]:. kés 8\r [Megszerezve]","8",0)
  113. else
  114. menu_additem(menu,"\d.:[SG]:. kés 8 [4000 Ölés]","8",0)
  115. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  116. menu_display(id, menu, 0);
  117. }
  118. public menu_h(id, menu, item)
  119. {
  120. if( item == MENU_EXIT )
  121. {
  122. menu_destroy(menu);
  123. return PLUGIN_HANDLED;
  124. }
  125. new data[9], szName[64];
  126. new access, callback;
  127. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  128. new key = str_to_num(data);
  129.  
  130. switch(key)
  131. {
  132. case 1:{
  133. if(oles[id] >= 0)
  134. kes[id] = 0
  135. }
  136. case 2:{
  137. if(oles[id] >= 200)
  138. kes[id] = 1
  139. else
  140. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  141. }
  142. case 3:{
  143. if(oles[id] >= 400)
  144. kes[id] = 2
  145. else
  146. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  147. }
  148. case 4:{
  149. if(oles[id] >= 600)
  150. kes[id] = 3
  151. else
  152. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  153. }
  154. case 5:{
  155. if(oles[id] >= 1000)
  156. kes[id] = 4
  157. else
  158. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  159. }
  160. case 6:{
  161. if(oles[id] >= 1800)
  162. kes[id] = 5
  163. else
  164. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  165. }
  166. case 7:{
  167. if(oles[id] >= 2000)
  168. kes[id] = 6
  169. else
  170. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  171. }
  172. case 8:{
  173. if(oles[id] >= 4000)
  174. kes[id] = 7
  175. else
  176. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  177. }
  178. }
  179. menu_destroy(menu)
  180. return PLUGIN_HANDLED
  181. }
  182. public mentes(id)
  183. {
  184. new vaultkey[64],vaultdata[256], name[32]
  185. get_user_name(id, name, 31)
  186. format(vaultkey,63,"%s-KES", name)
  187. format(vaultdata,255,"%d", oles[id])
  188. nvault_set(vault,vaultkey,vaultdata)
  189. return PLUGIN_CONTINUE
  190. }
  191. public betoltes(id)
  192. {
  193. new vaultkey[64],vaultdata[256], name[32]
  194. get_user_name(id, name, 31)
  195. format(vaultkey,63,"%s-KES", name)
  196. nvault_get(vault,vaultkey,vaultdata,255)
  197. oles[id] = str_to_num(vaultdata)
  198. return PLUGIN_CONTINUE
  199. }
  200. public client_disconnect(id)
  201. {
  202. mentes(id)
  203. }
  204. public client_connect(id)
  205. {
  206. betoltes(id)
  207. }
  208.  


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 14:59 
SMA Forráskód: [ Mindet kijelol ]
  1. Doboz:\w%d",oles[id],felszedett[id])

-->
SMA Forráskód: [ Mindet kijelol ]
  1. Doboz:\w%s",oles[id],felszedett[id])


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:02 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
%s (ezzel stringet tudunk kiíratni (szöveget magyarul)
Más lesz a hiba.

Szerk.: Ebbe nincs semmilyen doboz felszedési funkció, csak egy változó van neki.

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:04 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
Doboz:

Ennyit ír!:S


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:05 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
Nézd meg hsz-em.

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:06 
Mien dobozt akkarsz te felszedni?


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:07 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
Karácsonyi dobozok


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:12 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
NuD[!]e írta:
https://hlmod.hu/viewtopic.php?f=101&t=13173

illeszd be a pluginba:

SMA Forráskód: [ Mindet kijelol ]
  1. public lekeres(id) {
  2. return felszedett[id]
  3. }


Ezt pedig a forráskódodba (a késesbe):
SMA Forráskód: [ Mindet kijelol ]
  1. Doboz:\w%d",oles[id], meghivas(id)) /* ezt ne pontosan így */
  2.  
  3. public meghivas(id) {
  4. if(callfunc_begin("lekeres", "ideadobozpluginneve.amxx") == 1) {
  5. callfunc_push_int(id)
  6. callfunc_end()
  7. }
  8. }

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk

Ők köszönték meg RaZzoR nek ezt a hozzászólást: xXlederXxHUN (2014.11.24. 09:30)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:19 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
Bele írod nekm? mert hibá-t ir benne!:S


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Késmenü-be dobozok mutatása?
HozzászólásElküldve: 2014.11.23. 15:26 
NuD[!]e írta:
Üdv.
Valaki javítaná nekm ezta a forráskodot mert irja hogy Doboz:0 de mikor fel veszek 1-et akkoris 0!:S HELP PLS
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fvault>
  4. #include <cstrike>
  5. #include <fun>
  6. #include <fakemeta>
  7. #include <hamsandwich>
  8.  
  9. #define PLUGIN "Kes olesert"
  10. #define VERSION "1.0"
  11. #define AUTHOR "DeRoiD"
  12.  
  13. new oles[33], kes[33], vault, felszedett[33]
  14.  
  15. public plugin_precache() {
  16. precache_model("models/v_sgknife.mdl")
  17. precache_model("models/sg_kesek/v_sgknife2.mdl")
  18. precache_model("models/sg_kesek/v_sgknife3.mdl")
  19. precache_model("models/sg_kesek/v_sgknife4.mdl")
  20. precache_model("models/sg_kesek/v_sgknife5.mdl")
  21. precache_model("models/sg_kesek/v_sgknife7.mdl")
  22. precache_model("models/sg_kesek/v_sgknife9.mdl")
  23. precache_model("models/sg_kesek/v_sgknife10.mdl")
  24. }
  25. public plugin_init() {
  26. register_plugin(PLUGIN, VERSION, AUTHOR)
  27. register_event("DeathMsg","death","a")
  28. register_clcmd("say /kes","menu")
  29. register_clcmd("say /kesek","menu")
  30. register_clcmd("say /knife","menu")
  31. vault = fvault_open("kes_olessert")
  32. register_event("CurWeapon", "ecw", "be", "1=1")
  33. }
  34. public ecw(id)
  35. {
  36. new fegyver = get_user_weapon(id)
  37. if(kes[id] == 0 && fegyver == CSW_KNIFE)
  38. {
  39. set_pev(id, pev_viewmodel2, "models/v_sgknife.mdl")
  40. }
  41. if(kes[id] == 1 && fegyver == CSW_KNIFE)
  42. {
  43. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife2.mdl")
  44. }
  45. if(kes[id] == 2 && fegyver == CSW_KNIFE)
  46. {
  47. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife3.mdl")
  48. }
  49. if(kes[id] == 3 && fegyver == CSW_KNIFE)
  50. {
  51. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife4.mdl")
  52. }
  53. if(kes[id] == 4 && fegyver == CSW_KNIFE)
  54. {
  55. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife5.mdl")
  56. }
  57. if(kes[id] == 5 && fegyver == CSW_KNIFE)
  58. {
  59. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife7.mdl")
  60. }
  61. if(kes[id] == 6 && fegyver == CSW_KNIFE)
  62. {
  63. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife9.mdl")
  64. }
  65. if(kes[id] == 7 && fegyver == CSW_KNIFE)
  66. {
  67. set_pev(id, pev_viewmodel2, "models/sg_kesek/v_sgknife10.mdl")
  68. }
  69. }
  70. public death(){
  71. new killer = read_data(1)
  72. new victim = read_data(2)
  73.  
  74. if(killer == victim)
  75. {
  76. return PLUGIN_HANDLED
  77. }
  78. oles[killer]++
  79. return PLUGIN_HANDLED
  80. }
  81. public menu(id) {
  82.  
  83. new cim[121]
  84. format(cim, charsmax(cim), "\y.:[SG]:. kés menü. - Ölések:\w%d \d| Doboz:\w%d",oles[id],felszedett[id])
  85. new menu = menu_create(cim, "menu_h" )
  86. menu_additem(menu,"\y.:[SG]:. kés 1\r [Megszerezve] ","1",0)
  87. if(oles[id] >= 200)
  88. menu_additem(menu,"\y.:[SG]:. kés 2\r [Megszerezve]","2",0)
  89. else
  90. menu_additem(menu,"\d.:[SG]:. kés 2 [200 Ölés]","2",0)
  91. if(oles[id] >= 400)
  92. menu_additem(menu,"\y.:[SG]:. kés 3\r [Megszerezve]","3",0)
  93. else
  94. menu_additem(menu,"\d.:[SG]:. kés 3 [400 Ölés]","3",0)
  95. if(oles[id] >= 600)
  96. menu_additem(menu,"\y.:[SG]:. kés 4\r [Megszerezve]","4",0)
  97. else
  98. menu_additem(menu,"\d.:[SG]:. kés 4 [600 Ölés]","4",0)
  99. if(oles[id] >= 1000)
  100. menu_additem(menu,"\y.:[SG]:. kés 5\r [Megszerezve]","5",0)
  101. else
  102. menu_additem(menu,"\d.:[SG]:. kés 5 [1000 Ölés]","5",0)
  103. if(oles[id] >= 1800)
  104. menu_additem(menu,"\y.:[SG]:. kés 6\r [Megszerezve]","6",0)
  105. else
  106. menu_additem(menu,"\d.:[SG]:. kés 6 [1800 Ölés]","6",0)
  107. if(oles[id] >= 2000)
  108. menu_additem(menu,"\y.:[SG]:. kés 7\r [Megszerezve]","7",0)
  109. else
  110. menu_additem(menu,"\d.:[SG]:. kés 7 [2000 Ölés]","7",0)
  111. if(oles[id] >= 4000)
  112. menu_additem(menu,"\y.:[SG]:. kés 8\r [Megszerezve]","8",0)
  113. else
  114. menu_additem(menu,"\d.:[SG]:. kés 8 [4000 Ölés]","8",0)
  115. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  116. menu_display(id, menu, 0);
  117. }
  118. public menu_h(id, menu, item)
  119. {
  120. if( item == MENU_EXIT )
  121. {
  122. menu_destroy(menu);
  123. return PLUGIN_HANDLED;
  124. }
  125. new data[9], szName[64];
  126. new access, callback;
  127. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  128. new key = str_to_num(data);
  129.  
  130. switch(key)
  131. {
  132. case 1:{
  133. if(oles[id] >= 0)
  134. kes[id] = 0
  135. }
  136. case 2:{
  137. if(oles[id] >= 200)
  138. kes[id] = 1
  139. else
  140. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  141. }
  142. case 3:{
  143. if(oles[id] >= 400)
  144. kes[id] = 2
  145. else
  146. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  147. }
  148. case 4:{
  149. if(oles[id] >= 600)
  150. kes[id] = 3
  151. else
  152. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  153. }
  154. case 5:{
  155. if(oles[id] >= 1000)
  156. kes[id] = 4
  157. else
  158. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  159. }
  160. case 6:{
  161. if(oles[id] >= 1800)
  162. kes[id] = 5
  163. else
  164. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  165. }
  166. case 7:{
  167. if(oles[id] >= 2000)
  168. kes[id] = 6
  169. else
  170. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  171. }
  172. case 8:{
  173. if(oles[id] >= 4000)
  174. kes[id] = 7
  175. else
  176. client_print(id,print_chat,".:[SG]:. Túl kevés ölésed van!")
  177. }
  178. }
  179. menu_destroy(menu)
  180. return PLUGIN_HANDLED
  181. }
  182. public mentes(id)
  183. {
  184. new vaultkey[64],vaultdata[256], name[32]
  185. get_user_name(id, name, 31)
  186. format(vaultkey,63,"%s-KES", name)
  187. format(vaultdata,255,"%d", oles[id])
  188. nvault_set(vault,vaultkey,vaultdata)
  189. return PLUGIN_CONTINUE
  190. }
  191. public betoltes(id)
  192. {
  193. new vaultkey[64],vaultdata[256], name[32]
  194. get_user_name(id, name, 31)
  195. format(vaultkey,63,"%s-KES", name)
  196. nvault_get(vault,vaultkey,vaultdata,255)
  197. oles[id] = str_to_num(vaultdata)
  198. return PLUGIN_CONTINUE
  199. }
  200. public client_disconnect(id)
  201. {
  202. mentes(id)
  203. }
  204. public client_connect(id)
  205. {
  206. betoltes(id)
  207. }



Ez az egész hibás !


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 12 hozzászólás ]  Oldal 1 2 Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 9 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole