Phân vi sinh và những chế phẩm phổ biến trên thị trường
Hiện nay có nhiều loại sản phẩm phân bón được áp dụng cho cây ăn trái. Mỗi loại có hiệu quả và đặc tính khác nhau. Trong đó, phân vi sinh – loại chế phẩm được nhiều bác nông dân tin dùng bởi những ưu điểm vượt bậc, đồng thời lại vô cùng an toàn với con người và môi trường.
Định nghĩa phân vi sinh
Phân vi sinh là loại phân chứa nhiều vi sinh vật gồm những chủng vi sinh vật cố định đạm, phân giải lân, mùn, các hợp chất hữu cơ bên trong đất.
Các chế phẩm vi sinh có thể chứa một hoặc nhiều chủng vi sinh vật khác nhau với mật độ tiêu chuẩn. Sau khi được bón vào đất, hoạt động của chúng sẽ tạo nên nguồn dinh dưỡng cung cấp cho cây như N, P…
Một số loại phân vi sinh
Phân chứa VSV cố định đạm
Các loài phổ biến là tảo lam, Rhyzobium, Klebsiella…Hầu hết chúng thường sống cộng sinh tại phần rễ các cây họ đậu
Với sự tiến bộ trong lĩnh vực khoa học công nghệ đã cho ra đời nhiều loại phân vi sinh mới với những ưu điểm nổi trội: khả năng cố định đạm cao hơn VSV tự nhiên và cộng sinh tốt hơn.
Các loại phân vi sinh phổ biến trên thị trường Việt Nam
Phân vi sinh Nitragin (Vi khuẩn nốt sần ở cây đậu tương)
Phân Azotobacterin với các loại vi khuẩn hút đạm tự do
Phân Rhidafo với vi khuẩn tại nốt sần cây lạc
Phân chứa VSV hòa tan lân
Các vi sinh vật có khả năng hòa tan lân hay còn được gọi là nhóm HTL. Chúng gồm một số loài chủ yếu là Aspergillus niger, vi khuẩn Pseudomonas, Bacillus…
Các loài cây cam, táo,… người nông dân muốn tăng năng suất bằng cách sử dụng các chế phẩm chứa VA Mycorrhiza.
Nhóm chế phẩm vi sinh kích thích tăng trưởng
Bài báo hay mua phân hữu cơ vi sinh ở đâu
Nhóm này với nhiều vi sinh vật khác nhau chủ yếu từ vi khuẩn, xạ khuẩn…
Các chế phẩm thuộc nhóm nỳ có thể được sử dụng thông qua việc phun trực tiếp lên cây hoặc bón vào đất. Chế phẩm giúp cây phát triển tốt hơn, đồng thời ngăn ngừa sâu bệnh, tăng năng suất cây trồng.
Sản phẩm khá nổi bật là chế phẩm EM với nhiều đặc tính nổi bật như: hạn chế sâu bệnh, cải tạo đặc tính sinh học của đất… Ngoài ra, còn được sử dụng trong ngành chăn nuôi, thủy sản.
Lưu ý khi sử dụng phân vi sinh vật
Khi trộn chế phẩm với hạt giống nên để hạt ẩm trước khi đi gieo từ 10 đến 20 phút.
Cần chú ý đến hạn sử dụng ghi trên bao bì.
Để sản phẩm nơi thoáng mát, tránh ánh sáng chiếu trực tiếp vì sẽ giết chết vi sinh vật
Phân vi sinh – sản phẩm không những giúp cải tạo đất mà còn cung cấp thêm chất dinh dưỡng cho đất. Bên cạnh đó, lại an toàn với người sử dụng và thân thiện với môi trường thân yêu.
Profile của chúng tôi : https://about.me/phanbonhuucobiosacotec
this involves using the 'list/dictionary' Attribute (+ GetRandomInt/GetRandomDouble/RandomChance/DiceRoll for the randomness), if you need help with using lists/dictionaries, let me know.
the 'GetRandomInt' and 'RandomChance' work especially well together too:
for example (an item) drop system:
the 'GetRandomInt' selects the (type of) item
and the 'RandomChance' determines whether that selected item, is actually dropped (successful) or not (failed)
create ("example_object")
create ("sword")
create ("candy")
create ("axe")
create ("chocolate")
example_object.example_objectlist_attribute = NewObjectList ()
list add (example_object.example_objectlist_attribute, sword)
list add (example_object.example_objectlist_attribute, candy)
list add (example_object.example_objectlist_attribute, axe)
list add (example_object.example_objectlist_attribute, chocolate)
list_count_integer_variable = ListCount (example_object.example_objectlist_attribute)
last_index_number_integer_variable = list_count_integer_variable - 1
viable_randomly_selected_index_number_integer_variable = GetRandomInt (0, last_index_number_integer_variable)
viable_randomly_selected_list_item_object_variable = ObjectListItem (example_object.example_objectlist_attribute, viable_randomly_selected_index_number_integer_variable)
// you can use 'if' too, instead of the 'switch' below, as 'if' and 'switch' are functionally the same, though the syntax for them is a bit different, of course
// though, if you got a lot of items in your list, then it'd be better to use a Script Dictionary, or to have each item Object have the 'drop' script on it, and call/do/use that 'drop' script, but this is a bit more advanced design... so not showing it here... showing the 'switch' instead as seen below
switch (viable_randomly_selected_list_item_object_variable) {
case (sword) {
if (RandomChance (10)) {
CloneObjectAndMove (sword, player)
}
}
case (candy) {
if (RandomChance (90)) { // 90% (a high) chance of dropping (getting) it // common item drop
CloneObjectAndMove (candy, player)
}
}
case (axe) {
if (RandomChance (10)) { // 10% (a low) chance of dropping (getting) it // rare item drop
CloneObjectAndMove (axe, player)
}
}
case (chocolate) {
if (RandomChance (50)) { // 50% (1/2) chance of dropping (getting) it // a 1/2 (which is still quite good odds, lol) item drop
CloneObjectAndMove (chocolate, player)
}
}
}
as for controlled randomness (lol), as far as I know, the only way to enforce a probability is to directly control it:
for example, if you want a '1/6' odd/chance/probability, then you got to literally have it happen on the 6th time, which means a 'counter' to track it:
create ("example_object")
example_object.counter_integer_attribute = 0
example_object.flag_boolean_attribute = false
// ---------
// if the 'example_object.counter_integer_attribute = 0' causes the 'changed' script to fire, then you need this code:
example_object.changedcounter_integer_attribute => {
if (example_object.counter_integer_attribute = 6) {
example_object.flag_boolean_attribute = true // this is needed to happen before this 'changed' script fires again by the 'example_object.counter_integer_attribute = 0' line below, lol
msg ("BLAH ACTION/EVENT") // and this too, as well, lol
example_object.counter_integer_attribute = 0
} else if (example_object.flag_boolean_attribute) {
example_object.flag_boolean_attribute = false
} else {
example_object.counter_integer_attribute = example_object.counter_integer_attribute + 1
}
}
// otherwise / if-not, you can just use this code:
example_object.changedcounter_integer_attribute => {
if (example_object.counter_integer_attribute = 6) {
example_object.counter_integer_attribute = 0
msg ("BLAH ACTION/EVENT")
} else {
example_object.counter_integer_attribute = example_object.counter_integer_attribute + 1
}
}
if you want all items to be tried (if the first item fails, try for the next item, and so forth)... the best design (if you got a lot of items) would be recursion usage (see diablo 2's recursion, item drop / treasure class, system)
HK: "as for controlled randomness (lol), as far as I know, the only way to enforce a probability is to directly control it:
for example, if you want a '1/6' odd/chance/probability, then you got to literally have it happen on the 6th time, which means a 'counter' to track it:"
Nope... just go with a GetRandomInt (0, 6) to make it random...
For you randomness...
Do you want a selected random items in the room? Or scattered throughout your maze of rooms?
For the first:
You could add a bit of code in the "on first enter":
Room_01
// no creature
// no items
Room_02
Switch(GetRandomInt (0, 6))
Case 1,2,3: no creature
case 4: Bat
case 5: lost explorer
case 6: Giant spider
switch (0,3)
case 1: Bag of coins
case 2: rusty sword
case 3: Heal potion
Room_03
anything else
...
I'd previously considered making a collection of containers for the various events/encounters. This system would allow moving monsters or items to the player's location, or running a script.
These are basically unreachable rooms, each representing a random encounter. Any objects inside the 'encounter' are moved to the player's location when it is triggered. It also can have attributes encounter_script (a script that is run when the encounter triggers), encounter_probability (an int; higher numbers are more likely), encounter_enabled (boolean), encounter_repeats (boolean), encounter_locations (objectlist of rooms where where the encounter can happen), and encounter_test (script that can modify the values above, in case it's more likely in some places than others for example).
A script something like:
possible_encounters = NewObjectList()
total_probability = 0
foreach (enc, GetDirectChildren(ENCOUNTERS)) {
if (HasScript(enc, "encounter_test")) {
do (enc, "encounter_test")
}
if (GetBoolean(enc, "encounter_enabled")) {
found_room = true
if (HasAtribute (enc, "encounter_locations")) {
found_room = false
foreach (room, enc.encounter_locations) {
if (Contains (room, game.pov)) {
found_room = true
}
}
}
if (found_room) {
if (not HasInt (enc, "encounter_probability")) {
enc.encounter_probability = 10
}
list add (possible_encounters, enc)
total_probability = total_probability + enc.encounter_probability
}
}
}
if (total_probability < 100) {
total_probability = 100
}
chosen = GetRandomInt (1, total_probability)
while (ListCount(possible_encounters) > 0) {
encounter = ListItem (possible_encounters, 0)
list remove (possible_encounters, encounter)
chosen = chosen - encounter.encounter_probability
if (chosen < 0) {
possible_encounters = NewObjectList()
encounter_children = NewObjectList()
foreach (o, GetDirectChildren (encounter)) {
if (GetBoolean (encounter, "encounter_repeats")) {
list add (encounter_children, CloneObjectAndMove (o, game.pov.parent))
}
else {
list add (encounter_children, o)
o.parent = game.pov.parent
}
}
if (HasScript (encounter, "encounter_script")) {
// the "room" and "children" variables give the encounter script an easy way to find the
// room it's happening in, and the objects moved/cloned there (for example monsters)
params = NewDictionary()
dictionary add (params, "room", game.pov.parent)
dictionary add (params, "children", encounter_children)
do (encounter, "encounter_script", params)
}
if (not GetBoolean (encounter, "encounter_repeats")) {
RemoveObject (encounter)
}
}
}
You could run that from the enterroom script, or when visiting a new room for the first time, or something like that. Depending if you want random encounters to only occur in new rooms.