Merge branch 'main' into addon-tutorial

This commit is contained in:
Leath Cooper 2025-01-05 17:21:17 -05:00
commit d269cb39ab
9 changed files with 932 additions and 328 deletions

View file

@ -0,0 +1,3 @@
# teleporter
Teleporter 0x1BC3 (PointDest=(5977, 169, 0))
5905 97 0

View file

@ -286,293 +286,5 @@
"maxDelay": "00:00:30",
"guid": "4b4e3973-d836-4f7c-b9f7-5fb7d468da28",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [375, 1191, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "fb826650-9fad-43ff-8ba1-9d848f1f26c5",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [567, 1239, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 1",
"count": 5,
"entries": [{ "maxCount": 5, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "79af53a5-33e2-4fdb-95dd-278a050e54fc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [571, 1099, 0],
"map": "Trammel",
"region": "A Farm in Yew",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "8408baaa-0de1-4cb0-ad89-973782e3a565",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 939, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 1",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "b17f2f9c-9d36-4bea-87db-69f8effc4926",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 1179, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 2",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "690ccc1c-2ac8-4f05-8066-695aa53c98aa",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [813, 2163, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ee6692af-82cf-477e-96ec-375be7a23db9",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2254, 0],
"map": "Trammel",
"region": "A Carrot Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c052a5e0-493d-483e-a98a-665cf05c5c14",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "An Onion Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "41a583ac-749c-40a7-8658-fb3deb1b222a",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "df4c5918-b490-4257-9aeb-541b44980b27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2274, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "1025906e-047c-460b-9bb8-581f57ff1357",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2355, 0],
"map": "Trammel",
"region": "A Cotton Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "185e475b-36cf-4dad-8776-537e84b15e42",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [843, 2352, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "59e99d3b-b727-491b-b0f3-03a441b10c04",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1120, 1624, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 4",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "85cc6fca-4f66-4428-aa3a-347a88523a4b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1135, 1791, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "afdfec82-dac3-43df-bd7b-cd2cfad5f265",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1152, 1576, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 5",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "34b0579c-1fc6-4868-82c5-09138c5e5878",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1183, 1683, 0],
"map": "Trammel",
"region": "A Cabbage Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "997d9ff5-ad2b-421b-ae76-6794e7e88150",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1683, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "bfb677f7-e824-46f6-95ef-ee5602f4f9c3",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1823, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 2",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c42ef172-78c8-4c5e-b26c-fcc3fc3da1cc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1215, 1723, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "57551e80-0018-4fcf-8b83-9d39ef19b0a6",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1216, 1604, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "0da29e36-7bff-4fcf-803d-79dd16212653",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1723, 0],
"map": "Trammel",
"region": "An Onion Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "4656ad9d-a455-4217-9316-ec10d10cf68c",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1887, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 3",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "d5b08634-5c5d-4bc2-b6cd-74cb06132423",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1232, 1604, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ab0cb920-b25f-4811-8ef6-938549dbfa27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [4567, 1475, 0],
"map": "Trammel",
"region": "A Cotton Field in Moonglow",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "69dfbe70-b46c-42b0-9ff1-351fd9651884",
"name": "Spawner"
}
]

View file

