Jump to content
  • 0

How do i use this twice ?


Kiritoryu

Question


  • Group:  Members
  • Topic Count:  22
  • Topics Per Day:  0.01
  • Content Count:  59
  • Reputation:   0
  • Joined:  12/13/12
  • Last Seen:  

What things do i need to change to make this a different npc ?

First NPC i use it for players to make scroll.

Second i would like to make it for a quest shop.

But it seems i cant get it work, It either mix together and one cant work or it cant even open.

This is one of Euphy Scipt.

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6
//===== Compatible With: =====================================
//= rAthena SVN r16862+
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
// Shop NPCs -- supplying no argument displays entire menu.
// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//============================================================
dicastes01,279,157,0 script Scroll Shop#1 998,{ callfunc "qshop"; }

// Script Core
//============================================================
- script quest_shop -1,{
function Add; function Chk; function Slot; function A_An;
OnInit:
freeloop(1);
// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------
set .Announce,1; // Announce quest completion? (1: yes / 0: no)
set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
set .ShowID,0;   // Show item IDs? (1: yes / 0: no)
set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
set .MaxStack,100; // Max number of quest items purchased at one time.
// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
// setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------
setarray .Points$[0],"#CASHPOINTS","Cash Points";
// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
// setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------
setarray .Shops$[1],"Scroll","Linker","Converters";
// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
// Add(<shop ID>,<reward ID>,<reward amount>,
//	 <Zeny cost>,<point cost>,
//	 <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------
Add(1,12216,150,0,0,671,2);
Add(1,12215,150,0,0,671,2);
Add(1,12219,150,0,0,671,2);
Add(1,12220,100,0,0,671,2);
Add(1,12217,100,0,0,671,2);
Add(1,12218,100,0,0,671,2);
Add(1,14516,100,0,0,671,2);
Add(1,14588,5,0,0,671,1);
Add(1,14589,5,0,0,671,1);
Add(1,14590,5,0,0,671,1);
Add(1,14591,5,0,0,671,1);
Add(1,12150,7,0,0,671,1);
Add(2,22000,10,0,0,671,1);
Add(2,22001,10,0,0,671,1);
Add(2,22002,10,0,0,671,1);
Add(2,22003,10,0,0,671,1);
Add(2,22004,10,0,0,671,1);
Add(2,22005,10,0,0,671,1);
Add(2,22006,10,0,0,671,1);
Add(2,22007,10,0,0,671,1);
Add(2,22008,10,0,0,671,1);
Add(2,22009,10,0,0,671,1);
Add(2,22010,10,0,0,671,1);
Add(2,22011,10,0,0,671,1);
Add(2,22012,10,0,0,671,1);
Add(2,22013,10,0,0,671,1);
Add(2,22014,10,0,0,671,1);

Add(3,12114,50,0,0,671,1);
Add(3,12115,50,0,0,671,1);
Add(3,12116,50,0,0,671,1);
Add(3,12117,50,0,0,671,1);
// -----------------------------------------------------------
freeloop(0);
set .menu$,"";
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
 set .menu$, .menu$+.Shops$[.@i]+":";
 npcshopdelitem "qshop"+.@i,909;
}
end;
OnMenu:
set .@size, getarraysize(@i);
if (!.@size) set .@i, select(.menu$);
else if (.@size == 1) set .@i, @i[0];
else {
 for(set .@j,0; .@j<.@size; set .@j,.@j+1)
  set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
 set .@i, @i[select(.@menu$)-1];
}
deletearray @i[0],getarraysize(@i);
if (.Shops$[.@i] == "") {
 message strcharinfo(0),"An error has occurred.";
 end;
}
dispbottom "Select one item at a time.";
callshop "qshop"+.@i,1;
npcshopattach "qshop"+.@i;
end;
OnBuyItem:
// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
copyarray .@q[3],getd(".q_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+.@q[0]));
set .@q[2],.@q[1]*.@q[3];
if (!.@q[2] || .@q[2] > 30000) {
 message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
 end;
}
mes "[Quest Shop]";
mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
mes "Requirements:";
if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
 mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
next;
setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
if (((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512)) && @qe[2] > 0)
 set .@preview,1;
addtimer 1000, strnpcinfo(0)+"::OnEnd";
while(1) {
 switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[6])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
 case 1:
  if (@qe[0]) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
close;
  }
  if (!checkweight(.@q[0],.@q[2])) {
mes "[Quest Shop]";
mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
close;
  }
  if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
  if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
  if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
delitem .@q[.@i],.@q[.@i+1]*.@q[1];
  getitem .@q[0],.@q[2];
  if (.Announce) announce strcharinfo(0)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):A_An(getitemname(.@q[0])))+"!",0;
  specialeffect2 699;
  close;
 case 2:
  setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), 1;
  if (@qe[1] & 1) changelook LOOK_HEAD_BOTTOM, @qe[2];
  if (@qe[1] & 256) changelook LOOK_HEAD_TOP, @qe[2];
  if (@qe[1] & 512) changelook LOOK_HEAD_MID, @qe[2];
  break;
 case 3:
  close;
 }
}
OnEnd:
if (@qe[6]) {
 changelook LOOK_HEAD_BOTTOM, @qe[3];
 changelook LOOK_HEAD_TOP, @qe[4];
 changelook LOOK_HEAD_MID, @qe[5];
}
deletearray @qe[0],7;
end;
function Add {
if (getitemname(getarg(1)) == "null") {
 debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
 return;
}
setarray .@j[0],getarg(2),getarg(3),getarg(4);
for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
 if (getitemname(getarg(.@i)) == "null") {
  debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
  return;
 } else
  setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
}
copyarray getd(".q_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
return;
}
function Chk {
if (getarg(0) < getarg(1)) {
 set @qe[0],1;
 return "^FF0000";
} else
 return "^00FF00";
}
function Slot {
set .@s$,getitemname(getarg(0));
switch(.ShowSlot) {
 case 1: if (!getitemslots(getarg(0))) return .@s$;
 case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
 default: return .@s$;
}
}
function A_An {
setarray .@A$[0],"a","e","i","o","u";
set .@B$, "_"+getarg(0);
for(set .@i,0; .@i<5; set .@i,.@i+1)
 if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
return "a "+getarg(0);
}
}
function script qshop {
deletearray @i[0],getarraysize(@i);
for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
 set @i[.@i],getarg(.@i);
doevent "quest_shop::OnMenu";
end;
}

// Dummy shop data -- copy as needed.
//============================================================
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1
- shop qshop4 -1,909:-1
- shop qshop5 -1,909:-1

Edited by Emistry
Please use [CODEBOX] or Attachments for long contents.
Link to comment
Share on other sites

5 answers to this question

Recommended Posts


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10015
  • Reputation:   2348
  • Joined:  10/28/11
  • Last Seen:  

Answer ...

//============================================================
// Shop NPCs -- supplying no argument displays entire menu.
// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//============================================================
dicastes01,279,157,0 script Scroll Shop#1 998,{ callfunc "qshop"; }

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  22
  • Topics Per Day:  0.01
  • Content Count:  59
  • Reputation:   0
  • Joined:  12/13/12
  • Last Seen:  

Answer ...

//============================================================
// Shop NPCs -- supplying no argument displays entire menu.
// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//============================================================
dicastes01,279,157,0 script Scroll Shop#1 998,{ callfunc "qshop"; }

Yeah i know that. i change it to other places. but it cant seem to work.

i've change quest_shop & qshop to qshop1 & quest_shop1

Im trying to say. I want to use this npc for a drif function.

1st npc is the above script and is working fine - selling scrolls.

2nd NPC is for doing quest's.

But if i put it another place. it will clash together.\

Here is my second script. Whats the problem

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6
//===== Compatible With: =====================================
//= rAthena SVN r16862+
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//============================================================
// Shop NPCs -- supplying no argument displays entire menu.
// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//============================================================
dicastes01,228,197,5 script Quest Shop#2 958,{ callfunc "qshop"; }

// Script Core
//============================================================
- script quest_shop47 -1,{
function Add; function Chk; function Slot; function A_An;
OnInit:
freeloop(1);
// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------
set .Announce,1; // Announce quest completion? (1: yes / 0: no)
set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
set .ShowID,0;   // Show item IDs? (1: yes / 0: no)
set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no)
set .MaxStack,100; // Max number of quest items purchased at one time.
// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
// setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------
setarray .Points$[0],"#CASHPOINTS","Cash Points";
// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
// setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------
setarray .Shops$[1],"Quest A","Quest B","Quest C";
// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
// Add(<shop ID>,<reward ID>,<reward amount>,
//	 <Zeny cost>,<point cost>,
//	 <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------
Add(1,30271,1,0,0,7289,400,7226,250,975,350,4001,99,703,350);
Add(1,30613,1,0,0,7289,400,7226,250,976,350,4001,99,703,350);
Add(1,30466,1,0,0,7289,400,7226,250,980,350,4001,99,703,350);
Add(1,30098,1,0,0,7289,400,7226,250,978,350,4001,99,703,350);
Add(1,30419,1,0,0,7289,400,7226,250,981,350,4001,99,703,350);
Add(2,30110,1,0,0,7035,200,7152,470,975,400,4409,74);
Add(2,30706,1,0,0,7035,200,7152,470,976,400,4409,74);
Add(2,30179,1,0,0,7035,200,7152,470,978,400,4409,74);
Add(2,30477,1,0,0,7035,200,7152,470,980,400,4409,74);
Add(3,30707,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,30573,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,30572,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,30571,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,30570,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,30180,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
Add(3,5426,1,0,0,7267,400,6032,470,975,500,4116,88,703,450);
// -----------------------------------------------------------
freeloop(0);
set .menu$,"";
for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
 set .menu$, .menu$+.Shops$[.@i]+":";
 npcshopdelitem "qshop"+.@i,909;
}
end;
OnMenu:
set .@size, getarraysize(@i);
if (!.@size) set .@i, select(.menu$);
else if (.@size == 1) set .@i, @i[0];
else {
 for(set .@j,0; .@j<.@size; set .@j,.@j+1)
  set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
 set .@i, @i[select(.@menu$)-1];
}
deletearray @i[0],getarraysize(@i);
if (.Shops$[.@i] == "") {
 message strcharinfo(0),"An error has occurred.";
 end;
}
dispbottom "Select one item at a time.";
callshop "qshop"+.@i,1;
npcshopattach "qshop"+.@i;
end;
OnBuyItem:
// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
copyarray .@q[3],getd(".q_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+.@q[0]));
set .@q[2],.@q[1]*.@q[3];
if (!.@q[2] || .@q[2] > 30000) {
 message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
 end;
}
mes "[Quest Shop]";
mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
mes "Requirements:";
if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
 mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
next;
setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11);
if (((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512)) && @qe[2] > 0)
 set .@preview,1;