@ -0,0 +1,290 @@
[
{
"type": "RegionSpawner",
"location": [375, 1191, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "fb826650-9fad-43ff-8ba1-9d848f1f26c5",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [567, 1239, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 1",
"count": 5,
"entries": [{ "maxCount": 5, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "79af53a5-33e2-4fdb-95dd-278a050e54fc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [571, 1099, 0],
"map": "Trammel",
"region": "A Farm in Yew",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "8408baaa-0de1-4cb0-ad89-973782e3a565",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 939, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 1",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "b17f2f9c-9d36-4bea-87db-69f8effc4926",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 1179, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 2",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "690ccc1c-2ac8-4f05-8066-695aa53c98aa",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [813, 2163, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ee6692af-82cf-477e-96ec-375be7a23db9",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2254, 0],
"map": "Trammel",
"region": "A Carrot Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c052a5e0-493d-483e-a98a-665cf05c5c14",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "An Onion Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "41a583ac-749c-40a7-8658-fb3deb1b222a",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "df4c5918-b490-4257-9aeb-541b44980b27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2274, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "1025906e-047c-460b-9bb8-581f57ff1357",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2355, 0],
"map": "Trammel",
"region": "A Cotton Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "185e475b-36cf-4dad-8776-537e84b15e42",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [843, 2352, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "59e99d3b-b727-491b-b0f3-03a441b10c04",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1120, 1624, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 4",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "85cc6fca-4f66-4428-aa3a-347a88523a4b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1135, 1791, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "afdfec82-dac3-43df-bd7b-cd2cfad5f265",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1152, 1576, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 5",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "34b0579c-1fc6-4868-82c5-09138c5e5878",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1183, 1683, 0],
"map": "Trammel",
"region": "A Cabbage Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "997d9ff5-ad2b-421b-ae76-6794e7e88150",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1683, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "bfb677f7-e824-46f6-95ef-ee5602f4f9c3",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1823, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 2",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c42ef172-78c8-4c5e-b26c-fcc3fc3da1cc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1215, 1723, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "57551e80-0018-4fcf-8b83-9d39ef19b0a6",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1216, 1604, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "0da29e36-7bff-4fcf-803d-79dd16212653",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1723, 0],
"map": "Trammel",
"region": "An Onion Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "4656ad9d-a455-4217-9316-ec10d10cf68c",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1887, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 3",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "d5b08634-5c5d-4bc2-b6cd-74cb06132423",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1232, 1604, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ab0cb920-b25f-4811-8ef6-938549dbfa27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [4567, 1475, 0],
"map": "Trammel",
"region": "A Cotton Field in Moonglow",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "69dfbe70-b46c-42b0-9ff1-351fd9651884",
"name": "Spawner"
}
]

View file

@ -0,0 +1,290 @@
[
{
"type": "RegionSpawner",
"location": [375, 1191, 0],
"map": "Felucca",
"region": "A Wheatfield in Yew 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "bba64d97-11eb-4a87-b326-e41e3c9b355d",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [567, 1239, 0],
"map": "Felucca",
"region": "A Wheatfield in Yew 1",
"count": 5,
"entries": [{ "maxCount": 5, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "e37b4d74-c87e-4102-8c87-8f80c728fe0c",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [571, 1099, 0],
"map": "Felucca",
"region": "A Farm in Yew",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "aed692cc-2dac-4c80-931b-35c73ca8d092",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 939, 0],
"map": "Felucca",
"region": "A Field of Sheep in Yew 1",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "425ac125-1597-41b4-9e6d-72b91801230b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 1179, 0],
"map": "Felucca",
"region": "A Field of Sheep in Yew 2",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "3d7925bf-2642-4185-bc03-fa314fb75a7f",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [813, 2163, 0],
"map": "Felucca",
"region": "A Wheatfield in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "57da6436-6b16-4697-add5-f4b45776ccbc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2254, 0],
"map": "Felucca",
"region": "A Carrot Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "427451dd-93fa-43c9-85c6-01536066c8cc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Felucca",
"region": "An Onion Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "640fe3f8-9917-4dfa-986d-038923163add",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Felucca",
"region": "A Cabbage Field in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "f4bccdc2-c663-4ccd-b7df-31656fa2ae09",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2274, 0],
"map": "Felucca",
"region": "A Cabbage Field in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "0c48edf9-a88e-45f1-9ba3-cd8c919aefbc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2355, 0],
"map": "Felucca",
"region": "A Cotton Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "e7b34039-ec1f-43c8-b64f-d7462ce7ae9d",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [843, 2352, 0],
"map": "Felucca",
"region": "A Wheatfield in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "2bf378f0-77ed-44cd-8dfb-181d068f401e",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1120, 1624, 0],
"map": "Felucca",
"region": "A Wheatfield in Britain 4",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "e6a4aede-5a76-473d-8331-4bb73701ea1a",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1135, 1791, 0],
"map": "Felucca",
"region": "A Wheatfield in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "b29b54ab-5ae3-4ce3-93ac-326f324a34f6",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1152, 1576, 0],
"map": "Felucca",
"region": "A Wheatfield in Britain 5",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "e416e9fa-5a9a-426b-962e-50cdce64ca7f",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1183, 1683, 0],
"map": "Felucca",
"region": "A Cabbage Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "8536c19c-2036-495a-a3c5-e82c9f32f5ad",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1683, 0],
"map": "Felucca",
"region": "A Turnip Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "d8a2e54e-4951-468f-93c5-376460070cba",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1823, 0],
"map": "Felucca",
"region": "A Wheatfield in Britain 2",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "58b14343-2032-4507-a913-6b536507c2e5",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1215, 1723, 0],
"map": "Felucca",
"region": "A Carrot Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "9805ef58-355f-4352-bfc4-43c6710ff409",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1216, 1604, 0],
"map": "Felucca",
"region": "A Turnip Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "0c6481ab-3341-4113-ac1a-6523c19c881d",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1723, 0],
"map": "Felucca",
"region": "An Onion Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "57f955bb-49e1-4a66-a214-4fbddf8d572b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1887, 0],
"map": "Felucca",
"region": "A Wheatfield in Britain 3",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "f68b6bc8-f822-4c7a-9d01-37fad25bc95b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1232, 1604, 0],
"map": "Felucca",
"region": "A Carrot Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "7b09d4b5-fe63-4f95-8525-3c970c513adc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [4567, 1475, 0],
"map": "Felucca",
"region": "A Cotton Field in Moonglow",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "4b4e3973-d836-4f7c-b9f7-5fb7d468da28",
"name": "Spawner"
}
]