addtimer 1000, strnpcinfo(0)+"::OnEnd";
while(1) {
 switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[6])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) {
 case 1:
  if (@qe[0]) {
mes "[Quest Shop]";
mes "You're missing one or more quest requirements.";
close;
  }
  if (!checkweight(.@q[0],.@q[2])) {
mes "[Quest Shop]";
mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
close;
  }
  if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
  if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
  if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
delitem .@q[.@i],.@q[.@i+1]*.@q[1];
  getitem .@q[0],.@q[2];
  if (.Announce) announce strcharinfo(0)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):A_An(getitemname(.@q[0])))+"!",0;
  specialeffect2 699;
  close;
 case 2:
  setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), 1;
  if (@qe[1] & 1) changelook LOOK_HEAD_BOTTOM, @qe[2];
  if (@qe[1] & 256) changelook LOOK_HEAD_TOP, @qe[2];
  if (@qe[1] & 512) changelook LOOK_HEAD_MID, @qe[2];
  break;
 case 3:
  close;
 }
}
OnEnd:
if (@qe[6]) {
 changelook LOOK_HEAD_BOTTOM, @qe[3];
 changelook LOOK_HEAD_TOP, @qe[4];
 changelook LOOK_HEAD_MID, @qe[5];
}
deletearray @qe[0],7;
end;
function Add {
if (getitemname(getarg(1)) == "null") {
 debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
 return;
}
setarray .@j[0],getarg(2),getarg(3),getarg(4);
for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
 if (getitemname(getarg(.@i)) == "null") {
  debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
  return;
 } else
  setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
}
copyarray getd(".q_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
return;
}
function Chk {
if (getarg(0) < getarg(1)) {
 set @qe[0],1;
 return "^FF0000";
} else
 return "^00FF00";
}
function Slot {
set .@s$,getitemname(getarg(0));
switch(.ShowSlot) {
 case 1: if (!getitemslots(getarg(0))) return .@s$;
 case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
 default: return .@s$;
}
}
function A_An {
setarray .@A$[0],"a","e","i","o","u";
set .@B$, "_"+getarg(0);
for(set .@i,0; .@i<5; set .@i,.@i+1)
 if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
return "a "+getarg(0);
}
}
function script qshop {
deletearray @i[0],getarraysize(@i);
for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
 set @i[.@i],getarg(.@i);
doevent "quest_shop47::OnMenu";
end;
}

// Dummy shop data -- copy as needed.
//============================================================
- shop qshop1 -1,909:-1
- shop qshop2 -1,909:-1
- shop qshop3 -1,909:-1
- shop qshop4 -1,909:-1
- shop qshop5 -1,909:-1

Edited by Emistry
Please use [CODEBOX] or Attachments for long contents.
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10015
  • Reputation:   2348
  • Joined:  10/28/11
  • Last Seen:  

you didnt replace all the

qshop

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  22
  • Topics Per Day:  0.01
  • Content Count:  59
  • Reputation:   0
  • Joined:  12/13/12
  • Last Seen:  

you didnt replace all the

qshop

Im sorry. i dont get it.

What should i replace. can u explain to me? im very noob on what im suppose to do

Link to comment
Share on other sites


  • Group:  Developer
  • Topic Count:  10
  • Topics Per Day:  0.00
  • Content Count:  2407
  • Reputation:   613
  • Joined:  07/05/12
  • Last Seen:  

Usage

// Shop NPCs -- supplying no argument displays entire menu.
// callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};

Example

dicastes01,228,197,5 script Quest Shop#2 958,{ callfunc "qshop",1; }

call only shop 1

dicastes01,228,197,5 script Quest Shop#2 958,{ callfunc "qshop",2; }

call only shop 2

dicastes01,228,197,5 script Quest Shop#2 958,{ callfunc "qshop",1,2; }

call shop 1 and 2

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...