View file

@ -0,0 +1,290 @@
[
{
"type": "RegionSpawner",
"location": [375, 1191, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "fb826650-9fad-43ff-8ba1-9d848f1f26c5",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [567, 1239, 0],
"map": "Trammel",
"region": "A Wheatfield in Yew 1",
"count": 5,
"entries": [{ "maxCount": 5, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "79af53a5-33e2-4fdb-95dd-278a050e54fc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [571, 1099, 0],
"map": "Trammel",
"region": "A Farm in Yew",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "8408baaa-0de1-4cb0-ad89-973782e3a565",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 939, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 1",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "b17f2f9c-9d36-4bea-87db-69f8effc4926",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [675, 1179, 0],
"map": "Trammel",
"region": "A Field of Sheep in Yew 2",
"count": 10,
"entries": [{ "maxCount": 10, "name": "Sheep", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "690ccc1c-2ac8-4f05-8066-695aa53c98aa",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [813, 2163, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ee6692af-82cf-477e-96ec-375be7a23db9",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2254, 0],
"map": "Trammel",
"region": "A Carrot Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c052a5e0-493d-483e-a98a-665cf05c5c14",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "An Onion Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "41a583ac-749c-40a7-8658-fb3deb1b222a",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2264, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 1",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "df4c5918-b490-4257-9aeb-541b44980b27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2274, 0],
"map": "Trammel",
"region": "A Cabbage Field in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "1025906e-047c-460b-9bb8-581f57ff1357",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [823, 2355, 0],
"map": "Trammel",
"region": "A Cotton Field in Skara Brae",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "185e475b-36cf-4dad-8776-537e84b15e42",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [843, 2352, 0],
"map": "Trammel",
"region": "A Wheatfield in Skara Brae 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "59e99d3b-b727-491b-b0f3-03a441b10c04",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1120, 1624, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 4",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "85cc6fca-4f66-4428-aa3a-347a88523a4b",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1135, 1791, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "afdfec82-dac3-43df-bd7b-cd2cfad5f265",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1152, 1576, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 5",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "34b0579c-1fc6-4868-82c5-09138c5e5878",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1183, 1683, 0],
"map": "Trammel",
"region": "A Cabbage Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCabbage", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "997d9ff5-ad2b-421b-ae76-6794e7e88150",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1683, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "bfb677f7-e824-46f6-95ef-ee5602f4f9c3",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1199, 1823, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 2",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "c42ef172-78c8-4c5e-b26c-fcc3fc3da1cc",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1215, 1723, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "57551e80-0018-4fcf-8b83-9d39ef19b0a6",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1216, 1604, 0],
"map": "Trammel",
"region": "A Turnip Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableTurnip", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "0da29e36-7bff-4fcf-803d-79dd16212653",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1723, 0],
"map": "Trammel",
"region": "An Onion Field in Britain 1",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableOnion", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "4656ad9d-a455-4217-9316-ec10d10cf68c",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1231, 1887, 0],
"map": "Trammel",
"region": "A Wheatfield in Britain 3",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableWheat", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "d5b08634-5c5d-4bc2-b6cd-74cb06132423",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [1232, 1604, 0],
"map": "Trammel",
"region": "A Carrot Field in Britain 2",
"count": 6,
"entries": [{ "maxCount": 6, "name": "FarmableCarrot", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "ab0cb920-b25f-4811-8ef6-938549dbfa27",
"name": "Spawner"
},
{
"type": "RegionSpawner",
"location": [4567, 1475, 0],
"map": "Trammel",
"region": "A Cotton Field in Moonglow",
"count": 8,
"entries": [{ "maxCount": 8, "name": "FarmableCotton", "probability": 100 }],
"minDelay": "00:00:10",
"maxDelay": "00:00:30",
"guid": "69dfbe70-b46c-42b0-9ff1-351fd9651884",
"name": "Spawner"
}
]

View file

@ -113,6 +113,18 @@ public class BankBox : Container
(from == Owner && Opened || from.AccessLevel >= AccessLevel.GameMaster) &&
base.OnDragDropInto(from, item, p);
public override bool CheckHold(Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight)
{
// This is a horrible hack.
// TODO: Refactor this by moving BankBox out of the core.
if (AccountGold.Enabled && AccountGold.ConvertOnBank && item.GetType().Name is "Gold" or "BankCheck")
{
return true;
}
return base.CheckHold(m, item, message, checkItems, plusItems, plusWeight);
}
public override int GetTotal(TotalType type)
{
if (AccountGold.Enabled && Owner?.Account != null && type == TotalType.Gold)

View file

@ -294,8 +294,15 @@ public abstract partial class BaseExplosionPotion : BasePotion
}
var parent = _potion.FindParent(_from);
var remainingCount = RemainingCount - 1;
if (RemainingCount == 0)
if (remainingCount > 3)
{
return;
}
// Remaining decrements after OnTick so it is off by 1
if (remainingCount <= 0)
{
Point3D loc;
Map map;
@ -317,16 +324,13 @@ public abstract partial class BaseExplosionPotion : BasePotion
_potion.Explode(_from, true, loc, map);
}
else if (RemainingCount <= 3)
else if (parent is Item item)
{
if (parent is Item item)
{
item.PublicOverheadMessage(MessageType.Regular, 0x22, false, RemainingCount.ToString());
}
else if (parent is Mobile mobile)
{
mobile.PublicOverheadMessage(MessageType.Regular, 0x22, false, RemainingCount.ToString());
}
item.PublicOverheadMessage(MessageType.Regular, 0x22, false, remainingCount.ToString());
}
else if (parent is Mobile mobile)
{
mobile.PublicOverheadMessage(MessageType.Regular, 0x22, false, remainingCount.ToString());
}
}
}

View file

@ -62,14 +62,15 @@ public abstract class MonsterAbilitySingleTargetDoT : MonsterAbilitySingleTarget
protected override void OnTick()
{
var delay = RemainingCount == 0
var delay = RemainingCount <= 1
? TimeSpan.MinValue
: Utility.RandomMinMax(_ability.MinDelay, _ability.MaxDelay);
_ability.EffectTick(_source, _defender, ref delay);
Interval = delay;
if (RemainingCount == 0)
// Remaining decrements after OnTick so it is off by 1
if (RemainingCount <= 1)
{
_ability.RemoveEffect(_source, _defender);
_ability.OnEffectExpired(_source, _defender);

View file

@ -278,7 +278,7 @@ namespace Server.Mobiles
private bool m_bTamable;
private int m_ColdResistance;
private bool m_Controlled; // Is controlled
private bool _controlled; // Is controlled
private Mobile m_ControlMaster; // My master
private OrderType m_ControlOrder; // My order
@ -370,7 +370,7 @@ namespace Server.Mobiles
Debug = false;
m_Controlled = false;
_controlled = false;
m_ControlMaster = null;
ControlTarget = null;
m_ControlOrder = OrderType.None;
@ -749,15 +749,15 @@ namespace Server.Mobiles
[CommandProperty(AccessLevel.GameMaster)]
public bool Controlled
{
get => m_Controlled;
get => _controlled;
set
{
if (m_Controlled == value)
if (_controlled == value)
{
return;
}
m_Controlled = value;
_controlled = value;
Delta(MobileDelta.Noto);
InvalidateProperties();
@ -1353,24 +1353,23 @@ namespace Server.Mobiles
return false;
}
if (FightMode == FightMode.Evil && m.Karma < 0 || c.FightMode == FightMode.Evil && Karma < 0)
if (m_Team != c.Team || FightMode == FightMode.Evil && m.Karma < 0 || c.FightMode == FightMode.Evil && Karma < 0)
{
return true;
}
if (m_Team != c.Team)
var master = GetMaster();
var cMaster = c.GetMaster();
if (master == null)
{
return true;
// Non-summons will attack summons of non-NPCs
return cMaster != null && cMaster is not BaseCreature;
}
var targetControlled = c._summoned || c.m_Controlled;
if (_summoned || m_Controlled)
{
return targetControlled || c.IsEnemy(GetMaster());
}
return targetControlled && IsEnemy(c.GetMaster());
// Summons will attack others summons, if they are enemies with their master
// Pets will attack non-summons, but not other summons (legacy logic)
return (master as BaseCreature)?.IsEnemy(cMaster ?? m) ?? cMaster == null;
}
public override string ApplyNameSuffix(string suffix)
@ -1871,7 +1870,7 @@ namespace Server.Mobiles
// Version 2
writer.Write((int)FightMode);
writer.Write(m_Controlled);
writer.Write(_controlled);
writer.Write(m_ControlMaster);
writer.Write(ControlTarget);
writer.Write(ControlDest);
@ -2021,7 +2020,7 @@ namespace Server.Mobiles
{
FightMode = (FightMode)reader.ReadInt();
m_Controlled = reader.ReadBool();
_controlled = reader.ReadBool();
m_ControlMaster = reader.ReadEntity<Mobile>();
ControlTarget = reader.ReadEntity<Mobile>();
ControlDest = reader.ReadPoint3D();
@ -2049,7 +2048,7 @@ namespace Server.Mobiles
{
FightMode = FightMode.Closest;
m_Controlled = false;
_controlled = false;
m_ControlMaster = null;
ControlTarget = null;
m_ControlOrder = OrderType.None;
@ -2517,7 +2516,7 @@ namespace Server.Mobiles
}
}
if (aggressor.ChangingCombatant && (m_Controlled || _summoned) &&
if (aggressor.ChangingCombatant && (_controlled || _summoned) &&
(ct == OrderType.Come || !Core.ML && ct == OrderType.Stay || ct is OrderType.Stop or OrderType.None or OrderType.Follow))
{
ControlTarget = aggressor;
@ -2561,7 +2560,7 @@ namespace Server.Mobiles
AIObject?.GetContextMenuEntries(from, ref list);
}
if (m_bTamable && !m_Controlled && from.Alive)
if (m_bTamable && !_controlled && from.Alive)
{
list.Add(new TameEntry(from.Female ? AllowFemaleTamer : AllowMaleTamer));
}
@ -3748,7 +3747,7 @@ namespace Server.Mobiles
return BardMaster;
}
if (m_Controlled && m_ControlMaster != null)
if (_controlled && m_ControlMaster != null)
{
return m_ControlMaster;
}
@ -4117,7 +4116,7 @@ namespace Server.Mobiles
public virtual bool IsFriend(Mobile m) =>
OppositionGroup?.IsEnemy(this, m) != true && m is BaseCreature c && m_Team == c.m_Team
&& (_summoned || m_Controlled) == (c._summoned || c.m_Controlled);
&& (_summoned || _controlled) == (c._summoned || c._controlled);
public virtual Allegiance GetFactionAllegiance(Mobile mob)
{
@ -4312,12 +4311,15 @@ namespace Server.Mobiles
}
else if (m_Loyalty < MaxLoyalty)
{
// 50% chance to increase 10 loyalty per food
m_Loyalty = Math.Min(MaxLoyalty, Utility.CoinFlips(amount, MaxLoyaltyIncrease) * 10);
}
// Calculate the loyalty increase
int loyaltyIncrease = Utility.CoinFlips(amount, MaxLoyaltyIncrease) * 10;
// looks like in OSI pets say they are happier even if they are at maximum loyalty
SayTo(from, 502060); // Your pet looks happier.
if (loyaltyIncrease > 0) // Only update if there's an actual increase
{
m_Loyalty = Math.Min(MaxLoyalty, m_Loyalty + loyaltyIncrease);
SayTo(from, 502060); // Your pet looks happier.
}
}
if (Body.IsAnimal)
{